From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 02:25:18 2022 Received: (at submit) by debbugs.gnu.org; 3 Dec 2022 07:25:18 +0000 Received: from localhost ([127.0.0.1]:51327 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1Mti-0005ro-Ki for submit@debbugs.gnu.org; Sat, 03 Dec 2022 02:25:18 -0500 Received: from lists.gnu.org ([209.51.188.17]:36442) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1Mtg-0005ri-GP for submit@debbugs.gnu.org; Sat, 03 Dec 2022 02:25:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1Mtg-0000Mf-9l for bug-gnu-emacs@gnu.org; Sat, 03 Dec 2022 02:25:16 -0500 Received: from m12.mail.163.com ([123.126.96.234]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p1MtZ-00025i-LT for bug-gnu-emacs@gnu.org; Sat, 03 Dec 2022 02:25:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version; bh=8MRbi yJsi6Pn9BZmhiPQkI1fwz9GViYBxeIrQyiaLu8=; b=IzClOb6WuJLmyxKVB5P7g JZ6mHkgkDOkgNvofjHzaJ5z1WoxIiNUcLPUY8BPoIHvcP0qkhFX56OX+mhqpN9w8 nGbdaCYPQqU5GCO5rV9LpMuGQVHmoK6eP/3YWDiJNBTU4t0orFuKsuVwNKrb1E6D 50Q26UqcSPqVuxSMq4sR/k= Received: from Tumashu (unknown [218.92.14.78]) by smtp17 (Coremail) with SMTP id NdxpCgCXcA7H+YpjfsYqAg--.19355S2; Sat, 03 Dec 2022 15:24:55 +0800 (CST) From: Feng Shu To: bug-gnu-emacs@gnu.org Subject: 29.0.60; subr.elc is not compiled correctly Date: Sat, 03 Dec 2022 15:24:55 +0800 Message-ID: <87lenpne48.fsf@163.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-CM-TRANSID: NdxpCgCXcA7H+YpjfsYqAg--.19355S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxCw4rWrWkGw1rKry7Zw4xJFb_yoW5Xw1Upa sxJas2kF4xtF40gw1UAw1xta48tF48J3s5Gr1UtryxXF45Aa4UZrnFqFy8Kry7AFWkXry5 Wws0kr1UZF1UZw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jezuXUUUUU= X-Originating-IP: [218.92.14.78] X-CM-SenderInfo: 5wxpt2lkx6il2tof0z/xtbBEQjM1FaELyt0KQAAsK Received-SPF: pass client-ip=123.126.96.234; envelope-from=tumashu@163.com; helo=m12.mail.163.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=-=-= Content-Type: text/plain Content-Transfer-Encoding: 8bit This week, I faced an issue about emacs-eat: eat-yank not work well: https://codeberg.org/akib/emacs-eat/issues/9 ------------- (defun eat-yank (&optional arg) "Same as `yank', but for Eat. ARG is passed to `yank', which see." (interactive "*P") (when eat--terminal (funcall eat--synchronize-scroll-function) (cl-letf* ((inhibit-read-only t) (insert-for-yank (symbol-function #'insert-for-yank)) ((symbol-function #'insert-for-yank) (lambda (&rest args) (cl-letf (((symbol-function #'insert) (lambda (&rest args) (eat-send-string-as-yank eat--terminal (mapconcat (lambda (arg) (if (stringp arg) arg (string arg))) args ""))))) (apply insert-for-yank args))))) (yank arg)))) --------- After some test with author of emacs-eat, we find that config (require 'eat) (load "subr.el") work, while the below config do not work. (require 'eat) (load "subr.elc") we find that C-x C-e insert-for-yank and insert-for-yank-1 works too. so we think subr.elc is not compiled correctly, I use the below script to compile emacs, do not install and run ~/emacs/emacs29/src/emacs directly ------------------------------------------------ #!/bin/bash cd ${HOME}/emacs/emacs29 make clean git reset --hard git clean -xdf git pull ./autogen.sh ./configure \ --with-x-toolkit=lucid \ --with-json \ make bootstrap && make -------------------------------------------------------- (fn STRING) (defalias 'insert-for-yank #[257 "\211C\300\301\302\303\"\"\210\304\305\306\307\242#\211\262\203*\0\310\242\306O!\210\211\242\304O\240\210\202 \0\210\310\242!\207" [run-hook-wrapped yank-transform-functions make-closure #[257 "\300\300\242!\240\210\301\207" [V0 nil] 4 "\n\n(fn F)"] nil next-single-property-change 0 yank-handler insert-for-yank-1] 7 (#$ . 136200)])#@55 Helper for `insert-for-yank', which see. (fn STRING) (defalias 'insert-for-yank-1 #[257 "\211;\205\n\0\303\304\305#\211A@\206\0`\306\307@\203$\0@!\210\202'\0c\210`\262\307\3108\2047\0\311\"\210\211V\203L\0\312S!\203L\0\313S\314\307$\210 \307=\203V\0\3158\3168\205a\0\3168\211)\207" [inhibit-read-only yank-undo-function this-command get-text-property 0 yank-handler nil t 2 remove-yank-excluded-properties text-properties-at put-text-property rear-nonsticky 3 4] 10 (#$ . 136889)])#@286 Insert before point a substring of BUFFER, without text properties. BUFFER may be a buffer or a buffer name. Arguments START and END are character positions specifying the substring. They default to the values of (point-min) and (point-max) in BUFFER. ------------------------------------------------------- --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=subr.elc Content-Transfer-Encoding: base64 O0VMQxwAAAAKOzs7IENvbXBpbGVkCjs7OyBpbiBFbWFjcyB2ZXJzaW9uIDI5LjAuNjAKOzs7IHdp dGggYWxsIG9wdGltaXphdGlvbnMuCgoKI0AxMzgzIFRlbGwgdGhlIGJ5dGUtY29tcGlsZXIgdGhh dCBmdW5jdGlvbiBGTiBpcyBkZWZpbmVkLCBpbiBGSUxFLgpUaGUgRklMRSBhcmd1bWVudCBpcyBu b3QgdXNlZCBieSB0aGUgYnl0ZS1jb21waWxlciwgYnV0IGJ5IHRoZQpgY2hlY2stZGVjbGFyZScg cGFja2FnZSwgd2hpY2ggY2hlY2tzIHRoYXQgRklMRSBjb250YWlucyBhCmRlZmluaXRpb24gZm9y IEZOLiAgKEZJTEUgY2FuIGJlIG5pbCwgYW5kIHRoYXQgZGlzYWJsZXMgdGhpcwpjaGVjay4pCgpG SUxFIGNhbiBiZSBlaXRoZXIgYSBMaXNwIGZpbGUgKGluIHdoaWNoIGNhc2UgdGhlICIuZWwiCmV4 dGVuc2lvbiBpcyBvcHRpb25hbCksIG9yIGEgQyBmaWxlLiAgQyBmaWxlcyBhcmUgZXhwYW5kZWQK cmVsYXRpdmUgdG8gdGhlIEVtYWNzICJzcmMvIiBkaXJlY3RvcnkuICBMaXNwIGZpbGVzIGFyZQpz ZWFyY2hlZCBmb3IgdXNpbmcgYGxvY2F0ZS1saWJyYXJ5JywgYW5kIGlmIHRoYXQgZmFpbHMgdGhl eSBhcmUKZXhwYW5kZWQgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIGNvbnRh aW5pbmcgdGhlCmRlY2xhcmF0aW9uLiAgQSBGSUxFIHdpdGggYW4gImV4dDoiIHByZWZpeCBpcyBh biBleHRlcm5hbCBmaWxlLgpgY2hlY2stZGVjbGFyZScgd2lsbCBjaGVjayBzdWNoIGZpbGVzIGlm IHRoZXkgYXJlIGZvdW5kLCBhbmQgc2tpcAp0aGVtIHdpdGhvdXQgZXJyb3IgaWYgdGhleSBhcmUg bm90LgoKT3B0aW9uYWwgQVJHTElTVCBzcGVjaWZpZXMgRk4ncyBhcmd1bWVudHMsIG9yIGlzIHQg dG8gbm90IHNwZWNpZnkKRk4ncyBhcmd1bWVudHMuICBBbiBvbWl0dGVkIEFSR0xJU1QgZGVmYXVs dHMgdG8gdCwgbm90IG5pbDogYSBuaWwKQVJHTElTVCBzcGVjaWZpZXMgYW4gZW1wdHkgYXJndW1l bnQgbGlzdCwgYW5kIGFuIGV4cGxpY2l0IHQKQVJHTElTVCBpcyBhIHBsYWNlaG9sZGVyIHRoYXQg YWxsb3dzIHN1cHBseWluZyBhIGxhdGVyIGFyZy4KCk9wdGlvbmFsIEZJTEVPTkxZIG5vbi1uaWwg bWVhbnMgdGhhdCBgY2hlY2stZGVjbGFyZScgd2lsbCBjaGVjawpvbmx5IHRoYXQgRklMRSBleGlz dHMsIG5vdCB0aGF0IGl0IGRlZmluZXMgRk4uICBUaGlzIGlzIGludGVuZGVkCmZvciBmdW5jdGlv biBkZWZpbml0aW9ucyB0aGF0IGBjaGVjay1kZWNsYXJlJyBkb2VzIG5vdCByZWNvZ25pemUsCmUu Zy4sIGBkZWZzdHJ1Y3QnLgoKTm90ZSB0aGF0IGZvciB0aGUgcHVycG9zZXMgb2YgYGNoZWNrLWRl Y2xhcmUnLCB0aGlzIHN0YXRlbWVudAptdXN0IGJlIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBv biBhIGxpbmUuCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEluZm8gbm9kZSBgKGVsaXNwKURl Y2xhcmluZyBGdW5jdGlvbnMnLgoKKGZuIEZOIEZJTEUgJnJlc3QgQVJHUykfCihkZWZhbGlhcyAn ZGVjbGFyZS1mdW5jdGlvbiAnKG1hY3JvIC4gI1s2NDIgIlwzMDBcMjA3IiBbbmlsXSA0ICgjJCAu IDg4KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwNVwzMDZcIlwy MTBcMzA0XDMwN1wzMTBcIlwyMDciIFtzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNvbnZlbnRpb24g ZGVjbGFyZS1mdW5jdGlvbiAoZm4gZmlsZSAmb3B0aW9uYWwgYXJnbGlzdCBmaWxlb25seSkgbmls IGRlZmFsaWFzIG5vdCBudWxsIHN4aGFzaCBzeGhhc2gtZXF1YWxdIDQpI0A5MyBFdmFsdWF0ZSBG T1JNLCBleHBlY3RpbmcgaXQgbm90IHRvIHJldHVybi4KSWYgRk9STSBkb2VzIHJldHVybiwgc2ln bmFsIGFuIGVycm9yLgoKKGZuIEZPUk0pHwooZGVmYWxpYXMgJ25vcmV0dXJuICcobWFjcm8gLiAj WzI1NyAiXDMwMAFcMzAxQkJcMjA3IiBbcHJvZzEgKChlcnJvciAiRm9ybSBtYXJrZWQgd2l0aCBg bm9yZXR1cm4nIGRpZCByZXR1cm4iKSldIDQgKCMkIC4gMTc1NyldKSkKKHB1dCAnbm9yZXR1cm4g J2VkZWJ1Zy1mb3JtLXNwZWMgdCkjQDE1NiBFdmFsdWF0ZSBGT1JNLCBleHBlY3RpbmcgYSBjb25z dGFudCByZXR1cm4gdmFsdWUuCklmIEZPUk0gcmV0dXJucyBkaWZmZXJpbmcgdmFsdWVzIHdoZW4g cnVubmluZyB1bmRlciBUZXN0Y292ZXIsClRlc3Rjb3ZlciB3aWxsIHJhaXNlIGFuIGVycm9yLgoK KGZuIEZPUk0pHwooZGVmYWxpYXMgJzF2YWx1ZSAnKG1hY3JvIC4gI1syNTcgIlwyMDciIFtdIDIg KCMkIC4gMjAyMSldKSkKKHB1dCAnMXZhbHVlICdlZGVidWctZm9ybS1zcGVjIHQpI0AzNzcgU2V0 IHRoZSBFZGVidWcgU1BFQyB0byB1c2UgZm9yIHNleHBzIHdoaWNoIGhhdmUgU1lNQk9MIGFzIGhl YWQuCkJvdGggU1lNQk9MIGFuZCBTUEVDIGFyZSB1bmV2YWx1YXRlZC4gIFRoZSBTUEVDIGNhbiBi ZToKMCAoaW5zdHJ1bWVudCBubyBhcmd1bWVudHMpOyB0IChpbnN0cnVtZW50IGFsbCBhcmd1bWVu dHMpOwphIHN5bWJvbCAobmFtaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBFZGVidWcgc3BlY2lmaWNh dGlvbik7IG9yIGEgbGlzdC4KVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGRlc2NyaWJlIHRoZSBh cmd1bWVudCB0eXBlczsgc2VlCkluZm8gbm9kZSBgKGVsaXNwKVNwZWNpZmljYXRpb24gTGlzdCcg Zm9yIGRldGFpbHMuCgooZm4gU1lNQk9MIFNQRUMpHwooZGVmYWxpYXMgJ2RlZi1lZGVidWctc3Bl YyAnKG1hY3JvIC4gI1s1MTQgIlwzMDBcMzAxA0RcMzAyXDMwMQRERlwyMDciIFtwdXQgcXVvdGUg J2VkZWJ1Zy1mb3JtLXNwZWNdIDcgKCMkIC4gMjI3NyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBkZWYtZWRlYnVnLXNwZWMgbGlzcC1pbmRl bnQtZnVuY3Rpb24gMV0gNCkjQDEwNSBEZWZpbmUgYSBuZXcgRWRlYnVnIHNwZWMgZWxlbWVudCBO QU1FIGFzIHNob3J0aGFuZCBmb3IgU1BFQy4KVGhlIFNQRUMgaGFzIHRvIGJlIGEgbGlzdC4KCihm biBOQU1FIFNQRUMpHwooZGVmYWxpYXMgJ2RlZi1lZGVidWctZWxlbS1zcGVjICNbNTE0ICJcMzAw XDMwMVwzMDIEIVwiXDIwMw0AXDMwM1wzMDQhXDIxMFwyMTE6XDIwNBcAXDMwM1wzMDUCXCJcMjEw XDMwNgJcMzA3AyNcMjA3IiBbc3RyaW5nLW1hdGNoICJcXGBbJjpdIiBzeW1ib2wtbmFtZSBlcnJv ciAiRWRlYnVnIHNwZWMgbmFtZSBjYW5ub3Qgc3RhcnQgd2l0aCAnJicgb3IgJzonIiAiRWRlYnVn IHNwZWMgaGFzIHRvIGJlIGEgbGlzdDogJVMiIHB1dCBlZGVidWctZWxlbS1zcGVjXSA2ICgjJCAu IDI4NzMpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9u LXB1dCBkZWYtZWRlYnVnLWVsZW0tc3BlYyBsaXNwLWluZGVudC1mdW5jdGlvbiAxXSA0KSNAODEz IFJldHVybiBhbiBhbm9ueW1vdXMgZnVuY3Rpb24uClVuZGVyIGR5bmFtaWMgYmluZGluZywgYSBj YWxsIG9mIHRoZSBmb3JtIChsYW1iZGEgQVJHUyBET0NTVFJJTkcKSU5URVJBQ1RJVkUgQk9EWSkg aXMgc2VsZi1xdW90aW5nOyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlCmxhbWJkYSBleHBy ZXNzaW9uIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gIFVuZGVyIGxleGljYWwKYmluZGluZywg dGhlIHJlc3VsdCBpcyBhIGNsb3N1cmUuICBSZWdhcmRsZXNzLCB0aGUgcmVzdWx0IGlzIGEKZnVu Y3Rpb24sIGkuZS4sIGl0IG1heSBiZSBzdG9yZWQgYXMgdGhlIGZ1bmN0aW9uIHZhbHVlIG9mIGEK c3ltYm9sLCBwYXNzZWQgdG8gYGZ1bmNhbGwnIG9yIGBtYXBjYXInLCBldGMuCgpBUkdTIHNob3Vs ZCB0YWtlIHRoZSBzYW1lIGZvcm0gYXMgYW4gYXJndW1lbnQgbGlzdCBmb3IgYSBgZGVmdW4nLgpE T0NTVFJJTkcgaXMgYW4gb3B0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdHJpbmcuCiBJZiBwcmVzZW50 LCBpdCBzaG91bGQgZGVzY3JpYmUgaG93IHRvIGNhbGwgdGhlIGZ1bmN0aW9uLgogQnV0IGRvY3Vt ZW50YXRpb24gc3RyaW5ncyBhcmUgdXN1YWxseSBub3QgdXNlZnVsIGluIG5hbWVsZXNzIGZ1bmN0 aW9ucy4KSU5URVJBQ1RJVkUgc2hvdWxkIGJlIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gYGludGVy YWN0aXZlJywgd2hpY2ggc2VlLgpJdCBtYXkgYWxzbyBiZSBvbWl0dGVkLgpCT0RZIHNob3VsZCBi ZSBhIGxpc3Qgb2YgTGlzcCBleHByZXNzaW9ucy4KCihmbiBBUkdTIFtET0NTVFJJTkddIFtJTlRF UkFDVElWRV0gQk9EWSkfCihkZWZhbGlhcyAnbGFtYmRhICcobWFjcm8gLiAjWzEyOCAiXDMwMFwz MDECQkRcMjA3IiBbZnVuY3Rpb24gbGFtYmRhXSA0ICgjJCAuIDMzNjQpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwzMDFcMzA0XDMwNSNcMzA2XDMwMVwzMDdcMzEwI1wyMDci IFtmdW5jdGlvbi1wdXQgbGFtYmRhIGRvYy1zdHJpbmctZWx0IDIgbGlzcC1pbmRlbnQtZnVuY3Rp b24gZGVmdW4gcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgKCZkZWZpbmUgbGFtYmRhLWxpc3QgbGFtYmRh LWRvYyBbJm9wdGlvbmFsICgiaW50ZXJhY3RpdmUiIGludGVyYWN0aXZlKV0gZGVmLWJvZHkpXSA2 KSNAMTk3IEV2YWwgRk9STTEsIEZPUk0yIGFuZCBCT0RZIHNlcXVlbnRpYWxseTsgcmV0dXJuIHZh bHVlIGZyb20gRk9STTIuClRoZSB2YWx1ZSBvZiBGT1JNMiBpcyBzYXZlZCBkdXJpbmcgdGhlIGV2 YWx1YXRpb24gb2YgdGhlCnJlbWFpbmluZyBhcmdzLCB3aG9zZSB2YWx1ZXMgYXJlIGRpc2NhcmRl ZC4KCihmbiBGT1JNMSBGT1JNMiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdwcm9nMiAnKG1hY3Jv IC4gI1s2NDIgIlwzMDADXDMwMQQEQkJFXDIwNyIgW3Byb2duIHByb2cxXSA4ICgjJCAuIDQ1MTAp XSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHByb2cyIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDIgcHV0IGVkZWJ1Zy1mb3Jt LXNwZWMgdF0gNSkjQDUzOCBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdmFyaWFibGUgVkFSIHRv IFZBTFVFLgpWQVIsIHRoZSB2YXJpYWJsZSBuYW1lLCBpcyBsaXRlcmFsIChub3QgZXZhbHVhdGVk KTsKVkFMVUUgaXMgYW4gZXhwcmVzc2lvbjogaXQgaXMgZXZhbHVhdGVkIGFuZCBpdHMgdmFsdWUg cmV0dXJuZWQuClRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgdmFyaWFibGUgaXMgc2VlbiBpbiBidWZm ZXJzCnRoYXQgZG8gbm90IGhhdmUgdGhlaXIgb3duIHZhbHVlcyBmb3IgdGhlIHZhcmlhYmxlLgoK TW9yZSBnZW5lcmFsbHksIHlvdSBjYW4gdXNlIG11bHRpcGxlIHZhcmlhYmxlcyBhbmQgdmFsdWVz LCBhcyBpbgogIChzZXRxLWRlZmF1bHQgVkFSIFZBTFVFIFZBUiBWQUxVRS4uLikKVGhpcyBzZXRz IGVhY2ggVkFSJ3MgZGVmYXVsdCB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZyBWQUxVRS4KVGhl IFZBTFVFIGZvciB0aGUgTnRoIFZBUiBjYW4gcmVmZXIgdG8gdGhlIG5ldyBkZWZhdWx0IHZhbHVl cwpvZiBwcmV2aW91cyBWQVJzLgoKKGZuIFtWQVIgVkFMVUVdLi4uKR8KKGRlZmFsaWFzICdzZXRx LWRlZmF1bHQgJyhtYWNybyAuICNbMTI4ICJcMzAwAVwyMDMcAFwzMDFcMzAyA1wyMTFBXDI2MgVc MjQyRANcMjExQVwyNjIFXDI0MkUBQlwyNjIBXDIwMgEAXDMwMwFcMjM3QlwyMDciIFtuaWwgc2V0 LWRlZmF1bHQgcXVvdGUgcHJvZ25dIDYgKCMkIC4gNDkxOSldKSkKKHB1dCAnc2V0cS1kZWZhdWx0 ICdlZGVidWctZm9ybS1zcGVjICdzZXRxKSNANTU4IE1ha2UgZWFjaCBWQVJJQUJMRSBidWZmZXIt bG9jYWwgYW5kIGFzc2lnbiB0byBpdCB0aGUgY29ycmVzcG9uZGluZyBWQUxVRS4KClRoZSBhcmd1 bWVudHMgYXJlIHZhcmlhYmxlL3ZhbHVlIHBhaXJzICBGb3IgZWFjaCBWQVJJQUJMRSBpbiBhIHBh aXIsCm1ha2UgVkFSSUFCTEUgYnVmZmVyLWxvY2FsIGFuZCBhc3NpZ24gdG8gaXQgdGhlIGNvcnJl c3BvbmRpbmcgVkFMVUUKb2YgdGhlIHBhaXIuICBUaGUgVkFSSUFCTEVzIGFyZSBsaXRlcmFsIHN5 bWJvbHMgYW5kIHNob3VsZCBub3QgYmUgcXVvdGVkLgoKVGhlIFZBTFVFIG9mIHRoZSBOdGggcGFp ciBpcyBub3QgY29tcHV0ZWQgdW50aWwgYWZ0ZXIgdGhlIFZBUklBQkxFCm9mIHRoZSAoTi0xKXRo IHBhaXIgaXMgc2V0OyB0aHVzLCBlYWNoIFZBTFVFIGNhbiB1c2UgdGhlIG5ldyBWQUxVRXMKb2Yg VkFSSUFCTEVzIHNldCBieSBlYXJsaWVyIHBhaXJzLgoKVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUg YHNldHEtbG9jYWwnIGZvcm0gaXMgdGhlIFZBTFVFIG9mIHRoZSBsYXN0CnBhaXIuCgooZm4gW1ZB UklBQkxFIFZBTFVFXS4uLikfCihkZWZhbGlhcyAnc2V0cS1sb2NhbCAnKG1hY3JvIC4gI1sxMjgg IlwzMDABR1wzMDFcIlwzMDJVXDIwNA4AXDMwM1wzMDQhXDIxMFwzMDUBXDIwMzYAAUA5XDIwNB8A XDMwM1wzMDYDQFwiXDIxMFwzMDdcMzEwXDMxMQRAREQDQUBFAUJcMjYyAQFBQVwyNjICXDIwMg8A XDMxMgFcMjM3IVwyMDciIFttb2QgMiAwIGVycm9yICJQQUlSUyBtdXN0IGhhdmUgYW4gZXZlbiBu dW1iZXIgb2YgdmFyaWFibGUvdmFsdWUgbWVtYmVycyIgbmlsICJBdHRlbXB0aW5nIHRvIHNldCBh IG5vbi1zeW1ib2w6ICVzIiBzZXQgbWFrZS1sb2NhbC12YXJpYWJsZSBxdW90ZSBtYWNyb2V4cC1w cm9nbl0gNiAoIyQgLiA1Njc0KV0pKQoocHV0ICdzZXRxLWxvY2FsICdlZGVidWctZm9ybS1zcGVj ICdzZXRxKSNAMjAzIERlZmluZSBWQVIgYXMgYSBidWZmZXItbG9jYWwgdmFyaWFibGUgd2l0aCBk ZWZhdWx0IHZhbHVlIFZBTC4KTGlrZSBgZGVmdmFyJyBidXQgYWRkaXRpb25hbGx5IG1hcmtzIHRo ZSB2YXJpYWJsZSBhcyBiZWluZyBhdXRvbWF0aWNhbGx5CmJ1ZmZlci1sb2NhbCB3aGVyZXZlciBp dCBpcyBzZXQuCgooZm4gVkFSIFZBTCAmb3B0aW9uYWwgRE9DU1RSSU5HKR8KKGRlZmFsaWFzICdk ZWZ2YXItbG9jYWwgJyhtYWNybyAuICNbNzcwICJcMzAwXDMwMQQEBEZcMzAyXDMwMwYGRERFXDIw NyIgW3Byb2duIGRlZnZhciBtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCBxdW90ZV0gOCAoIyQg LiA2NjI1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVc MzA2I1wzMDRcMzAxXDMwN1wzMTAjXDMwMFwyMDciIFtwdXQgZGVmdmFyLWxvY2FsIGVkZWJ1Zy1m b3JtLXNwZWMgZGVmdmFyIGZ1bmN0aW9uLXB1dCBkb2Mtc3RyaW5nLWVsdCAzIGxpc3AtaW5kZW50 LWZ1bmN0aW9uIDJdIDUpI0A5NSBSZXR1cm4gbm9uLW5pbCBpZiBTWU1CT0wgaXMgYm91bmQgaW4g QlVGRkVSLgpBbHNvIHNlZSBgbG9jYWwtdmFyaWFibGUtcCcuCgooZm4gU1lNQk9MIEJVRkZFUikf CihkZWZhbGlhcyAnYnVmZmVyLWxvY2FsLWJvdW5kcCAjWzUxNCAiXDMwMDFcZgBcMzAxAgJcIjBc MjEwXDMwMlwyMDdcMjEwXDMwM1wyMDciIFsodm9pZC12YXJpYWJsZSkgYnVmZmVyLWxvY2FsLXZh bHVlIHQgbmlsXSA1ICgjJCAuIDcxNDUpXSkjQDI1NSBMaWtlIGBzZXRxLWxvY2FsJywgYnV0IGFs bG93IHJlc3RvcmluZyB0aGUgcHJldmlvdXMgc3RhdGUgb2YgbG9jYWxzIGxhdGVyLgpUaGlzIG1h Y3JvIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byBgYnVmZmVyLWxvY2Fs LXJlc3RvcmUtc3RhdGUnCmluIG9yZGVyIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBsb2Nh bCB2YXJpYWJsZXMgc2V0IHZpYSB0aGlzIG1hY3JvLgoKKGZuIFtWQVJJQUJMRSBWQUxVRV0uLi4p HwooZGVmYWxpYXMgJ2J1ZmZlci1sb2NhbC1zZXQtc3RhdGUgJyhtYWNybyAuICNbMTI4ICJcMzAw AUdcMzAxXCJcMzAyVVwyMDQOAFwzMDNcMzA0IVwyMTBcMzA1XDMwNlwzMDcDRERcMzEwA0JFXDIw NyIgW21vZCAyIDAgZXJyb3IgIlBBSVJTIG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBvZiB2YXJp YWJsZS92YWx1ZSBtZW1iZXJzIiBwcm9nMSBidWZmZXItbG9jYWwtc2V0LXN0YXRlLS1nZXQgcXVv dGUgc2V0cS1sb2NhbF0gNSAoIyQgLiA3Mzg1KV0pKQoocHV0ICdidWZmZXItbG9jYWwtc2V0LXN0 YXRlICdlZGVidWctZm9ybS1zcGVjICdzZXRxKSNAMTQgCgooZm4gUEFJUlMpHwooZGVmYWxpYXMg J2J1ZmZlci1sb2NhbC1zZXQtc3RhdGUtLWdldCAjWzI1NyAiXDMwMAFcMjAzKQABQFwzMDEDQCFc MjA1EgBcMzAyA0AhXDMwMQRAIVwyMDUcAANASkUBQlwyNjIBAUFBXDI2MgJcMjAyAQBcMjExXDIz N1wyMDciIFtuaWwgYm91bmRwIGxvY2FsLXZhcmlhYmxlLXBdIDYgKCMkIC4gNzk1NildKSNAMTQw IFJlc3RvcmUgdmFsdWVzIG9mIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZXMgcmVjb3JkZWQgaW4gU1RB VEVTLgpTVEFURVMgc2hvdWxkIGJlIGFuIG9iamVjdCByZXR1cm5lZCBieSBgYnVmZmVyLWxvY2Fs LXNldC1zdGF0ZScuCgooZm4gU1RBVEVTKR8KKGRlZmFsaWFzICdidWZmZXItbG9jYWwtcmVzdG9y ZS1zdGF0ZSAjWzI1NyAiXDIxMVwyMTFcMjA1LABcMjExQFwyMTFcMjQyAVwyNDNcMjExXDI0MgFc MjQzXDIxMVwyNDIBXDI0MwNcMjAzHwAFAkxcMjY2B1wyMDIlAFwzMDAGBiFcMjY2BwFBXDI2Nlwy MDJcMjAyAQBcMjA3IiBba2lsbC1sb2NhbC12YXJpYWJsZV0gMTEgKCMkIC4gODE1MildKSNAMjA2 IEFkZCBORVdFTFQgdG8gdGhlIGxpc3Qgc3RvcmVkIGluIHRoZSBnZW5lcmFsaXplZCB2YXJpYWJs ZSBQTEFDRS4KVGhpcyBpcyBtb3JhbGx5IGVxdWl2YWxlbnQgdG8gKHNldGYgUExBQ0UgKGNvbnMg TkVXRUxUIFBMQUNFKSksCmV4Y2VwdCB0aGF0IFBMQUNFIGlzIGV2YWx1YXRlZCBvbmx5IG9uY2Ug KGFmdGVyIE5FV0VMVCkuCgooZm4gTkVXRUxUIFBMQUNFKR8KKGRlZmFsaWFzICdwdXNoICcobWFj cm8gLiAjWzUxNCAiXDIxMTlcMjAzDQBcMzAwAVwzMDEEBEVFXDIwN1wzMDJcMzAzIVwyMTBcMzA0 AiFcMjAzGwABXDIwMh4AXDMwNVwzMDYhXDMwNwJcMzEwXDMxMQRcIlwiAQQ9XDIwMywAXDIwN1wz MTICBURDAlwiXDIwNyIgW3NldHEgY29ucyByZXF1aXJlIG1hY3JvZXhwIG1hY3JvZXhwLWNvcHlh YmxlLXAgbWFrZS1zeW1ib2wgIngiIGd2LWdldCBtYWtlLWNsb3N1cmUgI1s1MTQgIlwyMTFcMzAx XDMwMARFIVwyMDciIFtWMCBjb25zXSA2ICJcblxuKGZuIEdFVFRFUiBTRVRURVIpIl0gbWFjcm9l eHAtbGV0Kl0gOCAoIyQgLiA4NDk0KV0pKQoocHV0ICdwdXNoICdlZGVidWctZm9ybS1zcGVjICco Zm9ybSBndi1wbGFjZSkpI0AyMjMgUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IG9mIFBMQUNFJ3Mg dmFsdWUsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4KUExBQ0UgbXVzdCBiZSBhIGdlbmVy YWxpemVkIHZhcmlhYmxlIHdob3NlIHZhbHVlIGlzIGEgbGlzdC4KSWYgdGhlIHZhbHVlIGlzIG5p bCwgYHBvcCcgcmV0dXJucyBuaWwgYnV0IGRvZXMgbm90IGFjdHVhbGx5CmNoYW5nZSB0aGUgbGlz dC4KCihmbiBQTEFDRSkfCihkZWZhbGlhcyAncG9wICcobWFjcm8gLiAjWzI1NyAiXDMwMAE5XDIw MxMAXDMwMQJcMzAyBFwzMDMGBkRFRVwyMDIXAFwzMDQCXDMwNVwiRFwyMDciIFtjYXItc2FmZSBw cm9nMSBzZXRxIGNkciBndi1nZXQgI1s1MTQgIlwzMDACIVwyMDNcbgABXDIwMg0AXDMwMVwzMDIh XDMwMwEDXDMwNAREIUUBBD1cMjAzHABcMjA3XDMwNQIFREMCXCJcMjA3IiBbbWFjcm9leHAtY29w eWFibGUtcCBtYWtlLXN5bWJvbCAieCIgcHJvZzEgY2RyIG1hY3JvZXhwLWxldCpdIDggIlxuXG4o Zm4gR0VUVEVSIFNFVFRFUikiXV0gOCAoIyQgLiA5MDg0KV0pKQoocHV0ICdwb3AgJ2VkZWJ1Zy1m b3JtLXNwZWMgJyhndi1wbGFjZSkpI0AxODQgSWYgQ09ORCB5aWVsZHMgbm9uLW5pbCwgZG8gQk9E WSwgZWxzZSByZXR1cm4gbmlsLgpXaGVuIENPTkQgeWllbGRzIG5vbi1uaWwsIGV2YWwgQk9EWSBm b3JtcyBzZXF1ZW50aWFsbHkgYW5kIHJldHVybgp2YWx1ZSBvZiBsYXN0IG9uZSwgb3IgbmlsIGlm IHRoZXJlIGFyZSBub25lLgoKKGZuIENPTkQgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2hlbiAn KG1hY3JvIC4gI1szODUgIlwzMDACXDMwMQNCRVwyMDciIFtpZiBwcm9nbl0gNiAoIyQgLiA5NjYw KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIg W2Z1bmN0aW9uLXB1dCB3aGVuIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3Jt LXNwZWMgdF0gNSkjQDE3NiBJZiBDT05EIHlpZWxkcyBuaWwsIGRvIEJPRFksIGVsc2UgcmV0dXJu IG5pbC4KV2hlbiBDT05EIHlpZWxkcyBuaWwsIGV2YWwgQk9EWSBmb3JtcyBzZXF1ZW50aWFsbHkg YW5kIHJldHVybgp2YWx1ZSBvZiBsYXN0IG9uZSwgb3IgbmlsIGlmIHRoZXJlIGFyZSBub25lLgoK KGZuIENPTkQgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAndW5sZXNzICcobWFjcm8gLiAjWzM4NSAi XDMwMAJcMzAxA0JCQlwyMDciIFtpZiBuaWxdIDYgKCMkIC4gMTAwNDkpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHVu bGVzcyBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0A2 NyBSZXR1cm4gdCBpZiBPQkpFQ1QgaXMgYSBidWlsdC1pbiBwcmltaXRpdmUgZnVuY3Rpb24uCgoo Zm4gT0JKRUNUKR8KKGRlZmFsaWFzICdzdWJyLXByaW1pdGl2ZS1wICNbMjU3ICJcMzAwASFcMjA1 XG4AXDMwMQEhP1wyMDciIFtzdWJycCBzdWJyLW5hdGl2ZS1lbGlzcC1wXSAzICgjJCAuIDEwNDMz KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHN1YnItcHJpbWl0aXZlLXAgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVy IGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMTQ1IFJldHVybiB0aGUgYm9vbGVhbiBl eGNsdXNpdmUtb3Igb2YgQ09ORDEgYW5kIENPTkQyLgpJZiBvbmx5IG9uZSBvZiB0aGUgYXJndW1l bnRzIGlzIG5vbi1uaWwsIHJldHVybiBpdDsgb3RoZXJ3aXNlCnJldHVybiBuaWwuCgooZm4gQ09O RDEgQ09ORDIpHwooZGVmYWxpYXMgJ3hvciAjWzUxNCAiAVwyMDQFAFwyMDdcMjExP1wyMDULAAFc MjA3IiBbXSAzICgjJCAuIDEwNzUzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMw MFwzMDFcMzA0XDMwNSNcMzAwXDMwMVwzMDZcMzA3I1wzMTBcMzAxXDMxMVwzMTIjXDIwNyIgW2Z1 bmN0aW9uLXB1dCB4b3IgcHVyZSB0IHNpZGUtZWZmZWN0LWZyZWUgZXJyb3ItZnJlZSBzcGVlZCAt MSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDcpI0AxNjkg TG9vcCBvdmVyIGEgbGlzdC4KRXZhbHVhdGUgQk9EWSB3aXRoIFZBUiBib3VuZCB0byBlYWNoIGNh ciBmcm9tIExJU1QsIGluIHR1cm4uClRoZW4gZXZhbHVhdGUgUkVTVUxUIHRvIGdldCByZXR1cm4g dmFsdWUsIGRlZmF1bHQgbmlsLgoKKGZuIChWQVIgTElTVCBbUkVTVUxUXSkgQk9EWS4uLikfCihk ZWZhbGlhcyAnZG9saXN0ICcobWFjcm8gLiAjWzM4NSAiATpcMjA0XGYAXDMwMFwzMDFcMzAyBERc IlwyMTBcMzAzXDMwNANHXDMwNSNcMjA0HQBcMzAwXDMwNlwzMDcER0RcIlwyMTBcMzEwXDMxMSFc MzEyAQRBQERDXDMxMwNcMzEyBgdAXDMxNAYHRERDXDMxNQYIXDMxNgYJXDMxNwYLREVDXCJCQkUF QUFCQkJcMjA3IiBbc2lnbmFsIHdyb25nLXR5cGUtYXJndW1lbnQgY29uc3AgPD0gMiAzIHdyb25n LW51bWJlci1vZi1hcmd1bWVudHMgKDIgLiAzKSBtYWtlLXN5bWJvbCAidGFpbCIgbGV0IHdoaWxl IGNhciBhcHBlbmQgc2V0cSBjZHJdIDE1ICgjJCAuIDExMTcyKV0pKQooYnl0ZS1jb2RlICJcMzAw XDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBkb2xpc3Qg bGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyAoKHN5bWJvbHAgZm9y bSAmb3B0aW9uYWwgZm9ybSkgYm9keSldIDUpI0AzNDEgTG9vcCBhIGNlcnRhaW4gbnVtYmVyIG9m IHRpbWVzLgpFdmFsdWF0ZSBCT0RZIHdpdGggVkFSIGJvdW5kIHRvIHN1Y2Nlc3NpdmUgaW50ZWdl cnMgcnVubmluZyBmcm9tIDAsCmluY2x1c2l2ZSwgdG8gQ09VTlQsIGV4Y2x1c2l2ZS4KCkZpbmFs bHkgUkVTVUxUIGlzIGV2YWx1YXRlZCB0byBnZXQgdGhlIHJldHVybiB2YWx1ZSAobmlsIGlmClJF U1VMVCBpcyBvbWl0dGVkKS4gIFVzaW5nIFJFU1VMVCBpcyBkZXByZWNhdGVkLCBhbmQgbWF5IHJl c3VsdAppbiBjb21waWxhdGlvbiB3YXJuaW5ncyBhYm91dCB1bnVzZWQgdmFyaWFibGVzLgoKKGZu IChWQVIgQ09VTlQgW1JFU1VMVF0pIEJPRFkuLi4pHwooZGVmYWxpYXMgJ2RvdGltZXMgJyhtYWNy byAuICNbMzg1ICIBQAJBQFwzMDBcMzAxIVwzMDBcMzAyIVwzMDMCBEQCXDMwNEJEXDMwNVwzMDYE BgZFXDMwMwYIBgZEQwZcbkJCXDMwNwYGXDMxMAYIREVGBghBQVwyMDVBAFwzMDMGBwVEQwZcbkFB QkJDQkJCXDIwNyIgW21ha2Utc3ltYm9sICJ1cHBlci1ib3VuZCIgImNvdW50ZXIiIGxldCAoMCkg d2hpbGUgPCBzZXRxIDErXSAxNSAoIyQgLiAxMTgzMildKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgZG90aW1lcyBsaXNw LWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIGRvbGlzdF0gNSkjQDQ3NyBE byBub3QgZXZhbHVhdGUgYW55IGFyZ3VtZW50cywgYW5kIHJldHVybiBuaWwuCklmIGEgYGRlY2xh cmUnIGZvcm0gYXBwZWFycyBhcyB0aGUgZmlyc3QgZm9ybSBpbiB0aGUgYm9keSBvZiBhCmBkZWZ1 bicgb3IgYGRlZm1hY3JvJyBmb3JtLCBTUEVDUyBzcGVjaWZpZXMgdmFyaW91cyBhZGRpdGlvbmFs CmluZm9ybWF0aW9uIGFib3V0IHRoZSBmdW5jdGlvbiBvciBtYWNybzsgdGhlc2UgZ28gaW50byBl ZmZlY3QKZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBgZGVmdW4nIG9yIGBkZWZtYWNybycg Zm9ybS4KClRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgU1BFQ1MgYXJlIHNwZWNpZmllZCBieQpgZGVm dW4tZGVjbGFyYXRpb25zLWFsaXN0JyBhbmQgYG1hY3JvLWRlY2xhcmF0aW9ucy1hbGlzdCcuCgpG b3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGluZm8gbm9kZSBgKGVsaXNwKURlY2xhcmUgRm9ybScu CgooZm4gJnJlc3QgU1BFQ1MpHwooZGVmYWxpYXMgJ2RlY2xhcmUgJyhtYWNybyAuICNbMTI4ICJc MzAwAUJcMzAxXDMwMlwzMDMDXCJcMzA0XDMwNQREXDMwNkJCXDMwN1wzMTAkXDIwNyIgW2RlY2xh cmUgbWFjcm9leHAtd2Fybi1hbmQtcmV0dXJuIGZvcm1hdC1tZXNzYWdlICJTdHJheSBgZGVjbGFy ZScgZm9ybTogJVMiIHByb2duIHF1b3RlIChuaWwpIG5pbCBjb21waWxlLW9ubHldIDcgKCMkIC4g MTI1MzkpXSkpI0AyMDAgRXhlY3V0ZSBCT0RZOyBpZiBhbiBlcnJvciBvY2N1cnMsIHJldHVybiBu aWwuCk90aGVyd2lzZSwgcmV0dXJuIHJlc3VsdCBvZiBsYXN0IGZvcm0gaW4gQk9EWS4KU2VlIGFs c28gYHdpdGgtZGVtb3RlZC1lcnJvcnMnIHRoYXQgZG9lcyBzb21ldGhpbmcgc2ltaWxhcgp3aXRo b3V0IHNpbGVuY2luZyBhbGwgZXJyb3JzLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ2ln bm9yZS1lcnJvcnMgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDIDQlwzMDNCQkJcMjA3IiBb Y29uZGl0aW9uLWNhc2UgbmlsIHByb2duICgoZXJyb3IgbmlsKSldIDUgKCMkIC4gMTMyMzkpXSkp CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwy MDciIFtwdXQgaWdub3JlLWVycm9ycyBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxp c3AtaW5kZW50LWZ1bmN0aW9uIDBdIDQpI0AxODMgRXhlY3V0ZSBCT0RZOyBpZiB0aGUgZXJyb3Ig Q09ORElUSU9OIG9jY3VycywgcmV0dXJuIG5pbC4KT3RoZXJ3aXNlLCByZXR1cm4gcmVzdWx0IG9m IGxhc3QgZm9ybSBpbiBCT0RZLgoKQ09ORElUSU9OIGNhbiBhbHNvIGJlIGEgbGlzdCBvZiBlcnJv ciBjb25kaXRpb25zLgoKKGZuIENPTkRJVElPTiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdpZ25v cmUtZXJyb3IgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMVwzMDIDQgRcMzAzQkZcMjA3IiBbY29u ZGl0aW9uLWNhc2UgbmlsIHByb2duIChuaWwpXSA3ICgjJCAuIDEzNzEwKV0pKQooYnl0ZS1jb2Rl ICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IGln bm9yZS1lcnJvciBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1 bmN0aW9uIDFdIDQpI0A3NSBOdW1iZXIgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhl IG5leHQgc3ltYm9sIGNyZWF0ZWQgYnkgYGdlbnN5bScuHwooZGVmdmFyIGdlbnN5bS1jb3VudGVy IDAgKCMkIC4gMTQxNTMpKSNAMTU1IFJldHVybiBhIG5ldyB1bmludGVybmVkIHN5bWJvbC4KVGhl IG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgYGdlbnN5bS1jb3VudGVyJyB0byBQUkVGSVguClBS RUZJWCBpcyBhIHN0cmluZywgYW5kIGRlZmF1bHRzIHRvICJnIi4KCihmbiAmb3B0aW9uYWwgUFJF RklYKR8KKGRlZmFsaWFzICdnZW5zeW0gI1syNTYgIghcMjExVBBcMzAxXDMwMlwzMDMEXDIwNlxm AFwzMDQEIyFcMjA3IiBbZ2Vuc3ltLWNvdW50ZXIgbWFrZS1zeW1ib2wgZm9ybWF0ICIlcyVkIiAi ZyJdIDcgKCMkIC4gMTQyNzIpXSkjQDEzNCBEbyBub3RoaW5nIGFuZCByZXR1cm4gbmlsLgpUaGlz IGZ1bmN0aW9uIGFjY2VwdHMgYW55IG51bWJlciBvZiBBUkdVTUVOVFMsIGJ1dCBpZ25vcmVzIHRo ZW0uCkFsc28gc2VlIGBhbHdheXMnLgoKKGZuICZyZXN0IEFSR1VNRU5UUykfCihkZWZhbGlhcyAn aWdub3JlICNbMTI4ICJcMzAwXDIwNyIgW25pbF0gMiAoIyQgLiAxNDU2MSkgbmlsXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMSNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBpZ25vcmUgY29t cGxldGlvbi1wcmVkaWNhdGVdIDQpI0AxMzIgRG8gbm90aGluZyBhbmQgcmV0dXJuIHQuClRoaXMg ZnVuY3Rpb24gYWNjZXB0cyBhbnkgbnVtYmVyIG9mIEFSR1VNRU5UUywgYnV0IGlnbm9yZXMgdGhl bS4KQWxzbyBzZWUgYGlnbm9yZScuCgooZm4gJnJlc3QgQVJHVU1FTlRTKR8KKGRlZmFsaWFzICdh bHdheXMgI1sxMjggIlwzMDBcMjA3IiBbdF0gMiAoIyQgLiAxNDg0NyldKSNANTk1IFNpZ25hbCBh biBlcnJvciwgbWFraW5nIGEgbWVzc2FnZSBieSBwYXNzaW5nIEFSR1MgdG8gYGZvcm1hdC1tZXNz YWdlJy4KRXJyb3JzIGNhdXNlIGVudHJ5IHRvIHRoZSBkZWJ1Z2dlciB3aGVuIGBkZWJ1Zy1vbi1l cnJvcicgaXMgbm9uLW5pbC4KVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBgZGVidWctaWdub3Jl ZC1lcnJvcnMnLgoKVG8gc2lnbmFsIHdpdGggTUVTU0FHRSB3aXRob3V0IGludGVycHJldGluZyBm b3JtYXQgY2hhcmFjdGVycwpsaWtlIGAlJywgYFw9YCcgYW5kIGBcPScnLCB1c2UgKGVycm9yICIl cyIgTUVTU0FHRSkuCkluIEVtYWNzLCB0aGUgY29udmVudGlvbiBpcyB0aGF0IGVycm9yIG1lc3Nh Z2VzIHN0YXJ0IHdpdGggYSBjYXBpdGFsCmxldHRlciBidXQgKmRvIG5vdCogZW5kIHdpdGggYSBw ZXJpb2QuICBQbGVhc2UgZm9sbG93IHRoaXMgY29udmVudGlvbgpmb3IgdGhlIHNha2Ugb2YgY29u c2lzdGVuY3kuCgpUbyBhbHRlciB0aGUgbG9vayBvZiB0aGUgZGlzcGxheWVkIGVycm9yIG1lc3Nh Z2VzLCB5b3UgY2FuIHVzZQp0aGUgYGNvbW1hbmQtZXJyb3ItZnVuY3Rpb24nIHZhcmlhYmxlLgoK KGZuICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ2Vycm9yICNbMTI4ICJcMzAwXDMwMVwzMDJcMzAz BFwiQ1wiXDIwNyIgW3NpZ25hbCBlcnJvciBhcHBseSBmb3JtYXQtbWVzc2FnZV0gNiAoIyQgLiAx NTA0MCldKQooc2V0LWFkdmVydGlzZWQtY2FsbGluZy1jb252ZW50aW9uICdlcnJvciAnKHN0cmlu ZyAmcmVzdCBhcmdzKSAiMjMuMSIpI0A4MTIgU2lnbmFsIGEgdXNlciBlcnJvciwgbWFraW5nIGEg bWVzc2FnZSBieSBwYXNzaW5nIEFSR1MgdG8gYGZvcm1hdC1tZXNzYWdlJy4KVGhpcyBpcyBsaWtl IGBlcnJvcicgZXhjZXB0IHRoYXQgYSB1c2VyIGVycm9yIChvciAicGlsb3QgZXJyb3IiKSBjb21l cwpmcm9tIGFuIGluY29ycmVjdCBtYW5pcHVsYXRpb24gYnkgdGhlIHVzZXIsIG5vdCBmcm9tIGFu IGFjdHVhbCBwcm9ibGVtLgpJbiBjb250cmFzdCB3aXRoIG90aGVyIGVycm9ycywgdXNlciBlcnJv cnMgbm9ybWFsbHkgZG8gbm90IGNhdXNlCmVudHJ5IHRvIHRoZSBkZWJ1Z2dlciwgZXZlbiB3aGVu IGBkZWJ1Zy1vbi1lcnJvcicgaXMgbm9uLW5pbC4KVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBg ZGVidWctaWdub3JlZC1lcnJvcnMnLgoKVG8gc2lnbmFsIHdpdGggTUVTU0FHRSB3aXRob3V0IGlu dGVycHJldGluZyBmb3JtYXQgY2hhcmFjdGVycwpsaWtlIGAlJywgYFw9YCcgYW5kIGBcPScnLCB1 c2UgKHVzZXItZXJyb3IgIiVzIiBNRVNTQUdFKS4KSW4gRW1hY3MsIHRoZSBjb252ZW50aW9uIGlz IHRoYXQgZXJyb3IgbWVzc2FnZXMgc3RhcnQgd2l0aCBhIGNhcGl0YWwKbGV0dGVyIGJ1dCAqZG8g bm90KiBlbmQgd2l0aCBhIHBlcmlvZC4gIFBsZWFzZSBmb2xsb3cgdGhpcyBjb252ZW50aW9uCmZv ciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeS4KClRvIGFsdGVyIHRoZSBsb29rIG9mIHRoZSBkaXNw bGF5ZWQgZXJyb3IgbWVzc2FnZXMsIHlvdSBjYW4gdXNlCnRoZSBgY29tbWFuZC1lcnJvci1mdW5j dGlvbicgdmFyaWFibGUuCgooZm4gRk9STUFUICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ3VzZXIt ZXJyb3IgI1szODUgIlwzMDBcMzAxXDMwMlwzMDMFBSNDXCJcMjA3IiBbc2lnbmFsIHVzZXItZXJy b3IgYXBwbHkgZm9ybWF0LW1lc3NhZ2VdIDggKCMkIC4gMTU4MTYpXSkjQDI5NCBEZWZpbmUgTkFN RSBhcyBhIG5ldyBlcnJvciBzaWduYWwuCk1FU1NBR0UgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJl IG91dHB1dCB0byB0aGUgZWNobyBhcmVhIGlmIHN1Y2ggYW4gZXJyb3IKaXMgc2lnbmFsZWQgd2l0 aG91dCBiZWluZyBjYXVnaHQgYnkgYSBgY29uZGl0aW9uLWNhc2UnLgpQQVJFTlQgaXMgZWl0aGVy IGEgc2lnbmFsIG9yIGEgbGlzdCBvZiBzaWduYWxzIGZyb20gd2hpY2ggaXQgaW5oZXJpdHMuCkRl ZmF1bHRzIHRvIGBlcnJvcicuCgooZm4gTkFNRSBNRVNTQUdFICZvcHRpb25hbCBQQVJFTlQpHwoo ZGVmYWxpYXMgJ2RlZmluZS1lcnJvciAjWzc3MCAiXDIxMVwyMDQHAFwzMDBcMjYyAVwyMTE6XDIw MxYAXDMwMVwzMDJcMzAzXDMwNARcIlwiXDIwMhsAXDIxMQFcMzA1TkJcMzA2BFwzMDVcMzA3XDMx MAYIBgZCISEjXDIxMAJcMjA1MgBcMzA2BFwzMTEFI1wyMDciIFtlcnJvciBhcHBseSBhcHBlbmQg bWFwY2FyICNbMjU3ICJcMjExAVwzMDBOXDIwNgsAXDMwMVwzMDIDXCJCXDIwNyIgW2Vycm9yLWNv bmRpdGlvbnMgZXJyb3IgIlVua25vd24gc2lnbmFsIGAlcyciXSA1ICJcblxuKGZuIFBBUkVOVCki XSBlcnJvci1jb25kaXRpb25zIHB1dCBkZWxldGUtZHVwcyBjb3B5LXNlcXVlbmNlIGVycm9yLW1l c3NhZ2VdIDExICgjJCAuIDE2NzQ4KV0pI0AxNTggUmV0dXJuIG5vbi1uaWwgaWYgT0JKRUNUIHNl ZW1zIHRvIGJlIGEgZnJhbWUgY29uZmlndXJhdGlvbi4KQW55IGxpc3Qgd2hvc2UgY2FyIGlzIGBm cmFtZS1jb25maWd1cmF0aW9uJyBpcyBhc3N1bWVkIHRvIGJlIGEgZnJhbWUKY29uZmlndXJhdGlv bi4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ2ZyYW1lLWNvbmZpZ3VyYXRpb24tcCAjWzI1NyAi XDIxMTpcMjA1CQBcMjExQFwzMDA9XDIwNyIgW2ZyYW1lLWNvbmZpZ3VyYXRpb25dIDMgKCMkIC4g MTc0MTUpXSkjQDI5NCBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGlzIGEgcGFydGlhbCBhcHBsaWNh dGlvbiBvZiBGVU4gdG8gQVJHUy4KQVJHUyBpcyBhIGxpc3Qgb2YgdGhlIGZpcnN0IE4gYXJndW1l bnRzIHRvIHBhc3MgdG8gRlVOLgpUaGUgcmVzdWx0IGlzIGEgbmV3IGZ1bmN0aW9uIHdoaWNoIGRv ZXMgdGhlIHNhbWUgYXMgRlVOLCBleGNlcHQgdGhhdAp0aGUgZmlyc3QgTiBhcmd1bWVudHMgYXJl IGZpeGVkIGF0IHRoZSB2YWx1ZXMgd2l0aCB3aGljaCB0aGlzIGZ1bmN0aW9uCndhcyBjYWxsZWQu CgooZm4gRlVOICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ2FwcGx5LXBhcnRpYWxseSAjWzM4NSAi XDMwMFwzMDECBCNcMjA3IiBbbWFrZS1jbG9zdXJlICNbMTI4ICJcMzAyXDMwMVwzMDNcMzAwBFwi XCJcMjA3IiBbVjAgVjEgYXBwbHkgYXBwZW5kXSA2ICJcblxuKGZuICZyZXN0IEFSR1MyKSJdXSA2 ICgjJCAuIDE3Njg0KV0pI0A0MiBSZXR1cm4gdCBpZiBOVU1CRVIgaXMgemVyby4KCihmbiBOVU1C RVIpHwooZGVmYWxpYXMgJ3plcm9wICNbMjU3ICJcMjExXDMwMFVcMjA3IiBbMF0gMyAoIyQgLiAx ODE0NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24t cHV0IHplcm9wIGNvbXBpbGVyLW1hY3JvIHplcm9wLS1hbm9uLWNtYWNyb10gNCkjQDE3IAoKKGZu IF8gTlVNQkVSKR8KKGRlZmFsaWFzICd6ZXJvcC0tYW5vbi1jbWFjcm8gI1s1MTQgIlwzMDBcMzAx AkVcMjA3IiBbPSAwXSA1ICgjJCAuIDE4MzQ5KV0pI0A0NiBSZXR1cm4gdCBpZiBPQkpFQ1QgaXMg YSBmaXhudW0uCgooZm4gT0JKRUNUKR8KKGRlZmFsaWFzICdmaXhudW1wICNbMjU3ICJcMjExXDI1 MFwyMDUOAAgBWFwyMDUOAFwyMTEJWFwyMDciIFttb3N0LW5lZ2F0aXZlLWZpeG51bSBtb3N0LXBv c2l0aXZlLWZpeG51bV0gMyAoIyQgLiAxODQ0NildKSNANDYgUmV0dXJuIHQgaWYgT0JKRUNUIGlz IGEgYmlnbnVtLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnYmlnbnVtcCAjWzI1NyAiXDIxMVwy NTBcMjA1CQBcMzAwASE/XDIwNyIgW2ZpeG51bXBdIDMgKCMkIC4gMTg2MTgpXSkjQDM0NCBSZXR1 cm4gVkFMVUUgd2l0aCBpdHMgYml0cyBzaGlmdGVkIGxlZnQgYnkgQ09VTlQuCklmIENPVU5UIGlz IG5lZ2F0aXZlLCBzaGlmdGluZyBpcyBhY3R1YWxseSB0byB0aGUgcmlnaHQuCkluIHRoaXMgY2Fz ZSwgaWYgVkFMVUUgaXMgYSBuZWdhdGl2ZSBmaXhudW0gdHJlYXQgaXQgYXMgdW5zaWduZWQsCmku ZS4sIHN1YnRyYWN0IDIgKiBgbW9zdC1uZWdhdGl2ZS1maXhudW0nIGZyb20gVkFMVUUgYmVmb3Jl IHNoaWZ0aW5nIGl0LgoKVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0 eS4gIEluIG5ldyBjb2RlLCB1c2UgYGFzaCcKaW5zdGVhZC4KCihmbiBWQUxVRSBDT1VOVCkfCihk ZWZhbGlhcyAnbHNoICNbNTE0ICIBXDMwMldcMjAzJgBcMjExXDMwMldcMjAzJgABCFdcMjAzGQBc MzAzXDMwNAMDRFwiXDIxMFwzMDVcMzA2A1wzMDdcIglcIlwyNjICXDIxMVRcMjYyAVwzMDYCAlwi XDIwNyIgW21vc3QtbmVnYXRpdmUtZml4bnVtIG1vc3QtcG9zaXRpdmUtZml4bnVtIDAgc2lnbmFs IGFyZ3Mtb3V0LW9mLXJhbmdlIGxvZ2FuZCBhc2ggLTFdIDYgKCMkIC4gMTg3NDkpXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBsc2ggY29tcGls ZXItbWFjcm8gbHNoLS1hbm9uLWNtYWNyb10gNCkjQDI1IAoKKGZuIEZPUk0gVkFMVUUgQ09VTlQp HwooZGVmYWxpYXMgJ2xzaC0tYW5vbi1jbWFjcm8gI1s3NzEgIlwzMDBcMzAxBFwzMDJcMzAzBgcl XDIwNyIgW21hY3JvZXhwLXdhcm4tYW5kLXJldHVybiAiYXZvaWQgYGxzaCc7IHVzZSBgYXNoJyBp bnN0ZWFkIiAoc3VzcGljaW91cyBsc2gpIHRdIDkgKCMkIC4gMTk0MTQpXSkjQDE1IAoKKGZuIEZP Uk0gWCkfCihkZWZhbGlhcyAnaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHIgI1s1MTQgIgFA XDMwMAEhXDIxMUdcMzAxWlwzMDJcMzAzA1wiXDIwNCoAXDMwNAMhXDIwMyYAAks5XDIwMyYAXDMw NQNLBgZBQgVcIlwyMDdcMzA2XDMwNyFcMjA3XDIxMVwzMTBcMjI0VlwyMDNJAAEBSFwzMTE9XDIw Mz0AXDMxMlwyMDI+AFwzMTMERFwyNjIEXDIxMVNcMjYyAVwyMDIqAANcMjA3IiBbc3ltYm9sLW5h bWUgMiBzdHJpbmctbWF0Y2ggImNbYWRdK3JcXCciIGZib3VuZHAgaW50ZXJuYWwtLWNvbXBpbGVy LW1hY3JvLWNYWHIgZXJyb3IgIkNvbXBpbGVyIG1hY3JvIGZvciBjWFhyIGFwcGxpZWQgdG8gbm9u LWNYWHIgZm9ybSIgMCA5NyBjYXIgY2RyXSA4ICgjJCAuIDE5NjAwKV0pI0A0MSBSZXR1cm4gdGhl IGNhciBvZiB0aGUgY2FyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2FhciAjWzI1NyAiXDIx MUBAXDIwNyIgW10gMiAoIyQgLiAxOTk5NyldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAz I1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IGNhYXIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNv bXBpbGVyLW1hY3JvLWNYWHJdIDQpI0A0MSBSZXR1cm4gdGhlIGNhciBvZiB0aGUgY2RyIG9mIFgu CgooZm4gWCkfCihkZWZhbGlhcyAnY2FkciAjWzI1NyAiXDIxMUFAXDIwNyIgW10gMiAoIyQgLiAy MDIwNCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24t cHV0IGNhZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHJdIDQp I0A0MSBSZXR1cm4gdGhlIGNkciBvZiB0aGUgY2FyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAn Y2RhciAjWzI1NyAiXDIxMUBBXDIwNyIgW10gMiAoIyQgLiAyMDQxMSldKQooYnl0ZS1jb2RlICJc MzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IGNkYXIgY29tcGlsZXItbWFj cm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHJdIDQpI0A0MSBSZXR1cm4gdGhlIGNkciBv ZiB0aGUgY2RyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2RkciAjWzI1NyAiXDIxMUFBXDIw NyIgW10gMiAoIyQgLiAyMDYxOCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBc MjA3IiBbZnVuY3Rpb24tcHV0IGNkZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVy LW1hY3JvLWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjYXInIG9mIHRoZSBgY2FyJyBvZiB0aGUg YGNhcicgb2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjYWFhciAjWzI1NyAiXDIxMUBAQFwyMDci IFtdIDIgKCMkIC4gMjA4MjUpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIw NyIgW2Z1bmN0aW9uLXB1dCBjYWFhciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXIt bWFjcm8tY1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNhcicgb2YgdGhlIGBjYXInIG9mIHRoZSBg Y2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWRyICNbMjU3ICJcMjExQUBAXDIwNyIg W10gMiAoIyQgLiAyMTA1MildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3 IiBbZnVuY3Rpb24tcHV0IGNhYWRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1t YWNyby1jWFhyXSA0KSNANTggUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBj YXInIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2FkYXIgI1syNTcgIlwyMTFAQUBcMjA3IiBb XSAyICgjJCAuIDIxMjc5KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDci IFtmdW5jdGlvbi1wdXQgY2FkYXIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1h Y3JvLWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiB0aGUgYGNk cicgb2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjYWRkciAjWzI1NyAiXDIxMUFBQFwyMDciIFtd IDIgKCMkIC4gMjE1MDYpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIg W2Z1bmN0aW9uLXB1dCBjYWRkciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXItbWFj cm8tY1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNkcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2Fy JyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWFyICNbMjU3ICJcMjExQEBBXDIwNyIgW10g MiAoIyQgLiAyMTczMyldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBb ZnVuY3Rpb24tcHV0IGNkYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNy by1jWFhyXSA0KSNANTggUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHIn IG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2RhZHIgI1syNTcgIlwyMTFBQEFcMjA3IiBbXSAy ICgjJCAuIDIxOTYwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtm dW5jdGlvbi1wdXQgY2RhZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3Jv LWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicg b2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjZGRhciAjWzI1NyAiXDIxMUBBQVwyMDciIFtdIDIg KCMkIC4gMjIxODcpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1 bmN0aW9uLXB1dCBjZGRhciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXItbWFjcm8t Y1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBv ZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRyICNbMjU3ICJcMjExQUFBXDIwNyIgW10gMiAo IyQgLiAyMjQxNCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVu Y3Rpb24tcHV0IGNkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1j WFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjYXInIG9m IHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWFhciAjWzI1NyAiXDIxMUBA QEBcMjA3IiBbXSAyICgjJCAuIDIyNjQxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FhYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1j b21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicg b2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWFk ciAjWzI1NyAiXDIxMUFAQEBcMjA3IiBbXSAyICgjJCAuIDIyODg0KV0pCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FhYWRyIGNvbXBpbGVyLW1h Y3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2Fy JyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwoo ZGVmYWxpYXMgJ2NhYWRhciAjWzI1NyAiXDIxMUBBQEBcMjA3IiBbXSAyICgjJCAuIDIzMTI3KV0p CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2Fh ZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEg UmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBv ZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWRkciAjWzI1NyAiXDIxMUFBQEBcMjA3IiBbXSAy ICgjJCAuIDIzMzcwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtm dW5jdGlvbi1wdXQgY2FhZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNy by1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjYXIn IG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhZGFhciAjWzI1NyAiXDIx MUBAQUBcMjA3IiBbXSAyICgjJCAuIDIzNjEzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FkYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFs LS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNk cicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2Nh ZGFkciAjWzI1NyAiXDIxMUFAQUBcMjA3IiBbXSAyICgjJCAuIDIzODU2KV0pCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FkYWRyIGNvbXBpbGVy LW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBg Y2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgp HwooZGVmYWxpYXMgJ2NhZGRhciAjWzI1NyAiXDIxMUBBQUBcMjA3IiBbXSAyICgjJCAuIDI0MDk5 KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQg Y2FkZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNA NzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2Ry JyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhZGRkciAjWzI1NyAiXDIxMUFBQUBcMjA3IiBb XSAyICgjJCAuIDI0MzQyKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDci IFtmdW5jdGlvbi1wdXQgY2FkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1t YWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBj YXInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWFhciAjWzI1NyAi XDIxMUBAQEFcMjA3IiBbXSAyICgjJCAuIDI0NTg1KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMw MlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RhYWFyIGNvbXBpbGVyLW1hY3JvIGludGVy bmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUg YGNhcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMg J2NkYWFkciAjWzI1NyAiXDIxMUFAQEFcMjA3IiBbXSAyICgjJCAuIDI0ODI4KV0pCihieXRlLWNv ZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RhYWRyIGNvbXBp bGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRo ZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZu IFgpHwooZGVmYWxpYXMgJ2NkYWRhciAjWzI1NyAiXDIxMUBBQEFcMjA3IiBbXSAyICgjJCAuIDI1 MDcxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1w dXQgY2RhZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0 KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBg Y2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWRkciAjWzI1NyAiXDIxMUFBQEFcMjA3 IiBbXSAyICgjJCAuIDI1MzE0KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwy MDciIFtmdW5jdGlvbi1wdXQgY2RhZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxl ci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhl IGBjYXInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGFhciAjWzI1 NyAiXDIxMUBAQUFcMjA3IiBbXSAyICgjJCAuIDI1NTU3KV0pCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkYWFyIGNvbXBpbGVyLW1hY3JvIGlu dGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0 aGUgYGNkcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxp YXMgJ2NkZGFkciAjWzI1NyAiXDIxMUFAQUFcMjA3IiBbXSAyICgjJCAuIDI1ODAwKV0pCihieXRl LWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkYWRyIGNv bXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJu IHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoK KGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRhciAjWzI1NyAiXDIxMUBBQUFcMjA3IiBbXSAyICgjJCAu IDI2MDQzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlv bi1wdXQgY2RkZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhy XSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRo ZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRkciAjWzI1NyAiXDIxMUFBQUFc MjA3IiBbXSAyICgjJCAuIDI2Mjg2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMw MFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21w aWxlci1tYWNyby1jWFhyXSA0KSNAMjE5IFJldHVybiB0aGUgbGFzdCBsaW5rIG9mIExJU1QuICBJ dHMgY2FyIGlzIHRoZSBsYXN0IGVsZW1lbnQuCklmIExJU1QgaXMgbmlsLCByZXR1cm4gbmlsLgpJ ZiBOIGlzIG5vbi1uaWwsIHJldHVybiB0aGUgTnRoLXRvLWxhc3QgbGluayBvZiBMSVNULgpJZiBO IGlzIGJpZ2dlciB0aGFuIHRoZSBsZW5ndGggb2YgTElTVCwgcmV0dXJuIExJU1QuCgooZm4gTElT VCAmb3B0aW9uYWwgTikfCihkZWZhbGlhcyAnbGFzdCAjWzUxMyAiXDIxMVwyMDMbAFwyMTFcMzAw WVwyMDUlAFwzMDECIQEBV1wyMDMZAFwyMTECWgNcMjMzXDIwNwJcMjA3AVwyMDUlAFwzMDECIVMC XDIzM1wyMDciIFswIHNhZmUtbGVuZ3RoXSA1ICgjJCAuIDI2NTMwKV0pCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgbGFzdCBzaWRlLWVmZmVjdC1m cmVlIHRdIDQpI0AxOTEgUmV0dXJuIGEgY29weSBvZiBMSVNUIHdpdGggdGhlIGxhc3QgTiBlbGVt ZW50cyByZW1vdmVkLgpJZiBOIGlzIG9taXR0ZWQgb3IgbmlsLCByZXR1cm4gYSBjb3B5IG9mIExJ U1Qgd2l0aG91dCBpdHMgbGFzdCBlbGVtZW50LgpJZiBOIGlzIHplcm8gb3IgbmVnYXRpdmUsIHJl dHVybiBMSVNULgoKKGZuIExJU1QgJm9wdGlvbmFsIE4pHwooZGVmYWxpYXMgJ2J1dGxhc3QgI1s1 MTMgIlwyMTFcMjA0BwBcMzAwXDI2MgFcMjExXDMwMVhcMjAzDwABXDIwN1wzMDICRwJaA1wiXDIw NyIgWzEgMCB0YWtlXSA1ICgjJCAuIDI2OTc2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgYnV0bGFzdCBzaWRlLWVmZmVjdC1mcmVlIHRdIDQp I0AxMTYgTW9kaWZ5IExJU1QgdG8gcmVtb3ZlIHRoZSBsYXN0IE4gZWxlbWVudHMuCklmIE4gaXMg b21pdHRlZCBvciBuaWwsIHJlbW92ZSB0aGUgbGFzdCBlbGVtZW50LgoKKGZuIExJU1QgJm9wdGlv bmFsIE4pHwooZGVmYWxpYXMgJ25idXRsYXN0ICNbNTEzICIBRwFcMjA0CQBcMzAwXDI2MgIBAVdc MjA1HwABXDMwMVZcMjAzHgBcMjExUwJaA1wyMzNcMzAyXDI0MVwyMTACXDIwNyIgWzEgMCBuaWxd IDUgKCMkIC4gMjczNjYpXSkjQDI1NiBEZXN0cnVjdGl2ZWx5IHJlbW92ZSBgZXF1YWwnIGR1cGxp Y2F0ZXMgZnJvbSBMSVNULgpTdG9yZSB0aGUgcmVzdWx0IGluIExJU1QgYW5kIHJldHVybiBpdC4g IExJU1QgbXVzdCBiZSBhIHByb3BlciBsaXN0LgpPZiBzZXZlcmFsIGBlcXVhbCcgb2NjdXJyZW5j ZXMgb2YgYW4gZWxlbWVudCBpbiBMSVNULCB0aGUgZmlyc3QKb25lIGlzIGtlcHQuICBTZWUgYHNl cS11bmlxJyBmb3Igbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbi4KCihmbiBMSVNUKR8KKGRlZmFs aWFzICdkZWxldGUtZHVwcyAjWzI1NyAiXDIxMUdcMjExXDMwMFZcMjAzQgBcMzAxXDMwMlwzMDNc MzA0BCQCXDMwNVwzMDYFQFwzMDcFI1wyMTABQVwyMTFcMjYyAlwyMDM/AFwyMTFAXDMxMAEFXCJc MjAzMQACAkFcMjQxXDI2NgJcMjAyFwBcMzA2AVwzMDcGBiNcMjEwAVwyNjIDXDIxMFwyMDIXAFwy NjYEXDIwNwFcMjExXDIwM1cAXDIxMVwzMTECQANBXCJcMjQxXDIxMFwyMTFBXDI2MgFcMjAyQwBc MjY2AlwyMDciIFsxMDAgbWFrZS1oYXNoLXRhYmxlIDp0ZXN0IGVxdWFsIDpzaXplIG5pbCBwdXRo YXNoIHQgZ2V0aGFzaCBkZWxldGVdIDEwICgjJCAuIDI3NjExKV0pI0AxNjkgRGVzdHJ1Y3RpdmVs eSByZW1vdmUgYGVxdWFsJyBjb25zZWN1dGl2ZSBkdXBsaWNhdGVzIGZyb20gTElTVC4KRmlyc3Qg YW5kIGxhc3QgZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgY29uc2VjdXRpdmUgaWYgQ0lSQ1VMQVIg aXMKbm9uLW5pbC4KCihmbiBMSVNUICZvcHRpb25hbCBDSVJDVUxBUikfCihkZWZhbGlhcyAnZGVs ZXRlLWNvbnNlY3V0aXZlLWR1cHMgI1s1MTMgIgFcMzAwAUFcMjAzIwABQAJBQFwyMzJcMjAzGQAB XDIxMUFBXDI0MVwyMTBcMjAyAgABXDI2MgEBQVwyNjICXDIwMgIAAlwyMDM3AFwyMTFcMjAzNwAB QARAXDIzMlwyMDM3AFwyMTFcMzAwXDI0MVwyMTBcMjY2AgFcMjA3IiBbbmlsXSA2ICgjJCAuIDI4 MjAzKV0pI0AxMzA3IFJldHVybiBhIHNlcXVlbmNlIG9mIG51bWJlcnMgZnJvbSBGUk9NIHRvIFRP IChib3RoIGluY2x1c2l2ZSkgYXMgYSBsaXN0LgpJTkMgaXMgdGhlIGluY3JlbWVudCB1c2VkIGJl dHdlZW4gbnVtYmVycyBpbiB0aGUgc2VxdWVuY2UgYW5kIGRlZmF1bHRzIHRvIDEuClNvLCB0aGUg TnRoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgKCsgRlJPTSAoKiBOIElOQykpIHdoZXJlIE4gY291 bnRzIGZyb20KemVyby4gIFRPIGlzIGluY2x1ZGVkIG9ubHkgaWYgdGhlcmUgaXMgYW4gTiBmb3Ig d2hpY2ggVE8gPSBGUk9NICsgTiAqIElOQy4KSWYgVE8gaXMgbmlsIG9yIG51bWVyaWNhbGx5IGVx dWFsIHRvIEZST00sIHJldHVybiAoRlJPTSkuCklmIElOQyBpcyBwb3NpdGl2ZSBhbmQgVE8gaXMg bGVzcyB0aGFuIEZST00sIG9yIElOQyBpcyBuZWdhdGl2ZQphbmQgVE8gaXMgbGFyZ2VyIHRoYW4g RlJPTSwgcmV0dXJuIG5pbC4KSWYgSU5DIGlzIHplcm8gYW5kIFRPIGlzIG5laXRoZXIgbmlsIG5v ciBudW1lcmljYWxseSBlcXVhbCB0bwpGUk9NLCBzaWduYWwgYW4gZXJyb3IuCgpUaGlzIGZ1bmN0 aW9uIGlzIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgaW50ZWdlciBhcmd1bWVudHMuCk5ldmVydGhl bGVzcywgRlJPTSwgVE8gYW5kIElOQyBjYW4gYmUgaW50ZWdlciBvciBmbG9hdC4gIEhvd2V2ZXIs CmZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgaXMgaW5leGFjdC4gIEZvciBpbnN0YW5jZSwgZGVw ZW5kaW5nIG9uCnRoZSBtYWNoaW5lLCBpdCBtYXkgcXVpdGUgd2VsbCBoYXBwZW4gdGhhdAoobnVt YmVyLXNlcXVlbmNlIDAuNCAwLjYgMC4yKSByZXR1cm5zIHRoZSBvbmUgZWxlbWVudCBsaXN0ICgw LjQpLAp3aGVyZWFzIChudW1iZXItc2VxdWVuY2UgMC40IDAuOCAwLjIpIHJldHVybnMgYSBsaXN0 IHdpdGggdGhyZWUKZWxlbWVudHMuICBUaHVzLCBpZiBzb21lIG9mIHRoZSBhcmd1bWVudHMgYXJl IGZsb2F0cyBhbmQgb25lIHdhbnRzCnRvIG1ha2Ugc3VyZSB0aGF0IFRPIGlzIGluY2x1ZGVkLCBv bmUgbWF5IGhhdmUgdG8gZXhwbGljaXRseSB3cml0ZQpUTyBhcyAoKyBGUk9NICgqIE4gSU5DKSkg b3IgdXNlIGEgdmFyaWFibGUgd2hvc2UgdmFsdWUgd2FzCmNvbXB1dGVkIHdpdGggdGhpcyBleGFj dCBleHByZXNzaW9uLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiwKb2YgY291cnNlLCBhbHNvIHJl cGxhY2UgVE8gd2l0aCBhIHNsaWdodGx5IGxhcmdlciB2YWx1ZQoob3IgYSBzbGlnaHRseSBtb3Jl IG5lZ2F0aXZlIHZhbHVlIGlmIElOQyBpcyBuZWdhdGl2ZSkuCgooZm4gRlJPTSAmb3B0aW9uYWwg VE8gSU5DKR8KKGRlZmFsaWFzICdudW1iZXItc2VxdWVuY2UgI1s3NjkgIgFcMjAzXG4AAgJVXDIw Mw0AAkNcMjA3XDIxMVwyMDQUAFwzMDBcMjYyAVwyMTFcMzAxVVwyMDMeAFwzMDJcMzAzIVwyMTBc MzA0XDMwMQQDXDMwMVZcMjAzQABcMjExBVhcMjAzWQBcMjExA0JcMjYyAwFUXDI2MgIFAgVfXFxc MjYyAVwyMDInAFwyMTEFWVwyMDNZAFwyMTEDQlwyNjIDAVRcMjYyAgUCBV9cXFwyNjIBXDIwMkAA AlwyMzdcMjA3IiBbMSAwIGVycm9yICJUaGUgaW5jcmVtZW50IGNhbiBub3QgYmUgemVybyIgbmls XSA5ICgjJCAuIDI4NTcwKV0pI0AyNTIgTWFrZSBhIGNvcHkgb2YgVFJFRS4KSWYgVFJFRSBpcyBh IGNvbnMgY2VsbCwgdGhpcyByZWN1cnNpdmVseSBjb3BpZXMgYm90aCBpdHMgY2FyIGFuZCBpdHMg Y2RyLgpDb250cmFzdCB0byBgY29weS1zZXF1ZW5jZScsIHdoaWNoIGNvcGllcyBvbmx5IGFsb25n IHRoZSBjZHJzLiAgV2l0aCBzZWNvbmQKYXJndW1lbnQgVkVDUCwgdGhpcyBjb3BpZXMgdmVjdG9y cyBhcyB3ZWxsIGFzIGNvbnNlcy4KCihmbiBUUkVFICZvcHRpb25hbCBWRUNQKR8KKGRlZmFsaWFz ICdjb3B5LXRyZWUgI1s1MTMgIgE6XDIwM0cAXDMwMAI6XDIwMzEAAkADQDpcMjA0HgACXDIwMyUA XDMwMQRAIVwyMDMlAFwzMDIEQARcIlwyNjIBXDIxMQJCXDI2NlwyMDICQVwyNjIDXDIwMgYAXDIx MVwyMzcCXDIwM0QAXDMwMQQhXDIwM0QAXDMwMgQEXCJcMjAyRQADXDI0NFwyMDdcMjExXDIwM3EA XDMwMQIhXDIwM3EAXDMwMwIhXDIxMVwyNjIDR1wyMTFTXDIxMVwyNjICXDMwNFlcMjAzbwACAVwz MDIFBEgFXCJJXDIxMFwyMDJYAAJcMjA3AVwyMDciIFtuaWwgdmVjdG9ycCBjb3B5LXRyZWUgY29w eS1zZXF1ZW5jZSAwXSA4ICgjJCAuIDMwMTc3KV0pI0A1MTEgRmluZCBvYmplY3QgS0VZIGluIGEg cHNldWRvLWFsaXN0IEFMSVNULgpBTElTVCBpcyBhIGxpc3Qgb2YgY29uc2VzIG9yIG9iamVjdHMu ICBFYWNoIGVsZW1lbnQKIChvciB0aGUgZWxlbWVudCdzIGNhciwgaWYgaXQgaXMgYSBjb25zKSBp cyBjb21wYXJlZCB3aXRoIEtFWSBieQogY2FsbGluZyBURVNULCB3aXRoIHR3byBhcmd1bWVudHM6 IChpKSB0aGUgZWxlbWVudCBvciBpdHMgY2FyLAogYW5kIChpaSkgS0VZLgpJZiB0aGF0IGlzIG5v bi1uaWwsIHRoZSBlbGVtZW50IG1hdGNoZXM7IHRoZW4gYGFzc29jLWRlZmF1bHQnCiByZXR1cm5z IHRoZSBlbGVtZW50J3MgY2RyLCBpZiBpdCBpcyBhIGNvbnMsIG9yIERFRkFVTFQgaWYgdGhlCiBl bGVtZW50IGlzIG5vdCBhIGNvbnMuCgpJZiBubyBlbGVtZW50IG1hdGNoZXMsIHRoZSB2YWx1ZSBp cyBuaWwuCklmIFRFU1QgaXMgb21pdHRlZCBvciBuaWwsIGBlcXVhbCcgaXMgdXNlZC4KCihmbiBL RVkgQUxJU1QgJm9wdGlvbmFsIFRFU1QgREVGQVVMVCkfCihkZWZhbGlhcyAnYXNzb2MtZGVmYXVs dCAjWzEwMjYgIlwzMDADXDMwMAFcMjAzOwACXDIwNDsAAUAFXDIwNhIAXDMwMQE6XDIwMxwAAUBc MjAyHQABBglcIlwyMDMzAFwzMDJcMjYyBFwyMTE6XDIwMzAAXDIxMUFcMjAyMQAEXDI2MgJcMjEw AUFcMjYyAlwyMDIDAFwyMDciIFtuaWwgZXF1YWwgdF0gMTEgKCMkIC4gMzA3NTkpXSkjQDI1OCBM aWtlIGBtZW1iZXInLCBidXQgaWdub3JlIGRpZmZlcmVuY2VzIGluIGNhc2UgYW5kIHRleHQgcmVw cmVzZW50YXRpb24uCkVMVCBtdXN0IGJlIGEgc3RyaW5nLiAgVXBwZXItY2FzZSBhbmQgbG93ZXIt Y2FzZSBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGVxdWFsLgpVbmlieXRlIHN0cmluZ3MgYXJlIGNv bnZlcnRlZCB0byBtdWx0aWJ5dGUgZm9yIGNvbXBhcmlzb24uCk5vbi1zdHJpbmdzIGluIExJU1Qg YXJlIGlnbm9yZWQuCgooZm4gRUxUIExJU1QpHwooZGVmYWxpYXMgJ21lbWJlci1pZ25vcmUtY2Fz ZSAjWzUxNCAiXDIxMVwyMDMlAFwyMTFAO1wyMDMeAAEBQFwzMDACXDMwMVwzMDIEXDMwMVwzMDJc MzAzJgdcMzAzPVwyNjZcMjAyXDIwNCUAXDIxMUFcMjYyAVwyMDIAAFwyMDciIFtjb21wYXJlLXN0 cmluZ3MgMCBuaWwgdF0gMTIgKCMkIC4gMzE0NjMpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAy XDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBtZW1iZXItaWdub3JlLWNhc2Ugc2lkZS1lZmZl Y3QtZnJlZSB0XSA0KSNAMjA1IERlbGV0ZSBmcm9tIEFMSVNUIGFsbCBlbGVtZW50cyB3aG9zZSBj YXIgaXMgS0VZLgpDb21wYXJlIGtleXMgd2l0aCBURVNULiAgRGVmYXVsdHMgdG8gYGVxdWFsJy4K UmV0dXJuIHRoZSBtb2RpZmllZCBhbGlzdC4KRWxlbWVudHMgb2YgQUxJU1QgdGhhdCBhcmUgbm90 IGNvbnNlcyBhcmUgaWdub3JlZC4KCihmbiBLRVkgQUxJU1QgJm9wdGlvbmFsIFRFU1QpHwooZGVm YWxpYXMgJ2Fzc29jLWRlbGV0ZS1hbGwgI1s3NzAgIlwyMTFcMjA0BwBcMzAwXDI2MgEBQDpcMjAz HQBcMjExAkBABFwiXDIwMx0AAUFcMjYyAlwyMDIHAAFcMzAxAUFcMjExXDI2MgJcMjAzRQBcMjEx QDpcMjAzPwACAUBABgZcIlwyMDM/AAEBQVwyNDFcMjEwXDIwMh8AXDIxMVwyNjICXDIwMh8AXDI2 NgIBXDIwNyIgW2VxdWFsIG5pbF0gOCAoIyQgLiAzMTk5NildKSNAMTUyIERlbGV0ZSBmcm9tIEFM SVNUIGFsbCBlbGVtZW50cyB3aG9zZSBjYXIgaXMgYGVxJyB0byBLRVkuClJldHVybiB0aGUgbW9k aWZpZWQgYWxpc3QuCkVsZW1lbnRzIG9mIEFMSVNUIHRoYXQgYXJlIG5vdCBjb25zZXMgYXJlIGln bm9yZWQuCgooZm4gS0VZIEFMSVNUKR8KKGRlZmFsaWFzICdhc3NxLWRlbGV0ZS1hbGwgI1s1MTQg IlwzMDACAlwzMDEjXDIwNyIgW2Fzc29jLWRlbGV0ZS1hbGwgZXFdIDYgKCMkIC4gMzI0MTkpXSkj QDE1NiBEZWxldGUgZnJvbSBBTElTVCBhbGwgZWxlbWVudHMgd2hvc2UgY2RyIGlzIGBlcScgdG8g VkFMVUUuClJldHVybiB0aGUgbW9kaWZpZWQgYWxpc3QuCkVsZW1lbnRzIG9mIEFMSVNUIHRoYXQg YXJlIG5vdCBjb25zZXMgYXJlIGlnbm9yZWQuCgooZm4gVkFMVUUgQUxJU1QpHwooZGVmYWxpYXMg J3Jhc3NxLWRlbGV0ZS1hbGwgI1s1MTQgIlwyMTFAOlwyMDMVAFwyMTFAQQI9XDIwMxUAXDIxMUFc MjYyAVwyMDIAAFwyMTFcMzAwAUFcMjExXDI2MgJcMjAzOwBcMjExQDpcMjAzNQBcMjExQEEEPVwy MDM1AAEBQVwyNDFcMjEwXDIwMhcAXDIxMVwyNjICXDIwMhcAXDI2NgJcMjA3IiBbbmlsXSA2ICgj JCAuIDMyNjY2KV0pI0A5NjUgRmluZCB0aGUgZmlyc3QgZWxlbWVudCBvZiBBTElTVCB3aG9zZSBg Y2FyJyBlcXVhbHMgS0VZIGFuZCByZXR1cm4gaXRzIGBjZHInLgpJZiBLRVkgaXMgbm90IGZvdW5k IGluIEFMSVNULCByZXR1cm4gREVGQVVMVC4KRXF1YWxpdHkgd2l0aCBLRVkgaXMgdGVzdGVkIGJ5 IFRFU1RGTiwgZGVmYXVsdGluZyB0byBgZXEnLgoKWW91IGNhbiB1c2UgYGFsaXN0LWdldCcgaW4g InBsYWNlIGV4cHJlc3Npb25zIjsgaS5lLiwgYXMgYQpnZW5lcmFsaXplZCB2YXJpYWJsZS4gIERv aW5nIHRoaXMgd2lsbCBtb2RpZnkgYW4gZXhpc3RpbmcKYXNzb2NpYXRpb24gKG1vcmUgcHJlY2lz ZWx5LCB0aGUgZmlyc3Qgb25lIGlmIG11bHRpcGxlIGV4aXN0KSwgb3IKYWRkIGEgbmV3IGVsZW1l bnQgdG8gdGhlIGJlZ2lubmluZyBvZiBBTElTVCwgZGVzdHJ1Y3RpdmVseQptb2RpZnlpbmcgdGhl IGxpc3Qgc3RvcmVkIGluIEFMSVNULgoKRXhhbXBsZToKCiAgIChzZXRxIGZvbyBcPScoKGEgLiAw KSkpCiAgIChzZXRmIChhbGlzdC1nZXQgXD0nYSBmb28pIDEKICAgICAgICAgKGFsaXN0LWdldCBc PSdiIGZvbykgMikKCiAgIGZvbyA9PiAoKGIgLiAyKSAoYSAuIDEpKQoKCldoZW4gdXNpbmcgaXQg dG8gc2V0IGEgdmFsdWUsIG9wdGlvbmFsIGFyZ3VtZW50IFJFTU9WRSBub24tbmlsCm1lYW5zIHRv IHJlbW92ZSBLRVkgZnJvbSBBTElTVCBpZiB0aGUgbmV3IHZhbHVlIGlzIGBlcWwnIHRvCkRFRkFV TFQgKG1vcmUgcHJlY2lzZWx5IHRoZSBmaXJzdCBmb3VuZCBhc3NvY2lhdGlvbiB3aWxsIGJlCmRl bGV0ZWQgZnJvbSB0aGUgYWxpc3QpLgoKRXhhbXBsZToKCiAgKHNldHEgZm9vIFw9JygoYSAuIDEp IChiIC4gMikpKQogIChzZXRmIChhbGlzdC1nZXQgXD0nYiBmb28gbmlsIFw9J3JlbW92ZSkgbmls KQoKICBmb28gPT4gKChhIC4gMSkpCgooZm4gS0VZIEFMSVNUICZvcHRpb25hbCBERUZBVUxUIFJF TU9WRSBURVNURk4pHwooZGVmYWxpYXMgJ2FsaXN0LWdldCAjWzEyODIgIlwyMTFcMjA0XG4ABARc MjM2XDIwMg8AXDMwMAUFAyNcMjExXDIwMxYAXDIxMUFcMjA3A1wyMDciIFthc3NvY10gOSAoIyQg LiAzMzAyMSldKSNAMjQyIFJldHVybiBhIGNvcHkgb2YgU0VRIHdpdGggYWxsIG9jY3VycmVuY2Vz IG9mIEVMVCByZW1vdmVkLgpTRVEgbXVzdCBiZSBhIGxpc3QsIHZlY3Rvciwgb3Igc3RyaW5nLiAg VGhlIGNvbXBhcmlzb24gaXMgZG9uZSB3aXRoIGBlcXVhbCcuCkNvbnRyYXJ5IHRvIGBkZWxldGUn LCB0aGlzIGRvZXMgbm90IHVzZSBzaWRlLWVmZmVjdHMsIGFuZCB0aGUgYXJndW1lbnQKU0VRIGlz IG5vdCBtb2RpZmllZC4KCihmbiBFTFQgU0VRKR8KKGRlZmFsaWFzICdyZW1vdmUgI1s1MTQgIlwy MTE8XDIwNFxuAFwzMDACAlwiXDIwN1wzMDACXDMwMQMhXCJcMjA3IiBbZGVsZXRlIGNvcHktc2Vx dWVuY2VdIDYgKCMkIC4gMzQxMDIpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAw XDIwNyIgW2Z1bmN0aW9uLXB1dCByZW1vdmUgc2lkZS1lZmZlY3QtZnJlZSB0XSA0KSNAMTkxIFJl dHVybiBMSVNUIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIEVMVCByZW1vdmVkLgpUaGUgY29tcGFy aXNvbiBpcyBkb25lIHdpdGggYGVxJy4gIENvbnRyYXJ5IHRvIGBkZWxxJywgdGhpcyBkb2VzIG5v dCB1c2UKc2lkZS1lZmZlY3RzLCBhbmQgdGhlIGFyZ3VtZW50IExJU1QgaXMgbm90IG1vZGlmaWVk LgoKKGZuIEVMVCBMSVNUKR8KKGRlZmFsaWFzICdyZW1xICNbNTE0ICIBAUA9XDIwMw8AXDIxMUFc MjExXDI2MgJcMjA0AAABAT5cMjAzHABcMzAwAlwzMDEDIVwiXDIwN1wyMDciIFtkZWxxIGNvcHkt c2VxdWVuY2VdIDYgKCMkIC4gMzQ1NDApXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNc MzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCByZW1xIHNpZGUtZWZmZWN0LWZyZWUgdF0gNCkjQDQxMiBD b252ZXJ0IEtFWVMgdG8gdGhlIGludGVybmFsIEVtYWNzIGtleSByZXByZXNlbnRhdGlvbi4KS0VZ UyBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBjb21tYW5kcyBz dWNoCmFzIFxbZGVzY3JpYmUta2V5XSAoYGRlc2NyaWJlLWtleScpLgoKVGhpcyBpcyB0aGUgc2Ft ZSBmb3JtYXQgdXNlZCBmb3Igc2F2aW5nIGtleWJvYXJkIG1hY3JvcyAoc2VlCmBlZG1hY3JvLW1v ZGUnKS4KCkhlcmUncyBzb21lIGV4YW1wbGUga2V5IHNlcXVlbmNlczoKCiAgICAiZiIKICAgICJD LWMgQy1jIgogICAgIkgtPGxlZnQ+IgogICAgIk0tUkVUIgogICAgIkMtTS08cmV0dXJuPiIKCkZv ciBhbiBhcHByb3hpbWF0ZSBpbnZlcnNlIG9mIHRoaXMsIHNlZSBga2V5LWRlc2NyaXB0aW9uJy4K CihmbiBLRVlTKR8KKGRlZmFsaWFzICdrYmQgI1syNTcgIlwzMDABIVwyMTFHXDMwMVlcMjAzSgBc MjExXDMwMkhcMzAzPVwyMDNKAFwyMTFcMzA0SFwzMDU9XDIwM0oAXDIxMQFHXDMwNlpIXDMwMz1c MjAzSgBcMjExAUdTSFwzMDc9XDIwM0oAXDMxMFwzMTFcMzEyA1wzMTNcIlwyMTFBQVwyNjIBXDIx MVwyMzdcMjYyAVwyMTFBQVwyNjIBXDIxMVwyMzdcMjYyAVwiXDI2MgFcMzEzXDMxNFwzMTUDXCI+ XDIwNFoAXDMxNFwzMTYCXCJcMjYwAVwyMDdcMjA3IiBba2V5LXBhcnNlIDQgMCAyNCAxIDQwIDIg NDEgYXBwbHkgdmVjdG9yIGFwcGVuZCBuaWwgbWFwY2FyICNbMjU3ICJcMjExXDI0N1wyMDUOAFwz MDABWFwyMDUOAFwyMTFcMzAxWFwyMDciIFswIDEyN10gMyAiXG5cbihmbiBDSCkiXSBpZGVudGl0 eV0gNyAoIyQgLiAzNDk0MCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMzAx XDMwNFwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQga2JkIHB1cmUgdCBzaWRlLWVmZmVjdC1m cmVlXSA1KSNANTAgQmVlcCB0byB0ZWxsIHRoZSB1c2VyIHRoaXMgYmluZGluZyBpcyB1bmRlZmlu ZWQuHwooZGVmYWxpYXMgJ3VuZGVmaW5lZCAjWzAgIlwzMDQgXDIxMAhcMjAzEgBcMzA1XDMwNlwz MDdcMzEwICFcIlwyMTBcMjAyGgBcMzExXDMwNlwzMDdcMzEwICFcIlwyMTBcMzEyIFwyMTBcMzEz XDMxNAkhPlwyMDUmAFxuXDIxMRNcMjA3IiBbZGVmaW5pbmcta2JkLW1hY3JvIGxhc3QtY29tbWFu ZC1ldmVudCBjdXJyZW50LXByZWZpeC1hcmcgcHJlZml4LWFyZyBkaW5nIGVycm9yICIlcyBpcyB1 bmRlZmluZWQiIGtleS1kZXNjcmlwdGlvbiB0aGlzLXNpbmdsZS1jb21tYW5kLWtleXMgbWVzc2Fn ZSBmb3JjZS1tb2RlLWxpbmUtdXBkYXRlIGRvd24gZXZlbnQtbW9kaWZpZXJzXSA0ICgjJCAuIDM1 ODY1KSBuaWxdKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB1bmRlZmluZWQgY29tcGxldGlvbi1wcmVkaWNhdGUgaWdub3Jl IHB1dCBzdXBwcmVzcy1rZXltYXAgdF0gNSkjQDI0NyBNYWtlIE1BUCBvdmVycmlkZSBhbGwgbm9y bWFsbHkgc2VsZi1pbnNlcnRpbmcga2V5cyB0byBiZSB1bmRlZmluZWQuCk5vcm1hbGx5LCBhcyBh biBleGNlcHRpb24sIGRpZ2l0cyBhbmQgbWludXMtc2lnbiBhcmUgc2V0IHRvIG1ha2UgcHJlZml4 IGFyZ3MsCmJ1dCBvcHRpb25hbCBzZWNvbmQgYXJnIE5PRElHSVRTIG5vbi1uaWwgdHJlYXRzIHRo ZW0gbGlrZSBvdGhlciBjaGFycy4KCihmbiBNQVAgJm9wdGlvbmFsIE5PRElHSVRTKR8KKGRlZmFs aWFzICdzdXBwcmVzcy1rZXltYXAgI1s1MTMgIlwzMDACXDMwMVwzMDIjXDIxMFwyMTFcMjA2KwBc MzAzXDMwMANcMzA0XDMwNSNcMjEwXDMwNlwyNjIBXDIxMVwzMDdYXDIwNSkAXDMwMANcMzEwAyFc MzExI1wyMTBcMjExVFwyNjIBXDIwMhQAXDI2MgFcMjA3IiBbZGVmaW5lLWtleSBbcmVtYXAgc2Vs Zi1pbnNlcnQtY29tbWFuZF0gdW5kZWZpbmVkIG5pbCAiLSIgbmVnYXRpdmUtYXJndW1lbnQgNDgg NTcgY2hhci10by1zdHJpbmcgZGlnaXQtYXJndW1lbnRdIDcgKCMkIC4gMzYzOTgpXSkjQDU1NyBD b25zdHJ1Y3QgYSBuZXcga2V5bWFwIGNvbXBvc2VkIG9mIE1BUFMgYW5kIGluaGVyaXRpbmcgZnJv bSBQQVJFTlQuCldoZW4gbG9va2luZyB1cCBhIGtleSBpbiB0aGUgcmV0dXJuZWQgbWFwLCB0aGUg a2V5IGlzIGxvb2tlZCBpbiBlYWNoCmtleW1hcCBvZiBNQVBTIGluIHR1cm4gdW50aWwgYSBiaW5k aW5nIGlzIGZvdW5kLgpJZiBubyBiaW5kaW5nIGlzIGZvdW5kIGluIE1BUFMsIHRoZSBsb29rdXAg Y29udGludWVzIGluIFBBUkVOVCwgaWYgbm9uLW5pbC4KQXMgYWx3YXlzIHdpdGgga2V5bWFwIGlu aGVyaXRhbmNlLCBhIG5pbCBiaW5kaW5nIGluIE1BUFMgb3ZlcnJpZGVzCmFueSBjb3JyZXNwb25k aW5nIGJpbmRpbmcgaW4gUEFSRU5ULCBidXQgaXQgZG9lcyBub3Qgb3ZlcnJpZGUgY29ycmVzcG9u ZGluZwpiaW5kaW5ncyBpbiBvdGhlciBrZXltYXBzIG9mIE1BUFMuCk1BUFMgY2FuIGJlIGEgbGlz dCBvZiBrZXltYXBzIG9yIGEgc2luZ2xlIGtleW1hcC4KUEFSRU5UIGlmIG5vbi1uaWwgc2hvdWxk IGJlIGEga2V5bWFwLgoKKGZuIE1BUFMgJm9wdGlvbmFsIFBBUkVOVCkfCihkZWZhbGlhcyAnbWFr ZS1jb21wb3NlZC1rZXltYXAgI1s1MTMgIlwzMDBcMzAxXDMwMgQhXDIwMw0AA0NcMjAyDgADA1wi QlwyMDciIFtrZXltYXAgYXBwZW5kIGtleW1hcHBdIDYgKCMkIC4gMzY5MzUpXSkjQDc4NCBBZGQg YmluZGluZyBpbiBLRVlNQVAgZm9yIEtFWSA9PiBERUZJTklUSU9OLCByaWdodCBhZnRlciBBRlRF UidzIGJpbmRpbmcuClRoaXMgaXMgYSBsZWdhY3kgZnVuY3Rpb247IHNlZSBga2V5bWFwLXNldC1h ZnRlcicgZm9yIHRoZQpyZWNvbW1lbmRlZCBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZC4KClRoaXMg aXMgbGlrZSBgZGVmaW5lLWtleScgZXhjZXB0IHRoYXQgdGhlIGJpbmRpbmcgZm9yIEtFWSBpcyBw bGFjZWQKanVzdCBhZnRlciB0aGUgYmluZGluZyBmb3IgdGhlIGV2ZW50IEFGVEVSLCBpbnN0ZWFk IG9mIGF0IHRoZSBiZWdpbm5pbmcKb2YgdGhlIG1hcC4gIE5vdGUgdGhhdCBBRlRFUiBtdXN0IGJl IGFuIGV2ZW50IHR5cGUgKGxpa2UgS0VZKSwgTk9UIGEgY29tbWFuZAoobGlrZSBERUZJTklUSU9O KS4KCklmIEFGVEVSIGlzIHQgb3Igb21pdHRlZCwgdGhlIG5ldyBiaW5kaW5nIGdvZXMgYXQgdGhl IGVuZCBvZiB0aGUga2V5bWFwLgpBRlRFUiBzaG91bGQgYmUgYSBzaW5nbGUgZXZlbnQgdHlwZS0t YSBzeW1ib2wgb3IgYSBjaGFyYWN0ZXIsIG5vdCBhIHNlcXVlbmNlLgoKQmluZGluZ3MgYXJlIGFs d2F5cyBhZGRlZCBiZWZvcmUgYW55IGluaGVyaXRlZCBtYXAuCgpUaGUgb3JkZXIgb2YgYmluZGlu Z3MgaW4gYSBrZXltYXAgbWF0dGVycyBvbmx5IHdoZW4gaXQgaXMgdXNlZCBhcwphIG1lbnUsIHNv IHRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWZ1bCBmb3Igbm9uLW1lbnUga2V5bWFwcy4KCihmbiBL RVlNQVAgS0VZIERFRklOSVRJT04gJm9wdGlvbmFsIEFGVEVSKR8KKGRlZmFsaWFzICdkZWZpbmUt a2V5LWFmdGVyICNbMTAyNyAiXDIxMVwyMDQHAFwzMDBcMjYyAVwzMDEEIVwyMDQVAFwzMDJcMzAz XDMwMQYGRFwiXDIxMAJHXDMwNFhcMjAzXCIAAlwzMDVIXDIwMjYAXDMwNgRcMzA3XDMxMFwzMTFc MzEyXDMxMwYJXCIhXCJcIlwyNjIEAlwyMTFHU0hcMjYyAwNcMzE0XDIxMQE/XDIwNVwyMzYAAlwy MDVcMjM2AAJBQFwyNDIGBj1cMjAzVAACXDIxMUFBXDI0MVwyMTBcMzAxA0AhXDIwM18AAkBcMjYy AwJAXDI0MgQ9XDIwM20AA1wzMDA9XDIwM3oAAkFAXDMxNT1cMjA0egACQVwyMDRcMjI3AAJBQFwz MTU9XDIwM1wyMDUAXDMwMFwyNjICXDIxMVwyMDRcMjI0AAIGBgYGQgRBQlwyNDFcMjEwXDMwMFwy NjIBAkFcMjYyA1wyMDI7AFwyMDciIFt0IGtleW1hcHAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1l bnQgMSAwIGxvb2t1cC1rZXkgYXBwbHkgdmVjdG9yIGJ1dGxhc3QgbWFwY2FyIGlkZW50aXR5IG5p bCBrZXltYXBdIDEyICgjJCAuIDM3NjE2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgZGVmaW5lLWtleS1hZnRlciBsaXNwLWluZGVudC1mdW5j dGlvbiBkZWZ1bl0gNCkjQDU4NiBEZWZpbmUgQ09NTUFORCBhcyBhIHByZWZpeCBjb21tYW5kLiAg Q09NTUFORCBzaG91bGQgYmUgYSBzeW1ib2wuCkEgbmV3IHNwYXJzZSBrZXltYXAgaXMgc3RvcmVk IGFzIENPTU1BTkQncyBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBpdHMKdmFsdWUuClRoaXMgcHJl cGFyZXMgQ09NTUFORCBmb3IgdXNlIGFzIGEgcHJlZml4IGtleSdzIGJpbmRpbmcuCklmIGEgc2Vj b25kIG9wdGlvbmFsIGFyZ3VtZW50IE1BUFZBUiBpcyBnaXZlbiwgaXQgc2hvdWxkIGJlIGEgc3lt Ym9sLgpUaGUgbWFwIGlzIHRoZW4gc3RvcmVkIGFzIE1BUFZBUidzIHZhbHVlIGluc3RlYWQgb2Yg YXMgQ09NTUFORCdzCnZhbHVlOyBidXQgQ09NTUFORCBpcyBzdGlsbCBkZWZpbmVkIGFzIGEgZnVu Y3Rpb24uClRoZSB0aGlyZCBvcHRpb25hbCBhcmd1bWVudCBOQU1FLCBpZiBnaXZlbiwgc3VwcGxp ZXMgYSBtZW51IG5hbWUKc3RyaW5nIGZvciB0aGUgbWFwLiAgVGhpcyBpcyByZXF1aXJlZCB0byB1 c2UgdGhlIGtleW1hcCBhcyBhIG1lbnUuClRoaXMgZnVuY3Rpb24gcmV0dXJucyBDT01NQU5ELgoK KGZuIENPTU1BTkQgJm9wdGlvbmFsIE1BUFZBUiBOQU1FKR8KKGRlZmFsaWFzICdkZWZpbmUtcHJl Zml4LWNvbW1hbmQgI1s3NjkgIlwzMDABIQMBTVwyMTACXDIwNlxmAAMBTFwyMTADXDIwNyIgW21h a2Utc3BhcnNlLWtleW1hcF0gNiAoIyQgLiAzOTAwOCldKSNAMTE1IEltcGxlbWVudCBgbWFwLWtl eW1hcCcgd2l0aCBzb3J0aW5nLgpEb24ndCBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IGlzIGZvciBp bnRlcm5hbCB1c2Ugb25seS4KCihmbiBGVU5DVElPTiBLRVlNQVApHwooZGVmYWxpYXMgJ21hcC1r ZXltYXAtc29ydGVkICNbNTE0ICJcMzAwQ1wzMDFcMzAyXDMwMwNcIgNcIlwyMTBcMjExXDMwNAJc MjQyXDMwNVwiXDI0MFwyMTBcMjExXDI0MlwyMTFcMjA1KABcMjExQAQBQAJBXCJcMjEwAUFcMjY2 XDIwMlwyMDIUAFwyMDciIFtuaWwgbWFwLWtleW1hcCBtYWtlLWNsb3N1cmUgI1s1MTQgIlwzMDAC AkJcMzAwXDI0MkJcMjQwXDIwNyIgW1YwXSA1ICJcblxuKGZuIEEgQikiXSBzb3J0ICNbNTE0ICIB QFwyNjICXDIxMUBcMjYyAQFcMjUwXDIwMxgAXDIxMVwyNTBcMjAzFgABAVdcMjA3XDMwMFwyMDdc MjExXDI1MFwyMDMfAFwzMDBcMjA3AQFcMjMxXDIwNyIgW3RdIDQgIlxuXG4oZm4gQSBCKSJdXSA4 ICgjJCAuIDM5NzEyKV0pI0A1MSBSZXR1cm4gdGhlIGJpbmRpbmcgcGFydCBvZiBhIG1lbnUtaXRl bS4KCihmbiBWQUwpHwooZGVmYWxpYXMgJ2tleW1hcC0tbWVudS1pdGVtLWJpbmRpbmcgI1syNTcg IlwyMTE6XDIwNAYAXDIwN1wyMTFAXDMwMD1cMjAzIQBcMzAxAThcMzAyAlwyMzNcMzAzAVwzMDRc IlwyMTFcMjAzHwBcMjExAyFcMjA3AlwyMDdcMjExQTpcMjAzMgBcMjExQUA7XDIwMzIAXDIxMUFB XDIwN1wyMTFAO1wyMDM7AFwyMTFBXDIwN1wyMDciIFttZW51LWl0ZW0gMiAzIHBsaXN0LWdldCA6 ZmlsdGVyXSA2ICgjJCAuIDQwMjA1KV0pI0A4OSBCdWlsZCBhIG1lbnUtaXRlbSBsaWtlIElURU0g YnV0IHdpdGggaXRzIGJpbmRpbmcgY2hhbmdlZCB0byBCSU5ESU5HLgoKKGZuIElURU0gQklORElO RykfCihkZWZhbGlhcyAna2V5bWFwLS1tZW51LWl0ZW0td2l0aC1iaW5kaW5nICNbNTE0ICIBOlwy MDQGAFwyMDcBQFwzMDA9XDIwMy0AXDMwMQIhXDI2MgIBQUFcMjExAlwyNDBcMjEwXDMwMgFBXDMw M1wiXDIwMyoAXDIxMVwzMDQCQVwzMDNcMzA1I1wyNDFcMjEwXDIxMAFcMjA3AUE6XDIwM0MAAUFA O1wyMDNDAAFAAkFAAkJCXDIwNwFAAUJcMjA3IiBbbWVudS1pdGVtIGNvcHktc2VxdWVuY2UgcGxp c3QtZ2V0IDpmaWx0ZXIgcGxpc3QtcHV0IG5pbF0gOCAoIyQgLiA0MDQ5OSldKSNANDcgTWVyZ2Ug YmluZGluZ3MgVkFMMSBhbmQgVkFMMi4KCihmbiBWQUwxIFZBTDIpHwooZGVmYWxpYXMgJ2tleW1h cC0tbWVyZ2UtYmluZGluZ3MgI1s1MTQgIlwzMDACIVwzMDACIVwzMDECIVwyMDMSAFwzMDEBIVwy MDQUAANcMjA3XDMwMgICRVwzMDEFIVwyMDMpAFwzMDEEIT9cMjA1KgADXDIwMioABFwzMDMBA1wi XDIwNyIgW2tleW1hcC0tbWVudS1pdGVtLWJpbmRpbmcga2V5bWFwcCBrZXltYXAga2V5bWFwLS1t ZW51LWl0ZW0td2l0aC1iaW5kaW5nXSA5ICgjJCAuIDQwODYzKV0pI0AyNjkgUmV0dXJuIGEgc2lt cGxlciBlcXVpdmFsZW50IGtleW1hcC4KVGhpcyByZXNvbHZlcyBpbmhlcml0YW5jZSBhbmQgcmVk ZWZpbml0aW9ucy4gIFRoZSByZXR1cm5lZCBrZXltYXAKc2hvdWxkIGJlaGF2ZSBpZGVudGljYWxs eSB0byBhIGNvcHkgb2YgS0VZTUFQIHcuci50IGBsb29rdXAta2V5JwphbmQgdXNlIGluIGFjdGl2 ZSBrZXltYXBzIGFuZCBtZW51cy4KU3Via2V5bWFwcyBtYXkgYmUgbW9kaWZpZWQgYnV0IGFyZSBu b3QgY2Fub25pY2FsaXplZC4KCihmbiBNQVApHwooZGVmYWxpYXMgJ2tleW1hcC1jYW5vbmljYWxp emUgI1syNTcgIlwzMDBDXDMwMENcMzAxAyFcMzAyBCFcMjAzGwBcMzAzXDMwNFwzMDUEBgYjBVwi XDI2MgRcMjAyBwABXDI0MlwyMDMkAFwzMDZcMjAyJQBcMzA3ASFcMjYyBAFcMjQyXDIxMVwyMDND AFwyMTFAXDMxMAYGXDMxMQNAIQNBI1wyMTABQVwyNjZcMjAyXDIwMisAXDIxMAJcMjQyA1wzMDBc MjQwXDIxMFwyMTFcMjAzXDIwMQBcMjExQFwyMTFAXDIxMQYGXDI0MlwyMzYGBgFcMjA0YQADXDIw MnMABgdcMzEyAwZcblwyNDJcIlwyNDBcMjEwAlwzMTMFQQRBXCJCBghcMjQyQlwyNDBcMjY2AwFB XDI2NlwyMDJcMjAySgBcMjEwAwNcMjQyXDI0NFwyMDciIFtuaWwga2V5bWFwLXByb21wdCBrZXlt YXBwIG1hcC1rZXltYXAgbWFrZS1jbG9zdXJlICNbNTE0ICIBOlwyMDMrAAFAAkFTVVwyMDNcIgBc MzAxAkACQlwzMDFcMjQyQlwyNDBcMjEwXDMwMQJBAkJcMzAxXDI0MkJcMjQwXDIwN1wzMDACAkJc MzAwXDI0MkJcMjQwXDIwN1wzMDECAkJcMzAxXDI0MkJcMjQwXDIwNyIgW1YwIFYxXSA1ICJcblxu KGZuIEtFWSBJVEVNKSJdIG1ha2Uta2V5bWFwIG1ha2Utc3BhcnNlLWtleW1hcCBkZWZpbmUta2V5 IHZlY3RvciBkZWxxIGtleW1hcC0tbWVyZ2UtYmluZGluZ3NdIDEzICgjJCAuIDQxMTQyKV0pCihw dXQgJ2tleWJvYXJkLXRyYW5zbGF0ZS10YWJsZSAnY2hhci10YWJsZS1leHRyYS1zbG90cyAwKSNA MjYzIFRyYW5zbGF0ZSBjaGFyYWN0ZXIgRlJPTSB0byBUTyBvbiB0aGUgY3VycmVudCB0ZXJtaW5h bC4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXktdHJhbnNsYXRlJyBmb3IgdGhl CnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKVGhpcyBmdW5jdGlvbiBjcmVh dGVzIGEgYGtleWJvYXJkLXRyYW5zbGF0ZS10YWJsZScgaWYgbmVjZXNzYXJ5CmFuZCB0aGVuIG1v ZGlmaWVzIG9uZSBlbnRyeSBpbiBpdC4KCihmbiBGUk9NIFRPKR8KKGRlZmFsaWFzICdrZXlib2Fy ZC10cmFuc2xhdGUgI1s1MTQgIlwzMDEIIVwyMDQLAFwzMDJcMzAwXDMwM1wiEAgCAklcMjA3IiBb a2V5Ym9hcmQtdHJhbnNsYXRlLXRhYmxlIGNoYXItdGFibGUtcCBtYWtlLWNoYXItdGFibGUgbmls XSA1ICgjJCAuIDQyMTI3KV0pI0A2MjAgR2l2ZSBLRVkgYSBnbG9iYWwgYmluZGluZyBhcyBDT01N QU5ELgpUaGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1nbG9iYWwtc2V0JyBm b3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKQ09NTUFORCBpcyB0 aGUgY29tbWFuZCBkZWZpbml0aW9uIHRvIHVzZTsgdXN1YWxseSBpdCBpcwphIHN5bWJvbCBuYW1p bmcgYW4gaW50ZXJhY3RpdmVseS1jYWxsYWJsZSBmdW5jdGlvbi4KS0VZIGlzIGEga2V5IHNlcXVl bmNlOyBub25pbnRlcmFjdGl2ZWx5LCBpdCBpcyBhIHN0cmluZyBvciB2ZWN0b3IKb2YgY2hhcmFj dGVycyBvciBldmVudCB0eXBlcywgYW5kIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHdpdGggY29kZXMK YWJvdmUgMTI3IChzdWNoIGFzIElTTyBMYXRpbi0xKSBjYW4gYmUgaW5jbHVkZWQgaWYgeW91IHVz ZSBhIHZlY3Rvci4KCk5vdGUgdGhhdCBpZiBLRVkgaGFzIGEgbG9jYWwgYmluZGluZyBpbiB0aGUg Y3VycmVudCBidWZmZXIsCnRoYXQgbG9jYWwgYmluZGluZyB3aWxsIGNvbnRpbnVlIHRvIHNoYWRv dyBhbnkgZ2xvYmFsIGJpbmRpbmcKdGhhdCB5b3UgbWFrZSB3aXRoIHRoaXMgZnVuY3Rpb24uCgoo Zm4gS0VZIENPTU1BTkQpHwooZGVmYWxpYXMgJ2dsb2JhbC1zZXQta2V5ICNbNTE0ICJcMzAwAiFc MjA0EgABO1wyMDQSAFwzMDFcMzAyXDMwMwREXCJcMjEwXDMwNFwzMDUgAwMjXDIwNyIgW3ZlY3Rv cnAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1lbnQgYXJyYXlwIGRlZmluZS1rZXkgY3VycmVudC1n bG9iYWwtbWFwXSA2ICgjJCAuIDQyNTQ2KSAoYnl0ZS1jb2RlICJcMzAxGFwzMDJcMzAzXDMwMVwz MDQjXDIxMVwzMDVcMzA2XDMwN1wzMTAFIVwiISlEXDIwNyIgW21lbnUtcHJvbXB0aW5nIG5pbCBy ZWFkLWtleS1zZXF1ZW5jZSAiU2V0IGtleSBnbG9iYWxseTogIiB0IHJlYWQtY29tbWFuZCBmb3Jt YXQgIlNldCBrZXkgJXMgdG8gY29tbWFuZDogIiBrZXktZGVzY3JpcHRpb25dIDcpXSkjQDU5MSBH aXZlIEtFWSBhIGxvY2FsIGJpbmRpbmcgYXMgQ09NTUFORC4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5j dGlvbjsgc2VlIGBrZXltYXAtbG9jYWwtc2V0JyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9u IHRvIHVzZSBpbnN0ZWFkLgoKQ09NTUFORCBpcyB0aGUgY29tbWFuZCBkZWZpbml0aW9uIHRvIHVz ZTsgdXN1YWxseSBpdCBpcwphIHN5bWJvbCBuYW1pbmcgYW4gaW50ZXJhY3RpdmVseS1jYWxsYWJs ZSBmdW5jdGlvbi4KS0VZIGlzIGEga2V5IHNlcXVlbmNlOyBub25pbnRlcmFjdGl2ZWx5LCBpdCBp cyBhIHN0cmluZyBvciB2ZWN0b3IKb2YgY2hhcmFjdGVycyBvciBldmVudCB0eXBlcywgYW5kIG5v bi1BU0NJSSBjaGFyYWN0ZXJzIHdpdGggY29kZXMKYWJvdmUgMTI3IChzdWNoIGFzIElTTyBMYXRp bi0xKSBjYW4gYmUgaW5jbHVkZWQgaWYgeW91IHVzZSBhIHZlY3Rvci4KClRoZSBiaW5kaW5nIGdv ZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyJ3MgbG9jYWwgbWFwLCB3aGljaCBpbiBtb3N0CmNhc2Vz IGlzIHNoYXJlZCB3aXRoIGFsbCBvdGhlciBidWZmZXJzIGluIHRoZSBzYW1lIG1ham9yIG1vZGUu CgooZm4gS0VZIENPTU1BTkQpHwooZGVmYWxpYXMgJ2xvY2FsLXNldC1rZXkgI1s1MTQgIlwzMDAg XDIxMVwyMDQOAFwzMDFcMzAyIFwyMTFcMjYyAyFcMjEwXDMwMwMhXDIwNCAAAjtcMjA0IABcMzA0 XDMwNVwzMDYFRFwiXDIxMFwzMDcBBAQjXDIwNyIgW2N1cnJlbnQtbG9jYWwtbWFwIHVzZS1sb2Nh bC1tYXAgbWFrZS1zcGFyc2Uta2V5bWFwIHZlY3RvcnAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1l bnQgYXJyYXlwIGRlZmluZS1rZXldIDcgKCMkIC4gNDM1NDcpICJLU2V0IGtleSBsb2NhbGx5OiBc bkNTZXQga2V5ICVzIGxvY2FsbHkgdG8gY29tbWFuZDogIl0pI0AyMDUgUmVtb3ZlIGdsb2JhbCBi aW5kaW5nIG9mIEtFWS4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXltYXAtZ2xv YmFsLXVuc2V0JyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoK S0VZIGlzIGEgc3RyaW5nIG9yIHZlY3RvciByZXByZXNlbnRpbmcgYSBzZXF1ZW5jZSBvZiBrZXlz dHJva2VzLgoKKGZuIEtFWSkfCihkZWZhbGlhcyAnZ2xvYmFsLXVuc2V0LWtleSAjWzI1NyAiXDMw MAFcMzAxXCJcMjA3IiBbZ2xvYmFsLXNldC1rZXkgbmlsXSA0ICgjJCAuIDQ0NDQ1KSAia1Vuc2V0 IGtleSBnbG9iYWxseTogIl0pI0AyMDMgUmVtb3ZlIGxvY2FsIGJpbmRpbmcgb2YgS0VZLgpUaGlz IGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1sb2NhbC11bnNldCcgZm9yIHRoZQpy ZWNvbW1lbmRlZCBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZC4KCktFWSBpcyBhIHN0cmluZyBvciB2 ZWN0b3IgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KCihmbiBLRVkpHwoo ZGVmYWxpYXMgJ2xvY2FsLXVuc2V0LWtleSAjWzI1NyAiXDMwMCBcMjAzXG4AXDMwMQFcMzAyXCJc MjEwXDMwMlwyMDciIFtjdXJyZW50LWxvY2FsLW1hcCBsb2NhbC1zZXQta2V5IG5pbF0gNCAoIyQg LiA0NDc2OSkgImtVbnNldCBrZXkgbG9jYWxseTogIl0pI0A0NTkgUmV0dXJuIHRoZSBiaW5kaW5n IGZvciBjb21tYW5kIEtFWVMgaW4gY3VycmVudCBsb2NhbCBrZXltYXAgb25seS4KVGhpcyBpcyBh IGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXltYXAtbG9jYWwtbG9va3VwJyBmb3IgdGhlCnJlY29t bWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKS0VZUyBpcyBhIHN0cmluZyBvciB2ZWN0 b3IsIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KVGhlIGJpbmRpbmcgaXMgcHJvYmFibHkgYSBz eW1ib2wgd2l0aCBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpJZiBvcHRpb25hbCBhcmd1bWVudCBB Q0NFUFQtREVGQVVMVCBpcyBub24tbmlsLCByZWNvZ25pemUgZGVmYXVsdApiaW5kaW5nczsgc2Vl IHRoZSBkZXNjcmlwdGlvbiBvZiBgbG9va3VwLWtleScgZm9yIG1vcmUgZGV0YWlscwphYm91dCB0 aGlzLgoKKGZuIEtFWVMgJm9wdGlvbmFsIEFDQ0VQVC1ERUZBVUxUKR8KKGRlZmFsaWFzICdsb2Nh bC1rZXktYmluZGluZyAjWzUxMyAiXDMwMCBcMjExXDIwNQsAXDMwMQEEBCNcMjA3IiBbY3VycmVu dC1sb2NhbC1tYXAgbG9va3VwLWtleV0gNyAoIyQgLiA0NTEyNildKSNANTQyIFJldHVybiB0aGUg YmluZGluZyBmb3IgY29tbWFuZCBLRVlTIGluIGN1cnJlbnQgZ2xvYmFsIGtleW1hcCBvbmx5LgpU aGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1nbG9iYWwtbG9va3VwJyBmb3Ig dGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKS0VZUyBpcyBhIHN0cmlu ZyBvciB2ZWN0b3IsIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KVGhlIGJpbmRpbmcgaXMgcHJv YmFibHkgYSBzeW1ib2wgd2l0aCBhIGZ1bmN0aW9uIGRlZmluaXRpb24uClRoaXMgZnVuY3Rpb24n cyByZXR1cm4gdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBgbG9va3VwLWtleScKKHdo aWNoIHNlZSkuCgpJZiBvcHRpb25hbCBhcmd1bWVudCBBQ0NFUFQtREVGQVVMVCBpcyBub24tbmls LCByZWNvZ25pemUgZGVmYXVsdApiaW5kaW5nczsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBgbG9v a3VwLWtleScgZm9yIG1vcmUgZGV0YWlscwphYm91dCB0aGlzLgoKKGZuIEtFWVMgJm9wdGlvbmFs IEFDQ0VQVC1ERUZBVUxUKR8KKGRlZmFsaWFzICdnbG9iYWwta2V5LWJpbmRpbmcgI1s1MTMgIlwz MDBcMzAxIAMDI1wyMDciIFtsb29rdXAta2V5IGN1cnJlbnQtZ2xvYmFsLW1hcF0gNiAoIyQgLiA0 NTcwMyldKSNANDkgVXNlZCBpbnRlcm5hbGx5IGJ5IGBzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9u Jy4fCihkZWZ2YXIga2V5LXN1YnN0aXR1dGlvbi1pbi1wcm9ncmVzcyBuaWwgKCMkIC4gNDYzNTMp KSNANTkxIFJlcGxhY2UgT0xEREVGIHdpdGggTkVXREVGIGZvciBhbnkga2V5cyBpbiBLRVlNQVAg bm93IGRlZmluZWQgYXMgT0xEREVGLgpUaGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtl eW1hcC1zdWJzdGl0dXRlJyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0 ZWFkLgoKSW4gb3RoZXIgd29yZHMsIE9MRERFRiBpcyByZXBsYWNlZCB3aXRoIE5FV0RFRiB3aGVy ZXZlciBpdCBhcHBlYXJzLgpBbHRlcm5hdGl2ZWx5LCBpZiBvcHRpb25hbCBmb3VydGggYXJndW1l bnQgT0xETUFQIGlzIHNwZWNpZmllZCwgd2UgcmVkZWZpbmUKaW4gS0VZTUFQIGFzIE5FV0RFRiB0 aG9zZSBrZXlzIHRoYXQgYXJlIGRlZmluZWQgYXMgT0xEREVGIGluIE9MRE1BUC4KCklmIHlvdSBk b24ndCBzcGVjaWZ5IE9MRE1BUCwgeW91IGNhbiB1c3VhbGx5IGdldCB0aGUgc2FtZSByZXN1bHRz CmluIGEgY2xlYW5lciB3YXkgd2l0aCBjb21tYW5kIHJlbWFwcGluZywgbGlrZSB0aGlzOgogIChk ZWZpbmUta2V5IEtFWU1BUCBbcmVtYXAgT0xEREVGXSBORVdERUYpCgooZm4gT0xEREVGIE5FV0RF RiBLRVlNQVAgJm9wdGlvbmFsIE9MRE1BUCkfCihkZWZhbGlhcyAnc3Vic3RpdHV0ZS1rZXktZGVm aW5pdGlvbiAjWzEyODMgIlwyMTFDXDIxMVwyNDJcMjA0CwBcMjExXDMwMVwyNDBcMjEwAlwyMDYQ AANcMzAyAlwyNDJcMzAzXCIBCEIYXDMwNFwzMDVcMzA2AwYGBlxuBlxmBg4mBgNcIilcMjA3IiBb a2V5LXN1YnN0aXR1dGlvbi1pbi1wcm9ncmVzcyAiIiB2Y29uY2F0IFtuaWxdIG1hcC1rZXltYXAg bWFrZS1jbG9zdXJlICNbNTE0ICJcMzAwXDMwMVwyNDJHA0lcMjEwXDMwNQFcMzA0XDMwM1wzMDBc MzAyJVwyMDciIFtWMCBWMSBWMiBWMyBWNCBzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uLWtleV0g OCAiXG5cbihmbiBDSEFSIERFRk4pIl1dIDE2ICgjJCAuIDQ2NDYyKV0pI0A0MSAKCihmbiBERUZO IE9MRERFRiBORVdERUYgUFJFRklYIEtFWU1BUCkfCihkZWZhbGlhcyAnc3Vic3RpdHV0ZS1rZXkt ZGVmaW5pdGlvbi1rZXkgI1sxMjg1ICJcMzAxXDIxMVwyMTEGB1wyNDJcMzAyPVwyMDMYAAYHXDI2 MgFcMzAzBgg4XDI2MghcMjAyOQAGB1wyNDI7XDIwMy0ABgdcMjExQVwyNjIJXDI0MgJCXDI2MgJc MjAyGAAGB1wyNDI6XDIwMzkABgdBXDI2MggGBwYHPVwyMDRWAAYHO1wyMDROAFwzMDQGCCFcMjAz dQAGBwYHXDIzMlwyMDN1AFwzMDUEBgYDXDIwM24AXDMwNgQhXDIxMUFBBlxuXDI0MFwyMTBcMjEx XDI2MgFcMjAycwAEXDIzNwYJXDI0NCNcMjA3XDMwNwYIIVwyMDZ+AAYHXDI2MgNcMzEwAyFcMjA1 XDI2MQBcMzExBAYGXCJcMjExP1wyMDZcMjMxAFwzMTIBIVwyMDZcMjMxAFwzMTABIVwyNjIBXDIw NVwyNjEAAgg+P1wyMDVcMjYxAFwzMTMGBwYHBgYGBgYJJVwyMDciIFtrZXktc3Vic3RpdHV0aW9u LWluLXByb2dyZXNzIG5pbCBtZW51LWl0ZW0gMiB2ZWN0b3JwIGRlZmluZS1rZXkgY29weS1zZXF1 ZW5jZSBpbmRpcmVjdC1mdW5jdGlvbiBrZXltYXBwIGxvb2t1cC1rZXkgbmF0bnVtcCBzdWJzdGl0 dXRlLWtleS1kZWZpbml0aW9uXSAxNCAoIyQgLiA0NzQxNCldKSNAMTE3IERlZmF1bHQga2V5bWFw IGZvciBFU0MgKG1ldGEpIGNvbW1hbmRzLgpUaGUgbm9ybWFsIGdsb2JhbCBkZWZpbml0aW9uIG9m IHRoZSBjaGFyYWN0ZXIgRVNDIGluZGlyZWN0cyB0byB0aGlzIGtleW1hcC4fCihkZWZ2YXIgZXNj LW1hcCAoYnl0ZS1jb2RlICJcMzAwIFwzMDEBXDMwMlwzMDMjXDIxMFwzMDEBXDMwNFwzMDUjXDIx MFwzMDEBXDMwNlwzMDcjXDIxMFwzMDEBXDMxMFwzMTEjXDIxMFwzMDEBXDMxMlwzMTMjXDIxMFwy MDciIFttYWtlLWtleW1hcCBkZWZpbmUta2V5ICJ1IiB1cGNhc2Utd29yZCAibCIgZG93bmNhc2Ut d29yZCAiYyIgY2FwaXRhbGl6ZS13b3JkICJ4IiBleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQgIlgi IGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZC1mb3ItYnVmZmVyXSA1KSAoIyQgLiA0ODAzNykpCihi eXRlLWNvZGUgIlwzMDEITVwyMTBcMzAyXDMwMVwzMDBcMzAzI1wyMDciIFtlc2MtbWFwIEVTQy1w cmVmaXggbWFrZS1vYnNvbGV0ZSAiMjguMSJdIDQpI0AzNCBLZXltYXAgZm9yIHN1YmNvbW1hbmRz IG9mIEMteCA0Lh8KKGRlZnZhciBjdGwteC00LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSAoIyQg LiA0ODU0MikpCihkZWZhbGlhcyAnY3RsLXgtNC1wcmVmaXggY3RsLXgtNC1tYXApI0AyOCBLZXlt YXAgZm9yIGZyYW1lIGNvbW1hbmRzLh8KKGRlZnZhciBjdGwteC01LW1hcCAobWFrZS1zcGFyc2Ut a2V5bWFwKSAoIyQgLiA0ODY3NCkpCihkZWZhbGlhcyAnY3RsLXgtNS1wcmVmaXggY3RsLXgtNS1t YXApI0AzOCBLZXltYXAgZm9yIHRhYi1iYXIgcmVsYXRlZCBjb21tYW5kcy4fCihkZWZ2YXIgdGFi LXByZWZpeC1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkgKCMkIC4gNDg4MDApKSNAMTEwIERlZmF1 bHQga2V5bWFwIGZvciBDLXggY29tbWFuZHMuClRoZSBub3JtYWwgZ2xvYmFsIGRlZmluaXRpb24g b2YgdGhlIGNoYXJhY3RlciBDLXggaW5kaXJlY3RzIHRvIHRoaXMga2V5bWFwLh8KKGRlZnZhciBj dGwteC1tYXAgKGJ5dGUtY29kZSAiXDMwMSBcMzAyAVwzMDNcMzA0I1wyMTBcMzAyAVwzMDVcMzA2 I1wyMTBcMzAyAVwzMDcII1wyMTBcMzAyAVwzMTBcMzExI1wyMTBcMzAyAVwzMTJcMzEzI1wyMTBc MzAyAVwzMTRcMzE1I1wyMTBcMzE2XDMxNVwzMTdcMzIwI1wyMTBcMzAyAVwzMjFcMzIyI1wyMTBc MzE2XDMyMlwzMTdcMzIwI1wyMTBcMzAyAVwzMjNcMzI0I1wyMTBcMzAyAVwzMjVcMzI2I1wyMTBc MjA3IiBbdGFiLXByZWZpeC1tYXAgbWFrZS1rZXltYXAgZGVmaW5lLWtleSAiNCIgY3RsLXgtNC1w cmVmaXggIjUiIGN0bC14LTUtcHJlZml4ICJ0IiAiYiIgc3dpdGNoLXRvLWJ1ZmZlciAiayIga2ls bC1idWZmZXIgIhUiIHVwY2FzZS1yZWdpb24gcHV0IGRpc2FibGVkIHQgIlxmIiBkb3duY2FzZS1y ZWdpb24gIjwiIHNjcm9sbC1sZWZ0ICI+IiBzY3JvbGwtcmlnaHRdIDUpICgjJCAuIDQ4OTAxKSkK KGJ5dGUtY29kZSAiXDMwMQhNXDIxMFwzMDJcMzAxXDMwMFwzMDMjXDIwNyIgW2N0bC14LW1hcCBD b250cm9sLVgtcHJlZml4IG1ha2Utb2Jzb2xldGUgIjI4LjEiXSA0KSNAMTc5IERlZmF1bHQgZ2xv YmFsIGtleW1hcCBtYXBwaW5nIEVtYWNzIGtleWJvYXJkIGlucHV0IGludG8gY29tbWFuZHMuClRo ZSB2YWx1ZSBpcyBhIGtleW1hcCB0aGF0IGlzIHVzdWFsbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkp IEVtYWNzJ3MKZ2xvYmFsIG1hcC4KClNlZSBhbHNvIGBjdXJyZW50LWdsb2JhbC1tYXAnLh8KKGRl ZnZhciBnbG9iYWwtbWFwIChieXRlLWNvZGUgIlwzMDEgXDMwMgFcMzAzXDMwNCNcMjEwXDMwMgFc MzA1XDMwNiNcMjEwXDMwMgFcMzA3XDMxMCNcMjEwXDMxMVwzMTJcMzEzXCJcMzE0XDIxMQMDXDMx NVwzMTYkXDIxMAhcMzE3PVwyMDMtAFwyMTEDA1wzMjBcMzIxJFwyMTBcMjExAwNcMzIxXDMyMiRc MjY2A1wzMDIBXDMyM1wzMjQjXDIxMFwzMDIBXDMyNVwzMjYjXDIxMFwzMDIBXDMyN1wzMzAjXDIx MFwzMDIBXDMzMVwzMzIjXDIxMFwzMDIBXDMzM1wzMzQjXDIxMFwzMDIBXDMzNVwzMzQjXDIxMFwz MDIBXDMzNlwzMzcjXDIxMFwzMDIBXDM0MFwzNDEjXDIxMFwzMDIBXDM0MlwzNDMjXDIxMFwzMDIB XDM0NFwzNDUjXDIxMFwzMDIBXDM0NlwzNDcjXDIxMFwyMDciIFtzeXN0ZW0tdHlwZSBtYWtlLWtl eW1hcCBkZWZpbmUta2V5ICIbIiBFU0MtcHJlZml4ICIYIiBDb250cm9sLVgtcHJlZml4ICIJIiBz ZWxmLWluc2VydC1jb21tYW5kIG1ha2UtdmVjdG9yIDEgbmlsICNbMTAyOCAiAQFXXDIwNRgAAlwz MDADSVwyMTBcMzAxBARcMzAyI1wyMTABVFwyNjICXDIwMgAAXDIwNyIgWzAgZGVmaW5lLWtleSBz ZWxmLWluc2VydC1jb21tYW5kXSA4ICJcblxuKGZuIE1BUCBWRUMxIEZST00gVE8pIl0gMzIgMTI3 IG1zLWRvcyAxMjggMTYwIDI1NiAiASIgYmVnaW5uaW5nLW9mLWxpbmUgIgIiIGJhY2t3YXJkLWNo YXIgIgUiIGVuZC1vZi1saW5lICIGIiBmb3J3YXJkLWNoYXIgIhoiIHN1c3BlbmQtZW1hY3MgIhga IiAiFiIgc2Nyb2xsLXVwLWNvbW1hbmQgIlwzNjYiIHNjcm9sbC1kb3duLWNvbW1hbmQgIlwyMjYi IHNjcm9sbC1vdGhlci13aW5kb3cgIlwyMDMiIGV4aXQtcmVjdXJzaXZlLWVkaXQgIh0iIGFib3J0 LXJlY3Vyc2l2ZS1lZGl0XSA4KSAoIyQgLiA0OTU3OSkpCih1c2UtZ2xvYmFsLW1hcCBnbG9iYWwt bWFwKQooZGVmY29uc3QgbGlzdGlmeS1rZXktc2VxdWVuY2UtMSAxMzQyMTc4NTYpI0A1NSBDb252 ZXJ0IGEga2V5IHNlcXVlbmNlIHRvIGEgbGlzdCBvZiBldmVudHMuCgooZm4gS0VZKR8KKGRlZmFs aWFzICdsaXN0aWZ5LWtleS1zZXF1ZW5jZSAjWzI1NyAiXDMwMAEhXDIwMwsAXDMwMQFcMzAyXCJc MjA3XDMwM1wzMDQCXCJcMjA3IiBbdmVjdG9ycCBhcHBlbmQgbmlsIG1hcGNhciAjWzI1NyAiXDIx MVwzMDFWXDIwMwsAXDMwMgEIXCJcMjA3XDIwNyIgW2xpc3RpZnkta2V5LXNlcXVlbmNlLTEgMTI3 IGxvZ3hvcl0gNCAiXG5cbihmbiBDKSJdXSA0ICgjJCAuIDUwNzI2KV0pI0A3NCBSZXR1cm4gbm9u LW5pbCBpZiBPQkpFQ1QgaXMgYW4gaW5wdXQgZXZlbnQgb3IgZXZlbnQgb2JqZWN0LgoKKGZuIE9C SkVDVCkfCihkZWZhbGlhcyAnZXZlbnRwICNbMjU3ICJcMjExXDI1MFwyMDYfAFwyMTE6XDIwMxIA XDIxMUBcMjExXDI2MgJcMjAyEwBcMjExXDIwNR8AXDIxMTlcMjA1HwBcMzAwASE/XDIwNyIgW2tl eXdvcmRwXSAzICgjJCAuIDUxMDA1KV0pI0A0NDIgUmV0dXJuIGEgbGlzdCBvZiBzeW1ib2xzIHJl cHJlc2VudGluZyB0aGUgbW9kaWZpZXIga2V5cyBpbiBldmVudCBFVkVOVC4KVGhlIGVsZW1lbnRz IG9mIHRoZSBsaXN0IG1heSBpbmNsdWRlIGBtZXRhJywgYGNvbnRyb2wnLApgc2hpZnQnLCBgaHlw ZXInLCBgc3VwZXInLCBgYWx0JywgYGNsaWNrJywgYGRvdWJsZScsIGB0cmlwbGUnLCBgZHJhZycs CmFuZCBgZG93bicuCkVWRU5UIG1heSBiZSBhbiBldmVudCBvciBhbiBldmVudCB0eXBlLiAgSWYg RVZFTlQgaXMgYSBzeW1ib2wKdGhhdCBoYXMgbmV2ZXIgYmVlbiB1c2VkIGluIGFuIGV2ZW50IHRo YXQgaGFzIGJlZW4gcmVhZCBhcyBpbnB1dAppbiB0aGUgY3VycmVudCBFbWFjcyBzZXNzaW9uLCB0 aGVuIHRoaXMgZnVuY3Rpb24gbWF5IGZhaWwgdG8gaW5jbHVkZQp0aGUgYGNsaWNrJyBtb2RpZmll ci4KCihmbiBFVkVOVCkfCihkZWZhbGlhcyAnZXZlbnQtbW9kaWZpZXJzICNbMjU3ICJcMjExATxc MjAzXG4AAUBcMjYyAVwyMTE5XDIwMxQAXDMwMAEhQVwyMDdcMzAxXDMwMgJcMzAzXCJcMzAyA1wz MDRcIlwzMDVVXDIwNCYAXDMwNkNcMjYyAlwzMDIDXDMwN1wiXDMwNVVcMjAzNQBcMjExXDMxMFdc MjAzOgBcMzExAkJcMjYyAlwzMDIDXDMxMlwiXDMwNVVcMjAzSgBcMjExAVwyMjdVXDIwNE8AXDMx MwJCXDI2MgJcMzAyA1wzMTRcIlwzMDVVXDIwNF0AXDMxNQJCXDI2MgJcMzAyA1wzMTZcIlwzMDVV XDIwNGsAXDMxNwJCXDI2MgJcMzAyA1wzMjBcIlwzMDVVXDIwNHkAXDMyMQJCXDI2MgIBXDIwNyIg W2ludGVybmFsLWV2ZW50LXN5bWJvbC1wYXJzZS1tb2RpZmllcnMgbmlsIGxvZ2FuZCAtMjY0MjQx MTUzIDEzNDIxNzcyOCAwIG1ldGEgNjcxMDg4NjQgMzIgY29udHJvbCAzMzU1NDQzMiBzaGlmdCAx Njc3NzIxNiBoeXBlciA4Mzg4NjA4IHN1cGVyIDQxOTQzMDQgYWx0XSA3ICgjJCAuIDUxMjE2KV0p I0AzMzUgUmV0dXJuIHRoZSBiYXNpYyB0eXBlIG9mIHRoZSBnaXZlbiBldmVudCAoYWxsIG1vZGlm aWVycyByZW1vdmVkKS4KVGhlIHZhbHVlIGlzIGEgcHJpbnRpbmcgY2hhcmFjdGVyIChub3QgdXBw ZXIgY2FzZSkgb3IgYSBzeW1ib2wuCkVWRU5UIG1heSBiZSBhbiBldmVudCBvciBhbiBldmVudCB0 eXBlLiAgSWYgRVZFTlQgaXMgYSBzeW1ib2wKdGhhdCBoYXMgbmV2ZXIgYmVlbiB1c2VkIGluIGFu IGV2ZW50IHRoYXQgaGFzIGJlZW4gcmVhZCBhcyBpbnB1dAppbiB0aGUgY3VycmVudCBFbWFjcyBz ZXNzaW9uLCB0aGVuIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBuaWwuCgooZm4gRVZFTlQpHwoo ZGVmYWxpYXMgJ2V2ZW50LWJhc2ljLXR5cGUgI1syNTcgIlwyMTE6XDIwMwkAXDIxMUBcMjYyAVwy MTE5XDIwMxMAXDIxMVwzMDBOQFwyMDdcMzAxAVwzMDJcIlwyMTFcMzAzV1wyMDMkAFwzMDQBXDMw NVwiXDIwMiUAXDIxMVwzMDYxLQBcMjExXDIyNzBcMjA3XDIxMFwyMDciIFtldmVudC1zeW1ib2wt ZWxlbWVudHMgbG9nYW5kIDQxOTQzMDMgMzIgbG9naW9yIDY0IChlcnJvcildIDUgKCMkIC4gNTIx NjEpXSkjQDY2IFJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBhIG1vdXNlIG1vdmVtZW50IGV2 ZW50LgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnbW91c2UtbW92ZW1lbnQtcCAjWzI1NyAiXDIx MVwyNDJcMzAwPVwyMDciIFttb3VzZS1tb3ZlbWVudF0gMyAoIyQgLiA1MjczNSldKQooYnl0ZS1j b2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1 dCBtb3VzZS1tb3ZlbWVudC1wIHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBp bGUtaW5saW5lLWV4cGFuZF0gNSkjQDYzIFJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBhIG1v dXNlIGNsaWNrIGV2ZW50LgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnbW91c2UtZXZlbnQtcCAj WzI1NyAiXDMwMAEhXDMwMT5cMjA3IiBbZXZlbnQtYmFzaWMtdHlwZSAobW91c2UtMSBtb3VzZS0y IG1vdXNlLTMgbW91c2UtbW92ZW1lbnQpXSAzICgjJCAuIDUzMDM1KV0pCihkZWZhbGlhcyAnZXZl bnQtLXBvc24tYXQtcG9pbnQgI1swICJcMzAwIFwzMDEBIVwyMTFcMjA0EABcMzAyIAJcMzAzXDMw NEZcMjA3XDMwNQFcMjMzXDIxMQNcMjQwXDI2NgJcMjA3IiBbd2luZG93LXBvaW50IHBvc24tYXQt cG9pbnQgc2VsZWN0ZWQtd2luZG93ICgwIC4gMCkgMCA1XSA2XSkjQDEwODkgUmV0dXJuIHRoZSBz dGFydGluZyBwb3NpdGlvbiBvZiBFVkVOVC4KRVZFTlQgc2hvdWxkIGJlIGEgbW91c2UgY2xpY2ss IGRyYWcsIG9yIGtleSBwcmVzcyBldmVudC4gIElmCkVWRU5UIGlzIG5pbCwgdGhlIHZhbHVlIG9m IGBwb3NuLWF0LXBvaW50JyBpcyB1c2VkIGluc3RlYWQuCgpUaGUgZm9sbG93aW5nIGFjY2Vzc29y IGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBhY2Nlc3MgdGhlIGVsZW1lbnRzCm9mIHRoZSBwb3NpdGlv bjoKCmBwb3NuLXdpbmRvdyc6IFRoZSB3aW5kb3cgb2YgdGhlIGV2ZW50IGVuZCwgb3IgaXRzIGZy YW1lIGlmIHRoZQpldmVudCBlbmQgcG9pbnQgYmVsb25ncyB0byBubyB3aW5kb3cuCmBwb3NuLWFy ZWEnOiBBIHN5bWJvbCBpZGVudGlmeWluZyB0aGUgYXJlYSB0aGUgZXZlbnQgb2NjdXJyZWQgaW4s Cm9yIG5pbCBpZiB0aGUgZXZlbnQgb2NjdXJyZWQgaW4gdGhlIHRleHQgYXJlYS4KYHBvc24tcG9p bnQnOiBUaGUgYnVmZmVyIHBvc2l0aW9uIG9mIHRoZSBldmVudC4KYHBvc24teC15JzogVGhlIHBp eGVsLWJhc2VkIGNvb3JkaW5hdGVzIG9mIHRoZSBldmVudC4KYHBvc24tY29sLXJvdyc6IFRoZSBl c3RpbWF0ZWQgY29sdW1uIGFuZCByb3cgY29ycmVzcG9uZGluZyB0byB0aGUKcG9zaXRpb24gb2Yg dGhlIGV2ZW50LgpgcG9zbi1hY3R1YWwtY29sLXJvdyc6IFRoZSBhY3R1YWwgY29sdW1uIGFuZCBy b3cgY29ycmVzcG9uZGluZyB0byB0aGUKcG9zaXRpb24gb2YgdGhlIGV2ZW50LgpgcG9zbi1zdHJp bmcnOiBUaGUgc3RyaW5nIG9iamVjdCBvZiB0aGUgZXZlbnQsIHdoaWNoIGlzIGVpdGhlcgpuaWwg b3IgKFNUUklORyAuIFBPU0lUSU9OKScuCmBwb3NuLWltYWdlJzogVGhlIGltYWdlIG9iamVjdCBv ZiB0aGUgZXZlbnQsIGlmIGFueS4KYHBvc24tb2JqZWN0JzogVGhlIGltYWdlIG9yIHN0cmluZyBv YmplY3Qgb2YgdGhlIGV2ZW50LCBpZiBhbnkuCmBwb3NuLXRpbWVzdGFtcCc6IFRoZSB0aW1lIHRo ZSBldmVudCBvY2N1cnJlZCwgaW4gbWlsbGlzZWNvbmRzLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24s IHNlZSBJbmZvIG5vZGUgYChlbGlzcClDbGljayBFdmVudHMnLgoKKGZuIEVWRU5UKR8KKGRlZmFs aWFzICdldmVudC1zdGFydCAjWzI1NyAiXDIxMTpcMjAzCwBcMjExQUBcMjA2DQBcMzAwIFwyMDci IFtldmVudC0tcG9zbi1hdC1wb2ludF0gMiAoIyQgLiA1MzM5NyldKSNAMTYxIFJldHVybiB0aGUg ZW5kaW5nIHBvc2l0aW9uIG9mIEVWRU5ULgpFVkVOVCBzaG91bGQgYmUgYSBjbGljaywgZHJhZywg b3Iga2V5IHByZXNzIGV2ZW50LgoKU2VlIGBldmVudC1zdGFydCcgZm9yIGEgZGVzY3JpcHRpb24g b2YgdGhlIHZhbHVlIHJldHVybmVkLgoKKGZuIEVWRU5UKR8KKGRlZmFsaWFzICdldmVudC1lbmQg I1syNTcgIlwyMTE6XDIwMxYAXDMwMAE4OlwyMDMQAFwzMDBcMjAyEQBcMzAxAThcMjA2GABcMzAy IFwyMDciIFsyIDEgZXZlbnQtLXBvc24tYXQtcG9pbnRdIDMgKCMkIC4gNTQ1OTUpXSkjQDExNSBS ZXR1cm4gdGhlIG11bHRpLWNsaWNrIGNvdW50IG9mIEVWRU5ULCBhIGNsaWNrIG9yIGRyYWcgZXZl bnQuClRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLgoKKGZuIEVWRU5UKR8K KGRlZmFsaWFzICdldmVudC1jbGljay1jb3VudCAjWzI1NyAiXDIxMTpcMjAzEABcMzAwAThcMjUw XDIwMxAAXDMwMAE4XDIwN1wzMDFcMjA3IiBbMiAxXSAzICgjJCAuIDU0ODkwKV0pCihieXRlLWNv ZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0 IGV2ZW50LWNsaWNrLWNvdW50IHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBp bGUtaW5saW5lLWV4cGFuZF0gNSkjQDEwNSBSZXR1cm4gdGhlIGxpbmUgY291bnQgb2YgRVZFTlQs IGEgbW91c2V3aGVlbCBldmVudC4KVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvc2l0aXZlIGludGVn ZXIuCgooZm4gRVZFTlQpHwooZGVmYWxpYXMgJ2V2ZW50LWxpbmUtY291bnQgI1syNTcgIlwyMTE6 XDIwMxAAXDMwMAE4XDI1MFwyMDMQAFwzMDABOFwyMDdcMzAxXDIwNyIgWzMgMV0gMyAoIyQgLiA1 NTI1OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIw NyIgW2Z1bmN0aW9uLXB1dCBldmVudC1saW5lLWNvdW50IHNwZWVkIC0xIHB1dCBieXRlLW9wdGlt aXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDI0NSBSZXR1cm4gbm9uLW5pbCBp ZiBPQkogYXBwZWFycyB0byBiZSBhIHZhbGlkIGBwb3NuJyBvYmplY3Qgc3BlY2lmeWluZyBhIHdp bmRvdy4KQSBgcG9zbicgb2JqZWN0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHN1Y2ggYXMg YGV2ZW50LXN0YXJ0Jy4KSWYgT0JKIGlzIGEgdmFsaWQgYHBvc24nIG9iamVjdCwgYnV0IHNwZWNp ZmllcyBhIGZyYW1lIHJhdGhlcgp0aGFuIGEgd2luZG93LCByZXR1cm4gbmlsLgoKKGZuIE9CSikf CihkZWZhbGlhcyAncG9zbnAgI1syNTcgIlwzMDABXDI0MiFcMjA1IQBcMjExQVwyMTFcMjYyAlwy NDI6P1wyMDUhAFwyMTFBXDIxMVwyNjICXDI0MlwyNDJcMjUwXDIwNSEAXDIxMUFcMjQyXDI1MFwy MDciIFt3aW5kb3dwXSAzICgjJCAuIDU1NjE2KV0pI0AyMzQgUmV0dXJuIHRoZSB3aW5kb3cgaW4g UE9TSVRJT04uCklmIFBPU0lUSU9OIGlzIG91dHNpZGUgdGhlIGZyYW1lIHdoZXJlIHRoZSBldmVu dCB3YXMgaW5pdGlhdGVkLApyZXR1cm4gdGhhdCBmcmFtZSBpbnN0ZWFkLiAgUE9TSVRJT04gc2hv dWxkIGJlIGEgbGlzdCBvZiB0aGUgZm9ybQpyZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JyBh bmQgYGV2ZW50LWVuZCcgZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3Nu LXdpbmRvdyAjWzI1NyAiXDIxMUBcMjA3IiBbXSAyICgjJCAuIDU2MDEwKV0pCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBv c24td2luZG93IHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5l LWV4cGFuZF0gNSkjQDE4MiBSZXR1cm4gdGhlIHdpbmRvdyBhcmVhIHJlY29yZGVkIGluIFBPU0lU SU9OLCBvciBuaWwgZm9yIHRoZSB0ZXh0IGFyZWEuClBPU0lUSU9OIHNob3VsZCBiZSBhIGxpc3Qg b2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVudC1lbmQn IGZ1bmN0aW9ucy4KCihmbiBQT1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1hcmVhICNbMjU3ICJc MjExQUA6XDIwMw4AXDIxMUFAQFwyMDIRAFwyMTFBQFwyMTE5XDIwNRcAXDIxMVwyMDciIFtdIDMg KCMkIC4gNTY0NDcpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVc MzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgcG9zbi1hcmVhIHNwZWVkIC0xIHB1dCBieXRlLW9wdGlt aXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDI1MCBSZXR1cm4gdGhlIGJ1ZmZl ciBsb2NhdGlvbiBpbiBQT1NJVElPTi4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUg Zm9ybSByZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcgZnVuY3Rp b25zLgpSZXR1cm5zIG5pbCBpZiBQT1NJVElPTiBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBi dWZmZXIgbG9jYXRpb24gKGUuZy4KYSBjbGljayBvbiBhIHNjcm9sbCBiYXIpLgoKKGZuIFBPU0lU SU9OKR8KKGRlZmFsaWFzICdwb3NuLXBvaW50ICNbMjU3ICJcMzAwAThcMjA2FgBcMjExQUBcMjEx XDI0MlwyMDYUAFwyMTFcMjUwXDIwNRQAXDIxMVwyNjIBXDIwNyIgWzVdIDMgKCMkIC4gNTY4NzAp XSkjQDgxIE1vdmUgcG9pbnQgdG8gUE9TSVRJT04uClNlbGVjdCB0aGUgY29ycmVzcG9uZGluZyB3 aW5kb3cgYXMgd2VsbC4KCihmbiBQT1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1zZXQtcG9pbnQg I1syNTcgIlwzMDABXDIxMUBcMjYyASFcMjAzJwBcMzAxXDMwMgJcMjExQFwyNjIBISFcMjA0GgBc MzAzXDMwNCFcMjEwXDMwNVwzMDICXDIxMUBcMjYyASEhXDIxMFwyMDI9AFwzMDEBXDIxMUBcMjYy ASFcMjA0NQBcMzAzXDMwNCFcMjEwXDMwNQFcMjExQFwyNjIBIVwyMTBcMzA2ASFcMjQ3XDIwNUgA XDMwNgEhYlwyMDciIFtmcmFtZXAgd2luZG93cCBmcmFtZS1zZWxlY3RlZC13aW5kb3cgZXJyb3Ig IlBvc2l0aW9uIG5vdCBpbiB0ZXh0IGFyZWEgb2Ygd2luZG93IiBzZWxlY3Qtd2luZG93IHBvc24t cG9pbnRdIDUgKCMkIC4gNTcyMzUpXSkjQDIxNiBSZXR1cm4gdGhlIHggYW5kIHkgY29vcmRpbmF0 ZXMgaW4gUE9TSVRJT04uClRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBmb3JtIChYIC4gWSksIHdo ZXJlIFggYW5kIFkgYXJlIGdpdmVuIGluCnBpeGVscy4gIFBPU0lUSU9OIHNob3VsZCBiZSBhIGxp c3Qgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkKYGV2ZW50LXN0YXJ0JyBhbmQgYGV2ZW50LWVuZCcu CgooZm4gUE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24teC15ICNbMjU3ICJcMzAwAThcMjA3IiBb Ml0gMyAoIyQgLiA1NzY1NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAx XDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBwb3NuLXgteSBzcGVlZCAtMSBwdXQgYnl0ZS1v cHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0A2OTQgUmV0dXJuIHRoZSBu b21pbmFsIGNvbHVtbiBhbmQgcm93IGluIFBPU0lUSU9OLCBtZWFzdXJlZCBpbiBjaGFyYWN0ZXJz LgpUaGUgY29sdW1uIGFuZCByb3cgdmFsdWVzIGFyZSBhcHByb3hpbWF0aW9ucyBjYWxjdWxhdGVk IGZyb20gdGhlIHgKYW5kIHkgY29vcmRpbmF0ZXMgaW4gUE9TSVRJT04gYW5kIHRoZSBmcmFtZSdz IGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoCmFuZCBkZWZhdWx0IGxpbmUgaGVpZ2h0LCBpbmNsdWRp bmcgc3BhY2luZy4KCklmIFVTRS1XSU5ET1cgaXMgbm9uLW5pbCwgdXNlIHRoZSB0eXBpY2FsIHdp ZHRoIG9mIGEgY2hhcmFjdGVyIGluCnRoZSB3aW5kb3cgaW5kaWNhdGVkIGJ5IFBPU0lUSU9OIGlu c3RlYWQgb2YgdGhlIGZyYW1lLiAgKFRoaXMKbWFrZXMgYSBkaWZmZXJlbmNlIGlzIGEgd2luZG93 IGhhcyBhIHpvb20gbGV2ZWwuKQoKRm9yIGEgc2Nyb2xsLWJhciBldmVudCwgdGhlIHJlc3VsdCBj b2x1bW4gaXMgMCwgYW5kIHRoZSByb3cKY29ycmVzcG9uZHMgdG8gdGhlIHZlcnRpY2FsIHBvc2l0 aW9uIG9mIHRoZSBjbGljayBpbiB0aGUgc2Nyb2xsIGJhci4KClBPU0lUSU9OIHNob3VsZCBiZSBh IGxpc3Qgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVu dC1lbmQnIGZ1bmN0aW9ucy4KCihmbiBQT1NJVElPTiAmb3B0aW9uYWwgVVNFLVdJTkRPVykfCihk ZWZhbGlhcyAncG9zbi1jb2wtcm93ICNbNTEzICIBXDMwMQE4XDI2MgECXDIxMUBcMjYyAVwzMDIB IVwyMDMVAFwyMTFcMjAyGABcMzAzASFcMzA0AiFcMjA1HwABBVwyMTFBQDpcMjAzLgBcMjExQUBA XDIwMjEAXDIxMUFAXDIxMTlcMjA1NwBcMjExXDI2NlwyMDIDXDIwND8AXDMwNVwyMDdcMjExXDMw NlwyNjdcMjAyWQBcMzA3XDMxMAYGXDMxMQUhU1wiQlwyMDdcMzEwBVwzMTIEIVwiXDMwN0JcMjA3 BVwyMDNrAARAXDMxMwMhXDI0NQVBXDMxNAQhXDI0NUJcMjA3XDMxNQMhXDIwNVwyMDIAclwzMTZc MzE3BCEhcVwyMTAIKVwyMDZcMjAyAFwzMjADXDMwMFwiXDMyMQEhXDIwM1wyMjUAXDMyMgFcMzIz BgYhXyFcMjYyAVwyMDJcMjM0AFwyMTFcMjA0XDIzNABcMzA3XDI2MgEFQFwzMjQFIVwyNDUGBkFc MzIzBgYhA1xcXDI0NUJcMjA3IiBbbGluZS1zcGFjaW5nIDIgZnJhbWVwIHdpbmRvdy1mcmFtZSB3 aW5kb3dwICgwIC4gMCkgI3MoaGFzaC10YWJsZSBzaXplIDIgdGVzdCBlcSByZWhhc2gtc2l6ZSAx LjUgcmVoYXNoLXRocmVzaG9sZCAwLjgxMjUgcHVyZWNvcHkgdCBkYXRhICh2ZXJ0aWNhbC1zY3Jv bGwtYmFyIDY5IGhvcml6b250YWwtc2Nyb2xsLWJhciA4MCkpIDAgc2Nyb2xsLWJhci1zY2FsZSB3 aW5kb3ctaGVpZ2h0IHdpbmRvdy13aWR0aCB3aW5kb3ctZm9udC13aWR0aCB3aW5kb3ctZm9udC1o ZWlnaHQgZGlzcGxheS1ncmFwaGljLXAgd2luZG93LWJ1ZmZlciBmcmFtZS1zZWxlY3RlZC13aW5k b3cgZnJhbWUtcGFyYW1ldGVyIGZsb2F0cCB0cnVuY2F0ZSBmcmFtZS1jaGFyLWhlaWdodCBmcmFt ZS1jaGFyLXdpZHRoXSAxMiAoIyQgLiA1ODA3MSldKSNANTQzIFJldHVybiB0aGUgd2luZG93IHJv dyBudW1iZXIgaW4gUE9TSVRJT04gYW5kIGNoYXJhY3RlciBudW1iZXIgaW4gdGhhdCByb3cuCgpS ZXR1cm4gbmlsIGlmIFBPU0lUSU9OIGRvZXMgbm90IGNvbnRhaW4gdGhlIGFjdHVhbCBwb3NpdGlv bjsgaW4gdGhhdCBjYXNlCmBwb3NuLWNvbC1yb3cnIGNhbiBiZSB1c2VkIHRvIGdldCBhcHByb3hp bWF0ZSB2YWx1ZXMuClBPU0lUSU9OIHNob3VsZCBiZSBhIGxpc3Qgb2YgdGhlIGZvcm0gcmV0dXJu ZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVudC1lbmQnIGZ1bmN0aW9ucy4KClRoaXMg ZnVuY3Rpb24gZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIHdpZHRoIG9uIGRpc3BsYXksIGxpa2Ug dGhlCm51bWJlciBvZiB2aXN1YWwgY29sdW1ucyB0YWtlbiBieSBhIFRBQiBvciBpbWFnZS4gIElm IHlvdSBuZWVkCnRoZSBjb29yZGluYXRlcyBvZiBQT1NJVElPTiBpbiBjaGFyYWN0ZXIgdW5pdHMs IHlvdSBzaG91bGQgdXNlCmBwb3NuLWNvbC1yb3cnLCBub3QgdGhpcyBmdW5jdGlvbi4KCihmbiBQ T1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1hY3R1YWwtY29sLXJvdyAjWzI1NyAiXDMwMAE4XDIw NyIgWzZdIDMgKCMkIC4gNTk2MDIpXSkjQDE0NSBSZXR1cm4gdGhlIHRpbWVzdGFtcCBvZiBQT1NJ VElPTi4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSB0 aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcgZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9O KR8KKGRlZmFsaWFzICdwb3NuLXRpbWVzdGFtcCAjWzI1NyAiXDMwMAE4XDIwNyIgWzNdIDMgKCMk IC4gNjAyMjEpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2 I1wyMDciIFtmdW5jdGlvbi1wdXQgcG9zbi10aW1lc3RhbXAgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0 aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMjEyIFJldHVybiB0aGUgc3Ry aW5nIG9iamVjdCBvZiBQT1NJVElPTi4KVmFsdWUgaXMgYSBjb25zIChTVFJJTkcgLiBTVFJJTkct UE9TKSwgb3IgbmlsIGlmIG5vdCBhIHN0cmluZy4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBv ZiB0aGUgZm9ybSByZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcg ZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3NuLXN0cmluZyAjWzI1NyAi XDMwMAE4XDIxMTpcMjA1CQBcMjExXDIwNyIgWzRdIDMgKCMkIC4gNjA1NzcpXSkjQDIwMSBSZXR1 cm4gdGhlIGltYWdlIG9iamVjdCBvZiBQT1NJVElPTi4KVmFsdWUgaXMgYSBsaXN0IChpbWFnZSAu Li4pLCBvciBuaWwgaWYgbm90IGFuIGltYWdlLgpQT1NJVElPTiBzaG91bGQgYmUgYSBsaXN0IG9m IHRoZSBmb3JtIHJldHVybmVkIGJ5IHRoZSBgZXZlbnQtc3RhcnQnCmFuZCBgZXZlbnQtZW5kJyBm dW5jdGlvbnMuCgooZm4gUE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24taW1hZ2UgI1syNTcgIlwz MDABOFwyMDciIFs3XSAzICgjJCAuIDYwODcyKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBvc24taW1hZ2Ugc3BlZWQg LTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMjk1 IFJldHVybiB0aGUgb2JqZWN0IChpbWFnZSBvciBzdHJpbmcpIG9mIFBPU0lUSU9OLgpWYWx1ZSBp cyBhIGxpc3QgKGltYWdlIC4uLikgZm9yIGFuIGltYWdlIG9iamVjdCwgYSBjb25zIGNlbGwKKFNU UklORyAuIFNUUklORy1QT1MpIGZvciBhIHN0cmluZyBvYmplY3QsIGFuZCBuaWwgZm9yIGEgYnVm ZmVyIHBvc2l0aW9uLgpQT1NJVElPTiBzaG91bGQgYmUgYSBsaXN0IG9mIHRoZSBmb3JtIHJldHVy bmVkIGJ5IHRoZSBgZXZlbnQtc3RhcnQnCmFuZCBgZXZlbnQtZW5kJyBmdW5jdGlvbnMuCgooZm4g UE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24tb2JqZWN0ICNbMjU3ICJcMjExXDMwMAE4XDI2MgFc MjA2XGYAXDMwMQEhXDIwNyIgWzcgcG9zbi1zdHJpbmddIDQgKCMkIC4gNjEyNzYpXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1w dXQgcG9zbi1vYmplY3Qgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1p bmxpbmUtZXhwYW5kXSA1KSNAMzQxIFJldHVybiB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyByZWxh dGl2ZSB0byB0aGUgZ2x5cGggb2Ygb2JqZWN0IG9mIFBPU0lUSU9OLgpUaGUgcmV0dXJuIHZhbHVl IGhhcyB0aGUgZm9ybSAoRFggLiBEWSksIHdoZXJlIERYIGFuZCBEWSBhcmUKZ2l2ZW4gaW4gcGl4 ZWxzLCBhbmQgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZgp0aGUg Y2xpY2tlZCBnbHlwaCBvZiBvYmplY3QgYXQgUE9TSVRJT04uICBQT1NJVElPTiBzaG91bGQgYmUg YQpsaXN0IG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBldmVudC1zdGFydCcgYW5kIGBldmVudC1l bmQnLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3NuLW9iamVjdC14LXkgI1syNTcgIlwz MDABOFwyMDciIFs4XSAzICgjJCAuIDYxODEwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBvc24tb2JqZWN0LXgteSBz cGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUp I0AyMDcgUmV0dXJuIHRoZSBwaXhlbCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBvYmplY3Qgb2Yg UE9TSVRJT04uClRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBmb3JtIChXSURUSCAuIEhFSUdIVCku ICBQT1NJVElPTiBzaG91bGQKYmUgYSBsaXN0IG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBldmVu dC1zdGFydCcgYW5kIGBldmVudC1lbmQnLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3Nu LW9iamVjdC13aWR0aC1oZWlnaHQgI1syNTcgIlwzMDABOFwyMDciIFs5XSAzICgjJCAuIDYyMzY0 KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHBvc24tb2JqZWN0LXdpZHRoLWhlaWdodCBzcGVlZCAtMSBwdXQgYnl0ZS1v cHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0A2MCBTdG9yZSBWQUxVRSBp biB0aGUgb2Jzb2xldGUgYHZhbHVlcycgdmFyaWFibGUuCgooZm4gVkFMVUUpHwooZGVmYWxpYXMg J3ZhbHVlcy0tc3RvcmUtdmFsdWUgI1syNTcgIlwyMTEIQhBcMjA3IiBbdmFsdWVzXSAzICgjJCAu IDYyODAxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDBcMzA0XDMwMlwz MDMjXDIxMFwzMDBcMzA1XDMwNlwzMDcjXDIxMFwzMDBcMzEwXDMwNlwzMDcjXDIxMFwzMDBcMzEx XDMxMlwzMDcjXDIxMFwzMDBcMzEzXDMxMlwzMDcjXDIwNyIgW21ha2Utb2Jzb2xldGUgaW52b2Nh dGlvbi1kaXJlY3RvcnkgInVzZSB0aGUgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4iICIyNy4x IiBpbnZvY2F0aW9uLW5hbWUgc3RyaW5nLWFzLXVuaWJ5dGUgInVzZSBgZW5jb2RlLWNvZGluZy1z dHJpbmcnLiIgIjI2LjEiIHN0cmluZy1tYWtlLXVuaWJ5dGUgc3RyaW5nLWFzLW11bHRpYnl0ZSAi dXNlIGBkZWNvZGUtY29kaW5nLXN0cmluZycuIiBzdHJpbmctbWFrZS1tdWx0aWJ5dGVdIDQpI0A1 MCBSZXR1cm4gKGxvZyBYIDEwKSwgdGhlIGxvZyBiYXNlIDEwIG9mIFguCgooZm4gWCkfCihkZWZh bGlhcyAnbG9nMTAgI1syNTcgIlwzMDABXDMwMVwiXDIwNyIgW2xvZyAxMF0gNCAoIyQgLiA2MzMy OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwNVwzMDZcMzA3I1wy MTBcMzA0XDMxMFwzMTFcMzEyI1wyMTBcMzA0XDMxM1wzMTRcMzE1I1wyMTBcMzA0XDMxNlwzMTdc MzIwI1wyMTBcMzA0XDMyMVwzMjJcMzIzI1wyMTBcMzA0XDMyNFwzMjVcMzIzI1wyMTBcMzA0XDMy NlwzMjdcMzMwI1wyMTBcMzMxXDMzMlwzMzNcMzE1I1wyMTBcMzMxXDMzNFwzMzVcMzM2I1wyMTBc MzMxXDMzN1wzMzVcMzQwI1wyMTBcMzMxXDM0MVwzNDJcMzMwI1wyMTBcMzAwXDM0M1wzMzVcMzIz I1wyMTBcMzMxXDM0NFwzNDVcMzQ2I1wyMTBcMzMxXDM0N1wzMzVcMzA3I1wyMTBcMzMxXDM1MFwz MzVcMzUxI1wyMTBcMzUyXDM1M1wzNTRcIlwyMTBcMzUyXDM1NVwzNTZcMzM1I1wyMTBcMzU3XDIx MVwyMDNcMjE1AFwyMTFAXDM1NQFOXDIwM1wyMDYAXDM1NgFOXDIwNFwyMDYAXDM2MFwzNTYCXDM1 NQROI1wyMTABQVwyNjZcMjAyXDIwMmwAXDIxMFwzMzFcMzU1XDM1NlwzNDAjXDIxMFwzMzFcMzYx XDM2MlwzMjMjXDIxMFwzNjNcMzY0XDM2NVwzMzUjXDIxMFwzMDBcMzY0XDM2NVwzMzAjXDIwNyIg W21ha2Utb2Jzb2xldGUgbG9nMTAgbG9nICIyNC40IiBzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNv bnZlbnRpb24gYWxsLWNvbXBsZXRpb25zIChzdHJpbmcgY29sbGVjdGlvbiAmb3B0aW9uYWwgcHJl ZGljYXRlKSAiMjMuMSIgdW5pbnRlcm4gKG5hbWUgb2JhcnJheSkgIjIzLjMiIGluZGlyZWN0LWZ1 bmN0aW9uIChvYmplY3QpICIyNS4xIiByZWRpcmVjdC1mcmFtZS1mb2N1cyAoZnJhbWUgZm9jdXMt ZnJhbWUpICIyNC4zIiBsaWJ4bWwtcGFyc2UteG1sLXJlZ2lvbiAoc3RhcnQgZW5kICZvcHRpb25h bCBiYXNlLXVybCkgIjI3LjEiIGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAoc3RhcnQgZW5kICZv cHRpb25hbCBiYXNlLXVybCkgdGltZS1jb252ZXJ0ICh0aW1lIGZvcm0pICIyOS4xIiBtYWtlLW9i c29sZXRlLXZhcmlhYmxlIGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzICJ1c2UgYGN1cnNvci1p bnRhbmdpYmxlLW1vZGUnIG9yIGBjdXJzb3Itc2Vuc29yLW1vZGUnIGluc3RlYWQiIHJlZGlzcGxh eS1kb250LXBhdXNlIG5pbCAiMjQuNSIgb3BlcmF0aW5nLXN5c3RlbS1yZWxlYXNlICIyOC4xIiBp bmhpYml0LWNoYW5naW5nLW1hdGNoLWRhdGEgc2F2ZS1tYXRjaC1kYXRhIHJ1bi13aW5kb3ctY29u ZmlndXJhdGlvbi1jaGFuZ2UtaG9vayBjb21tYW5kLWRlYnVnLXN0YXR1cyAiZXhwZWN0IGl0IHRv IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4iICIyNS4yIiB0cmFuc2xhdGlvbi10YWJs ZS1mb3ItaW5wdXQgeC1ndGstdXNlLXdpbmRvdy1tb3ZlICIyNi4xIiBkZWZ2YXJhbGlhcyBtZXNz YWdlcy1idWZmZXItbWF4LWxpbmVzIG1lc3NhZ2UtbG9nLW1heCBpbmhpYml0LW51bC1ieXRlLWRl dGVjdGlvbiBpbmhpYml0LW51bGwtYnl0ZS1kZXRlY3Rpb24gKHNhdmVkLXZhbHVlIHNhdmVkLXZh cmlhYmxlLWNvbW1lbnQpIHB1dCBsb2FkLWRhbmdlcm91cy1saWJyYXJpZXMgIm5vIGxvbmdlciB1 c2VkLiIgZGVmYWxpYXMgY29tcGFyZS13aW5kb3ctY29uZmlndXJhdGlvbnMgd2luZG93LWNvbmZp Z3VyYXRpb24tZXF1YWwtcF0gNykjQDMyNSBGb3JtZXIgbGltaXQgb24gc3BlY2JpbmRpbmdzLCBu b3cgd2l0aG91dCBlZmZlY3QuClRoaXMgdmFyaWFibGUgdXNlZCB0byBsaW1pdCB0aGUgc2l6ZSBv ZiB0aGUgc3BlY3BkbCBzdGFjayB3aGljaCwKYW1vbmcgb3RoZXIgdGhpbmdzLCBob2xkcyBkeW5h bWljIHZhcmlhYmxlIGJpbmRpbmdzIGFuZCBgdW53aW5kLXByb3RlY3QnCmFjdGl2YXRpb25zLiAg VG8gcHJldmVudCBydW5hd2F5IHJlY3Vyc2lvbiwgdXNlIGBtYXgtbGlzcC1ldmFsLWRlcHRoJwpp bnN0ZWFkOyBpdCB3aWxsIGluZGlyZWN0bHkgbGltaXQgdGhlIHNwZWNwZGwgc3RhY2sgc2l6ZSBh cyB3ZWxsLh8KKGRlZnZhciBtYXgtc3BlY3BkbC1zaXplIDI1MDAgKCMkIC4gNjUwNjMpKQooYnl0 ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzAwXDMwNFwzMDVcMzAzI1wyMTBcMzA2XDMw N1wzMTBcIlwyMTBcMzA2XDMxMVwzMTJcIlwyMTBcMzA2XDMxM1wzMTRcIlwyMTBcMzA2XDMxNVwz MTZcIlwyMTBcMzA2XDMxN1wzMjBcIlwyMTBcMzA2XDMyMVwzMjJcIlwyMTBcMzA2XDMyM1wzMjRc IlwyMTBcMzA2XDMyNVwzMjZcIlwyMTBcMzA2XDMyN1wzMzBcIlwyMTBcMzA2XDMzMVwzMzJcIlwy MTBcMzA2XDMzM1wzMzRcIlwyMTBcMzA2XDMzNVwzMzZLXCJcMjEwXDMwNlwzMzdcMzQwS1wiXDIx MFwzMDZcMzQxXDM0MlwiXDIxMFwzMDZcMzQzXDM0NFwiXDIxMFwzMDZcMzQ1XDM0NlwiXDIxMFwz MDZcMzQ3XDM1MFwiXDIxMFwzMDZcMzUxXDM1MlwiXDIxMFwzNTNcMzUxXDM1NFwzMDMjXDIxMFwz MDZcMzU1XDM1NlwiXDIxMFwzNTNcMzU1XDM1N1wzMDMjXDIxMFwzMDZcMzYwXDM2MVwzMDIjXDIx MFwzNTNcMzYwXDM2MVwzNjIjXDIxMFwzNjNcMzY0XDM2NVwzMDJcMzY2JFwyMTBcMzYzXDM2N1wz NjVcMzAyXDM2NiRcMjA3IiBbbWFrZS1vYnNvbGV0ZS12YXJpYWJsZSBtYXgtc3BlY3BkbC1zaXpl IG5pbCAiMjkuMSIgbmF0aXZlLWNvbXAtZGVmZXJyZWQtY29tcGlsYXRpb24gaW5oaWJpdC1hdXRv bWF0aWMtbmF0aXZlLWNvbXBpbGF0aW9uIGRlZmFsaWFzIHNlbmQtc3RyaW5nIHByb2Nlc3Mtc2Vu ZC1zdHJpbmcgc2VuZC1yZWdpb24gcHJvY2Vzcy1zZW5kLXJlZ2lvbiBzdHJpbmc9IHN0cmluZy1l cXVhbCBzdHJpbmc8IHN0cmluZy1sZXNzcCBzdHJpbmc+IHN0cmluZy1ncmVhdGVycCBtb3ZlLW1h cmtlciBzZXQtbWFya2VyIHJwbGFjYSBzZXRjYXIgcnBsYWNkIHNldGNkciBiZWVwIGRpbmcgaW5k ZW50LXRvLWNvbHVtbiBpbmRlbnQtdG8gYmFja3dhcmQtZGVsZXRlLWNoYXIgZGVsZXRlLWJhY2t3 YXJkLWNoYXIgc2VhcmNoLWZvcndhcmQtcmVnZXhwIHJlLXNlYXJjaC1mb3J3YXJkIHNlYXJjaC1i YWNrd2FyZC1yZWdleHAgcmUtc2VhcmNoLWJhY2t3YXJkIGludC10by1zdHJpbmcgbnVtYmVyLXRv LXN0cmluZyBzdG9yZS1tYXRjaC1kYXRhIHNldC1tYXRjaC1kYXRhIGNobW9kIHNldC1maWxlLW1v ZGVzIG1rZGlyIG1ha2UtZGlyZWN0b3J5IHBvaW50LWF0LWVvbCBsaW5lLWVuZC1wb3NpdGlvbiBt YWtlLW9ic29sZXRlICJ1c2UgYGxpbmUtZW5kLXBvc2l0aW9uJyBvciBgcG9zLWVvbCcgaW5zdGVh ZC4iIHBvaW50LWF0LWJvbCBsaW5lLWJlZ2lubmluZy1wb3NpdGlvbiAidXNlIGBsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbicgb3IgYHBvcy1ib2wnIGluc3RlYWQuIiB1c2VyLW9yaWdpbmFsLWxvZ2lu LW5hbWUgdXNlci1sb2dpbi1uYW1lICIyOC4xIiBhdXRvbG9hZCBtYWtlLWRpcmVjdG9yeS1hdXRv bG9hZHMgImF1dG9sb2FkIiB0IHVwZGF0ZS1kaXJlY3RvcnktYXV0b2xvYWRzXSA1KSNAMTQ2MiBB ZGQgdG8gdGhlIHZhbHVlIG9mIEhPT0sgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OLgpGVU5DVElPTiBp cyBub3QgYWRkZWQgaWYgYWxyZWFkeSBwcmVzZW50LgoKVGhlIHBsYWNlIHdoZXJlIHRoZSBmdW5j dGlvbiBpcyBhZGRlZCBkZXBlbmRzIG9uIHRoZSBERVBUSApwYXJhbWV0ZXIuICBERVBUSCBkZWZh dWx0cyB0byAwLiAgQnkgY29udmVudGlvbiwgaXQgc2hvdWxkIGJlCmEgbnVtYmVyIGJldHdlZW4g LTEwMCBhbmQgMTAwIHdoZXJlIDEwMCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbgpzaG91bGQgYmUg YXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBsaXN0LCB3aGVyZWFzIC0xMDAgbWVhbnMgdGhhdAp0aGUg ZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBjb21lIGZpcnN0LgpTaW5jZSBub3RoaW5nIGlzICJhbHdh eXMiIHRydWUsIGRvbid0IHVzZSAxMDAgbm9yIC0xMDAuCldoZW4gdHdvIGZ1bmN0aW9ucyBoYXZl IHRoZSBzYW1lIGRlcHRoLCB0aGUgbmV3IG9uZSBnZXRzIGFkZGVkIGFmdGVyIHRoZQpvbGQgb25l IGlmIGRlcHRoIGlzIHN0cmljdGx5IHBvc2l0aXZlIGFuZCBiZWZvcmUgb3RoZXJ3aXNlLgoKRm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYSBzeW1ib2wgb3RoZXIgdGhhbiBuaWwg aXMKaW50ZXJwcmV0ZWQgYXMgYSBERVBUSCBvZiA5MC4KClRoZSBvcHRpb25hbCBmb3VydGggYXJn dW1lbnQsIExPQ0FMLCBpZiBub24tbmlsLCBzYXlzIHRvIG1vZGlmeQp0aGUgaG9vaydzIGJ1ZmZl ci1sb2NhbCB2YWx1ZSByYXRoZXIgdGhhbiBpdHMgZ2xvYmFsIHZhbHVlLgpUaGlzIG1ha2VzIHRo ZSBob29rIGJ1ZmZlci1sb2NhbCwgYW5kIGl0IG1ha2VzIHQgYSBtZW1iZXIgb2YgdGhlCmJ1ZmZl ci1sb2NhbCB2YWx1ZS4gIFRoYXQgYWN0cyBhcyBhIGZsYWcgdG8gcnVuIHRoZSBob29rCmZ1bmN0 aW9ucyBvZiB0aGUgZ2xvYmFsIHZhbHVlIGFzIHdlbGwgYXMgaW4gdGhlIGxvY2FsIHZhbHVlLgoK SE9PSyBzaG91bGQgYmUgYSBzeW1ib2wuICBJZiBIT09LIGlzIHZvaWQsIGl0IGlzIGZpcnN0IHNl dCB0bwpuaWwuICBJZiBIT09LJ3MgdmFsdWUgaXMgYSBzaW5nbGUgZnVuY3Rpb24sIGl0IGlzIGNo YW5nZWQgdG8gYQpsaXN0IG9mIGZ1bmN0aW9ucy4KCkZVTkNUSU9OIG1heSBiZSBhbnkgdmFsaWQg ZnVuY3Rpb24sIGJ1dCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBhCmZ1bmN0aW9uIHN5bWJvbCBh bmQgbm90IGEgbGFtYmRhIGZvcm0uICBVc2luZyBhIHN5bWJvbCB3aWxsCmVuc3VyZSB0aGF0IHRo ZSBmdW5jdGlvbiBpcyBub3QgcmUtYWRkZWQgaWYgdGhlIGZ1bmN0aW9uIGlzCmVkaXRlZCwgYW5k IHVzaW5nIGxhbWJkYSBmb3JtcyBtYXkgYWxzbyBoYXZlIGEgbmVnYXRpdmUKcGVyZm9ybWFuY2Ug aW1wYWN0IHdoZW4gcnVubmluZyBgYWRkLWhvb2snIGFuZCBgcmVtb3ZlLWhvb2snLgoKKGZuIEhP T0sgRlVOQ1RJT04gJm9wdGlvbmFsIERFUFRIIExPQ0FMKR8KKGRlZmFsaWFzICdhZGQtaG9vayAj WzEwMjYgIlwzMDAEIVwyMDRcbgADXDMwMUxcMjEwXDMwMgQhXDIwNBUAXDMwMwRcMzAxXCJcMjEw AVwyNDdcMjA0JQABXDIwM1wiAFwzMDRcMjAyIwBcMzA1XDI2MgJcMjExXDIwMzkAXDMwNgQhXDIw NE8AXDMwNwQhXDMxMENMXDIxMFwyMDJPAFwzMDYEIVwyMDNPAANKOlwyMDNMAFwzMTAESj5cMjA0 TwBcMzEwXDI2MgFcMjExXDIwM1gAA0pcMjAyWwBcMzExBCFcMjExPFwyMDNmAFwzMTIBIVwyMDNq AFwyMTFDXDI2MgEDAVwyMzVcMjA0FwEEXDMxM04DXDMwNVVcMjA0XDMyNwBcMjExXDIwNFwyMTUA XDMxNFwzMTUhXDI2MgFcMjExXDMwMUxcMjEwXDMxNgYGXDMxMwMjXDIxMAJcMjAzXDIyNQBcMzA3 ASFcMjEwAlwyMDNcMjUwAFwyMTFcMzE3XDMyMAJcIlwzMTdcMzIxA1wiQlwyNjIBXDIwMlwyNjQA XDIxMVwzMTdcMzIyAlwiXDMxN1wzMjMDXCJCXDI2MgEFAUAgXDIzNlwyMTFcMjAzXDMwNgBcMjEx BgZcMjQxXDI2NgNcMjAyXDMyNwABQQYHBgdCXDIxMVwyNjIDA0AgQiFcMjY2A1wzMDUEV1wyMDNc MzQ2AFwzMjQCBgZDXCJcMjAyXDM1MQAEAkJcMjYyAlwyMTFcMjAzFgECXDIwM1wzNzAAXDIxMUpc MjAyXDM3MwBcMzExASFcMjExXDIwMxUBXDMyNVwzMDUGBldcMjAzCwEDXDIwMg4BXDMyNgQhXDMx N1wzMjcEXCJcIlwyNjIDXDIxMFwyMTABXDIwMzYBAzlcMjAzMgEDXDMzME5cMjAzMgEEXDMzMU5c MjA0MgFcMzE2BVwzMzFcMzMwI1wyMTAEAUxcMjA3XDMwMwUCXCJcMjA3IiBbYm91bmRwIG5pbCBk ZWZhdWx0LWJvdW5kcCBzZXQtZGVmYXVsdCA5MCAwIGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIG1h a2UtbG9jYWwtdmFyaWFibGUgdCBkZWZhdWx0LXZhbHVlIGZ1bmN0aW9ucCBob29rLS1kZXB0aC1h bGlzdCBtYWtlLXN5bWJvbCAiZGVwdGgtYWxpc3QiIHB1dCBtYWtlLWNsb3N1cmUgI1swICJcMzAw SlwyMDciIFtWMF0gMV0gI1syNTcgIlwzMDABTFwyMDciIFtWMF0gMyAiXG5cbihmbiBWMTEwMSki XSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBkZWZhdWx0LXZhbHVlXSAyXSAjWzI1NyAiXDMwMVwz MDACXCJcMjA3IiBbVjAgc2V0LWRlZmF1bHRdIDQgIlxuXG4oZm4gVjExMDEpIl0gYXBwZW5kIHNv cnQgY29weS1zZXF1ZW5jZSAjWzUxNCAiXDMwMQJcMzAwXDMwMlwzMDNcMzA0JVwzMDECXDMwMFwz MDJcMzAzXDMwNCVXXDIwNyIgW1YwIGFsaXN0LWdldCAwIG5pbCBlcV0gOSAiXG5cbihmbiBGMSBG MikiXSBwZXJtYW5lbnQtbG9jYWwtaG9vayBwZXJtYW5lbnQtbG9jYWxdIDEyICgjJCAuIDY2ODYw KV0pI0A2MzggUmVtb3ZlIGZyb20gdGhlIHZhbHVlIG9mIEhPT0sgdGhlIGZ1bmN0aW9uIEZVTkNU SU9OLgpIT09LIHNob3VsZCBiZSBhIHN5bWJvbCwgYW5kIEZVTkNUSU9OIG1heSBiZSBhbnkgdmFs aWQgZnVuY3Rpb24uICBJZgpGVU5DVElPTiBpc24ndCB0aGUgdmFsdWUgb2YgSE9PSywgb3IsIGlm IEZVTkNUSU9OIGRvZXNuJ3QgYXBwZWFyIGluIHRoZQpsaXN0IG9mIGhvb2tzIHRvIHJ1biBpbiBI T09LLCB0aGVuIG5vdGhpbmcgaXMgZG9uZS4gIFNlZSBgYWRkLWhvb2snLgoKVGhlIG9wdGlvbmFs IHRoaXJkIGFyZ3VtZW50LCBMT0NBTCwgaWYgbm9uLW5pbCwgc2F5cyB0byBtb2RpZnkKdGhlIGhv b2sncyBidWZmZXItbG9jYWwgdmFsdWUgcmF0aGVyIHRoYW4gaXRzIGRlZmF1bHQgdmFsdWUuCgpJ bnRlcmFjdGl2ZWx5LCBwcm9tcHQgZm9yIHRoZSB2YXJpb3VzIGFyZ3VtZW50cyAoc2tpcHBpbmcg bG9jYWwKdW5sZXNzIEhPT0sgaGFzIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBmdW5jdGlvbnMpLiAg SWYgbXVsdGlwbGUKZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gdW5kZXIg YHByaW5jJywgdGhlIGZpcnN0Cm9uZSB3aWxsIGJlIHJlbW92ZWQuCgooZm4gSE9PSyBGVU5DVElP TiAmb3B0aW9uYWwgTE9DQUwpHwooZGVmYWxpYXMgJ3JlbW92ZS1ob29rICNbNzcwICJcMzAwAyFc MjA0XG4AAlwzMDFMXDIxMFwzMDIDIVwyMDQVAFwzMDMDXDMwMVwiXDIxMFwyMTFcMjA1HQBcMzA0 AyE/P1wyMDVcMjc2AFwzMDQDIVwyMDM3AAJKOlwyMDM0AFwzMDUDSj5cMjA0NwBcMzA1XDI2MgFc MjExXDIwM0AAAkpcMjAyQwBcMzA2AyFcMzAxATxcMjAzUAABQFwzMDc9XDIwM18AAQRcMjMyXDIw M28AAVwyNjIBXDMwMVwyNjICXDIwMm8AAwJcMjM1QFwyMTFcMjYyAlwyMDNvAFwzMTABA1wiXDI2 MgJcMjExXDIwM1wyNDYABFwzMTFOXDIxMVwyMDVcMjA2AANcMjAzXDIwMwBcMjExSlwyMDJcMjA2 AFwzMDYBIQIBXDIzNlwyMTFcMjAzXDI0NAAFXDIwM1wyMzQAAlwzMTACBFwiTFwyNjYEXDIwMlwy NDYAXDMwMwNcMzEwAwVcIlwiXDIxMFwyNjYDAlwyMDRcMjU3AFwzMDMFA1wiXDIwNwFcMzEyXDIz MlwyMDNcMjcxAFwzMTMFIVwyMDcEAkxcMjY2XDIwMlwyMDciIFtib3VuZHAgbmlsIGRlZmF1bHQt Ym91bmRwIHNldC1kZWZhdWx0IGxvY2FsLXZhcmlhYmxlLXAgdCBkZWZhdWx0LXZhbHVlIGxhbWJk YSByZW1xIGhvb2stLWRlcHRoLWFsaXN0ICh0KSBraWxsLWxvY2FsLXZhcmlhYmxlXSAxMyAoIyQg LiA2OTYwNikgKGJ5dGUtY29kZSAiXDMwMSA5XDIwNVxuAFwzMDJcMzAxICFcMzAzXDMwNFwzMDVc MzA2BFwiCFwzMDdcMzEwXDMxMVwyMTEGCCYHIVwzMTIBIVwyMDUyAFwyMTFKXDIwNTIAXDMxMwEh P1wyMDYyAFwzMTRcMzE1XDMxNgNcIiFcMzE3XDMyMAJcMjAzPQADSlwyMDJAAFwzMTMEIVwiXDMy MVwzMDRcMzE1XDMyMgVcMjAzTQBcMzIzXDIwMk4AXDMyNFwiA1wzMTFcMzEwXDMxMVwzMjUmBgJc MzExXDIxMVwzMjYlAwEERVwyMDciIFtvYmFycmF5IHZhcmlhYmxlLWF0LXBvaW50IHN5bWJvbC1u YW1lIGludGVybiBjb21wbGV0aW5nLXJlYWQgZm9ybWF0LXByb21wdCAiSG9vayB2YXJpYWJsZSIg Ym91bmRwIHQgbmlsIGxvY2FsLXZhcmlhYmxlLXAgZGVmYXVsdC12YWx1ZSB5LW9yLW4tcCBmb3Jt YXQgIiVzIGhhcyBhIGJ1ZmZlci1sb2NhbCBiaW5kaW5nLCB1c2UgdGhhdD8gIiBtYXBjYXIgI1sy NTcgIlwzMDFcMzAyXDMwM1wiGFwzMDRcMjE2CBhcMzA1ASEpXDIxMHIIcVwyMTBcMzA2ICsBQlwy MDciIFtzdGFuZGFyZC1vdXRwdXQgZ2VuZXJhdGUtbmV3LWJ1ZmZlciAiICpzdHJpbmctb3V0cHV0 KiIgdCAjWzAgIlwzMDEIIVwyMDciIFtzdGFuZGFyZC1vdXRwdXQga2lsbC1idWZmZXJdIDJdIHBy aW4xIGJ1ZmZlci1zdHJpbmddIDQgIlxuXG4oZm4gWCkiXSBhbGlzdC1nZXQgIiVzIGhvb2sgdG8g cmVtb3ZlOiAiICJCdWZmZXItbG9jYWwiICJHbG9iYWwiIHNldC12YXJpYWJsZS12YWx1ZS1oaXN0 b3J5IHN0cmluZz1dIDEyKV0pI0AzNTMgQmluZCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIEJJTkRF UlMgdGhlbiBldmFsIEJPRFkuClRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBmb3JtIGluIEJPRFkgaXMg cmV0dXJuZWQuCkVhY2ggZWxlbWVudCBvZiBCSU5ERVJTIGlzIGEgbGlzdCAoU1lNQk9MIFZBTFVF Rk9STSkgdGhhdCBiaW5kcwpTWU1CT0wgdG8gdGhlIHZhbHVlIG9mIFZBTFVFRk9STS4KClRoZSBt YWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIG1hY3JvIGFuZCBgbGV0Jy9gbGV0KicgaXMgdGhh dAphbGwgc3ltYm9scyBhcmUgYm91bmQgYmVmb3JlIGFueSBvZiB0aGUgVkFMVUVGT1JNcyBhcmUg ZXZhbGxlZC4KCihmbiBCSU5ERVJTICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ2xldHJlYyAnKG1h Y3JvIC4gI1szODUgIlwzMDFcMzAyAwhcIlwyMDQjAAJcMjAzIwBcMzAyA1wyMTFAQUBcIlwyMDQj AAJcMjExQVwyNjIEXDI0MgFCXDI2MgFcMjAyCAACXDIwNC0AXDMwMwIhXDIwMjwAXDMwNFwzMDVc MzA2BVwiXDMwN1wzMDVcMzEwBgdcIgVcIkJCAVwyMDRBAFwyMDdcMjExOVwyMDNYAAFBXDIwNFgA XDIxMQJAQD1cMjAzWAABQEFAXDIwN1wzMTECXDIzNwJFXDIwNyIgW21hY3JvZXhwYW5kLWFsbC1l bnZpcm9ubWVudCBuaWwgbWFjcm9leHAtLWZncmVwIG1hY3JvZXhwLXByb2duIGxldCBtYXBjYXIg Y2FyIGFwcGVuZCAjWzI1NyAiXDMwMAFCXDIwNyIgW3NldHFdIDMgIlxuXG4oZm4gQklOREVSKSJd IGxldCpdIDkgKCMkIC4gNzE2MTYpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIx MFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgbGV0cmVjIGVkZWJ1Zy1mb3JtLXNwZWMg bGV0IGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAxXSA0KSNANjQgTGlrZSBgbGV0 JyBidXQgdXNpbmcgZHluYW1pYyBzY29waW5nLgoKKGZuIEJJTkRFUlMgJnJlc3QgQk9EWSkfCihk ZWZhbGlhcyAnZGxldCAnKG1hY3JvIC4gI1szODUgIlwzMDBcMzAxXDMwMlwzMDNcMzA0BgZcIlwz MDAGBgYGQkJDXCJCQlwyMDciIFtsZXQgKF8pIGFwcGVuZCBtYXBjYXIgI1syNTcgIlwzMDABOlwy MDMLAAFAXDIwMlxmAAFEXDIwNyIgW2RlZnZhcl0gMyAiXG5cbihmbiBCSU5ERVIpIl1dIDkgKCMk IC4gNzI0OTUpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMw NiNcMjA3IiBbZnVuY3Rpb24tcHV0IGRsZXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRl YnVnLWZvcm0tc3BlYyBsZXRdIDUpI0AxMTYxIFJ1biBCT0RZLCB1c2luZyB3cmFwcGVyIGZ1bmN0 aW9ucyBmcm9tIEhPT0sgd2l0aCBhZGRpdGlvbmFsIEFSR1MuCkhPT0sgaXMgYW4gYWJub3JtYWwg aG9vay4gIEVhY2ggaG9vayBmdW5jdGlvbiBpbiBIT09LICJ3cmFwcyIKYXJvdW5kIHRoZSBwcmVj ZWRpbmcgb25lcywgbGlrZSBhIHNldCBvZiBuZXN0ZWQgYGFyb3VuZCcgYWR2aWNlcy4KCkVhY2gg aG9vayBmdW5jdGlvbiBzaG91bGQgYWNjZXB0IGFuIGFyZ3VtZW50IGxpc3QgY29uc2lzdGluZyBv ZiBhCmZ1bmN0aW9uIEZVTiwgZm9sbG93ZWQgYnkgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGlu IEFSR1MuCgpUaGUgZmlyc3QgaG9vayBmdW5jdGlvbiBpbiBIT09LIGlzIHBhc3NlZCBhIEZVTiB0 aGF0LCBpZiBpdCBpcyBjYWxsZWQKd2l0aCBhcmd1bWVudHMgQVJHUywgcGVyZm9ybXMgQk9EWSAo aS5lLiwgdGhlIGRlZmF1bHQgb3BlcmF0aW9uKS4KVGhlIEZVTiBwYXNzZWQgdG8gZWFjaCBzdWNj ZXNzaXZlIGhvb2sgZnVuY3Rpb24gaXMgZGVmaW5lZCBiYXNlZApvbiB0aGUgcHJlY2VkaW5nIGhv b2sgZnVuY3Rpb25zOyBpZiBjYWxsZWQgd2l0aCBhcmd1bWVudHMgQVJHUywKaXQgZG9lcyB3aGF0 IHRoZSBgd2l0aC13cmFwcGVyLWhvb2snIGNhbGwgd291bGQgZG8gaWYgdGhlCnByZWNlZGluZyBo b29rIGZ1bmN0aW9ucyB3ZXJlIHRoZSBvbmx5IG9uZXMgcHJlc2VudCBpbiBIT09LLgoKRWFjaCBo b29rIGZ1bmN0aW9uIG1heSBjYWxsIGl0cyBGVU4gYXJndW1lbnQgYXMgbWFueSB0aW1lcyBhcyBp dCB3aXNoZXMsCmluY2x1ZGluZyBuZXZlci4gIEluIHRoYXQgY2FzZSwgc3VjaCBhIGhvb2sgZnVu Y3Rpb24gYWN0cyB0byByZXBsYWNlCnRoZSBkZWZhdWx0IGRlZmluaXRpb24gYWx0b2dldGhlciwg YW5kIGFueSBwcmVjZWRpbmcgaG9vayBmdW5jdGlvbnMuCk9mIGNvdXJzZSwgYSBzdWJzZXF1ZW50 IGhvb2sgZnVuY3Rpb24gbWF5IGRvIHRoZSBzYW1lIHRoaW5nLgoKRWFjaCBob29rIGZ1bmN0aW9u IGRlZmluaXRpb24gaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIEZVTiBwYXNzZWQKdG8gdGhlIG5l eHQgaG9vayBmdW5jdGlvbiwgaWYgYW55LiAgVGhlIGxhc3QgKG9yICJvdXRlcm1vc3QiKQpGVU4g aXMgdGhlbiBjYWxsZWQgb25jZS4KCihmbiBIT09LIEFSR1MgJnJlc3QgQk9EWSkfCihkZWZhbGlh cyAnd2l0aC13cmFwcGVyLWhvb2sgJyhtYWNybyAuICNbNjQyICJcMzAwAwMDQkJCXDIwNyIgW3N1 YnItLXdpdGgtd3JhcHBlci1ob29rLW5vLXdhcm5pbmdzXSA3ICgjJCAuIDcyODc0KV0pKQooYnl0 ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIxMFwzMDdcMzAxXDMx MFwzMTEjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLXdyYXBwZXItaG9vayBsaXNwLWluZGVudC1m dW5jdGlvbiAyIHB1dCBlZGVidWctZm9ybS1zcGVjIChmb3JtIHNleHAgYm9keSkgbWFrZS1vYnNv bGV0ZSAidXNlIGEgPGZvbz4tZnVuY3Rpb24gdmFyaWFibGUgbW9kaWZpZWQgYnkgYGFkZC1mdW5j dGlvbicuIiAiMjQuNCJdIDUpI0A5MSBMaWtlICh3aXRoLXdyYXBwZXItaG9vayBIT09LIEFSR1Mg Qk9EWSksIGJ1dCB3aXRob3V0IHdhcm5pbmdzLgoKKGZuIEhPT0sgQVJHUyAmcmVzdCBCT0RZKR8K KGRlZmFsaWFzICdzdWJyLS13aXRoLXdyYXBwZXItaG9vay1uby13YXJuaW5ncyAnKG1hY3JvIC4g I1s2NDIgIlwzMDBcMzAxIVwzMDBcMzAyIVwzMDBcMzAzIVwzMDBcMzA0IVwzMDUBXDMwNgYGBgYG BkVcMzA3XDMxMAYJRFwzMDdcMzExXDMxMlwzMTMGDURFXDMxNAYJXDMxNQYNXDMxNgYQREVcMzE3 Bg1cMjU3BVwzMjBcMzEzBg5EXDMyMVwzMDYGEAYQXDMyMgYRRlwzMTQGDwYTBhMGE1wyNTcFRVwz MTYGEUQGEEYGDUZGXDMyMFwzMDYGDgYOQkIGXG5FRkVEQ1wzMTQDBlxuXDIxMTlcMjA1fwBcMzA3 XDMyM1wzMjQGDkREXDMyNVwzMjQGD0RERVwzMjYGXGZCXDI1NwVFXDIwNyIgW21ha2Utc3ltYm9s ICJmdW5zIiAiZ2xvYmFsIiAiYXJncyIgInJ1bnJlc3RvZmhvb2siIGxldHJlYyBsYW1iZGEgaWYg Y29uc3AgZXEgdCBjYXIgZnVuY2FsbCBhcHBlbmQgY2RyIG5pbCBhcHBseSBhcHBseS1wYXJ0aWFs bHkgJnJlc3QgbG9jYWwtdmFyaWFibGUtcCBxdW90ZSBkZWZhdWx0LXZhbHVlIGxpc3RdIDI2ICgj JCAuIDc0NDA4KV0pKQoocHV0ICdzdWJyLS13aXRoLXdyYXBwZXItaG9vay1uby13YXJuaW5ncyAn ZWRlYnVnLWZvcm0tc3BlYyAnKGZvcm0gc2V4cCBkZWYtYm9keSkpI0A5NTcgQWRkIEVMRU1FTlQg dG8gdGhlIHZhbHVlIG9mIExJU1QtVkFSIGlmIGl0IGlzbid0IHRoZXJlIHlldC4KVGhlIHRlc3Qg Zm9yIHByZXNlbmNlIG9mIEVMRU1FTlQgaXMgZG9uZSB3aXRoIGBlcXVhbCcsIG9yIHdpdGgKQ09N UEFSRS1GTiBpZiB0aGF0J3Mgbm9uLW5pbC4KSWYgRUxFTUVOVCBpcyBhZGRlZCwgaXQgaXMgYWRk ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCwKdW5sZXNzIHRoZSBvcHRpb25hbCBhcmd1 bWVudCBBUFBFTkQgaXMgbm9uLW5pbCwgaW4gd2hpY2ggY2FzZQpFTEVNRU5UIGlzIGFkZGVkIGF0 IHRoZSBlbmQuCkxJU1QtVkFSIHNob3VsZCBub3QgcmVmZXIgdG8gYSBsZXhpY2FsIHZhcmlhYmxl LgoKVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbmV3IHZhbHVlIG9mIExJU1QtVkFSLgoKVGhpcyBp cyBoYW5keSB0byBhZGQgc29tZSBlbGVtZW50cyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywK YnV0IHBsZWFzZSBkbyBub3QgYWJ1c2UgaXQgaW4gRWxpc3AgY29kZSwgd2hlcmUgeW91IGFyZSB1 c3VhbGx5CmJldHRlciBvZmYgdXNpbmcgYHB1c2gnIG9yIGBjbC1wdXNobmV3Jy4KCklmIHlvdSB3 YW50IHRvIHVzZSBgYWRkLXRvLWxpc3QnIG9uIGEgdmFyaWFibGUgdGhhdCBpcyBub3QKZGVmaW5l ZCB1bnRpbCBhIGNlcnRhaW4gcGFja2FnZSBpcyBsb2FkZWQsIHlvdSBzaG91bGQgcHV0IHRoZQpj YWxsIHRvIGBhZGQtdG8tbGlzdCcgaW50byBhIGhvb2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1 biBvbmx5CmFmdGVyIGxvYWRpbmcgdGhlIHBhY2thZ2UuICBgZXZhbC1hZnRlci1sb2FkJyBwcm92 aWRlcyBvbmUgd2F5IHRvCmRvIHRoaXMuICBJbiBzb21lIGNhc2VzIG90aGVyIGhvb2tzLCBzdWNo IGFzIG1ham9yIG1vZGUgaG9va3MsCmNhbiBkbyB0aGUgam9iLgoKKGZuIExJU1QtVkFSIEVMRU1F TlQgJm9wdGlvbmFsIEFQUEVORCBDT01QQVJFLUZOKR8KKGRlZmFsaWFzICdhZGQtdG8tbGlzdCAj WzEwMjYgIlwyMTFcMzAwXDI2N1wyMDIcAAIESlwyMzVcMjAyNAACBEo+XDIwMjQAXDMwMQMFSlwi XDIwMjQAA0pcMjExXDIwMzEAAQQCQFwiXDIwNDEAXDIxMUFcMjYyAVwyMDIeAFwyMTFcMjYyAVwy MDM6AANKXDIwNwMCXDIwM0gAXDMwMgVKBUNcIlwyMDJMAAMFSkJMXDIwNyIgWyNzKGhhc2gtdGFi bGUgc2l6ZSAzIHRlc3QgZXEgcmVoYXNoLXNpemUgMS41IHJlaGFzaC10aHJlc2hvbGQgMC44MTI1 IHB1cmVjb3B5IHQgZGF0YSAobmlsIDYgZXEgMTMgZXFsIDIwKSkgbWVtcWwgYXBwZW5kXSA4ICgj JCAuIDc1MTE0KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5j dGlvbi1wdXQgYWRkLXRvLWxpc3QgY29tcGlsZXItbWFjcm8gYWRkLXRvLWxpc3QtLWFub24tY21h Y3JvXSA0KSNANTcgCgooZm4gRVhQIExJU1QtVkFSIEVMRU1FTlQgJm9wdGlvbmFsIEFQUEVORCBD T01QQVJFLUZOKR8KKGRlZmFsaWFzICdhZGQtdG8tbGlzdC0tYW5vbi1jbWFjcm8gI1sxMjgzICID XDI0MlwzMDE9XDIwMxUAXDMwMgRBQCFcMjA0FQBcMzAzAiFcMjA0FwAEXDIwNwNBQFwzMDQDCFwi XDMwNVwzMDYDXCJcMzA3XDMxMAIFI1wzMTEGByFcMjAzMwAGBlwyMDI2AFwzMTJcMzEzIVwzMTQG BlwyMDNMAFwzMTVcMzE2IVwyMTBcMzE3AgYHXDMyMAZcblwyNTcFXDIwMlEAXDMyMQIGB0UGBgYG XDIwM2cAXDMyMgYIXDMyMwZcblwzMjQGCERFRVwyMDJsAFwzMjUEBglFRgEGCT1cMjAzegBcMjEx XDI2NlwyMDJcMjAyXDIwNABcMzI2AgZcbkRDAlwiXDI2NlwyMDJcMzI3IFwyMDRcMjEyAFwyMDdc MzMwXDMzMVwzMDEEREQCRVwyMDciIFtsZXhpY2FsLWJpbmRpbmcgcXVvdGUgc3BlY2lhbC12YXJp YWJsZS1wIG1hY3JvZXhwLWNvbnN0LXAgZXZhbCBmb3JtYXQtbWVzc2FnZSAiYGFkZC10by1saXN0 JyBjYW4ndCB1c2UgbGV4aWNhbCB2YXIgYCVzJzsgdXNlIGBwdXNoJyBvciBgY2wtcHVzaG5ldyci IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcblwyMzZcMjA1XG4AXDMwM1wzMDBcMzA0XCJcMjA3IiBb VjAgVjEgYnl0ZS1jb21waWxlLS1sZXhpY2FsLWVudmlyb25tZW50IGJ5dGUtY29tcGlsZS1yZXBv cnQtZXJyb3IgOmZpbGxdIDNdIG1hY3JvZXhwLWNvcHlhYmxlLXAgbWFrZS1zeW1ib2wgIngiIGlm IHJlcXVpcmUgY2wtbGliIGNsLW1lbWJlciA6dGVzdCBtZW1iZXIgc2V0cSBhcHBlbmQgbGlzdCBw dXNoIG1hY3JvZXhwLWxldCogbWFjcm9leHAtY29tcGlsaW5nLXAgcHJvZ24gbWFjcm9leHAtLWZ1 bmNhbGwtaWYtY29tcGlsZWRdIDE5ICgjJCAuIDc2NTA2KV0pI0A2NjggQWRkIEVMRU1FTlQgdG8g dGhlIHZhbHVlIG9mIExJU1QtVkFSIGlmIGl0IGlzbid0IHRoZXJlIHlldC4KVGhlIHRlc3QgZm9y IHByZXNlbmNlIG9mIEVMRU1FTlQgaXMgZG9uZSB3aXRoIGBlcScuCgpUaGUgdmFsdWUgb2YgTElT VC1WQVIgaXMga2VwdCBvcmRlcmVkIGJhc2VkIG9uIHRoZSBPUkRFUgpwYXJhbWV0ZXIuCgpJZiB0 aGUgdGhpcmQgb3B0aW9uYWwgYXJndW1lbnQgT1JERVIgaXMgYSBudW1iZXIgKGludGVnZXIgb3IK ZmxvYXQpLCBzZXQgdGhlIGVsZW1lbnQncyBsaXN0IG9yZGVyIHRvIHRoZSBnaXZlbiB2YWx1ZS4g IElmCk9SREVSIGlzIG5pbCBvciBvbWl0dGVkLCBkbyBub3QgY2hhbmdlIHRoZSBudW1lcmljIG9y ZGVyIG9mCkVMRU1FTlQuICBJZiBPUkRFUiBoYXMgYW55IG90aGVyIHZhbHVlLCByZW1vdmUgdGhl IG51bWVyaWMgb3JkZXIKb2YgRUxFTUVOVCBpZiBpdCBoYXMgb25lLgoKVGhlIGxpc3Qgb3JkZXIg Zm9yIGVhY2ggZWxlbWVudCBpcyBzdG9yZWQgaW4gTElTVC1WQVIncwpgbGlzdC1vcmRlcicgcHJv cGVydHkuCkxJU1QtVkFSIGNhbm5vdCByZWZlciB0byBhIGxleGljYWwgdmFyaWFibGUuCgpUaGUg cmV0dXJuIHZhbHVlIGlzIHRoZSBuZXcgdmFsdWUgb2YgTElTVC1WQVIuCgooZm4gTElTVC1WQVIg RUxFTUVOVCAmb3B0aW9uYWwgT1JERVIpHwooZGVmYWxpYXMgJ2FkZC10by1vcmRlcmVkLWxpc3Qg I1s3NzAgIgJcMzAwTkNcMjExXDI0MlwyMDQWAFwzMDEEXDMwMANcMzAyXDMwM1wzMDRcMzA1XDMw NiRcMjQwI1wyMTABXDIwMyYAXDMwNwMDXDI0N1wyMDVcIgADA1wyNDIjXDIxMAIESj5cMjA0NAAD AwVKQkxcMjEwA1wzMTAFSlwzMTFcMzEyBVwiXCJMXDIwNyIgW2xpc3Qtb3JkZXIgcHV0IG1ha2Ut aGFzaC10YWJsZSA6d2Vha25lc3Mga2V5IDp0ZXN0IGVxIHB1dGhhc2ggc29ydCBtYWtlLWNsb3N1 cmUgI1s1MTQgIlwzMDECXDMwMFwyNDJcIlwzMDECXDMwMFwyNDJcIgFcMjAzFgBcMjExXDIwMxYA AQFXXDIwNwFcMjA3IiBbVjAgZ2V0aGFzaF0gNiAiXG5cbihmbiBBIEIpIl1dIDEzICgjJCAuIDc3 MzkxKV0pI0A3MzMgQWRkIE5FV0VMVCB0byB0aGUgaGlzdG9yeSBsaXN0IHN0b3JlZCBpbiB0aGUg dmFyaWFibGUgSElTVE9SWS1WQVIuClJldHVybiB0aGUgbmV3IGhpc3RvcnkgbGlzdC4KSWYgTUFY RUxUIGlzIG5vbi1uaWwsIGl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGhp c3RvcnkuCk90aGVyd2lzZSwgdGhlIG1heGltdW0gaGlzdG9yeSBsZW5ndGggaXMgdGhlIHZhbHVl IG9mIHRoZSBgaGlzdG9yeS1sZW5ndGgnCnByb3BlcnR5IG9uIHN5bWJvbCBISVNUT1JZLVZBUiwg aWYgc2V0LCBvciB0aGUgdmFsdWUgb2YgdGhlIGBoaXN0b3J5LWxlbmd0aCcKdmFyaWFibGUuICBU aGUgcG9zc2libGUgdmFsdWVzIG9mIG1heGltdW0gbGVuZ3RoIGhhdmUgdGhlIHNhbWUgbWVhbmlu ZyBhcwp0aGUgdmFsdWVzIG9mIGBoaXN0b3J5LWxlbmd0aCcuClJlbW92ZSBkdXBsaWNhdGVzIG9m IE5FV0VMVCBpZiBgaGlzdG9yeS1kZWxldGUtZHVwbGljYXRlcycgaXMgbm9uLW5pbC4KSWYgb3B0 aW9uYWwgZm91cnRoIGFyZyBLRUVQLUFMTCBpcyBub24tbmlsLCBhZGQgTkVXRUxUIHRvIGhpc3Rv cnkgZXZlbgppZiBpdCBpcyBlbXB0eSBvciBkdXBsaWNhdGVzIHRoZSBtb3N0IHJlY2VudCBlbnRy eSBpbiB0aGUgaGlzdG9yeS4KSElTVE9SWS1WQVIgY2Fubm90IHJlZmVyIHRvIGEgbGV4aWNhbCB2 YXJpYWJsZS4KCihmbiBISVNUT1JZLVZBUiBORVdFTFQgJm9wdGlvbmFsIE1BWEVMVCBLRUVQLUFM TCkfCihkZWZhbGlhcyAnYWRkLXRvLWhpc3RvcnkgI1sxMDI2ICIBXDIwNA0AA1wzMDBOXDIwNgsA CFwyNjICA0pcMzAyATxcMjA1YwACXDIwNCUABDtcMjAzJQAER1wzMDNWXDIwNWMAAlwyMDQxAAFA BVwyMzI/XDIwNWMACVwyMDM7AFwzMDQFA1wiXDI2MgIEAkJcMjYyAgNcMjUwXDIwM2AAXDMwMwRZ XDIwM1EAXDMwMlwyNjICXDIwMmAAA1MCXDIzM1wyNjIBXDIxMTpcMjAzYABcMjExXDMwMlwyNDFc MjEwBQJMXDIwNyIgW2hpc3RvcnktbGVuZ3RoIGhpc3RvcnktZGVsZXRlLWR1cGxpY2F0ZXMgbmls IDAgZGVsZXRlXSA5ICgjJCAuIDc4NDQ0KV0pI0A2MiBJZiBub24tbmlsLCBgcnVuLW1vZGUtaG9v a3MnIHNob3VsZCBkZWxheSBydW5uaW5nIHRoZSBob29rcy4fCihkZWZ2YXIgZGVsYXktbW9kZS1o b29rcyBuaWwgKCMkIC4gNzk0OTApKSNANDcgTGlzdCBvZiBkZWxheWVkIG1vZGUgaG9va3Mgd2Fp dGluZyB0byBiZSBydW4uHwooZGVmdmFyIGRlbGF5ZWQtbW9kZS1ob29rcyBuaWwgKCMkIC4gNzk1 OTkpKQooYnl0ZS1jb2RlICJcMzAwXDMwMSFcMjEwXDMwMlwzMDNcMzA0XDMwNSNcMjA3IiBbbWFr ZS12YXJpYWJsZS1idWZmZXItbG9jYWwgZGVsYXllZC1tb2RlLWhvb2tzIHB1dCBkZWxheS1tb2Rl LWhvb2tzIHBlcm1hbmVudC1sb2NhbCB0XSA0KSNAOTkgTGlzdCBvZiBkZWxheWVkIDphZnRlci1o b29rIGZvcm1zIHdhaXRpbmcgdG8gYmUgcnVuLgpUaGVzZSBmb3JtcyBjb21lIGZyb20gYGRlZmlu ZS1kZXJpdmVkLW1vZGUnLh8KKGRlZnZhciBkZWxheWVkLWFmdGVyLWhvb2stZnVuY3Rpb25zIG5p bCAoIyQgLiA3OTgzMykpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZGVsYXllZC1hZnRl ci1ob29rLWZ1bmN0aW9ucykjQDY1IE5vcm1hbCBob29rIHJ1biBpbiBtYWpvciBtb2RlIGZ1bmN0 aW9ucywgYmVmb3JlIHRoZSBtb2RlIGhvb2tzLh8KKGRlZnZhciBjaGFuZ2UtbWFqb3ItbW9kZS1h ZnRlci1ib2R5LWhvb2sgbmlsICgjJCAuIDgwMDUwKSkjQDU4IE5vcm1hbCBob29rIHJ1biBhdCB0 aGUgdmVyeSBlbmQgb2YgbWFqb3IgbW9kZSBmdW5jdGlvbnMuHwooZGVmdmFyIGFmdGVyLWNoYW5n ZS1tYWpvci1tb2RlLWhvb2sgbmlsICgjJCAuIDgwMTc5KSkjQDY4NCBSdW4gbW9kZSBob29rcyBg ZGVsYXllZC1tb2RlLWhvb2tzJyBhbmQgSE9PS1MsIG9yIGRlbGF5IEhPT0tTLgpDYWxsIGBoYWNr LWxvY2FsLXZhcmlhYmxlcycgdG8gc2V0IHVwIGZpbGUgbG9jYWwgYW5kIGRpcmVjdG9yeSBsb2Nh bAp2YXJpYWJsZXMuCgpJZiB0aGUgdmFyaWFibGUgYGRlbGF5LW1vZGUtaG9va3MnIGlzIG5vbi1u aWwsIGRvZXMgbm90IGRvIGFueXRoaW5nLApqdXN0IGFkZHMgdGhlIEhPT0tTIHRvIHRoZSBsaXN0 IGBkZWxheWVkLW1vZGUtaG9va3MnLgpPdGhlcndpc2UsIHJ1bnMgaG9va3MgaW4gdGhlIHNlcXVl bmNlOiBgY2hhbmdlLW1ham9yLW1vZGUtYWZ0ZXItYm9keS1ob29rJywKYGRlbGF5ZWQtbW9kZS1o b29rcycgKGluIHJldmVyc2Ugb3JkZXIpLCBIT09LUywgdGhlbiBydW5zCmBoYWNrLWxvY2FsLXZh cmlhYmxlcycsIHJ1bnMgdGhlIGhvb2sgYGFmdGVyLWNoYW5nZS1tYWpvci1tb2RlLWhvb2snLCBh bmQKZmluYWxseSBldmFsdWF0ZXMgdGhlIGZ1bmN0aW9ucyBpbiBgZGVsYXllZC1hZnRlci1ob29r LWZ1bmN0aW9ucycgKHNlZQpgZGVmaW5lLWRlcml2ZWQtbW9kZScpLgoKTWFqb3IgbW9kZSBmdW5j dGlvbnMgc2hvdWxkIHVzZSB0aGlzIGluc3RlYWQgb2YgYHJ1bi1ob29rcycgd2hlbgpydW5uaW5n IHRoZWlyIEZPTy1tb2RlLWhvb2suCgooZm4gJnJlc3QgSE9PS1MpHwooZGVmYWxpYXMgJ3J1bi1t b2RlLWhvb2tzICNbMTI4ICIIXDIwMxcAXDIxMVwyMTFcMjA1FgBcMjExQFwyMTEJQhEBQVwyNjZc MjAyXDIwMgUAXDIwNwlcMjM3AVwyNDRcMjYyAVwzMDVcMzAyIVwyMDMzAFxuXDIwMzMAXDMwNlwz MDMhXDIwNDMAXDMwN1wzMDMhXDIxMFwzMTATXDMxMRFcMzEyXDMxM1wzMTQDQlwiXDIxMFwzMTUg XDIwM1MAXDMxNjFNAFwzMTdcMzIwITBcMjEwXDIwMlMAXDMyMVwzMjICXCJcMjY2AlwzMTNcMzIz IVwyMTBcZlwyMzdcMzExFFwyMTFcMjA1awBcMjExQFwyMTEgXDIxMAFBXDI2NlwyMDJcMjAyWwBc MjA3IiBbZGVsYXktbW9kZS1ob29rcyBkZWxheWVkLW1vZGUtaG9va3Mgc3ludGF4LXByb3BlcnRp emUtZnVuY3Rpb24gcGFyc2Utc2V4cC1sb29rdXAtcHJvcGVydGllcyBkZWxheWVkLWFmdGVyLWhv b2stZnVuY3Rpb25zIGJvdW5kcCBsb2NhbC12YXJpYWJsZS1wIG1ha2UtbG9jYWwtdmFyaWFibGUg dCBuaWwgYXBwbHkgcnVuLWhvb2tzIGNoYW5nZS1tYWpvci1tb2RlLWFmdGVyLWJvZHktaG9vayBi dWZmZXItZmlsZS1uYW1lIChkZWJ1ZyBlcnJvcikgaGFjay1sb2NhbC12YXJpYWJsZXMgbm8tbW9k ZSBtZXNzYWdlICJGaWxlIGxvY2FsLXZhcmlhYmxlcyBlcnJvcjogJXMiIGFmdGVyLWNoYW5nZS1t YWpvci1tb2RlLWhvb2tdIDUgKCMkIC4gODAyOTcpXSkjQDIzNiBFeGVjdXRlIEJPRFksIGJ1dCBk ZWxheSBhbnkgYHJ1bi1tb2RlLWhvb2tzJy4KVGhlc2UgaG9va3Mgd2lsbCBiZSBleGVjdXRlZCBi eSB0aGUgZmlyc3QgZm9sbG93aW5nIGNhbGwgdG8KYHJ1bi1tb2RlLWhvb2tzJyB0aGF0IG9jY3Vy cyBvdXRzaWRlIGFueSBgZGVsYXktbW9kZS1ob29rcycgZm9ybS4KQWZmZWN0cyBvbmx5IGhvb2tz IHJ1biBpbiB0aGUgY3VycmVudCBidWZmZXIuCgooZm4gJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAn ZGVsYXktbW9kZS1ob29rcyAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxXDMwMlwzMDMEQkJFXDIw NyIgW3Byb2duIChtYWtlLWxvY2FsLXZhcmlhYmxlICdkZWxheS1tb2RlLWhvb2tzKSBsZXQgKChk ZWxheS1tb2RlLWhvb2tzIHQpKV0gNiAoIyQgLiA4MTY2MildKSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMjEwXDMwNFwzMDFcMzA1XDMwNiNcMzAwXDIwNyIgW3B1dCBkZWxheS1tb2Rl LWhvb2tzIGVkZWJ1Zy1mb3JtLXNwZWMgdCBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rp b24gMF0gNCkjQDcyIENoZWNrIGFuZCBidWlsZCBhIHNpbmdsZSBCSU5ESU5HIHdpdGggUFJFVi1W QVIuCgooZm4gQklORElORyBQUkVWLVZBUikfCihkZWZhbGlhcyAnaW50ZXJuYWwtLWJ1aWxkLWJp bmRpbmcgI1s1MTQgIgE5XDIwMwsAAVwyMTFEXDIwMhoAAUFcMjA0GQBcMzAwXDMwMSECQERcMjAy GgABXDI2MgIBR1wzMDJWXDIwMyoAXDMwM1wzMDRcMzA1BEJcIlwyMTABQFwyMTFcMzA2AwVBQEVE XDIwNyIgW21ha2Utc3ltYm9sICJzIiAyIHNpZ25hbCBlcnJvciAiYGxldCcgYmluZGluZ3MgY2Fu IGhhdmUgb25seSBvbmUgdmFsdWUtZm9ybSIgYW5kXSA3ICgjJCAuIDgyMjA3KV0pI0A3MCBDaGVj ayBhbmQgYnVpbGQgY29uZGl0aW9uYWwgdmFsdWUgZm9ybXMgZm9yIEJJTkRJTkdTLgoKKGZuIEJJ TkRJTkdTKR8KKGRlZmFsaWFzICdpbnRlcm5hbC0tYnVpbGQtYmluZGluZ3MgI1syNTcgIlwzMDBD XDMwMVwzMDJcMzAzA1wiA1wiXDIwNyIgW3QgbWFwY2FyIG1ha2UtY2xvc3VyZSAjWzI1NyAiXDMw MQFcMzAwXDI0MlwiXDMwMAFAXDI0MFwyMTBcMjA3IiBbVjAgaW50ZXJuYWwtLWJ1aWxkLWJpbmRp bmddIDQgIlxuXG4oZm4gQklORElORykiXV0gNiAoIyQgLiA4MjUzMildKSNAMTg3IEJpbmQgdmFy aWFibGVzIGFjY29yZGluZyB0byBWQVJMSVNUIGFuZCBldmFsdWF0ZSBUSEVOIG9yIEVMU0UuClRo aXMgaXMgbGlrZSBgaWYtbGV0JyBidXQgZG9lc24ndCBoYW5kbGUgYSBWQVJMSVNUIG9mIHRoZSBm b3JtCihTWU1CT0wgU09NRVRISU5HKSBzcGVjaWFsbHkuCgooZm4gVkFSTElTVCBUSEVOICZyZXN0 IEVMU0UpHwooZGVmYWxpYXMgJ2lmLWxldCogJyhtYWNybyAuICNbNjQyICICXDIwMxkAXDMwMFwz MDEEIVwyMTFcMjYyBVwzMDJcMzAzBgYhQEAFBUJCQkVcMjA3XDMwMFwzMDQDRVwyMDciIFtsZXQq IGludGVybmFsLS1idWlsZC1iaW5kaW5ncyBpZiBsYXN0IG5pbF0gOSAoIyQgLiA4MjgxMyldKSkK KGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5j dGlvbi1wdXQgaWYtbGV0KiBsaXNwLWluZGVudC1mdW5jdGlvbiAyIHB1dCBlZGVidWctZm9ybS1z cGVjICgoJnJlc3QgWyZvciBzeW1ib2xwIChzeW1ib2xwIGZvcm0pIChmb3JtKV0pIGJvZHkpXSA1 KSNAMTkwIEJpbmQgdmFyaWFibGVzIGFjY29yZGluZyB0byBWQVJMSVNUIGFuZCBjb25kaXRpb25h bGx5IGV2YWx1YXRlIEJPRFkuClRoaXMgaXMgbGlrZSBgd2hlbi1sZXQnIGJ1dCBkb2Vzbid0IGhh bmRsZSBhIFZBUkxJU1Qgb2YgdGhlIGZvcm0KKFNZTUJPTCBTT01FVEhJTkcpIHNwZWNpYWxseS4K CihmbiBWQVJMSVNUICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3doZW4tbGV0KiAnKG1hY3JvIC4g I1szODUgIlwzMDACXDMwMQMhRVwyMDciIFtpZi1sZXQqIG1hY3JvZXhwLXByb2duXSA2ICgjJCAu IDgzMzQxKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB3aGVuLWxldCogbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQg ZWRlYnVnLWZvcm0tc3BlYyBpZi1sZXQqXSA1KSNAMTk5IEJpbmQgdmFyaWFibGVzIGFjY29yZGlu ZyB0byBWQVJMSVNUIGFuZCBjb25kaXRpb25hbGx5IGV2YWx1YXRlIEJPRFkuCkxpa2UgYHdoZW4t bGV0KicsIGV4Y2VwdCBpZiBCT0RZIGlzIGVtcHR5IGFuZCBhbGwgdGhlIGJpbmRpbmdzCmFyZSBu b24tbmlsLCB0aGVuIHRoZSByZXN1bHQgaXMgbm9uLW5pbC4KCihmbiBWQVJMSVNUICZyZXN0IEJP RFkpHwooZGVmYWxpYXMgJ2FuZC1sZXQqICcobWFjcm8gLiAjWzM4NSAiXDMwMAJcMjAzIABcMzAx XDMwMgQhXDIxMVwyNjIFXDMwM1wzMDQGBiFAQFwyMTFcMjYyBQVcMjA2HAAEQ0JCRVwyMDdcMzAx XDMwMANcMjA2JwBcMzA1QkJcMjA3IiBbbmlsIGxldCogaW50ZXJuYWwtLWJ1aWxkLWJpbmRpbmdz IHdoZW4gbGFzdCAodCldIDggKCMkIC4gODM3NjcpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMw MlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IGFuZC1sZXQqIGxpc3At aW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgaWYtbGV0Kl0gNSkjQDc3OCBC aW5kIHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gU1BFQyBhbmQgZXZhbHVhdGUgVEhFTiBvciBFTFNF LgpFdmFsdWF0ZSBlYWNoIGJpbmRpbmcgaW4gdHVybiwgYXMgaW4gYGxldConLCBzdG9wcGluZyBp ZiBhCmJpbmRpbmcgdmFsdWUgaXMgbmlsLiAgSWYgYWxsIGFyZSBub24tbmlsIHJldHVybiB0aGUg dmFsdWUgb2YKVEhFTiwgb3RoZXJ3aXNlIHRoZSBsYXN0IGZvcm0gaW4gRUxTRS4KCkVhY2ggZWxl bWVudCBvZiBTUEVDIGlzIGEgbGlzdCAoU1lNQk9MIFZBTFVFRk9STSkgdGhhdCBiaW5kcwpTWU1C T0wgdG8gdGhlIHZhbHVlIG9mIFZBTFVFRk9STS4gIEFuIGVsZW1lbnQgY2FuIGFkZGl0aW9uYWxs eSBiZQpvZiB0aGUgZm9ybSAoVkFMVUVGT1JNKSwgd2hpY2ggaXMgZXZhbHVhdGVkIGFuZCBjaGVj a2VkIGZvciBuaWw7CmkuZS4gU1lNQk9MIGNhbiBiZSBvbWl0dGVkIGlmIG9ubHkgdGhlIHRlc3Qg cmVzdWx0IGlzIG9mCmludGVyZXN0LiAgSXQgY2FuIGFsc28gYmUgb2YgdGhlIGZvcm0gU1lNQk9M LCB0aGVuIHRoZSBiaW5kaW5nIG9mClNZTUJPTCBpcyBjaGVja2VkIGZvciBuaWwuCgpBcyBhIHNw ZWNpYWwgY2FzZSwgaW50ZXJwcmV0cyBhIFNQRUMgb2YgdGhlIGZvcm0gKFNZTUJPTCBTT01FVEhJ TkcpCmxpa2UgKChTWU1CT0wgU09NRVRISU5HKSkuICBUaGlzIGV4aXN0cyBmb3IgYmFja3dhcmQg Y29tcGF0aWJpbGl0eQp3aXRoIGFuIG9sZCBzeW50YXggdGhhdCBhY2NlcHRlZCBvbmx5IG9uZSBi aW5kaW5nLgoKKGZuIFNQRUMgVEhFTiAmcmVzdCBFTFNFKR8KKGRlZmFsaWFzICdpZi1sZXQgJyht YWNybyAuICNbNjQyICICR1wzMDBYXDIwMxEAAkA8XDIwNBEAAkNcMjYyA1wzMDEDA1wzMDIEIUZc MjA3IiBbMiBpZi1sZXQqIG1hY3JvZXhwLXByb2duXSA4ICgjJCAuIDg0MzAyKV0pKQooYnl0ZS1j b2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1 dCBpZi1sZXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMiBwdXQgZWRlYnVnLWZvcm0tc3BlYyAoWyZv ciAoc3ltYm9scCBmb3JtKSAoJnJlc3QgWyZvciBzeW1ib2xwIChzeW1ib2xwIGZvcm0pIChmb3Jt KV0pXSBib2R5KV0gNSkjQDI3MSBCaW5kIHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gU1BFQyBhbmQg Y29uZGl0aW9uYWxseSBldmFsdWF0ZSBCT0RZLgpFdmFsdWF0ZSBlYWNoIGJpbmRpbmcgaW4gdHVy biwgc3RvcHBpbmcgaWYgYSBiaW5kaW5nIHZhbHVlIGlzIG5pbC4KSWYgYWxsIGFyZSBub24tbmls LCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGZvcm0gaW4gQk9EWS4KClRoZSB2YXJpYWJs ZSBsaXN0IFNQRUMgaXMgdGhlIHNhbWUgYXMgaW4gYGlmLWxldCcuCgooZm4gU1BFQyAmcmVzdCBC T0RZKR8KKGRlZmFsaWFzICd3aGVuLWxldCAnKG1hY3JvIC4gI1szODUgIlwzMDACXDMwMQMhRVwy MDciIFtpZi1sZXQgbWFjcm9leHAtcHJvZ25dIDYgKCMkIC4gODU0MDYpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdo ZW4tbGV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgaWYtbGV0 XSA1KSNAMjU5IEJpbmQgdmFyaWFibGVzIGFjY29yZGluZyB0byBTUEVDIGFuZCBjb25kaXRpb25h bGx5IGV2YWx1YXRlIEJPRFkuCkV2YWx1YXRlIGVhY2ggYmluZGluZyBpbiB0dXJuLCBzdG9wcGlu ZyBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbmlsLgpJZiBhbGwgYmluZGluZ3MgYXJlIG5vbi1uaWws IGV2YWwgQk9EWSBhbmQgcmVwZWF0LgoKVGhlIHZhcmlhYmxlIGxpc3QgU1BFQyBpcyB0aGUgc2Ft ZSBhcyBpbiBgaWYtbGV0Jy4KCihmbiBTUEVDICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3doaWxl LWxldCAnKG1hY3JvIC4gI1szODUgIlwzMDBcMzAxIVwzMDJcMzAzAkRcMzA0XDMwNVwzMDYGB1wz MDcGCEJcMzEwXDMwMwYJRFwzMTFCQkZFRVwyMDciIFtnZW5zeW0gImRvbmUiIGNhdGNoIHF1b3Rl IHdoaWxlIHQgaWYtbGV0KiBwcm9nbiB0aHJvdyAobmlsKV0gMTMgKCMkIC4gODU5MDkpXSkpCihi eXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rp b24tcHV0IHdoaWxlLWxldCBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1z cGVjIGlmLWxldF0gNSkjQDIwNiBOb24tbmlsIGlmIE1PREUgaXMgZGVyaXZlZCBmcm9tIG9uZSBv ZiBNT0RFUy4KVXNlcyB0aGUgYGRlcml2ZWQtbW9kZS1wYXJlbnQnIHByb3BlcnR5IG9mIHRoZSBz eW1ib2wgdG8gdHJhY2UgYmFja3dhcmRzLgpJZiB5b3UganVzdCB3YW50IHRvIGNoZWNrIGBtYWpv ci1tb2RlJywgdXNlIGBkZXJpdmVkLW1vZGUtcCcuCgooZm4gTU9ERSAmcmVzdCBNT0RFUykfCihk ZWZhbGlhcyAncHJvdmlkZWQtbW9kZS1kZXJpdmVkLXAgI1szODUgIgFLXDIxMVwyMDMOAFwyMTE5 XDIwMw4AXDIxMVwyNjIDXDIxMAEBPlwyMDQwAAFcMzAwTlwyMTFLXDIxMVwyMDMnAFwyMTE5XDIw MycAXDIxMVwyMDIoAAFcMjExXDI2MgVcMjY2XDIwMlwyMDQPAAFcMjA3IiBbZGVyaXZlZC1tb2Rl LXBhcmVudF0gNiAoIyQgLiA4NjQ4OSldKSNAMTU3IE5vbi1uaWwgaWYgdGhlIGN1cnJlbnQgbWFq b3IgbW9kZSBpcyBkZXJpdmVkIGZyb20gb25lIG9mIE1PREVTLgpVc2VzIHRoZSBgZGVyaXZlZC1t b2RlLXBhcmVudCcgcHJvcGVydHkgb2YgdGhlIHN5bWJvbCB0byB0cmFjZSBiYWNrd2FyZHMuCgoo Zm4gJnJlc3QgTU9ERVMpHwooZGVmYWxpYXMgJ2Rlcml2ZWQtbW9kZS1wICNbMTI4ICJcMzAxXDMw MggDI1wyMDciIFttYWpvci1tb2RlIGFwcGx5IHByb3ZpZGVkLW1vZGUtZGVyaXZlZC1wXSA1ICgj JCAuIDg2ODk5KV0pCihkZWZ2YXIgbWFqb3ItbW9kZS0tc3VzcGVuZGVkIG5pbCBuaWwpCihieXRl LWNvZGUgIlwzMDBcMzAxIVwyMTBcMzAyXDMwMVwzMDNcMzA0I1wyMDciIFttYWtlLXZhcmlhYmxl LWJ1ZmZlci1sb2NhbCBtYWpvci1tb2RlLS1zdXNwZW5kZWQgcHV0IHBlcm1hbmVudC1sb2NhbCB0 XSA0KSNANDIgRXhpdCBjdXJyZW50IG1ham9yIG1vZGUsIHJlbWVtYmVyaW5nIGl0Lh8KKGRlZmFs aWFzICdtYWpvci1tb2RlLXN1c3BlbmQgI1swICIIXDIwNlxmAAlcMzAyPT9cMjA1XGYACVwzMDMg XDIxMFwzMDRcMzAwIVwyMTBcMjExXDIxMRBcMjA3IiBbbWFqb3ItbW9kZS0tc3VzcGVuZGVkIG1h am9yLW1vZGUgZnVuZGFtZW50YWwtbW9kZSBraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMgbWFrZS1s b2NhbC12YXJpYWJsZV0gMyAoIyQgLiA4NzMzMyldKSNAMjExIFJlc3RvcmUgbWFqb3IgbW9kZSBl YXJsaWVyIHN1c3BlbmRlZCB3aXRoIGBtYWpvci1tb2RlLXN1c3BlbmQnLgpJZiB0aGVyZSB3YXMg bm8gZWFybGllciBzdXNwZW5kZWQgbWFqb3IgbW9kZSwgdGhlbiBmYWxsYmFjayB0byBgbm9ybWFs LW1vZGUnLAp0aG91Z2ggdHJ5aW5nIHRvIGF2b2lkIEFWT0lERUQtTU9ERVMuCgooZm4gJm9wdGlv bmFsIEFWT0lERUQtTU9ERVMpHwooZGVmYWxpYXMgJ21ham9yLW1vZGUtcmVzdG9yZSAjWzI1NiAi CFwyMDMLAAhcMzAzXDMwMCFcMjEwIFwyMDdcMzA0CSEBXDIxMVwyMDNcIgBcMjExQFwzMDUBBFwi XDI2MgMBQVwyNjZcMjAyXDIwMg8AXDIxMFwyMTFcMjYyAVwzMDRcbiECXDIxMVwyMDM9AFwyMTFA XDMwNQEEXCJcMjYyAwFBXDI2NlwyMDJcMjAyKgBcMjEwXDIxMVwyNjIBGhlcMzA2ICpcMjA3IiBb bWFqb3ItbW9kZS0tc3VzcGVuZGVkIGF1dG8tbW9kZS1hbGlzdCBtYWdpYy1mYWxsYmFjay1tb2Rl LWFsaXN0IGtpbGwtbG9jYWwtdmFyaWFibGUgY29weS1zZXF1ZW5jZSByYXNzcS1kZWxldGUtYWxs IG5vcm1hbC1tb2RlXSA4ICgjJCAuIDg3NTg5KV0pI0AzNSBMaXN0IG9mIGFsbCBtaW5vciBtb2Rl IGZ1bmN0aW9ucy4fCihkZWZ2YXIgbWlub3ItbW9kZS1saXN0ICcoYXV0by1zYXZlLW1vZGUgYXV0 by1maWxsLW1vZGUgYWJicmV2LW1vZGUgb3ZlcndyaXRlLW1vZGUgdmlldy1tb2RlIGhzLW1pbm9y LW1vZGUpICgjJCAuIDg4MTU3KSkjQDEwMDEgUmVnaXN0ZXIgYSBuZXcgbWlub3IgbW9kZS4KClRo aXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIHVzZWQgZGlyZWN0bHkgLS0gdXNlIGBkZWZpbmUtbWlu b3ItbW9kZScKaW5zdGVhZCAod2hpY2ggd2lsbCB0aGVuIGNhbGwgdGhpcyBmdW5jdGlvbikuCgpU T0dHTEUgaXMgYSBzeW1ib2wgdGhhdCBpcyB0aGUgbmFtZSBvZiBhIGJ1ZmZlci1sb2NhbCB2YXJp YWJsZSB0aGF0CmlzIHRvZ2dsZWQgb24gb3Igb2ZmIHRvIHNheSB3aGV0aGVyIHRoZSBtaW5vciBt b2RlIGlzIGFjdGl2ZSBvciBub3QuCgpOQU1FIHNwZWNpZmllcyB3aGF0IHdpbGwgYXBwZWFyIGlu IHRoZSBtb2RlIGxpbmUgd2hlbiB0aGUgbWlub3IgbW9kZQppcyBhY3RpdmUuICBOQU1FIHNob3Vs ZCBiZSBlaXRoZXIgYSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIHNwYWNlLCBvciBhCnN5bWJvbCB3 aG9zZSB2YWx1ZSBpcyBzdWNoIGEgc3RyaW5nLgoKT3B0aW9uYWwgS0VZTUFQIGlzIHRoZSBrZXlt YXAgZm9yIHRoZSBtaW5vciBtb2RlIHRoYXQgd2lsbCBiZSBhZGRlZAp0byBgbWlub3ItbW9kZS1t YXAtYWxpc3QnLgoKT3B0aW9uYWwgQUZURVIgc3BlY2lmaWVzIHRoYXQgVE9HR0xFIHNob3VsZCBi ZSBhZGRlZCBhZnRlciBBRlRFUgppbiBgbWlub3ItbW9kZS1hbGlzdCcuCgpPcHRpb25hbCBUT0dH TEUtRlVOIGlzIGFuIGludGVyYWN0aXZlIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgbW9kZS4KSXQg ZGVmYXVsdHMgdG8gKGFuZCBzaG91bGQgYnkgY29udmVudGlvbiBiZSkgVE9HR0xFLgoKSWYgVE9H R0xFIGhhcyBhIG5vbi1uaWwgYDppbmNsdWRlZCcgcHJvcGVydHksIGFuIGVudHJ5IGZvciB0aGUg bW9kZSBpcwppbmNsdWRlZCBpbiB0aGUgbW9kZS1saW5lIG1pbm9yIG1vZGUgbWVudS4KSWYgVE9H R0xFIGhhcyBhIGA6bWVudS10YWcnLCB0aGF0IGlzIHVzZWQgZm9yIHRoZSBtZW51IGl0ZW0ncyBs YWJlbC4KCihmbiBUT0dHTEUgTkFNRSAmb3B0aW9uYWwgS0VZTUFQIEFGVEVSIFRPR0dMRS1GVU4p HwooZGVmYWxpYXMgJ2FkZC1taW5vci1tb2RlICNbMTI4MiAiBAg+XDIwNFxuAAQIQhBcMjExXDIw NBEABFwyNjIBXDIxMQU9XDIwNB0AXDMwNQVcMzA2AyNcMjEwA1wyMDNzAAQJXDIzNlwyMTFcMjAz MQBcMjExBUNcMjQxXDI2NgJcMjAycwAJXDMwNwFcMjAzUABcMjExXDIwNFAABAJAQD1cMjAzSQAB XDI2MgFcMjAyMwABQVwyNjICXDIwMjMAXDIxMVwyMDNpAFwyMTFBAVwzMDdcMjQxXDIxMAEGCQYJ RENcMjQ0AVwyNDRcMjY2BVwyMDJzAAYHBgdECUIRXDI2NgMEXDMxME5cMjAzXDI3NwBcMzExXG5c MzEyBgchXDMxMwYIXDMxNE5cMjA2XDIyNgAGBztcMjAzXDIyMgAGB1wyMDJcMjI2AFwzMTUGCSEG CDlcMjA1XDIzNwAGCEpcMjExGztcMjA1XDI2MwBcMzE2XDMxNwtcIlwyMDVcMjYzAFwzMjBcMzIx XDMyMgtcIlwzMjNRKVAFXDMyNFwzMjUGXGZCXDI1NwUjXDIxMAJcMjA1FwEEXGZcMjM2XDIxMVwy MDNcMzIwAFwyMTEEXDI0MVwyMDIVAVxmXDMwNwFcMjAzXDM1NwBcMjExXDIwNFwzNTcABAJAQD1c MjAzXDM1MAABXDI2MgFcMjAyXDMyMgABQVwyNjICXDIwMlwzMjIAXDIxMVwyMDNcbgFcMjExQQFc MzA3XDI0MVwyMTABBgkGCEJDXDI0NAFcMjQ0XDI2MgFcMjY2XDIwMlwyMDIVAQYHBgZCXGZCXDIx MRRcMjY2XDIwMlwyNjIBXDIwNyIgW21pbm9yLW1vZGUtbGlzdCBtaW5vci1tb2RlLWFsaXN0IG1v ZGUtbGluZS1tb2RlLW1lbnUgbW9kZS1uYW1lIG1pbm9yLW1vZGUtbWFwLWFsaXN0IHB1dCA6bWlu b3ItbW9kZS1mdW5jdGlvbiBuaWwgOmluY2x1ZGVkIGRlZmluZS1rZXkgdmVjdG9yIG1lbnUtaXRl bSA6bWVudS10YWcgc3ltYm9sLW5hbWUgc3RyaW5nLW1hdGNoICJbXiBdKyIgIiAoIiBtYXRjaC1z dHJpbmcgMCAiKSIgOmJ1dHRvbiA6dG9nZ2xlXSAxNSAoIyQgLiA4ODMyMCldKSNANDggTm9uLW5p bCBpZiBPQkpFQ1QgaXMgYW4gYXV0b2xvYWQuCgooZm4gT0JKRUNUKR8KKGRlZmFsaWFzICdhdXRv bG9hZHAgI1syNTcgIlwyMTFcMjQyXDMwMD1cMjA3IiBbYXV0b2xvYWRdIDMgKCMkIC4gOTAyMjUp XSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtm dW5jdGlvbi1wdXQgYXV0b2xvYWRwIHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNv bXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDExNiBEZWZpbmUgdGhlIHByb3BlcnR5IFBST1Agb2Yg U1lNQk9MIHRvIGJlIFZBTC4KVGhpcyBpcyB0byBgcHV0JyB3aGF0IGBkZWZhbGlhcycgaXMgdG8g YGZzZXQnLgoKKGZuIFNZTUJPTCBQUk9QIFZBTCkfCihkZWZhbGlhcyAnZGVmaW5lLXN5bWJvbC1w cm9wICNbNzcxICJcMzAxCFwyMzZcMjExXDIwNA8AXDMwMUNcMjYyAVwyMTEIQhACAVwyMzZcMjEx XDIwNCEAA0NcMjYyAQEBA0FCXDI0MVwyMTAEAUFcMjM1XDIwNC8AXDIxMQUCQUJcMjQxXDIxMFwy NjYCXDMwMgMDAyNcMjA3IiBbY3VycmVudC1sb2FkLWxpc3QgZGVmaW5lLXN5bWJvbC1wcm9wcyBw dXRdIDggKCMkIC4gOTA0ODgpXSkjQDE1MyBMb2NhdGUgYSBuYXRpdmVseS1jb21waWxlZCBFTE4t RklMRSBieSBzZWFyY2hpbmcgaXRzIGxvYWQgcGF0aC4KVGhpcyBmdW5jdGlvbiBsb29rcyBpbiBk aXJlY3RvcmllcyBuYW1lZCBieSBgbmF0aXZlLWNvbXAtZWxuLWxvYWQtcGF0aCcuCgooZm4gRUxO LUZJTEUpHwooZGVmYWxpYXMgJ2xvY2F0ZS1lbG4tZmlsZSAjWzI1NyAiXDMwMghcMzAzA1EJXCJc MjA2EwBcMzAyCFwzMDQDUVwzMDUJIVwiXDIwNyIgW2NvbXAtbmF0aXZlLXZlcnNpb24tZGlyIG5h dGl2ZS1jb21wLWVsbi1sb2FkLXBhdGggbG9jYXRlLWZpbGUtaW50ZXJuYWwgIi8iICIvcHJlbG9h ZGVkLyIgbGFzdF0gNSAoIyQgLiA5MDgyNyldKSNAMTA5NCBSZXR1cm4gdGhlIG5hbWUgb2YgdGhl IGZpbGUgdGhhdCBkZWZpbmVkIFNZTUJPTC4KVGhlIHZhbHVlIGlzIG5vcm1hbGx5IGFuIGFic29s dXRlIGZpbGUgbmFtZS4gIEl0IGNhbiBhbHNvIGJlIG5pbCwKaWYgdGhlIGRlZmluaXRpb24gaXMg bm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgZmlsZS4gIElmIFNZTUJPTApzcGVjaWZpZXMgYW4gYXV0 b2xvYWRlZCBmdW5jdGlvbiwgdGhlIHZhbHVlIGNhbiBiZSBhIHJlbGF0aXZlCmZpbGUgbmFtZSB3 aXRob3V0IGV4dGVuc2lvbi4KCklmIFRZUEUgaXMgbmlsLCB0aGVuIGFueSBraW5kIG9mIFNZTUJP TCdzIGRlZmluaXRpb24gaXMgYWNjZXB0YWJsZS4KSWYgVFlQRSBpcyBgZGVmdW4nLCBgZGVmdmFy Jywgb3IgYGRlZmZhY2UnLCB0aGF0IHNwZWNpZmllcyBmdW5jdGlvbgpkZWZpbml0aW9uLCB2YXJp YWJsZSBkZWZpbml0aW9uLCBvciBmYWNlIGRlZmluaXRpb24gb25seS4KT3RoZXJ3aXNlIFRZUEUg aXMgYXNzdW1lZCB0byBiZSBhIHN5bWJvbCBwcm9wZXJ0eS4KCklmIE5BVElWRS1QIGlzIG5vbi1u aWwsIGFuZCBTWU1CT0wgd2FzIGxvYWRlZCBmcm9tIGEgLmVsbiBmaWxlLAp0aGlzIGZ1bmN0aW9u IHdpbGwgcmV0dXJuIHRoZSBhYnNvbHV0ZSBmaWxlIG5hbWUgb2YgdGhhdCAuZWxuIGZpbGUsCmlm IGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSAuZWxuIGZpbGUgaXMgb2xkZXIgdGhhbiBpdHMgc291 cmNlIC5lbApmaWxlLCBFbWFjcyB3b24ndCBsb2FkIHN1Y2ggYW4gb3V0ZGF0ZWQgLmVsbiBmaWxl LCBhbmQgdGhpcyBmdW5jdGlvbgp3aWxsIG5vdCByZXR1cm4gaXQuICBJZiB0aGUgLmVsbiBmaWxl IGNvdWxkbid0IGJlIGZvdW5kLCBvciBpcwpvdXRkYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMg dGhlIGNvcnJlc3BvbmRpbmcgLmVsYyBvciAuZWwgZmlsZQppbnN0ZWFkLgoKVGhpcyBmdW5jdGlv biBvbmx5IHdvcmtzIGZvciBzeW1ib2xzIGRlZmluZWQgaW4gTGlzcCBmaWxlcy4gIEZvcgpzeW1i b2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gQyBmaWxlcywgdXNlIGBoZWxwLUMtZmlsZS1uYW1lJwpp bnN0ZWFkLgoKKGZuIFNZTUJPTCAmb3B0aW9uYWwgVFlQRSBOQVRJVkUtUCkfCihkZWZhbGlhcyAn c3ltYm9sLWZpbGUgI1s3NjkgIgFcMjAzXG4AAVwzMDE9XDIwMx8AAjlcMjAzHwACS1wyMTFcMjQy XDMwMj1cMjYyAVwyMDMfAAJLQUBcMjA3XDIxMVwyMDNHAAFcMjAzLQABXDMwMT1cMjAzRwACOVwy MDNHAFwzMDMgXDIwM0cAXDMwNANLIVwyMDNHAFwzMDVcMzA2XDMwNwVLISEhXDIwN1wzMTAyXDI1 MQAIXDIxMVwyMDVcMjQ2AFwyMTFAXDIxMVwyNDIBXDI0MwVcMjAzfgAFXDMxMT1cMjAzZwAGBgFc MjM1XDIwMlwyMjUABQYHQgFcMjM1XDIwNFwyMzAABgZcMzEyBgdcMzEyXDMxMwVcIlwiPlwyMDJc MjI1AAYGAVwyMzVcMjA0XDIzMABcMzE0BgcCXCJcMjExXDIwNVwyMjMAXDIxMUBcMzE1PT9cMjYy AVwyMDNcMjM1AFwzMTZcMzEwA1wiXDIxMFwyNjYCAUFcMjY2XDIwMlwyMDJMAFwyNjIBMFwyMTFc MjAzXDM3NQABXDIwM1wzNzUAXDMwMyBcMjAzXDM3NQBcMzE3ASFcMzIwXDMyMSFcMjA1XDMwNwBc MzIxIFwyMDVcMzA3AFwyMTFcMzIyUAFcMzIzUAFcMjAzXDMyNABcMzI0AiFcMjA0XDM0NABcMzI0 ASFcMjAzXDM0MQBcMjExXDIxMVwyNjIDXDIwNFwzNDQAXDMyNVwyNjICATtcMjA1XDM3MABcMzI2 XDMyNwMhIVwzMzABBFwiXDIwNVwzNjYAXDIxMVwyNjIBXDI2NlwyMDNcMjA2XDM3NgBcMjExXDIw NyIgW2xvYWQtaGlzdG9yeSBkZWZ1biBhdXRvbG9hZCBuYXRpdmUtY29tcC1hdmFpbGFibGUtcCBz dWJyLW5hdGl2ZS1lbGlzcC1wIGV4cGFuZC1maWxlLW5hbWUgbmF0aXZlLWNvbXAtdW5pdC1maWxl IHN1YnItbmF0aXZlLWNvbXAtdW5pdCBmb3VuZCBkZWZ2YXIgYWxpc3QtZ2V0IGRlZmluZS1zeW1i b2wtcHJvcHMgcmFzc3EgcmVxdWlyZSB0aHJvdyBmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24gZmJv dW5kcCB6bGliLWF2YWlsYWJsZS1wICIuZWwuZ3oiICIuZWwiIGZpbGUtZXhpc3RzLXAgbmlsIGxv Y2F0ZS1lbG4tZmlsZSBjb21wLWVsLXRvLWVsbi1yZWwtZmlsZW5hbWUgZmlsZS1uZXdlci10aGFu LWZpbGUtcF0gMTMgKCMkIC4gOTExNzgpXSkjQDgyMyBTaG93IHRoZSBwcmVjaXNlIGZpbGUgbmFt ZSBvZiBFbWFjcyBsaWJyYXJ5IExJQlJBUlkuCkxJQlJBUlkgc2hvdWxkIGJlIGEgcmVsYXRpdmUg ZmlsZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBhIHN0cmluZy4KSXQgY2FuIG9taXQgdGhlIHN1ZmZp eCAoYS5rLmEuIGZpbGUtbmFtZSBleHRlbnNpb24pIGlmIE5PU1VGRklYIGlzCm5pbCAod2hpY2gg aXMgdGhlIGRlZmF1bHQsIHNlZSBiZWxvdykuClRoaXMgY29tbWFuZCBzZWFyY2hlcyB0aGUgZGly ZWN0b3JpZXMgaW4gYGxvYWQtcGF0aCcgbGlrZSBgXFtsb2FkLWxpYnJhcnldJwp0byBmaW5kIHRo ZSBmaWxlIHRoYXQgYFxbbG9hZC1saWJyYXJ5XSBSRVQgTElCUkFSWSBSRVQnIHdvdWxkIGxvYWQu Ck9wdGlvbmFsIHNlY29uZCBhcmcgTk9TVUZGSVggbm9uLW5pbCBtZWFucyBkb24ndCBhZGQgc3Vm Zml4ZXMgYGxvYWQtc3VmZml4ZXMnCnRvIHRoZSBzcGVjaWZpZWQgbmFtZSBMSUJSQVJZLgoKSWYg dGhlIG9wdGlvbmFsIHRoaXJkIGFyZyBQQVRIIGlzIHNwZWNpZmllZCwgdGhhdCBsaXN0IG9mIGRp cmVjdG9yaWVzCmlzIHVzZWQgaW5zdGVhZCBvZiBgbG9hZC1wYXRoJy4KCldoZW4gY2FsbGVkIGZy b20gYSBwcm9ncmFtLCB0aGUgZmlsZSBuYW1lIGlzIG5vcm1hbGx5IHJldHVybmVkIGFzIGEKc3Ry aW5nLiAgV2hlbiBydW4gaW50ZXJhY3RpdmVseSwgdGhlIGFyZ3VtZW50IElOVEVSQUNUSVZFLUNB TEwgaXMgdCwKYW5kIHRoZSBmaWxlIG5hbWUgaXMgZGlzcGxheWVkIGluIHRoZSBlY2hvIGFyZWEu CgooZm4gTElCUkFSWSAmb3B0aW9uYWwgTk9TVUZGSVggUEFUSCBJTlRFUkFDVElWRS1DQUxMKR8K KGRlZmFsaWFzICdsb2NhdGUtbGlicmFyeSAjWzEwMjUgIlwzMDIEA1wyMDYHAAhcMzAzBgY/XDIw NRAAXDMwNCAJXCIjAVwyMDMpAFwyMTFcMjAzIwBcMzA1XDMwNlwzMDcDIVwiXDIxMFwyMDdcMzA1 XDMxMAYGXCJcMjEwXDIwNyIgW2xvYWQtcGF0aCBsb2FkLWZpbGUtcmVwLXN1ZmZpeGVzIGxvY2F0 ZS1maWxlIGFwcGVuZCBnZXQtbG9hZC1zdWZmaXhlcyBtZXNzYWdlICJMaWJyYXJ5IGlzIGZpbGUg JXMiIGFiYnJldmlhdGUtZmlsZS1uYW1lICJObyBsaWJyYXJ5ICVzIGluIHNlYXJjaCBwYXRoIl0g MTAgKCMkIC4gOTMyODQpIChieXRlLWNvZGUgIlwzMDAgXDMwMVwyMTFcMzAyRlwyMDciIFtyZWFk LWxpYnJhcnktbmFtZSBuaWwgdF0gNCldKSNAMTA3MSBTdGFydCBhIHByb2dyYW0gaW4gYSBzdWJw cm9jZXNzLiAgUmV0dXJuIHRoZSBwcm9jZXNzIG9iamVjdCBmb3IgaXQuCk5BTUUgaXMgbmFtZSBm b3IgcHJvY2Vzcy4gIEl0IGlzIG1vZGlmaWVkIGlmIG5lY2Vzc2FyeSB0byBtYWtlIGl0IHVuaXF1 ZS4KQlVGRkVSIGlzIHRoZSBidWZmZXIgKG9yIGJ1ZmZlciBuYW1lKSB0byBhc3NvY2lhdGUgd2l0 aCB0aGUgcHJvY2Vzcy4KClByb2Nlc3Mgb3V0cHV0IChib3RoIHN0YW5kYXJkIG91dHB1dCBhbmQg c3RhbmRhcmQgZXJyb3Igc3RyZWFtcykKZ29lcyBhdCBlbmQgb2YgQlVGRkVSLCB1bmxlc3MgeW91 IHNwZWNpZnkgYSBmaWx0ZXIgZnVuY3Rpb24gdG8KaGFuZGxlIHRoZSBvdXRwdXQuICBCVUZGRVIg bWF5IGFsc28gYmUgbmlsLCBtZWFuaW5nIHRoYXQgdGhpcwpwcm9jZXNzIGlzIG5vdCBhc3NvY2lh dGVkIHdpdGggYW55IGJ1ZmZlci4KClBST0dSQU0gaXMgdGhlIHByb2dyYW0gZmlsZSBuYW1lLiAg SXQgaXMgc2VhcmNoZWQgZm9yIGluIGBleGVjLXBhdGgnCih3aGljaCBzZWUpLiAgSWYgbmlsLCBq dXN0IGFzc29jaWF0ZSBhIHB0eSB3aXRoIHRoZSBidWZmZXIuICBSZW1haW5pbmcKYXJndW1lbnRz IFBST0dSQU0tQVJHUyBhcmUgc3RyaW5ncyB0byBnaXZlIHByb2dyYW0gYXMgYXJndW1lbnRzLgoK SWYgeW91IHdhbnQgdG8gc2VwYXJhdGUgc3RhbmRhcmQgb3V0cHV0IGZyb20gc3RhbmRhcmQgZXJy b3IsIHVzZQpgbWFrZS1wcm9jZXNzJyBvciBpbnZva2UgdGhlIGNvbW1hbmQgdGhyb3VnaCBhIHNo ZWxsIGFuZCByZWRpcmVjdApvbmUgb2YgdGhlbSB1c2luZyB0aGUgc2hlbGwgc3ludGF4LgoKVGhl IHByb2Nlc3MgcnVucyBpbiBgZGVmYXVsdC1kaXJlY3RvcnknIGlmIHRoYXQgaXMgbG9jYWwgKGFz CmRldGVybWluZWQgYnkgYHVuaGFuZGxlZC1maWxlLW5hbWUtZGlyZWN0b3J5JyksIG9yICJ+Igpv dGhlcndpc2UuICBJZiB5b3Ugd2FudCB0byBydW4gYSBwcm9jZXNzIGluIGEgcmVtb3RlIGRpcmVj dG9yeQp1c2UgYHN0YXJ0LWZpbGUtcHJvY2VzcycuCgooZm4gTkFNRSBCVUZGRVIgUFJPR1JBTSAm cmVzdCBQUk9HUkFNLUFSR1MpHwooZGVmYWxpYXMgJ3N0YXJ0LXByb2Nlc3MgI1s4OTkgIlwzMDBc MzAxIVwyMDRcbgBcMzAyXDMwMyFcMjEwXDMwNFwzMDFcMzA1XDMwNgYHXDMwNwYIRgVcMjA1HwBc MzEwBgYGBkJEXCJcIlwyMDciIFtmYm91bmRwIG1ha2UtcHJvY2VzcyBlcnJvciAiRW1hY3Mgd2Fz IGNvbXBpbGVkIHdpdGhvdXQgc3VicHJvY2VzcyBzdXBwb3J0IiBhcHBseSBhcHBlbmQgOm5hbWUg OmJ1ZmZlciA6Y29tbWFuZF0gMTEgKCMkIC4gOTQ0ODEpXSkjQDM2OSBFeGVjdXRlIFBST0dSQU0g d2l0aCBBUkdTLCByZXR1cm5pbmcgaXRzIG91dHB1dCBhcyBhIGxpc3Qgb2YgbGluZXMuCklmIFNU QVRVUy1IQU5ETEVSIGlzIG5vbi1uaWwsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiB3aXRoIG9uZQph cmd1bWVudCwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhl CnByb2dyYW0gYmVmb3JlIHRoZSBvdXRwdXQgaXMgY29sbGVjdGVkLiAgSWYgU1RBVFVTLUhBTkRM RVIgaXMKbmlsLCBhbiBlcnJvciBpcyBzaWduYWxlZCBpZiB0aGUgcHJvZ3JhbSByZXR1cm5zIHdp dGggYSBub24temVybwpleGl0IHN0YXR1cy4KCihmbiBQUk9HUkFNIFNUQVRVUy1IQU5ETEVSICZy ZXN0IEFSR1MpHwooZGVmYWxpYXMgJ3Byb2Nlc3MtbGluZXMtaGFuZGxpbmctc3RhdHVzICNbNjQy ICJcMzAwXDMwMVwzMDJcInJcMjExcVwyMTBcMzAzXDMwNAJcIlwyMTZcMzA1XDMwNgVcMzA3cFwz MDcGByYGA1wyMDNcIgADASFcMjEwXDIwMi8AXDIxMVwzMTA9XDIwNC8AXDMxMVwzMTIGBgMjXDIx MGViXDIxMFwzMDdtXDIwNEcAXDMxM1wzMTQgXDMxNSBcIgFCXDI2MgFcMzE2eVwyMTBcMjAyMwBc MjExXDIzNypcMjA3IiBbZ2VuZXJhdGUtbmV3LWJ1ZmZlciAiICp0ZW1wKiIgdCBtYWtlLWNsb3N1 cmUgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3IiBbVjAgYnVmZmVyLW5hbWUga2ls bC1idWZmZXJdIDJdIGFwcGx5IGNhbGwtcHJvY2VzcyBuaWwgMCBlcnJvciAiJXMgZXhpdGVkIHdp dGggc3RhdHVzICVzIiBidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgbGluZS1iZWdpbm5p bmctcG9zaXRpb24gbGluZS1lbmQtcG9zaXRpb24gMV0gMTEgKCMkIC4gOTU4MDEpXSkjQDIwMiBF eGVjdXRlIFBST0dSQU0gd2l0aCBBUkdTLCByZXR1cm5pbmcgaXRzIG91dHB1dCBhcyBhIGxpc3Qg b2YgbGluZXMuClNpZ25hbCBhbiBlcnJvciBpZiB0aGUgcHJvZ3JhbSByZXR1cm5zIHdpdGggYSBu b24temVybyBleGl0IHN0YXR1cy4KQWxzbyBzZWUgYHByb2Nlc3MtbGluZXMtaWdub3JlLXN0YXR1 cycuCgooZm4gUFJPR1JBTSAmcmVzdCBBUkdTKR8KKGRlZmFsaWFzICdwcm9jZXNzLWxpbmVzICNb Mzg1ICJcMzAwXDMwMQNcMzAyBCRcMjA3IiBbYXBwbHkgcHJvY2Vzcy1saW5lcy1oYW5kbGluZy1z dGF0dXMgbmlsXSA3ICgjJCAuIDk2NjcxKV0pI0AxNjMgRXhlY3V0ZSBQUk9HUkFNIHdpdGggQVJH UywgcmV0dXJuaW5nIGl0cyBvdXRwdXQgYXMgYSBsaXN0IG9mIGxpbmVzLgpUaGUgZXhpdCBzdGF0 dXMgb2YgdGhlIHByb2dyYW0gaXMgaWdub3JlZC4KQWxzbyBzZWUgYHByb2Nlc3MtbGluZXMnLgoK KGZuIFBST0dSQU0gJnJlc3QgQVJHUykfCihkZWZhbGlhcyAncHJvY2Vzcy1saW5lcy1pZ25vcmUt c3RhdHVzICNbMzg1ICJcMzAwXDMwMQNcMzAyBCRcMjA3IiBbYXBwbHkgcHJvY2Vzcy1saW5lcy1o YW5kbGluZy1zdGF0dXMgaWdub3JlXSA3ICgjJCAuIDk2OTkwKV0pI0AxODcgUmV0dXJuIG5vbi1u aWwgaWYgUFJPQ0VTUyBpcyBhbGl2ZS4KQSBwcm9jZXNzIGlzIGNvbnNpZGVyZWQgYWxpdmUgaWYg aXRzIHN0YXR1cyBpcyBgcnVuJywgYG9wZW4nLApgbGlzdGVuJywgYGNvbm5lY3QnIG9yIGBzdG9w Jy4gIFZhbHVlIGlzIG5pbCBpZiBQUk9DRVNTIGlzIG5vdCBhCnByb2Nlc3MuCgooZm4gUFJPQ0VT UykfCihkZWZhbGlhcyAncHJvY2Vzcy1saXZlLXAgI1syNTcgIlwzMDABIVwyMDULAFwzMDEBIVwz MDI+XDIwNyIgW3Byb2Nlc3NwIHByb2Nlc3Mtc3RhdHVzIChydW4gb3BlbiBsaXN0ZW4gY29ubmVj dCBzdG9wKV0gMyAoIyQgLiA5NzI4NyldKSNANTcgQXNrIGJlZm9yZSBraWxsaW5nIGEgYnVmZmVy IHRoYXQgaGFzIGEgcnVubmluZyBwcm9jZXNzLh8KKGRlZmFsaWFzICdwcm9jZXNzLWtpbGwtYnVm ZmVyLXF1ZXJ5LWZ1bmN0aW9uICNbMCAiXDMwMHAhXDIxMT9cMjA2IABcMzAxASFcMzAyPj9cMjA2 IABcMzAzASE/XDIwNiAAXDMwNFwzMDVcMzA2XDMwN3AhXCIhXDIwNyIgW2dldC1idWZmZXItcHJv Y2VzcyBwcm9jZXNzLXN0YXR1cyAocnVuIHN0b3Agb3BlbiBsaXN0ZW4pIHByb2Nlc3MtcXVlcnkt b24tZXhpdC1mbGFnIHllcy1vci1uby1wIGZvcm1hdCAiQnVmZmVyICVTIGhhcyBhIHJ1bm5pbmcg cHJvY2Vzczsga2lsbCBpdD8gIiBidWZmZXItbmFtZV0gNiAoIyQgLiA5NzYxNCldKQooYWRkLWhv b2sgJ2tpbGwtYnVmZmVyLXF1ZXJ5LWZ1bmN0aW9ucyAncHJvY2Vzcy1raWxsLWJ1ZmZlci1xdWVy eS1mdW5jdGlvbikjQDE0NyBSZXR1cm4gdGhlIHZhbHVlIG9mIFBST0NFU1MnIFBST1BOQU1FIHBy b3BlcnR5LgpUaGlzIGlzIHRoZSBsYXN0IHZhbHVlIHN0b3JlZCB3aXRoIGAocHJvY2Vzcy1wdXQg UFJPQ0VTUyBQUk9QTkFNRSBWQUxVRSknLgoKKGZuIFBST0NFU1MgUFJPUE5BTUUpHwooZGVmYWxp YXMgJ3Byb2Nlc3MtZ2V0ICNbNTE0ICJcMzAwXDMwMQMhAlwiXDIwNyIgW3BsaXN0LWdldCBwcm9j ZXNzLXBsaXN0XSA1ICgjJCAuIDk4MDU3KV0pI0AxMzMgQ2hhbmdlIFBST0NFU1MnIFBST1BOQU1F IHByb3BlcnR5IHRvIFZBTFVFLgpJdCBjYW4gYmUgcmV0cmlldmVkIHdpdGggYChwcm9jZXNzLWdl dCBQUk9DRVNTIFBST1BOQU1FKScuCgooZm4gUFJPQ0VTUyBQUk9QTkFNRSBWQUxVRSkfCihkZWZh bGlhcyAncHJvY2Vzcy1wdXQgI1s3NzEgIlwzMDADXDMwMVwzMDIGBiEFBSNcIlwyMDciIFtzZXQt cHJvY2Vzcy1wbGlzdCBwbGlzdC1wdXQgcHJvY2Vzcy1wbGlzdF0gOSAoIyQgLiA5ODMwMSldKSNA NjggUmV0dXJuIGFuIGVzdGltYXRlIG9mIEVtYWNzIHZpcnR1YWwgbWVtb3J5IHVzYWdlLCBkaXZp ZGVkIGJ5IDEwMjQuHwooZGVmYWxpYXMgJ21lbW9yeS1saW1pdCAjWzAgIggZXDMwMlwzMDNcMzA0 ICFcMjM2QVwyMDYNAFwzMDUpXDIwNyIgW3RlbXBvcmFyeS1maWxlLWRpcmVjdG9yeSBkZWZhdWx0 LWRpcmVjdG9yeSB2c2l6ZSBwcm9jZXNzLWF0dHJpYnV0ZXMgZW1hY3MtcGlkIDBdIDMgKCMkIC4g OTg1NTYpXSkjQDMyIFVzZWQgaW50ZXJuYWxseSBieSBgcmVhZC1rZXknLh8KKGRlZmNvbnN0IHJl YWQta2V5LWVtcHR5LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSAoIyQgLiA5ODc5NCkpI0AzMiBV c2VkIGludGVybmFsbHkgYnkgYHJlYWQta2V5Jy4fCihkZWZjb25zdCByZWFkLWtleS1mdWxsLW1h cCAoYnl0ZS1jb2RlICJcMzAwIFwzMDEBXDMwMlwzMDMjXDIxMFwzMDEBXDMwNFwzMDUjXDIxMFwy MDciIFttYWtlLXNwYXJzZS1rZXltYXAgZGVmaW5lLWtleSBbdF0gaWdub3JlIFsyN10gbmlsXSA1 KSAoIyQgLiA5ODg5NCkpCihkZWZ2YXIgcmVhZC1rZXktZGVsYXkgMC4wMSkjQDg3OSBSZWFkIGEg a2V5IGZyb20gdGhlIGtleWJvYXJkLgpDb250cmFyeSB0byBgcmVhZC1ldmVudCcgdGhpcyB3aWxs IG5vdCByZXR1cm4gYSByYXcgZXZlbnQgYnV0IGluc3RlYWQgd2lsbApvYmV5IHRoZSBpbnB1dCBk ZWNvZGluZyBhbmQgdHJhbnNsYXRpb25zIHVzdWFsbHkgZG9uZSBieSBgcmVhZC1rZXktc2VxdWVu Y2UnLgpTbyBlc2NhcGUgc2VxdWVuY2VzIGFuZCBrZXlib2FyZCBlbmNvZGluZyBhcmUgdGFrZW4g aW50byBhY2NvdW50LgpXaGVuIHRoZXJlJ3MgYW4gYW1iaWd1aXR5IGJlY2F1c2UgdGhlIGtleSBs b29rcyBsaWtlIHRoZSBwcmVmaXggb2YKc29tZSBzb3J0IG9mIGVzY2FwZSBzZXF1ZW5jZSwgdGhl IGFtYmlndWl0eSBpcyByZXNvbHZlZCB2aWEgYHJlYWQta2V5LWRlbGF5Jy4KCklmIHRoZSBvcHRp b25hbCBhcmd1bWVudCBQUk9NUFQgaXMgbm9uLW5pbCwgZGlzcGxheSB0aGF0IGFzIGEKcHJvbXB0 LgoKSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IERJU0FCTEUtRkFMTEJBQ0tTIGlzIG5vbi1uaWws IGFsbAp1bmJvdW5kIGZhbGxiYWNrcyB1c3VhbGx5IGRvbmUgYnkgYHJlYWQta2V5LXNlcXVlbmNl JyBhcmUKZGlzYWJsZWQgc3VjaCBhcyBkaXNjYXJkaW5nIG1vdXNlIGRvd24gZXZlbnRzLiAgVGhp cyBpcyBnZW5lcmFsbHkKd2hhdCB5b3Ugd2FudCBhcyBgcmVhZC1rZXknIHRlbXBvcmFyaWx5IHJl bW92ZXMgYWxsIGJpbmRpbmdzCndoaWxlIGNhbGxpbmcgYHJlYWQta2V5LXNlcXVlbmNlJy4gIElm IG5pbCBvciB1bnNwZWNpZmllZCwgdGhlCm9ubHkgdW5ib3VuZCBmYWxsYmFjayBkaXNhYmxlZCBp cyBkb3duY2FzaW5nIG9mIHRoZSBsYXN0IGV2ZW50LgoKKGZuICZvcHRpb25hbCBQUk9NUFQgRElT QUJMRS1GQUxMQkFDS1MpHwooZGVmYWxpYXMgJ3JlYWQta2V5ICNbNTEyICJcMzA2AVwyMDMJAAhc MjAyXG4ACVwzMDdcMzEwIFwzMTFcblwzMTJcMzEzIwIbAxwEHVwzMTRcMzE1AgQjXDIxNlwzMTZc MzE3IFwzMjABXDMyMVwzMjIOHlwzMjNcIiNcMjEwXDMyMAFcMzI0XDMyNQ4eXDIzNkFcMjA2OwBc MzIyDh5cMzI2XCIjXDIxMFwzMjABXDMyN1wzMzAOHlwyMzZBXDIwNk0AXDMyMg4eXDMzMVwiI1wy MTBcMjExXDI2MgEhXDIxMFwzMzIyXwBcMzMzBgdcMzA2XDMxMiMwXDIxMVwzMDdIAUdcMzM0Vlwy MDN3AFwyMTFcMzM1PlwyMDN3AAFcMzM0SFwyNjZcMjAyXDIwMnoAXDIxMVwyNjZcMjAyLFwyMDci IFtyZWFkLWtleS1mdWxsLW1hcCByZWFkLWtleS1lbXB0eS1tYXAgcmVhZC1rZXktZGVsYXkgZWNo by1rZXlzdHJva2VzIG92ZXJyaWRpbmctbG9jYWwtbWFwIG92ZXJyaWRpbmctdGVybWluYWwtbG9j YWwtbWFwIG5pbCAwIGN1cnJlbnQtZ2xvYmFsLW1hcCBydW4td2l0aC1pZGxlLXRpbWVyIHQgI1sw ICJcMzAwIFwyMTFHXDMwMVU/XDIwNQ4AXDMwMlwzMDMCXCJcMjA3IiBbdGhpcy1jb21tYW5kLWtl eXMtdmVjdG9yIDAgdGhyb3cgcmVhZC1rZXldIDRdIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDJcMzAw IVwyMTBcMzAzXDMwNCFcMjEwXDMwNVwzMDEhXDIwNyIgW1YwIFYxIGNhbmNlbC10aW1lciBtZXNz YWdlIG5pbCB1c2UtZ2xvYmFsLW1hcF0gMl0gdXNlLWdsb2JhbC1tYXAgbWFrZS1zcGFyc2Uta2V5 bWFwIGRlZmluZS1rZXkgW21lbnUtYmFyXSBsb29rdXAta2V5IFttZW51LWJhcl0gW3RhYi1iYXJd IHRhYi1iYXIgW3RhYi1iYXJdIFt0b29sLWJhcl0gdG9vbC1iYXIgW3Rvb2wtYmFyXSByZWFkLWtl eSByZWFkLWtleS1zZXF1ZW5jZS12ZWN0b3IgMSAobW9kZS1saW5lIGhlYWRlci1saW5lIGxlZnQt ZnJpbmdlIHJpZ2h0LWZyaW5nZSkgZ2xvYmFsLW1hcF0gMTUgKCMkIC4gOTkxMTYpXSkjQDE2OSBS ZWFkIGFuIGV2ZW50IHRoYXQgbWlnaHQgYmUgYSBtb3VzZSBldmVudC4KClRoaXMgZnVuY3Rpb24g ZXhpc3RzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNvZGUgcGFja2FnZWQKd2l0aCBF bWFjcy4gIERvIG5vdCBjYWxsIGl0IGRpcmVjdGx5IGluIHlvdXIgb3duIHBhY2thZ2VzLh8KKGRl ZmFsaWFzICdyZWFkLS1wb3RlbnRpYWwtbW91c2UtZXZlbnQgI1swICIIXDIwMwkAXDMwMVwzMDJc MzAzXCJcMjA3XDMwNCBcMjA3IiBbeHRlcm0tbW91c2UtbW9kZSByZWFkLWtleSBuaWwgdCByZWFk LWV2ZW50XSAzICgjJCAuIDEwMDk0NildKSNAMzggS2V5bWFwIHVzZWQgd2hpbGUgcmVhZGluZyBw YXNzd29yZHMuHwooZGVmdmFyIHJlYWQtcGFzc3dkLW1hcCAoYnl0ZS1jb2RlICJcMzAxIFwzMDIB CFwiXDIxMFwzMDMBXDMwNFwzMDUjXDIxMFwyMDciIFttaW5pYnVmZmVyLWxvY2FsLW1hcCBtYWtl LXNwYXJzZS1rZXltYXAgc2V0LWtleW1hcC1wYXJlbnQgZGVmaW5lLWtleSAiFSIgZGVsZXRlLW1p bmlidWZmZXItY29udGVudHNdIDUpICgjJCAuIDEwMTI2MikpCihkZWZhbGlhcyAncmVhZC1wYXNz d29yZC0taGlkZS1wYXNzd29yZCAjWzAgIlwzMDEgXDMwMiABWlRcMzAzXDIxMQJXXDIwNScAXDMw NAEEXFwCVAVcXFwzMDVcMzA2CFwyMDYdAFwzMDchJFwyMTBcMjExVFwyNjIBXDIwMggAXDIwNyIg W3JlYWQtaGlkZS1jaGFyIG1pbmlidWZmZXItcHJvbXB0LWVuZCBidWZmZXItc2l6ZSAwIHB1dC10 ZXh0LXByb3BlcnR5IGRpc3BsYXkgc3RyaW5nIDQyXSA5XSkjQDQ2OCBSZWFkIGEgcGFzc3dvcmQs IHByb21wdGluZyB3aXRoIFBST01QVCwgYW5kIHJldHVybiBpdC4KSWYgb3B0aW9uYWwgQ09ORklS TSBpcyBub24tbmlsLCByZWFkIHRoZSBwYXNzd29yZCB0d2ljZSB0byBtYWtlIHN1cmUuCk9wdGlv bmFsIERFRkFVTFQgaXMgYSBkZWZhdWx0IHBhc3N3b3JkIHRvIHVzZSBpbnN0ZWFkIG9mIGVtcHR5 IGlucHV0LgoKVGhpcyBmdW5jdGlvbiBlY2hvZXMgYConIGZvciBlYWNoIGNoYXJhY3RlciB0aGF0 IHRoZSB1c2VyIHR5cGVzLgpZb3UgY291bGQgbGV0LWJpbmQgYHJlYWQtaGlkZS1jaGFyJyB0byBh bm90aGVyIGhpZGluZyBjaGFyYWN0ZXIsIHRob3VnaC4KCk9uY2UgdGhlIGNhbGxlciB1c2VzIHRo ZSBwYXNzd29yZCwgaXQgY2FuIGVyYXNlIHRoZSBwYXNzd29yZApieSBkb2luZyAoY2xlYXItc3Ry aW5nIFNUUklORykuCgooZm4gUFJPTVBUICZvcHRpb25hbCBDT05GSVJNIERFRkFVTFQpHwooZGVm YWxpYXMgJ3JlYWQtcGFzc3dkICNbNzY5ICIBXDIwM1AAXDMwMlwyMTFcMjA0TwBcMzAzBFwzMDIE I1wzMDNcMzA0XDMwMgUjAQFcMjMyXDIwMy8AXDMwNQEhXDIwMykAAQE9XDIwNCkAXDMwNgEhXDIx MAFcMjY2XDIwM1wyMDIFAFwzMDUCIVwyMDM5AFwzMDYCIVwyMTBcMzA1ASFcMjAzQwBcMzA2ASFc MjEwXDMwN1wzMTAhXDIxMFwzMTFcMzEyIVwyNjYDXDIwMgUAXDIwN1wzMDJDXDMxM1wzMTQCXCJc MzE1XDMxNiFcMjExXDMxM1wzMTcDBSNNXDIxMFwzMTNcMzIwAlwiXDIxNlwzMjFcMzIyAlwiXDIx MFwzMTNcMzIzBFwiXDIxNlwzMjQIXDIwNnYAXDMyNRgZXDMyNgYGXDMwMlwzMjQGByQsXDIwNyIg W3JlYWQtaGlkZS1jaGFyIGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgbmlsIHJlYWQtcGFz c3dkICJDb25maXJtIHBhc3N3b3JkOiAiIGFycmF5cCBjbGVhci1zdHJpbmcgbWVzc2FnZSAiUGFz c3dvcmQgbm90IHJlcGVhdGVkIGFjY3VyYXRlbHk7IHBsZWFzZSBzdGFydCBvdmVyIiBzaXQtZm9y IDEgbWFrZS1jbG9zdXJlICNbMCAiXDMwMHBcMjQwXDIxMFwzMDZcMzAxIVwyMTBcMzA3EVwzMDZc MzAyIVwyMTBcMzEwElwzMDZcMzAzIVwyMTBcMzA3E1wzMTFcZiFcMjEwXDMwNlwzMDUhXDIxMFwz MDcVXDMwNlwzMTIhXDIxMFwzMDcWXG5cMzA2XDMxMyFcMjEwXDMxMBYLXDMxNFwzMTVcMzE2XDMw N1wzMTAkXDIwNyIgW1YwIHBvc3Qtc2VsZi1pbnNlcnQtaG9vayBidWZmZXItdW5kby1saXN0IHNl bGVjdC1hY3RpdmUtcmVnaW9ucyByZWFkLXBhc3N3ZC1tYXAgaW5oaWJpdC1tb2RpZmljYXRpb24t aG9va3MgbWFrZS1sb2NhbC12YXJpYWJsZSBuaWwgdCB1c2UtbG9jYWwtbWFwIHNob3ctcGFyZW4t bW9kZSBpbmhpYml0LS1yZWNvcmQtY2hhciBhZGQtaG9vayBwb3N0LWNvbW1hbmQtaG9vayByZWFk LXBhc3N3b3JkLS1oaWRlLXBhc3N3b3JkXSA1XSBtYWtlLXN5bWJvbCAibWluaWJ1ZmZlci1zZXR1 cCIgI1swICJcMzAyXDMwM1wzMDBcIlwyMTBcMzAxIFwyMDciIFtWMCBWMSByZW1vdmUtaG9vayBt aW5pYnVmZmVyLXNldHVwLWhvb2tdIDNdICNbMCAiXDMwMVwzMDJcMzAwXCJcMjA3IiBbVjAgcmVt b3ZlLWhvb2sgbWluaWJ1ZmZlci1zZXR1cC1ob29rXSAzXSBhZGQtaG9vayBtaW5pYnVmZmVyLXNl dHVwLWhvb2sgI1swICJcMzAxXDMwMFwyNDIhXDIwNRkAclwzMDBcMjQycVwyMTBcMzAyXDMwM1wz MDRcMzA1I1wyMTBcMzA2XDMwNyFcMjEwXDMxMCApXDIwNyIgW1YwIGJ1ZmZlci1saXZlLXAgcmVt b3ZlLWhvb2sgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyByZWFkLXBhc3N3b3JkLS1oaWRlLXBhc3N3 b3JkIGxvY2FsIGtpbGwtbG9jYWwtdmFyaWFibGUgcG9zdC1zZWxmLWluc2VydC1ob29rIGVyYXNl LWJ1ZmZlcl0gNF0gdCA0MiByZWFkLXN0cmluZ10gMTEgKCMkIC4gMTAxNzI5KV0pI0A1MyBUaGUg ZGVmYXVsdCBoaXN0b3J5IGZvciB0aGUgYHJlYWQtbnVtYmVyJyBmdW5jdGlvbi4fCihkZWZ2YXIg cmVhZC1udW1iZXItaGlzdG9yeSBuaWwgKCMkIC4gMTAzNjIyKSkjQDM4MSBSZWFkIGEgbnVtZXJp YyB2YWx1ZSBpbiB0aGUgbWluaWJ1ZmZlciwgcHJvbXB0aW5nIHdpdGggUFJPTVBULgpERUZBVUxU IHNwZWNpZmllcyBhIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSB1c2VyIGp1c3QgdHlw ZXMgUkVULgpUaGUgdmFsdWUgb2YgREVGQVVMVCBpcyBpbnNlcnRlZCBpbnRvIFBST01QVC4KSElT VCBzcGVjaWZpZXMgYSBoaXN0b3J5IGxpc3QgdmFyaWFibGUuICBTZWUgYHJlYWQtZnJvbS1taW5p YnVmZmVyJwpmb3IgZGV0YWlscyBvZiB0aGUgSElTVCBhcmd1bWVudC4KClRoaXMgZnVuY3Rpb24g aXMgdXNlZCBieSB0aGUgYGludGVyYWN0aXZlJyBjb2RlIGxldHRlciAibiIuCgooZm4gUFJPTVBU ICZvcHRpb25hbCBERUZBVUxUIEhJU1QpHwooZGVmYWxpYXMgJ3JlYWQtbnVtYmVyICNbNzY5ICJc MzAxAjpcMjAzCwACQFwyMDJcZgACXDIxMVwyMDMzAFwzMDJcMzAzBgZcIlwyMDMmAFwzMDRcMzA1 CANcIlwzMDZcMjExBghcMzA3JVwyMDIxAFwzMTBcMzExXDMwNQgEXCIGB1wzMDZcMjExJVwyNjIF XDMxMgVcMzAxXDIxMVwyMTEGB1wyMDY+AFwzMTMGCVwyMDVYAAYJOlwyMDNUAFwzMTRcMzE1XDMx NlwzMDEGDVwiXCJcMjAyWABcMzE1BlxuISYGXDMxNzF6AFwyMTFHXDMyMFVcMjAzaQABXDIwMnEA XDIxMTtcMjA1cQBcMzIxASFcMjExXDI2MgQwXDI2NgJcMjAyfABcMjY2AgFcMjQ3XDIwNFwyMTQA XDMyMlwzMjMhXDIxMFwzMjRcMzA3IVwyMTBcMjAyMwABXDIwNyIgW21pbmlidWZmZXItZGVmYXVs dC1wcm9tcHQtZm9ybWF0IG5pbCBzdHJpbmctbWF0Y2ggIlxcKFxcKTpbIAldKlxcJyIgcmVwbGFj ZS1tYXRjaCBmb3JtYXQgdCAxIHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiWyAJXSpcXCciIHJl YWQtZnJvbS1taW5pYnVmZmVyIHJlYWQtbnVtYmVyLWhpc3RvcnkgbWFwY2FyIG51bWJlci10by1z dHJpbmcgZGVscSAoZXJyb3IpIDAgcmVhZCBtZXNzYWdlICJQbGVhc2UgZW50ZXIgYSBudW1iZXIu IiBzaXQtZm9yXSAxNiAoIyQgLiAxMDM3MjcpXSkjQDQ2MiBQcmVmZXIgYHJlYWQta2V5JyB3aGVu IHJlYWRpbmcgYSBjaGFyYWN0ZXIgYnkgYHJlYWQtY2hhci1jaG9pY2UnLgpPdGhlcndpc2UsIHVz ZSB0aGUgbWluaWJ1ZmZlci4KCldoZW4gdXNpbmcgdGhlIG1pbmlidWZmZXIsIHRoZSB1c2VyIGlz IGxlc3MgY29uc3RyYWluZWQsIGFuZCBjYW4KdXNlIHRoZSBub3JtYWwgY29tbWFuZHMgYXZhaWxh YmxlIGluIHRoZSBtaW5pYnVmZmVyLCBhbmQgY2FuLCBmb3IKaW5zdGFuY2UsIHN3aXRjaCB0byBh bm90aGVyIGJ1ZmZlciwgZG8gdGhpbmdzIHRoZXJlLCBhbmQgdGhlbgpzd2l0Y2ggYmFjayBhZ2Fp biB0byB0aGUgbWluaWJ1ZmZlciBiZWZvcmUgZW50ZXJpbmcgdGhlCmNoYXJhY3Rlci4gIFRoaXMg aXMgbm90IHBvc3NpYmxlIHdoZW4gdXNpbmcgYHJlYWQta2V5JywgYnV0IHVzaW5nCmByZWFkLWtl eScgbWF5IGJlIGxlc3MgY29uZnVzaW5nIHRvIHNvbWUgdXNlcnMuHwooZGVmdmFyIHJlYWQtY2hh ci1jaG9pY2UtdXNlLXJlYWQta2V5IG5pbCAoIyQgLiAxMDQ3NDQpKSNAMzg0IFJlYWQgYW5kIHJl dHVybiBvbmUgb2YgQ0hBUlMsIHByb21wdGluZyBmb3IgUFJPTVBULgpBbnkgaW5wdXQgdGhhdCBp cyBub3Qgb25lIG9mIENIQVJTIGlzIGlnbm9yZWQuCgpCeSBkZWZhdWx0LCB0aGUgbWluaWJ1ZmZl ciBpcyB1c2VkIHRvIHJlYWQgdGhlIGtleQpub24tbW9kYWxseSAoc2VlIGByZWFkLWNoYXItZnJv bS1taW5pYnVmZmVyJykuICBJZgpgcmVhZC1jaGFyLWNob2ljZS11c2UtcmVhZC1rZXknIGlzIG5v bi1uaWwsIHRoZSBtb2RhbCBgcmVhZC1rZXknCmZ1bmN0aW9uIGlzIHVzZWQgaW5zdGVhZCAoc2Vl IGByZWFkLWNoYXItY2hvaWNlLXdpdGgtcmVhZC1rZXknKS4KCihmbiBQUk9NUFQgQ0hBUlMgJm9w dGlvbmFsIElOSElCSVQtS0VZQk9BUkQtUVVJVCkfCihkZWZhbGlhcyAncmVhZC1jaGFyLWNob2lj ZSAjWzc3MCAiCFwyMDQJAFwzMDEDA1wiXDIwN1wzMDIDAwMjXDIwNyIgW3JlYWQtY2hhci1jaG9p Y2UtdXNlLXJlYWQta2V5IHJlYWQtY2hhci1mcm9tLW1pbmlidWZmZXIgcmVhZC1jaGFyLWNob2lj ZS13aXRoLXJlYWQta2V5XSA3ICgjJCAuIDEwNTI2OCldKSNANDQwIFJlYWQgYW5kIHJldHVybiBv bmUgb2YgQ0hBUlMsIHByb21wdGluZyBmb3IgUFJPTVBULgpBbnkgaW5wdXQgdGhhdCBpcyBub3Qg b25lIG9mIENIQVJTIGlzIGlnbm9yZWQuCgpJZiBvcHRpb25hbCBhcmd1bWVudCBJTkhJQklULUtF WUJPQVJELVFVSVQgaXMgbm9uLW5pbCwgaWdub3JlCmBrZXlib2FyZC1xdWl0JyBldmVudHMgd2hp bGUgd2FpdGluZyBmb3IgYSB2YWxpZCBpbnB1dC4KCklmIHlvdSBiaW5kIHRoZSB2YXJpYWJsZSBg aGVscC1mb3JtJyB0byBhIG5vbi1uaWwgdmFsdWUKd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9u LCB0aGVuIHByZXNzaW5nIGBoZWxwLWNoYXInCmNhdXNlcyBpdCB0byBldmFsdWF0ZSBgaGVscC1m b3JtJyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0LgoKKGZuIFBST01QVCBDSEFSUyAmb3B0aW9uYWwg SU5ISUJJVC1LRVlCT0FSRC1RVUlUKR8KKGRlZmFsaWFzICdyZWFkLWNoYXItY2hvaWNlLXdpdGgt cmVhZC1rZXkgI1s3NzAgIgE6XDIwNAkAXDMwNVwzMDYhXDIxMFwzMDdcMjExXDIxMVwzMTAIXDMw NwEYAhlcMzExIFwzMTJcMzEzAlwiXDIxNgVcMjA0XDI0MwBcMzE0XDMxNVwzMTYGXGYjXDIwNC8A XDMxNwZcblwzMTZcMzIwI1wyNjJcbgYHGlwzMjEGXG4hKVwyNjIHBFwyMDNJAFwzMjJcMzIzXDMy NCEhXDIwM0kAXDMyNVwzMjQhXDIxMAYGXDI0N1wyMDMaAAtcMjAzYgAGBlxmPVwyMDNiAFwzMTBc MjYyBVwzMjYgXDIwNBoABgYGCT5cMjAzcABcMzEwXDI2MgZcMjAyGgAIXDIwM1wyMDAABgZcMzI3 VVwyMDNcMjAwAFwzMDcQXDIwMhoABgdcMjA0GgABXDIwNFwyMjYABgZcMzMwPVwyMDNcMjI2AFwz MTBcMjYyAlwyMDIaAAYGXDMzMT5cMjAzGgBcMzMyIFwyMTBcMjAyGgArXDI2NgRcMzMzXDMzNAYH XDMzNQYGISNcMjEwAlwyMDciIFtleGVjdXRpbmcta2JkLW1hY3JvIGN1cnNvci1pbi1lY2hvLWFy ZWEgaW5oaWJpdC1xdWl0IGhlbHAtZm9ybSBoZWxwLWNoYXIgZXJyb3IgIkNhbGxlZCBgcmVhZC1j aGFyLWNob2ljZScgd2l0aG91dCB2YWxpZCBjaGFyIGNob2ljZXMiIG5pbCB0IGN1cnJlbnQtd2lu ZG93LWNvbmZpZ3VyYXRpb24gbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIHNl dC13aW5kb3ctY29uZmlndXJhdGlvbl0gMl0gZ2V0LXRleHQtcHJvcGVydHkgMCBmYWNlIHByb3Bl cnRpemUgbWluaWJ1ZmZlci1wcm9tcHQgcmVhZC1rZXkgYnVmZmVyLWxpdmUtcCBnZXQtYnVmZmVy ICIgKkNoYXIgSGVscCoiIGtpbGwtYnVmZmVyIGhlbHAtZm9ybS1zaG93IC0xIDI3ICg3IDI3KSBr ZXlib2FyZC1xdWl0IG1lc3NhZ2UgIiVzJXMiIGNoYXItdG8tc3RyaW5nXSAxNCAoIyQgLiAxMDU4 MzIpXSkjQDc1NiBSZWRpc3BsYXksIHRoZW4gd2FpdCBmb3IgU0VDT05EUyBzZWNvbmRzLiAgU3Rv cCB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZS4KU0VDT05EUyBtYXkgYmUgYSBmbG9hdGluZy1wb2lu dCB2YWx1ZS4KKE9uIG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgd2FpdGlu ZyBmb3IgZnJhY3Rpb25zIG9mIGEKc2Vjb25kLCBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHJv dW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLikKCklmIG9wdGlvbmFsIGFyZyBOT0RJ U1AgaXMgdCwgZG9uJ3QgcmVkaXNwbGF5LCBqdXN0IHdhaXQgZm9yIGlucHV0LgpSZWRpc3BsYXkg ZG9lcyBub3QgaGFwcGVuIGlmIGlucHV0IGlzIGF2YWlsYWJsZSBiZWZvcmUgaXQgc3RhcnRzLgoK VmFsdWUgaXMgdCBpZiB3YWl0ZWQgdGhlIGZ1bGwgdGltZSB3aXRoIG5vIGlucHV0IGFycml2aW5n LCBhbmQgbmlsIG90aGVyd2lzZS4KCkFuIG9ic29sZXRlLCBidXQgc3RpbGwgc3VwcG9ydGVkIGZv cm0gaXMKKHNpdC1mb3IgU0VDT05EUyAmb3B0aW9uYWwgTUlMTElTRUNPTkRTIE5PRElTUCkKd2hl cmUgdGhlIG9wdGlvbmFsIGFyZyBNSUxMSVNFQ09ORFMgc3BlY2lmaWVzIGFuIGFkZGl0aW9uYWwg d2FpdCBwZXJpb2QsCmluIG1pbGxpc2Vjb25kczsgdGhpcyB3YXMgdXNlZnVsIHdoZW4gRW1hY3Mg d2FzIGJ1aWx0IHdpdGhvdXQKZmxvYXRpbmcgcG9pbnQgc3VwcG9ydC4KCihmbiBTRUNPTkRTICZv cHRpb25hbCBOT0RJU1AgT0JTT0xFVEUpHwooZGVmYWxpYXMgJ3NpdC1mb3IgI1s3NjkgIgFcMjQ3 XDIwMxIAAlwzMDQDX1xcXDI2MgNcMjExXDI2MgJcMjAyGQBcMjExXDIwMxkAXDIxMVwyNjICCFwy MDMjAFwzMDUDIVwyMTBcMzA2XDIwN1wzMDdcMzA2IVwyMDMrAFwzMTBcMjA3AlwzMTFYXDIwNDUA CVwyMDM8AAFcMjA2WQBcMzEyIFwyMDcBXDIwNEMAXDMxMiBcMjEwXDMxMBpcMzEzXDMxMFwzMDYF IylcMjExP1wyMDZXAFwzMDYBQgtCE1wzMTBcMjYyAVwyMDciIFtub25pbnRlcmFjdGl2ZSBkZWZp bmluZy1rYmQtbWFjcm8gaW5wdXQtbWV0aG9kLWZ1bmN0aW9uIHVucmVhZC1jb21tYW5kLWV2ZW50 cyAwLjAwMSBzbGVlcC1mb3IgdCBpbnB1dC1wZW5kaW5nLXAgbmlsIDAgcmVkaXNwbGF5IHJlYWQt ZXZlbnRdIDcgKCMkIC4gMTA3MTcxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIx MFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwyMDciIFtzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNvbnZl bnRpb24gc2l0LWZvciAoc2Vjb25kcyAmb3B0aW9uYWwgbm9kaXNwKSAiMjIuMSIgZnVuY3Rpb24t cHV0IGNvbXBpbGVyLW1hY3JvIHNpdC1mb3ItLWFub24tY21hY3JvXSA0KSNANDcgCgooZm4gRk9S TSBTRUNPTkRTICZvcHRpb25hbCBOT0RJU1AgT0JTT0xFVEUpHwooZGVmYWxpYXMgJ3NpdC1mb3It LWFub24tY21hY3JvICNbMTAyNiAiAVwyNDdcMjA0CwBcMjExXDIwNAsAA1wyMDdcMzAwXDMwMQVA XDMwMgYGXDMwM1wzMDQGCFwzMDVCQlwzMDZCQkUERVwzMDcjXDIwNyIgW21hY3JvZXhwLXdhcm4t YW5kLXJldHVybiAiT2Jzb2xldGUgY2FsbGluZyBjb252ZW50aW9uIGZvciAnc2l0LWZvciciICsg LyBvciAoMCkgKDEwMDAuMCkgKG9ic29sZXRlIHNpdC1mb3IpXSAxMyAoIyQgLiAxMDg1MTkpXSkj QDEzNyBHZXQgYSBuYXR1cmFsIG51bWJlciBhcmd1bWVudCwgb3B0aW9uYWxseSBwcm9tcHRpbmcg d2l0aCBQUk9NUFQuCklmIHRoZXJlIGlzIGEgbmF0dXJhbCBudW1iZXIgYXQgcG9pbnQsIHVzZSBp dCBhcyBkZWZhdWx0LgoKKGZuIFBST01QVCkfCihkZWZhbGlhcyAnZ290by1jaGFyLS1yZWFkLW5h dG51bS1pbnRlcmFjdGl2ZSAjWzI1NyAiCFwyMDMOAAg6XDIwNA4AXDMwMQghQ1wyMDdcMzAyIFwz MDMBIVwyMDUXAFwyMTFcMzA0AwJgRFwiQ1wyMDciIFtjdXJyZW50LXByZWZpeC1hcmcgcHJlZml4 LW51bWVyaWMtdmFsdWUgbnVtYmVyLWF0LXBvaW50IG5hdG51bXAgcmVhZC1udW1iZXJdIDcgKCMk IC4gMTA4ODE4KV0pI0A2NyBUaGUgZGVmYXVsdCBoaXN0b3J5IGZvciB0aGUgYHJlYWQtY2hhci1m cm9tLW1pbmlidWZmZXInIGZ1bmN0aW9uLh8KKGRlZnZhciByZWFkLWNoYXItaGlzdG9yeSBuaWwg KCMkIC4gMTA5MTcyKSkjQDU0IEtleW1hcCBmb3IgdGhlIGByZWFkLWNoYXItZnJvbS1taW5pYnVm ZmVyJyBmdW5jdGlvbi4fCihkZWZ2YXIgcmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZlci1tYXAgKGJ5 dGUtY29kZSAiXDMwMSBcMzAyAQhcIlwyMTBcMzAzAVwzMDRcMzA1I1wyMTBcMzAzAVwzMDZcMzA3 I1wyMTBcMzAzAVwzMTBcMzExI1wyMTBcMzAzAVwzMTJcMzEzI1wyMTBcMzAzAVwzMTRcMzE1I1wy MTBcMzAzAVwzMTZcMzE3I1wyMTBcMzAzAVwzMjBcMzIxI1wyMTBcMjA3IiBbbWluaWJ1ZmZlci1s b2NhbC1tYXAgbWFrZS1zcGFyc2Uta2V5bWFwIHNldC1rZXltYXAtcGFyZW50IGRlZmluZS1rZXkg W3JlbWFwIHNlbGYtaW5zZXJ0LWNvbW1hbmRdIHJlYWQtY2hhci1mcm9tLW1pbmlidWZmZXItaW5z ZXJ0LWNoYXIgW3JlbWFwIGV4aXQtbWluaWJ1ZmZlcl0gcmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZl ci1pbnNlcnQtb3RoZXIgW3JlbWFwIHJlY2VudGVyLXRvcC1ib3R0b21dIG1pbmlidWZmZXItcmVj ZW50ZXItdG9wLWJvdHRvbSBbcmVtYXAgc2Nyb2xsLXVwLWNvbW1hbmRdIG1pbmlidWZmZXItc2Ny b2xsLXVwLWNvbW1hbmQgW3JlbWFwIHNjcm9sbC1kb3duLWNvbW1hbmRdIG1pbmlidWZmZXItc2Ny b2xsLWRvd24tY29tbWFuZCBbcmVtYXAgc2Nyb2xsLW90aGVyLXdpbmRvd10gbWluaWJ1ZmZlci1z Y3JvbGwtb3RoZXItd2luZG93IFtyZW1hcCBzY3JvbGwtb3RoZXItd2luZG93LWRvd25dIG1pbmli dWZmZXItc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duXSA1KSAoIyQgLiAxMDkyODgpKQooZGVmY29u c3QgcmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZlci1tYXAtaGFzaCAobWFrZS1oYXNoLXRhYmxlIDp0 ZXN0ICdlcXVhbCkpI0AxNDQgSW5zZXJ0IHRoZSBjaGFyYWN0ZXIgeW91IHR5cGUgaW50byB0aGUg bWluaWJ1ZmZlciBhbmQgZXhpdCBtaW5pYnVmZmVyLgpEaXNjYXJkIGFsbCBwcmV2aW91cyBpbnB1 dCBiZWZvcmUgaW5zZXJ0aW5nIGFuZCBleGl0aW5nIHRoZSBtaW5pYnVmZmVyLh8KKGRlZmFsaWFz ICdyZWFkLWNoYXItZnJvbS1taW5pYnVmZmVyLWluc2VydC1jaGFyICNbMCAiXDMwMSBcMjA1DQBc MzAyIFwyMTAIY1wyMTBcMzAzIFwyMDciIFtsYXN0LWNvbW1hbmQtZXZlbnQgbWluaWJ1ZmZlcnAg ZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMgZXhpdC1taW5pYnVmZmVyXSAxICgjJCAuIDExMDE0 MikgbmlsXSkjQDI2NyBSZWplY3QgYSBkaXNhbGxvd2VkIGNoYXJhY3RlciB0eXBlZCBpbnRvIHRo ZSBtaW5pYnVmZmVyLgpUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgdG8gYmUgYm91bmQgdG8ga2V5 cyB0aGF0IHVzZXJzIGFyZSBub3QKYWxsb3dlZCB0byB0eXBlIGludG8gdGhlIG1pbmlidWZmZXIu ICBXaGVuIHRoZSB1c2VyIHR5cGVzIGFueQpzdWNoIGtleSwgdGhpcyBjb21tYW5kIGRpc2NhcmQg YWxsIG1pbmlidWZmZXIgaW5wdXQgYW5kIGRpc3BsYXlzCmFuIGVycm9yIG1lc3NhZ2UuHwooZGVm YWxpYXMgJ3JlYWQtY2hhci1mcm9tLW1pbmlidWZmZXItaW5zZXJ0LW90aGVyICNbMCAiXDMwMCBc MjA1FQBcMzAxIFwyMTBcMzAyIFwyMTBcMzAzIFwyMTBcMzA0XDMwNSFcMjEwXDMwNlwzMDchXDIw NyIgW21pbmlidWZmZXJwIGRlbGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRzIGRpbmcgZGlzY2FyZC1p bnB1dCBtaW5pYnVmZmVyLW1lc3NhZ2UgIldyb25nIGFuc3dlciIgc2l0LWZvciAyXSAyICgjJCAu IDExMDQ4MCkgbmlsXSkjQDgwMyBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIG1pbmlidWZmZXIs IHByb21wdGluZyBmb3IgaXQgd2l0aCBQUk9NUFQuCkxpa2UgYHJlYWQtY2hhcicsIGJ1dCB1c2Vz IHRoZSBtaW5pYnVmZmVyIHRvIHJlYWQgYW5kIHJldHVybiBhIGNoYXJhY3Rlci4KT3B0aW9uYWwg YXJndW1lbnQgQ0hBUlMsIGlmIG5vbi1uaWwsIHNob3VsZCBiZSBhIGxpc3Qgb2YgY2hhcmFjdGVy czsKdGhlIGZ1bmN0aW9uIHdpbGwgaWdub3JlIGFueSBpbnB1dCB0aGF0IGlzIG5vdCBvbmUgb2Yg Q0hBUlMuCk9wdGlvbmFsIGFyZ3VtZW50IEhJU1RPUlksIGlmIG5vbi1uaWwsIHNob3VsZCBiZSBh IHN5bWJvbCB0aGF0CnNwZWNpZmllcyB0aGUgaGlzdG9yeSBsaXN0IHZhcmlhYmxlIHRvIHVzZSBm b3IgbmF2aWdhdGluZyBpbiBpbnB1dApoaXN0b3J5IHVzaW5nIFxgTS1wJyBhbmQgXGBNLW4nLCB3 aXRoIFxgUkVUJyB0byBzZWxlY3QgYSBjaGFyYWN0ZXIgZnJvbQpoaXN0b3J5LgpJZiB5b3UgYmlu ZCB0aGUgdmFyaWFibGUgYGhlbHAtZm9ybScgdG8gYSBub24tbmlsIHZhbHVlCndoaWxlIGNhbGxp bmcgdGhpcyBmdW5jdGlvbiwgdGhlbiBwcmVzc2luZyBgaGVscC1jaGFyJwpjYXVzZXMgaXQgdG8g ZXZhbHVhdGUgYGhlbHAtZm9ybScgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdC4KVGhlcmUgaXMgbm8g bmVlZCB0byBleHBsaWNpdGx5IGFkZCBgaGVscC1jaGFyJyB0byBDSEFSUzsKYGhlbHAtY2hhcicg aXMgYm91bmQgYXV0b21hdGljYWxseSB0byBgaGVscC1mb3JtLXNob3cnLgoKKGZuIFBST01QVCAm b3B0aW9uYWwgQ0hBUlMgSElTVE9SWSkfCihkZWZhbGlhcyAncmVhZC1jaGFyLWZyb20tbWluaWJ1 ZmZlciAjWzc2OSAiATpcMjAzVQBcMzA1CAkEQkRcblwiXDIwNlYAXDMwNiAIXDMwNwILXCJcMjEw CFwyMDMnAFwzMTACXDMxMQkhXDMxMlwzMTMFXCIjXDIxMANcMjExXDIwMz0AXDIxMUBcMzEwBFwz MTEDIVwzMTQjXDIxMAFBXDI2NlwyMDJcMjAyKABcMjEwXDMxMAJcMzE1XDMxNiNcMjEwXDMxNwgJ BgZCRANcbiNcMjEwAVwyNjZcMjAyXDIwMlYAC1xmHFwzMjAEXDMyMQNcMzIxBgZcMjA2YwBcMzIy JVwyMTFHXDMyM1ZcMjAzcQBcMjExXDMyM1wyMzRcMjAyfQACXDIwM3wAAlwzMjQESkJMXDIxMFwz MjVcMzI2XDMyNwYHXDMzMAQhIylcMjEwXDIwNyIgW2hlbHAtZm9ybSBoZWxwLWNoYXIgcmVhZC1j aGFyLWZyb20tbWluaWJ1ZmZlci1tYXAtaGFzaCByZWFkLWNoYXItZnJvbS1taW5pYnVmZmVyLW1h cCB0aGlzLWNvbW1hbmQgZ2V0aGFzaCBtYWtlLXNwYXJzZS1rZXltYXAgc2V0LWtleW1hcC1wYXJl bnQgZGVmaW5lLWtleSB2ZWN0b3IgbWFrZS1jbG9zdXJlICNbMCAiXDMwMBlcMzAyIClcMjA3IiBb VjAgaGVscC1mb3JtIGhlbHAtZm9ybS1zaG93XSAxIG5pbCBuaWxdIHJlYWQtY2hhci1mcm9tLW1p bmlidWZmZXItaW5zZXJ0LWNoYXIgW3JlbWFwIHNlbGYtaW5zZXJ0LWNvbW1hbmRdIHJlYWQtY2hh ci1mcm9tLW1pbmlidWZmZXItaW5zZXJ0LW90aGVyIHB1dGhhc2ggcmVhZC1mcm9tLW1pbmlidWZm ZXIgbmlsIHQgMCAiDSIgMTMgbWVzc2FnZSAiJXMlcyIgY2hhci10by1zdHJpbmddIDExICgjJCAu IDExMDk5OSldKSNANTEgSGlzdG9yeSBsaXN0IHN5bWJvbCB0byBhZGQgYHktb3Itbi1wJyBhbnN3 ZXJzIHRvLh8KKGRlZnZhciB5LW9yLW4tcC1oaXN0b3J5LXZhcmlhYmxlIG5pbCAoIyQgLiAxMTI1 OTApKSNANjUgS2V5bWFwIHRoYXQgZGVmaW5lcyBhZGRpdGlvbmFsIGJpbmRpbmdzIGZvciBgeS1v ci1uLXAnIGFuc3dlcnMuHwooZGVmdmFyIHktb3Itbi1wLW1hcCAoYnl0ZS1jb2RlICJcMzAxIFwz MDIBCFwiXDIxMFwzMDNcMjExXDIwMx4AXDIxMUBcMzA0A1wzMDVcMzA2BFwiXDMwNyNcMjEwAUFc MjY2XDIwMlwyMDIIAFwyMTBcMzA0AVwzMTBcMzExI1wyMTBcMzEyXDIxMVwyMDM8AFwyMTFAXDMw NANcMzA1XDMwNgRcIlwzMTMjXDIxMAFBXDI2NlwyMDJcMjAyJgBcMjEwXDMwNAFcMzE0XDMxNSNc MjEwXDMwNAFcMzE2XDMxNyNcMjEwXDMwNAFcMzIwXDMyMSNcMjEwXDMwNAFcMzIyXDMyMyNcMjEw XDMwNAFcMzI0XDMyNSNcMjEwXDMwNAFcMzI2XDMxMyNcMjEwXDMyN1wyMTFcMjAzeABcMjExQFwz MDQDXDMwNVwzMDYEXCJcMzMwI1wyMTABQVwyNjZcMjAyXDIwMmIAXDIxMFwzMDQBXDMzMVwzMzAj XDIxMFwyMDciIFttaW5pYnVmZmVyLWxvY2FsLW1hcCBtYWtlLXNwYXJzZS1rZXltYXAgc2V0LWtl eW1hcC1wYXJlbnQgKGFjdCBhY3QtYW5kLXNob3cgYWN0LWFuZC1leGl0IGF1dG9tYXRpYykgZGVm aW5lLWtleSB2ZWN0b3IgcmVtYXAgeS1vci1uLXAtaW5zZXJ0LXkgW3JlbWFwIHNraXBdIHktb3It bi1wLWluc2VydC1uIChiYWNrdXAgdW5kbyB1bmRvLWFsbCBlZGl0IGVkaXQtcmVwbGFjZW1lbnQg ZGVsZXRlLWFuZC1lZGl0IGlnbm9yZSBzZWxmLWluc2VydC1jb21tYW5kKSB5LW9yLW4tcC1pbnNl cnQtb3RoZXIgW3JlbWFwIHJlY2VudGVyXSBtaW5pYnVmZmVyLXJlY2VudGVyLXRvcC1ib3R0b20g W3JlbWFwIHNjcm9sbC11cF0gbWluaWJ1ZmZlci1zY3JvbGwtdXAtY29tbWFuZCBbcmVtYXAgc2Ny b2xsLWRvd25dIG1pbmlidWZmZXItc2Nyb2xsLWRvd24tY29tbWFuZCBbcmVtYXAgc2Nyb2xsLW90 aGVyLXdpbmRvd10gbWluaWJ1ZmZlci1zY3JvbGwtb3RoZXItd2luZG93IFtyZW1hcCBzY3JvbGwt b3RoZXItd2luZG93LWRvd25dIG1pbmlidWZmZXItc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duIFty ZW1hcCBleGl0XSAoZXhpdC1wcmVmaXggcXVpdCkgYWJvcnQtcmVjdXJzaXZlLWVkaXQgW2VzY2Fw ZV1dIDgpICgjJCAuIDExMjY5OCkpI0AxMzQgSW5zZXJ0IHRoZSBhbnN3ZXIgInkiIGFuZCBleGl0 IHRoZSBtaW5pYnVmZmVyIG9mIGB5LW9yLW4tcCcuCkRpc2NhcmQgYWxsIHByZXZpb3VzIGlucHV0 IGJlZm9yZSBpbnNlcnRpbmcgYW5kIGV4aXRpbmcgdGhlIG1pbmlidWZmZXIuHwooZGVmYWxpYXMg J3ktb3Itbi1wLWluc2VydC15ICNbMCAiXDMwMCBcMjA1DQBcMzAxIFwyMTBcMzAyY1wyMTBcMzAz IFwyMDciIFttaW5pYnVmZmVycCBkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cyAieSIgZXhpdC1t aW5pYnVmZmVyXSAxICgjJCAuIDExMzc5OSkgbmlsXSkjQDEzNCBJbnNlcnQgdGhlIGFuc3dlciAi biIgYW5kIGV4aXQgdGhlIG1pbmlidWZmZXIgb2YgYHktb3Itbi1wJy4KRGlzY2FyZCBhbGwgcHJl dmlvdXMgaW5wdXQgYmVmb3JlIGluc2VydGluZyBhbmQgZXhpdGluZyB0aGUgbWluaWJ1ZmZlci4f CihkZWZhbGlhcyAneS1vci1uLXAtaW5zZXJ0LW4gI1swICJcMzAwIFwyMDUNAFwzMDEgXDIxMFwz MDJjXDIxMFwzMDMgXDIwNyIgW21pbmlidWZmZXJwIGRlbGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRz ICJuIiBleGl0LW1pbmlidWZmZXJdIDEgKCMkIC4gMTE0MDk1KSBuaWxdKSNAMTgwIEhhbmRsZSBp bnNlcnRpbmcgb2Ygb3RoZXIgYW5zd2VycyBpbiB0aGUgbWluaWJ1ZmZlciBvZiBgeS1vci1uLXAn LgpEaXNwbGF5IGFuIGVycm9yIG9uIHRyeWluZyB0byBpbnNlcnQgYSBkaXNhbGxvd2VkIGNoYXJh Y3Rlci4KQWxzbyBkaXNjYXJkIGFsbCBwcmV2aW91cyBpbnB1dCBpbiB0aGUgbWluaWJ1ZmZlci4f CihkZWZhbGlhcyAneS1vci1uLXAtaW5zZXJ0LW90aGVyICNbMCAiXDMwMCBcMjA1FQBcMzAxIFwy MTBcMzAyIFwyMTBcMzAzIFwyMTBcMzA0XDMwNSFcMjEwXDMwNlwzMDchXDIwNyIgW21pbmlidWZm ZXJwIGRlbGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRzIGRpbmcgZGlzY2FyZC1pbnB1dCBtaW5pYnVm ZmVyLW1lc3NhZ2UgIlBsZWFzZSBhbnN3ZXIgeSBvciBuIiBzaXQtZm9yIDJdIDIgKCMkIC4gMTE0 MzkxKSBuaWxdKSNANDY0IFByZWZlciBgcmVhZC1rZXknIHdoZW4gYW5zd2VyaW5nIGEgInkgb3Ig biIgcXVlc3Rpb24gYnkgYHktb3Itbi1wJy4KT3RoZXJ3aXNlLCB1c2UgdGhlIG1pbmlidWZmZXIu CgpXaGVuIHVzaW5nIHRoZSBtaW5pYnVmZmVyLCB0aGUgdXNlciBpcyBsZXNzIGNvbnN0cmFpbmVk LCBhbmQgY2FuCnVzZSB0aGUgbm9ybWFsIGNvbW1hbmRzIGF2YWlsYWJsZSBpbiB0aGUgbWluaWJ1 ZmZlciwgYW5kIGNhbiwgZm9yCmluc3RhbmNlLCBzd2l0Y2ggdG8gYW5vdGhlciBidWZmZXIsIGRv IHRoaW5ncyB0aGVyZSwgYW5kIHRoZW4Kc3dpdGNoIGJhY2sgYWdhaW4gdG8gdGhlIG1pbmlidWZm ZXIgYmVmb3JlIGVudGVyaW5nIHRoZQpjaGFyYWN0ZXIuICBUaGlzIGlzIG5vdCBwb3NzaWJsZSB3 aGVuIHVzaW5nIGByZWFkLWtleScsIGJ1dCB1c2luZwpgcmVhZC1rZXknIG1heSBiZSBsZXNzIGNv bmZ1c2luZyB0byBzb21lIHVzZXJzLh8KKGRlZnZhciB5LW9yLW4tcC11c2UtcmVhZC1rZXkgbmls ICgjJCAuIDExNDgxNCkpI0A2NCBOb24tbmlsIG1lYW5zIHRoZSBjdXJyZW50IGNvbW1hbmQgd2Fz IGludm9rZWQgZnJvbSBhIFRUWSBtZW51Lh8KKGRlZnZhciBmcm9tLS10dHktbWVudS1wIG5pbCAo IyQgLiAxMTUzMzEpKSNANzQgU2F5IHdoZXRoZXIgdGhlIGN1cnJlbnQgY29tbWFuZCBzaG91bGQg cHJvbXB0IHRoZSB1c2VyIHZpYSBhIGRpYWxvZyBib3guHwooZGVmYWxpYXMgJ3VzZS1kaWFsb2ct Ym94LXAgI1swICIIXDIwNQ4ACTxcMjA0DQBcblwyMDUOAAtcMjA3IiBbbGFzdC1pbnB1dC1ldmVu dCBsYXN0LW5vbm1lbnUtZXZlbnQgZnJvbS0tdHR5LW1lbnUtcCB1c2UtZGlhbG9nLWJveF0gMSAo IyQgLiAxMTU0NDMpXSkjQDE1NjEgQXNrIHVzZXIgYSAieSBvciBuIiBxdWVzdGlvbi4KUmV0dXJu IHQgaWYgYW5zd2VyIGlzICJ5IiBhbmQgbmlsIGlmIGl0IGlzICJuIi4KClBST01QVCBpcyB0aGUg c3RyaW5nIHRvIGRpc3BsYXkgdG8gYXNrIHRoZSBxdWVzdGlvbjsgYHktb3Itbi1wJwphZGRzICIg KHkgb3IgbikgIiB0byBpdC4gIEl0IGRvZXMgbm90IG5lZWQgdG8gZW5kIGluIHNwYWNlLCBidXQK aWYgaXQgZG9lcyB1cCB0byBvbmUgc3BhY2Ugd2lsbCBiZSByZW1vdmVkLgoKSWYgeW91IGJpbmQg dGhlIHZhcmlhYmxlIGBoZWxwLWZvcm0nIHRvIGEgbm9uLW5pbCB2YWx1ZQp3aGlsZSBjYWxsaW5n IHRoaXMgZnVuY3Rpb24sIHRoZW4gcHJlc3NpbmcgYGhlbHAtY2hhcicKY2F1c2VzIGl0IHRvIGV2 YWx1YXRlIGBoZWxwLWZvcm0nIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQuClBST01QVCBpcyBhbHNv IHVwZGF0ZWQgdG8gc2hvdyBgaGVscC1jaGFyJyBsaWtlICIoeSwgbiBvciBDLWgpICIsCndoZXJl IGBoZWxwLWNoYXInIGlzIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gYGhlbHAtZm9ybS1zaG93Jy4K Ck5vIGNvbmZpcm1hdGlvbiBvZiB0aGUgYW5zd2VyIGlzIHJlcXVlc3RlZDsgYSBzaW5nbGUgY2hh cmFjdGVyIGlzCmVub3VnaC4gIFNQQyBhbHNvIG1lYW5zIHllcywgYW5kIERFTCBtZWFucyBuby4K ClRvIGJlIHByZWNpc2UsIHRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB1c2VyIGlucHV0IGludG8g cmVzcG9uc2VzCmJ5IGNvbnN1bHRpbmcgdGhlIGJpbmRpbmdzIGluIGBxdWVyeS1yZXBsYWNlLW1h cCc7IHNlZSB0aGUKZG9jdW1lbnRhdGlvbiBvZiB0aGF0IHZhcmlhYmxlIGZvciBtb3JlIGluZm9y bWF0aW9uLiAgSW4gdGhpcwpjYXNlLCB0aGUgdXNlZnVsIGJpbmRpbmdzIGFyZSBgYWN0JywgYHNr aXAnLCBgcmVjZW50ZXInLApgc2Nyb2xsLXVwJywgYHNjcm9sbC1kb3duJywgYW5kIGBxdWl0Jy4K QW4gYGFjdCcgcmVzcG9uc2UgbWVhbnMgeWVzLCBhbmQgYSBgc2tpcCcgcmVzcG9uc2UgbWVhbnMg bm8uCkEgYHF1aXQnIHJlc3BvbnNlIG1lYW5zIHRvIGludm9rZSBgYWJvcnQtcmVjdXJzaXZlLWVk aXQnLgpJZiB0aGUgdXNlciBlbnRlcnMgYHJlY2VudGVyJywgYHNjcm9sbC11cCcsIG9yIGBzY3Jv bGwtZG93bicKcmVzcG9uc2VzLCBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgd2luZG93IHJlY2VudGVy aW5nIG9yIHNjcm9sbGluZwphbmQgYXNrIGFnYWluLgoKVW5kZXIgYSB3aW5kb3dpbmcgc3lzdGVt IGEgZGlhbG9nIGJveCB3aWxsIGJlIHVzZWQgaWYgYGxhc3Qtbm9ubWVudS1ldmVudCcKaXMgbmls IGFuZCBgdXNlLWRpYWxvZy1ib3gnIGlzIG5vbi1uaWwuCgpCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0 aW9uIHVzZXMgdGhlIG1pbmlidWZmZXIgdG8gcmVhZCB0aGUga2V5LgpJZiBgeS1vci1uLXAtdXNl LXJlYWQta2V5JyBpcyBub24tbmlsLCBgcmVhZC1rZXknIGlzIHVzZWQKaW5zdGVhZCAod2hpY2gg bWVhbnMgdGhhdCB0aGUgdXNlciBjYW4ndCBjaGFuZ2UgYnVmZmVycyAoYW5kIHRoZQpsaWtlKSB3 aGlsZSBgeS1vci1uLXAnIGlzIHJ1bm5pbmcpLgoKKGZuIFBST01QVCkfCihkZWZhbGlhcyAneS1v ci1uLXAgI1syNTcgIlwzMDZcMzA3CBgJXDIwM0kAXDIxMQMhXDI2MgMCAlwzMTA+XDIwNEUAXDMx MQEhXDIxMVwzMTJcMjY3XDIwMisAXDMxM1wyNjIEXDIxMFwyMDIOAFwzMTRcMjYyBFwyMTBcMjAy DgBcMjExXDMxNVwyMzVcMjAzPQBcblwyMDM9AFwzMTZcbiFcMjY2AlwyMDIOAFwzMTcFUFwyNjZc MjAyXDIwMg4AXDIxMFwyMDJqAVwzMjAgXDIwM18AXDIxMQNcMzIxXCJcMjYyA1wzMjJcMzIxBFwz MjNCXCJcMjYyAlwyMDJqAQtcMjAzXCIBXDIxMQMhXDI2MgNcMzI0XDMyMRwNXDIwM3YAXDMyNVwz MjZcMzI3ICEhXDIxMFwzMzBcMzMxBAM+XDIwM1wyMDIABVwyMDJcMjA2AFwzMTcGBlBcMzMyXDMz MyMhKVwzMzQOOVwzMzUDIVwzMjEjXDI2MgQDXDMzNlwyNjdcMjAyXDM3NwBcMjY2AlwyMDJqAVwz MDYgXDI2NgNcMjAyFgFcMzM3MVwyNjMAXDM0MCAwXDI2NgNcMjAyFgFcMjY2A1wyMDIWAVwyNjYD XDIwMhYBXDM0MTFcMzExAFwzNDIgMFwyNjYDXDIwMhYBXDI2NgNcMjAyFgFcMjY2A1wyMDIWAVwz NDMxXDMzNwBcMzQ0IDBcMjY2A1wyMDIWAVwyNjYDXDIwMhYBXDI2NgNcMjAyFgFcMzQ1MVwzNjUA XDM0NiAwXDI2NgNcMjAyFgFcMjY2A1wyMDIWAVwyNjYDXDIwMhYBA1wzNDc+XDIwNAsBXDIxMVwz NTA9XDIwMxQBXDM1MVwzNTJcMzUzXCJcMjY2A1wyMDIWAVwyNjYCXDM1NCBcMjEwXDM1NSBcMjEw XDIwMmgAXDIwMmoBXDIxMQMhXDI2MgNcMzIxHjpcblwzNTYOOw45XCJcblwyMDNHAVwzNTcBIVwy NjIBXDM2MAFcMzM1DjwhXDM2MVwzNjIGBlwiI1wyMTBcMjExXDI2MgEOPR49XDM2MwVcMzUzA1wz NTMOPlwyMDZZAVwzMjElXDIxMVwzNjRcMjM1XDIwM2QBXDMxM1wyMDJlAVwzMTQqXDI2MgVcMjY2 AwFcMzEzPQlcMjA0fwFcMzY1XDM2NgUDXDIwM3wBXDM2N1wyMDJ9AVwzNzAjXDIxMClcMjA3IiBb cmVhbC10aGlzLWNvbW1hbmQgbm9uaW50ZXJhY3RpdmUgaGVscC1mb3JtIHktb3Itbi1wLXVzZS1y ZWFkLWtleSBjdXJzb3ItaW4tZWNoby1hcmVhIG1pbmlidWZmZXItYXV0by1yYWlzZSByZWNlbnRl ciAjWzUxMyAiAUcCAVwzMDJVXDIwNBIAAwJTSFwzMDM9XDIwMxYAXDMwNFwyMDIXAFwzMDUDXDIw Mx8AXDMwNFwyMDIxAFwzMDYIXDIwMy8AXDMwN1wzMTBcMzExXDMxMgkhIVwiXDIwMjAAXDMxMyFR XDIwNyIgW2hlbHAtZm9ybSBoZWxwLWNoYXIgMCAzMiAiIiAiICIgc3Vic3RpdHV0ZS1jb21tYW5k LWtleXMgZm9ybWF0ICIoXFxgeScsIFxcYG4nIG9yIFxcYCVzJykgIiBrZXktZGVzY3JpcHRpb24g dmVjdG9yICIoXFxgeScgb3IgXFxgbicpICJdIDExICJcblxuKGZuIFBST01QVCAmb3B0aW9uYWwg RElBTE9HKSJdIChhY3Qgc2tpcCkgcmVhZC1zdHJpbmcgI3MoaGFzaC10YWJsZSBzaXplIDQgdGVz dCBlcXVhbCByZWhhc2gtc2l6ZSAxLjUgcmVoYXNoLXRocmVzaG9sZCAwLjgxMjUgcHVyZWNvcHkg dCBkYXRhICgieSIgMjkgIlkiIDI5ICJuIiAzNiAiTiIgMzYpKSBhY3Qgc2tpcCAoImgiICJIIikg cHJpbnQgIlBsZWFzZSBhbnN3ZXIgeSBvciBuLiAgIiB1c2UtZGlhbG9nLWJveC1wIHQgeC1wb3B1 cC1kaWFsb2cgKCgiWWVzIiAuIGFjdCkgKCJObyIgLiBza2lwKSkgKHJlY2VudGVyIHNjcm9sbC11 cCBzY3JvbGwtZG93biBzY3JvbGwtb3RoZXItd2luZG93IHNjcm9sbC1vdGhlci13aW5kb3ctZG93 bikgcmFpc2UtZnJhbWUgd2luZG93LWZyYW1lIG1pbmlidWZmZXItd2luZG93IHJlYWQta2V5IHBy b3BlcnRpemUgZmFjZSBtaW5pYnVmZmVyLXByb21wdCBsb29rdXAta2V5IHZlY3RvciAjcyhoYXNo LXRhYmxlIHNpemUgNyB0ZXN0IGVxIHJlaGFzaC1zaXplIDEuNSByZWhhc2gtdGhyZXNob2xkIDAu ODEyNSBwdXJlY29weSB0IGRhdGEgKHNraXAgMTU1IGFjdCAxNTUgcmVjZW50ZXIgMTYwIHNjcm9s bC11cCAxNjcgc2Nyb2xsLWRvd24gMTg5IHNjcm9sbC1vdGhlci13aW5kb3cgMjExIHNjcm9sbC1v dGhlci13aW5kb3ctZG93biAyMzMpKSAoZXJyb3IpIHNjcm9sbC11cC1jb21tYW5kIChlcnJvcikg c2Nyb2xsLWRvd24tY29tbWFuZCAoZXJyb3IpIHNjcm9sbC1vdGhlci13aW5kb3cgKGVycm9yKSBz Y3JvbGwtb3RoZXItd2luZG93LWRvd24gKGV4aXQtcHJlZml4IHF1aXQpIDI3IHNpZ25hbCBxdWl0 IG5pbCBkaW5nIGRpc2NhcmQtaW5wdXQgbWFrZS1jb21wb3NlZC1rZXltYXAgY29weS1rZXltYXAg ZGVmaW5lLWtleSBtYWtlLWNsb3N1cmUgI1swICJcMzAwGVwzMDIgKVwyMDciIFtWMCBoZWxwLWZv cm0gaGVscC1mb3JtLXNob3ddIDEgbmlsIG5pbF0gcmVhZC1mcm9tLW1pbmlidWZmZXIgKCJ5IiAi WSIpIG1lc3NhZ2UgIiVzJWMiIDEyMSAxMTAgcXVlcnktcmVwbGFjZS1tYXAgZW5hYmxlLXJlY3Vy c2l2ZS1taW5pYnVmZmVycyB5LW9yLW4tcC1tYXAgaGVscC1jaGFyIHRoaXMtY29tbWFuZCB5LW9y LW4tcC1oaXN0b3J5LXZhcmlhYmxlXSAxMSAoIyQgLiAxMTU2NzQpXSkjQDM4MSBMaWtlIGBwcm9n bicgYnV0IHBlcmZvcm0gQk9EWSBhcyBhbiBhdG9taWMgY2hhbmdlIGdyb3VwLgpUaGlzIG1lYW5z IHRoYXQgaWYgQk9EWSBleGl0cyBhYm5vcm1hbGx5LAphbGwgb2YgaXRzIGNoYW5nZXMgdG8gdGhl IGN1cnJlbnQgYnVmZmVyIGFyZSB1bmRvbmUuClRoaXMgd29ya3MgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHVuZG8gaXMgZW5hYmxlZCBpbiB0aGUgYnVmZmVyLgoKVGhpcyBtZWNoYW5pc20gaXMgdHJh bnNwYXJlbnQgdG8gb3JkaW5hcnkgdXNlIG9mIHVuZG87CmlmIHVuZG8gaXMgZW5hYmxlZCBpbiB0 aGUgYnVmZmVyIGFuZCBCT0RZIHN1Y2NlZWRzLCB0aGUKdXNlciBjYW4gdW5kbyB0aGUgY2hhbmdl IG5vcm1hbGx5LgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ2F0b21pYy1jaGFuZ2UtZ3Jv dXAgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMSFcMzAwXDMwMiFcMzAzAlwzMDRCXDMwNVwzMDZc MzA3BVwzMTBCXDI1NwVcMzExXDMxMlwzMTMGBkRcMzE0XDMxNQYJIVwzMTYGCFwzMTdCQkVFXDMy MAVcMzIxBghEXDMyMgYJREZFRVwyMDciIFttYWtlLXN5bWJvbCAiLS1jaGFuZ2UtZ3JvdXAtaGFu ZGxlLS0iICItLWNoYW5nZS1ncm91cC1zdWNjZXNzLS0iIGxldCAoKHByZXBhcmUtY2hhbmdlLWdy b3VwKSkgKHVuZG8tb3V0ZXItbGltaXQgbmlsKSAodW5kby1saW1pdCBtb3N0LXBvc2l0aXZlLWZp eG51bSkgKHVuZG8tc3Ryb25nLWxpbWl0IG1vc3QtcG9zaXRpdmUtZml4bnVtKSAobmlsKSB1bndp bmQtcHJvdGVjdCBwcm9nbiBhY3RpdmF0ZS1jaGFuZ2UtZ3JvdXAgcHJvZzEgbWFjcm9leHAtcHJv Z24gc2V0cSAodCkgaWYgYWNjZXB0LWNoYW5nZS1ncm91cCBjYW5jZWwtY2hhbmdlLWdyb3VwXSAx MyAoIyQgLiAxMTk2OTApXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFc MzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IGF0b21pYy1jaGFuZ2UtZ3JvdXAgbGlzcC1pbmRl bnQtZnVuY3Rpb24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAMTkzIExpa2UgYHByb2du JyBidXQgcGVyZm9ybSBCT0RZIHdpdGggYW1hbGdhbWF0ZWQgdW5kbyBiYXJyaWVycy4KClRoaXMg YWxsb3dzIG11bHRpcGxlIG9wZXJhdGlvbnMgdG8gYmUgdW5kb25lIGluIGEgc2luZ2xlIHN0ZXAu CldoZW4gdW5kbyBpcyBkaXNhYmxlZCB0aGlzIGJlaGF2ZXMgbGlrZSBgcHJvZ24nLgoKKGZuICZy ZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtdW5kby1hbWFsZ2FtYXRlICcobWFjcm8gLiAjWzEy OCAiXDMwMFwzMDEhXDMwMgFcMzAzQlwzMDRCXDMwNVwzMDZcMzA3BUQGBkJCXDMwNlwzMTAGBkRc MzExBgdERUVFXDIwNyIgW21ha2Utc3ltYm9sICItLWNoYW5nZS1ncm91cC1oYW5kbGUtLSIgbGV0 ICgocHJlcGFyZS1jaGFuZ2UtZ3JvdXApKSAoKHVuZG8tb3V0ZXItbGltaXQgbmlsKSAodW5kby1s aW1pdCBtb3N0LXBvc2l0aXZlLWZpeG51bSkgKHVuZG8tc3Ryb25nLWxpbWl0IG1vc3QtcG9zaXRp dmUtZml4bnVtKSkgdW53aW5kLXByb3RlY3QgcHJvZ24gYWN0aXZhdGUtY2hhbmdlLWdyb3VwIGFj Y2VwdC1jaGFuZ2UtZ3JvdXAgdW5kby1hbWFsZ2FtYXRlLWNoYW5nZS1ncm91cF0gMTAgKCMkIC4g MTIwNzE1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLXVuZG8tYW1hbGdhbWF0ZSBsaXNwLWluZGVudC1mdW5j dGlvbiAwIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0AxMzA5IFJldHVybiBhIGhhbmRsZSBm b3IgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc3RhdGUsIGZvciBhIGNoYW5nZSBncm91cC4KSWYgeW91 IHNwZWNpZnkgQlVGRkVSLCBtYWtlIGEgaGFuZGxlIGZvciBCVUZGRVIncyBzdGF0ZSBpbnN0ZWFk LgoKUGFzcyB0aGUgaGFuZGxlIHRvIGBhY3RpdmF0ZS1jaGFuZ2UtZ3JvdXAnIGFmdGVyd2FyZCB0 byBpbml0aWF0ZQp0aGUgYWN0dWFsIGNoYW5nZXMgb2YgdGhlIGNoYW5nZSBncm91cC4KClRvIGZp bmlzaCB0aGUgY2hhbmdlIGdyb3VwLCBjYWxsIGVpdGhlciBgYWNjZXB0LWNoYW5nZS1ncm91cCcg b3IKYGNhbmNlbC1jaGFuZ2UtZ3JvdXAnIHBhc3NpbmcgdGhlIHNhbWUgaGFuZGxlIGFzIGFyZ3Vt ZW50LiAgQ2FsbApgYWNjZXB0LWNoYW5nZS1ncm91cCcgdG8gYWNjZXB0IHRoZSBjaGFuZ2VzIGlu IHRoZSBncm91cCBhcyBmaW5hbDsKY2FsbCBgY2FuY2VsLWNoYW5nZS1ncm91cCcgdG8gdW5kbyB0 aGVtIGFsbC4gIFlvdSBzaG91bGQgdXNlCmB1bndpbmQtcHJvdGVjdCcgdG8gbWFrZSBzdXJlIHRo ZSBncm91cCBpcyBhbHdheXMgZmluaXNoZWQuICBUaGUgY2FsbAp0byBgYWN0aXZhdGUtY2hhbmdl LWdyb3VwJyBzaG91bGQgYmUgaW5zaWRlIHRoZSBgdW53aW5kLXByb3RlY3QnLgpPbmNlIHlvdSBm aW5pc2ggdGhlIGdyb3VwLCBkb24ndCB1c2UgdGhlIGhhbmRsZSBhZ2Fpbi0tZG9uJ3QgdHJ5IHRv CmZpbmlzaCB0aGUgc2FtZSBncm91cCB0d2ljZS4gIEZvciBhIHNpbXBsZSBleGFtcGxlIG9mIGNv cnJlY3QgdXNlLCBzZWUKdGhlIHNvdXJjZSBjb2RlIG9mIGBhdG9taWMtY2hhbmdlLWdyb3VwJy4K ClRoZSBoYW5kbGUgcmVjb3JkcyBvbmx5IHRoZSBzcGVjaWZpZWQgYnVmZmVyLiAgVG8gbWFrZSBh IG11bHRpYnVmZmVyCmNoYW5nZSBncm91cCwgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgZm9yIGVh Y2ggYnVmZmVyIHlvdSB3YW50IHRvCmNvdmVyLCB0aGVuIHVzZSBgbmNvbmMnIHRvIGNvbWJpbmUg dGhlIHJldHVybmVkIHZhbHVlcywgbGlrZSB0aGlzOgoKICAobmNvbmMgKHByZXBhcmUtY2hhbmdl LWdyb3VwIGJ1ZmZlci0xKQogICAgICAgICAocHJlcGFyZS1jaGFuZ2UtZ3JvdXAgYnVmZmVyLTIp KQoKWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoYXQgbXVsdGlidWZmZXIgY2hhbmdlIGdyb3VwIHdp dGggYSBzaW5nbGUKY2FsbCB0byBgYWN0aXZhdGUtY2hhbmdlLWdyb3VwJyBhbmQgZmluaXNoIGl0 IHdpdGggYSBzaW5nbGUgY2FsbAp0byBgYWNjZXB0LWNoYW5nZS1ncm91cCcgb3IgYGNhbmNlbC1j aGFuZ2UtZ3JvdXAnLgoKKGZuICZvcHRpb25hbCBCVUZGRVIpHwooZGVmYWxpYXMgJ3ByZXBhcmUt Y2hhbmdlLWdyb3VwICNbMjU2ICJcMjExXDIwMw4AXDIxMXIBcVwyMTAIKUJDXDIwN3AIQkNcMjA3 IiBbYnVmZmVyLXVuZG8tbGlzdF0gMyAoIyQgLiAxMjE0NTApXSkjQDg0IEFjdGl2YXRlIGEgY2hh bmdlIGdyb3VwIG1hZGUgd2l0aCBgcHJlcGFyZS1jaGFuZ2UtZ3JvdXAnICh3aGljaCBzZWUpLgoK KGZuIEhBTkRMRSkfCihkZWZhbGlhcyAnYWN0aXZhdGUtY2hhbmdlLWdyb3VwICNbMjU3ICJcMjEx XDIxMVwyMDUwAFwyMTFAclwyMTFAcVwyMTAIXDMwMT1cMjAzFwBcMzAyEFwyMDIoAAhAXDI0Mlwy NDdcMjAzKAAIQEAIQEBCCEIQKQFBXDI2NlwyMDJcMjAyAQBcMjA3IiBbYnVmZmVyLXVuZG8tbGlz dCB0IG5pbF0gNSAoIyQgLiAxMjI4NzgpXSkjQDE0OCBGaW5pc2ggYSBjaGFuZ2UgZ3JvdXAgbWFk ZSB3aXRoIGBwcmVwYXJlLWNoYW5nZS1ncm91cCcgKHdoaWNoIHNlZSkuClRoaXMgZmluaXNoZXMg dGhlIGNoYW5nZSBncm91cCBieSBhY2NlcHRpbmcgaXRzIGNoYW5nZXMgYXMgZmluYWwuCgooZm4g SEFORExFKR8KKGRlZmFsaWFzICdhY2NlcHQtY2hhbmdlLWdyb3VwICNbMjU3ICJcMjExXDIxMVwy MDUdAFwyMTFAclwyMTFAcVwyMTBcMjExQVwzMDE9XDIwMxUAXDMwMRApAUFcMjY2XDIwMlwyMDIB AFwyMDciIFtidWZmZXItdW5kby1saXN0IHRdIDUgKCMkIC4gMTIzMTUyKV0pI0AxNDYgRmluaXNo IGEgY2hhbmdlIGdyb3VwIG1hZGUgd2l0aCBgcHJlcGFyZS1jaGFuZ2UtZ3JvdXAnICh3aGljaCBz ZWUpLgpUaGlzIGZpbmlzaGVzIHRoZSBjaGFuZ2UgZ3JvdXAgYnkgcmV2ZXJ0aW5nIGFsbCBvZiBp dHMgY2hhbmdlcy4KCihmbiBIQU5ETEUpHwooZGVmYWxpYXMgJ2NhbmNlbC1jaGFuZ2UtZ3JvdXAg I1syNTcgIlwyMTFcMjExXDIwNWUAXDIxMUBDclwyMTFcMjQyQHFcMjEwXDIxMQFcMjQyQVwyNDBc MjEwXDIxNH5cMjEwXDIxMVwyNDJcMjQyAVwyNDJcMjQzCBlcMzAyXDMwMwIEBgYkXDIxNgJcMjQy OlwyMDM3AAJcMjQyXDMwNFwyNDBcMjEwAlwyNDJcMzA0XDI0MVwyMTACXDI0MjpcMjAzSgACXDI0 MlwzMDUJIT1cMjA0SgBcMzA2XDMwNyFcMjEwXDIxMgk8XDIwM1cAXDMxMFwzMTEhXDIxMFwyMDJL ACkCXDI0MhAsXDI2NgIBQVwyNjZcMjAyXDIwMgEAXDIwNyIgW2J1ZmZlci11bmRvLWxpc3QgcGVu ZGluZy11bmRvLWxpc3QgbWFrZS1jbG9zdXJlICNbMCAiXDMwMlwyNDI6XDIwNQ8AXDMwMlwyNDJc MzAxXDI0MFwyMTBcMzAyXDI0MlwzMDBcMjQxXDIwNyIgW1YwIFYxIFYyXSAyXSBuaWwgbGFzdCBl cnJvciAiVW5kb2luZyB0byBzb21lIHVucmVsYXRlZCBzdGF0ZSIgdW5kby1tb3JlIDFdIDEwICgj JCAuIDEyMzQ1NildKSNANTYxIE1vbWVudGFyaWx5IGRpc3BsYXkgU1RSSU5HIGluIHRoZSBidWZm ZXIgYXQgUE9TLgpEaXNwbGF5IHJlbWFpbnMgdW50aWwgbmV4dCBldmVudCBpcyBpbnB1dC4KSWYg UE9TIGlzIGEgbWFya2VyLCBvbmx5IGl0cyBwb3NpdGlvbiBpcyB1c2VkOyBpdHMgYnVmZmVyIGlz IGlnbm9yZWQuCk9wdGlvbmFsIHRoaXJkIGFyZyBFWElULUNIQVIgY2FuIGJlIGEgY2hhcmFjdGVy LCBldmVudCBvciBldmVudApkZXNjcmlwdGlvbiBsaXN0LiAgRVhJVC1DSEFSIGRlZmF1bHRzIHRv IFNQQy4gIElmIHRoZSBpbnB1dCBpcwpFWElULUNIQVIgaXQgaXMgc3dhbGxvd2VkOyBvdGhlcndp c2UgaXQgaXMgdGhlbiBhdmFpbGFibGUgYXMKaW5wdXQgKGFzIGEgY29tbWFuZCBpZiBub3RoaW5n IGVsc2UpLgpEaXNwbGF5IE1FU1NBR0UgKG9wdGlvbmFsIGZvdXJ0aCBhcmcpIGluIHRoZSBlY2hv IGFyZWEuCklmIE1FU1NBR0UgaXMgbmlsLCBpbnN0cnVjdGlvbnMgdG8gdHlwZSBFWElULUNIQVIg YXJlIGRpc3BsYXllZCB0aGVyZS4KCihmbiBTVFJJTkcgUE9TICZvcHRpb25hbCBFWElULUNIQVIg TUVTU0FHRSkfCihkZWZhbGlhcyAnbW9tZW50YXJ5LXN0cmluZy1kaXNwbGF5ICNbMTAyNiAiAVwy MDQHAFwzMDFcMjYyAlwzMDIDXDIxMVwiXDMwMwUhXDMwNFwzMDUDXCJcMjE2XDIxMlwzMDYCXDMw NwMjXDIxMARiXDIxMGBcMjYyBVwzMTBcMzExXDMxMlwiBVhcMjAzMABcMzEzXDMxNCBcMzE1XDI0 NSFcMjEwKVwzMTYDXDIwNjcAXDMxN1wzMjAGBiFcIlwyMTBcMzIxIFwyMTEFPVwyMDZVAFwyMTFc MzIyBgYhPVwyMDZVAFwzMjNcMzI0IAhcIlwyMTEQKVwyMDciIFt1bnJlYWQtY29tbWFuZC1ldmVu dHMgMzIgbWFrZS1vdmVybGF5IGNvcHktc2VxdWVuY2UgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwz MDAhXDIwNyIgW1YwIGRlbGV0ZS1vdmVybGF5XSAyXSBvdmVybGF5LXB1dCBhZnRlci1zdHJpbmcg d2luZG93LWVuZCBuaWwgdCByZWNlbnRlciB3aW5kb3ctaGVpZ2h0IDIgbWVzc2FnZSAiVHlwZSAl cyB0byBjb250aW51ZSBlZGl0aW5nLiIgc2luZ2xlLWtleS1kZXNjcmlwdGlvbiByZWFkLWtleSBl dmVudC1jb252ZXJ0LWxpc3QgYXBwZW5kIHRoaXMtc2luZ2xlLWNvbW1hbmQtcmF3LWtleXNdIDEw ICgjJCAuIDEyNDEwOCldKSNAMzcgUmV0dXJuIGEgY29weSBvZiBvdmVybGF5IE8uCgooZm4gTykf CihkZWZhbGlhcyAnY29weS1vdmVybGF5ICNbMjU3ICJcMzAwASFcMjAzFABcMzAxXDMwMgIhXDMw MwMhXDMwMAQhI1wyMDIfAFwzMDFlZVwiXDMwNAEhXDIxMFwyMTFcMjYyAVwzMDUCIVwyMTFcMjAz OQBcMzA2AgJcMjExQVwyNjIEXDI0MgNcMjExQVwyNjIFXDI0MiNcMjEwXDIwMlwiAAFcMjA3IiBb b3ZlcmxheS1idWZmZXIgbWFrZS1vdmVybGF5IG92ZXJsYXktc3RhcnQgb3ZlcmxheS1lbmQgZGVs ZXRlLW92ZXJsYXkgb3ZlcmxheS1wcm9wZXJ0aWVzIG92ZXJsYXktcHV0XSA4ICgjJCAuIDEyNTI1 MCldKSNANTk3IFJlbW92ZSBvdmVybGF5cyBiZXR3ZWVuIEJFRyBhbmQgRU5EIHRoYXQgaGF2ZSBw cm9wZXJ0eSBOQU1FIHdpdGggdmFsdWUgVkFMLgpPdmVybGF5cyBtaWdodCBiZSBtb3ZlZCBhbmQv b3Igc3BsaXQuICBJZiBhbnkgdGFyZ2V0ZWQgb3ZlcmxheXMKc3RhcnQgYmVmb3JlIEJFRywgdGhl IG92ZXJsYXlzIHdpbGwgYmUgYWx0ZXJlZCBzbyB0aGF0IHRoZXkgZW5kCmF0IEJFRy4gIExpa2V3 aXNlLCBpZiB0aGUgdGFyZ2V0ZWQgb3ZlcmxheXMgZW5kIGFmdGVyIEVORCwgdGhleQp3aWxsIGJl IGFsdGVyZWQgc28gdGhhdCB0aGV5IHN0YXJ0IGF0IEVORC4gIE92ZXJsYXlzIHRoYXQgc3RhcnQK YXQgb3IgYWZ0ZXIgQkVHIGFuZCBlbmQgYmVmb3JlIEVORCB3aWxsIGJlIHJlbW92ZWQgY29tcGxl dGVseS4KCkJFRyBhbmQgRU5EIGRlZmF1bHQgcmVzcGVjdGl2ZWx5IHRvIHRoZSBiZWdpbm5pbmcg YW5kIGVuZCBvZiB0aGUKYnVmZmVyLgpWYWx1ZXMgYXJlIGNvbXBhcmVkIHdpdGggYGVxJy4KSWYg ZWl0aGVyIE5BTUUgb3IgVkFMIGFyZSBzcGVjaWZpZWQsIGJvdGggc2hvdWxkIGJlIHNwZWNpZmll ZC4KCihmbiAmb3B0aW9uYWwgQkVHIEVORCBOQU1FIFZBTCkfCihkZWZhbGlhcyAncmVtb3ZlLW92 ZXJsYXlzICNbMTAyNCAiA1wyMDQHAGVcMjYyBAJcMjA0DgBkXDI2MgNcMzAwAyFcMjEwAgRXXDIw Mx4AAgRcMjYyBFwyNjIEXDIxMlwzMDEEBFwiXDIxMVwyMDVcMjA1AFwyMTFAXDMwMgEFXCIDPVwy MDN+AFwzMDMBIQYGV1wyMDNmAFwzMDQBIQVWXDIwM1oAXDMwNVwzMDYCIVwzMDMDIQYII1wyMTBc MzA1AQYGXDMwNAQhI1wyMTBcMjAyfgBcMzA1AVwzMDMDIQYII1wyMTBcMjAyfgBcMzA0ASEFVlwy MDN6AFwzMDUBBgZcMzA0BCEjXDIxMFwyMDJ+AFwzMDcBIVwyMTABQVwyNjZcMjAyXDIwMiMAKVwy MDciIFtvdmVybGF5LXJlY2VudGVyIG92ZXJsYXlzLWluIG92ZXJsYXktZ2V0IG92ZXJsYXktc3Rh cnQgb3ZlcmxheS1lbmQgbW92ZS1vdmVybGF5IGNvcHktb3ZlcmxheSBkZWxldGUtb3ZlcmxheV0g MTEgKCMkIC4gMTI1NTgxKV0pI0A1NiBOb3JtYWwgaG9vayBydW4gYnkgYHN1c3BlbmQtZW1hY3Mn LCBiZWZvcmUgc3VzcGVuZGluZy4fCihkZWZ2YXIgc3VzcGVuZC1ob29rIG5pbCAoIyQgLiAxMjY2 MjApKSNANjMgTm9ybWFsIGhvb2sgcnVuIGJ5IGBzdXNwZW5kLWVtYWNzJywgYWZ0ZXIgRW1hY3Mg aXMgY29udGludWVkLh8KKGRlZnZhciBzdXNwZW5kLXJlc3VtZS1ob29rIG5pbCAoIyQgLiAxMjY3 MjApKSNANDcgTm9ybWFsIGhvb2sgcnVuIGFmdGVyIGxvYWRpbmcgdGhlIC5wZG1wIGZpbGUuHwoo ZGVmdmFyIGFmdGVyLXBkdW1wLWxvYWQtaG9vayBuaWwgKCMkIC4gMTI2ODM0KSkjQDE3OSBOb3Jt YWwgaG9vayBydW4gYnkgYHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyJyBhZnRlciBkaXNwbGF5 aW5nIHRoZSBidWZmZXIuCldoZW4gdGhlIGhvb2sgcnVucywgdGhlIHRlbXBvcmFyeSBidWZmZXIg aXMgY3VycmVudCwgYW5kIHRoZSB3aW5kb3cgaXQKd2FzIGRpc3BsYXllZCBpbiBpcyBzZWxlY3Rl ZC4fCihkZWZ2YXIgdGVtcC1idWZmZXItc2hvdy1ob29rIG5pbCAoIyQgLiAxMjY5MzUpKSNAMTkz IE5vcm1hbCBob29rIHJ1biBieSBgd2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXInIGF0IHRoZSBz dGFydC4KV2hlbiB0aGUgaG9vayBydW5zLCB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBpcyBjdXJyZW50 LgpUaGlzIGhvb2sgaXMgbm9ybWFsbHkgc2V0IHVwIHdpdGggYSBmdW5jdGlvbiB0byBwdXQgdGhl IGJ1ZmZlciBpbiBIZWxwCm1vZGUuHwooZGVmdmFyIHRlbXAtYnVmZmVyLXNldHVwLWhvb2sgbmls ICgjJCAuIDEyNzE2OCkpI0AyMzAgRGlyZWN0b3J5IGJlbmVhdGggd2hpY2ggYWRkaXRpb25hbCBw ZXItdXNlciBFbWFjcy1zcGVjaWZpYyBmaWxlcyBhcmUgcGxhY2VkLgpWYXJpb3VzIHByb2dyYW1z IGluIEVtYWNzIHN0b3JlIGluZm9ybWF0aW9uIGluIHRoaXMgZGlyZWN0b3J5LgpOb3RlIHRoYXQg dGhpcyBzaG91bGQgZW5kIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgpTZWUgYWxzbyBgbG9j YXRlLXVzZXItZW1hY3MtZmlsZScuHwooZGVmdmFyIHVzZXItZW1hY3MtZGlyZWN0b3J5IG5pbCAo IyQgLiAxMjc0MTYpKSNANTEgUmV0dXJuIG5vbi1uaWwgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlz IG5hcnJvd2VkLh8KKGRlZmFsaWFzICdidWZmZXItbmFycm93ZWQtcCAjWzAgImRlWlwzMDAgVT9c MjA3IiBbYnVmZmVyLXNpemVdIDIgKCMkIC4gMTI3Njk4KV0pCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IGJ1ZmZlci1uYXJy b3dlZC1wIHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4 cGFuZF0gNSkjQDQxNyBFeGVjdXRlIEJPRFkgd2l0aCByZXN0cmljdGlvbnMgc2V0IHRvIFNUQVJU IGFuZCBFTkQuCgpUaGUgY3VycmVudCByZXN0cmljdGlvbnMsIGlmIGFueSwgYXJlIHJlc3RvcmVk IHVwb24gcmV0dXJuLgoKV2l0aCB0aGUgb3B0aW9uYWwgOmxvY2tlZCBUQUcgYXJndW1lbnQsIGlu c2lkZSBCT0RZLApgbmFycm93LXRvLXJlZ2lvbicgYW5kIGB3aWRlbicgY2FuIGJlIHVzZWQgb25s eSB3aXRoaW4gdGhlIFNUQVJUCmFuZCBFTkQgbGltaXRzLCB1bmxlc3MgdGhlIHJlc3RyaWN0aW9u cyBhcmUgdW5sb2NrZWQgYnkgY2FsbGluZwpgbmFycm93aW5nLXVubG9jaycgd2l0aCBUQUcuICBT ZWUgYG5hcnJvd2luZy1sb2NrJyBmb3IgYSBtb3JlCmRldGFpbGVkIGRlc2NyaXB0aW9uLgoKKGZu IFNUQVJUIEVORCBbOmxvY2tlZCBUQUddIEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtbmFycm93aW5n ICcobWFjcm8gLiAjWzY0MiAiXDIxMUBcMzAwPVwyMDMXAFwzMDEDA1wzMDJcMzAzBUFBQkIEQUBc MjU3BVwyMDdcMzAxAwNcMzAyXDMwMwVCQkZcMjA3IiBbOmxvY2tlZCBpbnRlcm5hbC0td2l0aC1u YXJyb3dpbmcgbGFtYmRhIG5pbF0gOSAoIyQgLiAxMjc5NzkpXSkpI0A4NSBIZWxwZXIgZnVuY3Rp b24gZm9yIGB3aXRoLW5hcnJvd2luZycsIHdoaWNoIHNlZS4KCihmbiBTVEFSVCBFTkQgQk9EWSAm b3B0aW9uYWwgVEFHKR8KKGRlZmFsaWFzICdpbnRlcm5hbC0td2l0aC1uYXJyb3dpbmcgI1sxMDI3 ICJcMjE0AwN9XDIxMFwyMTFcMjAzDQBcMzAwASFcMjEwASApXDIwNyIgW25hcnJvd2luZy1sb2Nr XSA2ICgjJCAuIDEyODU3OSldKSNAMTgwIERldGVybWluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUg ZGVmYXVsdCB0YWcsIGJhc2VkIG9uIHRleHQgYXQgcG9pbnQuClJldHVybiBhIGNvbnMgY2VsbCB3 aXRoIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgZm91bmQgdGFnLgpJZiB0aGVyZSBpcyBu byBwbGF1c2libGUgZGVmYXVsdCwgcmV0dXJuIG5pbC4fCihkZWZhbGlhcyAnZmluZC10YWctZGVm YXVsdC1ib3VuZHMgI1swICJcMzAwXDMwMSFcMjA3IiBbYm91bmRzLW9mLXRoaW5nLWF0LXBvaW50 IHN5bWJvbF0gMiAoIyQgLiAxMjg3ODgpXSkjQDEwOCBEZXRlcm1pbmUgZGVmYXVsdCB0YWcgdG8g c2VhcmNoIGZvciwgYmFzZWQgb24gdGV4dCBhdCBwb2ludC4KSWYgdGhlcmUgaXMgbm8gcGxhdXNp YmxlIGRlZmF1bHQsIHJldHVybiBuaWwuHwooZGVmYWxpYXMgJ2ZpbmQtdGFnLWRlZmF1bHQgI1sw ICJcMzAwIFwyMTFcMjA1XGYAXDMwMQFAAkFcIlwyMDciIFtmaW5kLXRhZy1kZWZhdWx0LWJvdW5k cyBidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXNdIDQgKCMkIC4gMTI5MDgwKV0pI0AyMzQg UmV0dXJuIHJlZ2V4cCB0aGF0IG1hdGNoZXMgdGhlIGRlZmF1bHQgdGFnIGF0IHBvaW50LgpJZiB0 aGVyZSBpcyBubyB0YWcgYXQgcG9pbnQsIHJldHVybiBuaWwuCgpXaGVuIGluIGEgbWFqb3IgbW9k ZSB0aGF0IGRvZXMgbm90IHByb3ZpZGUgaXRzIG93bgpgZmluZC10YWctZGVmYXVsdC1mdW5jdGlv bicsIHJldHVybiBhIHJlZ2V4cCB0aGF0IG1hdGNoZXMgdGhlCnN5bWJvbCBhdCBwb2ludCBleGFj dGx5Lh8KKGRlZmFsaWFzICdmaW5kLXRhZy1kZWZhdWx0LWFzLXJlZ2V4cCAjWzAgIghcMjA2CwAJ XDMwME5cMjA2CwBcMzAyIFwyMTFcMjA1EwBcMzAzASFcMjA3IiBbZmluZC10YWctZGVmYXVsdC1m dW5jdGlvbiBtYWpvci1tb2RlIGZpbmQtdGFnLWRlZmF1bHQgcmVnZXhwLXF1b3RlXSAzICgjJCAu IDEyOTMzMyldKSNAMjQ0IFJldHVybiByZWdleHAgdGhhdCBtYXRjaGVzIHRoZSBkZWZhdWx0IHRh ZyBhdCBwb2ludCBhcyBzeW1ib2wuCklmIHRoZXJlIGlzIG5vIHRhZyBhdCBwb2ludCwgcmV0dXJu IG5pbC4KCldoZW4gaW4gYSBtYWpvciBtb2RlIHRoYXQgZG9lcyBub3QgcHJvdmlkZSBpdHMgb3du CmBmaW5kLXRhZy1kZWZhdWx0LWZ1bmN0aW9uJywgcmV0dXJuIGEgcmVnZXhwIHRoYXQgbWF0Y2hl cyB0aGUKc3ltYm9sIGF0IHBvaW50IGV4YWN0bHkuHwooZGVmYWxpYXMgJ2ZpbmQtdGFnLWRlZmF1 bHQtYXMtc3ltYm9sLXJlZ2V4cCAjWzAgIlwzMDIgXDIxMVwyMDMbAAhcMjA2EQAJXDMwME5cMjA2 EQBcMzAzXDMwMz1cMjAzGwBcMzA0XDMwNQJcIlwyMDdcMjA3IiBbZmluZC10YWctZGVmYXVsdC1m dW5jdGlvbiBtYWpvci1tb2RlIGZpbmQtdGFnLWRlZmF1bHQtYXMtcmVnZXhwIGZpbmQtdGFnLWRl ZmF1bHQgZm9ybWF0ICJcXF88JXNcXF8+Il0gNCAoIyQgLiAxMjk3NDgpXSkjQDY3OCBTT1VORCBp cyBhIGxpc3Qgb2YgdGhlIGZvcm0gYChzb3VuZCBLRVlXT1JEIFZBTFVFLi4uKScuClRoZSBmb2xs b3dpbmcga2V5d29yZHMgYXJlIHJlY29nbml6ZWQ6CgogIDpmaWxlIEZJTEUgLSByZWFkIHNvdW5k IGRhdGEgZnJvbSBGSUxFLiAgSWYgRklMRSBpc24ndCBhbgphYnNvbHV0ZSBmaWxlIG5hbWUsIGl0 IGlzIHNlYXJjaGVkIGluIGBkYXRhLWRpcmVjdG9yeScuCgogIDpkYXRhIERBVEEgLSByZWFkIHNv dW5kIGRhdGEgZnJvbSBzdHJpbmcgREFUQS4KCkV4YWN0bHkgb25lIG9mIDpmaWxlIG9yIDpkYXRh IG11c3QgYmUgcHJlc2VudC4KCiAgOnZvbHVtZSBWT0wgLSBzZXQgdm9sdW1lIHRvIFZPTC4gIFZP TCBtdXN0IGFuIGludGVnZXIgaW4gdGhlCnJhbmdlIDAuLjEwMCBvciBhIGZsb2F0IGluIHRoZSBy YW5nZSAwLi4xLjAuICBJZiBub3Qgc3BlY2lmaWVkLApkb24ndCBjaGFuZ2UgdGhlIHZvbHVtZSBz ZXR0aW5nIG9mIHRoZSBzb3VuZCBkZXZpY2UuCgogIDpkZXZpY2UgREVWSUNFIC0gcGxheSBzb3Vu ZCBvbiBERVZJQ0UuICBJZiBub3Qgc3BlY2lmaWVkLAphIHN5c3RlbS1kZXBlbmRlbnQgZGVmYXVs dCBkZXZpY2UgbmFtZSBpcyB1c2VkLgoKTm90ZTogOmRhdGEgYW5kIDpkZXZpY2UgYXJlIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuCgooZm4gU09VTkQpHwooZGVmYWxpYXMgJ3Bs YXktc291bmQgI1syNTcgIlwzMDBcMzAxIVwyMDNcbgBcMzAxASFcMjA3XDMwMlwzMDMhXDIwNyIg W2Zib3VuZHAgcGxheS1zb3VuZC1pbnRlcm5hbCBlcnJvciAiVGhpcyBFbWFjcyBiaW5hcnkgbGFj a3Mgc291bmQgc3VwcG9ydCJdIDMgKCMkIC4gMTMwMjM4KV0pI0A0MTkgUXVvdGUgQVJHVU1FTlQg Zm9yIHBhc3NpbmcgYXMgYXJndW1lbnQgdG8gYW4gaW5mZXJpb3Igc2hlbGwuCgpUaGlzIGZ1bmN0 aW9uIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgc3ludGF4IG9mIHlvdXIgc3lzdGVtJ3MK c3RhbmRhcmQgc2hlbGwsIGFuZCBtaWdodCBwcm9kdWNlIGluY29ycmVjdCByZXN1bHRzIHdpdGgg dW51c3VhbCBzaGVsbHMuClNlZSBJbmZvIG5vZGUgYChlbGlzcClTZWN1cml0eSBDb25zaWRlcmF0 aW9ucycuCgpJZiB0aGUgb3B0aW9uYWwgUE9TSVggYXJndW1lbnQgaXMgbm9uLW5pbCwgQVJHVU1F TlQgaXMgcXVvdGVkCmFjY29yZGluZyB0byBQT1NJWCBzaGVsbCBxdW90aW5nIHJ1bGVzLCByZWdh cmRsZXNzIG9mIHRoZQpzeXN0ZW0ncyBzaGVsbC4KCihmbiBBUkdVTUVOVCAmb3B0aW9uYWwgUE9T SVgpHwooZGVmYWxpYXMgJ3NoZWxsLXF1b3RlLWFyZ3VtZW50ICNbNTEzICJcMjExXDIwNEoACFwz MDE9XDIwM0oAXDMwMlwzMDNcMzA0XDMwNVwzMDYGBlwiXDIwMx0AXDMwM1wyMjUFR1dcMjAzQABc MzA1XDMwNwYGBCNcMjAzQABcMzAzXDIyNFwyNjIBAgUDA09cMzEwBgcEXDIxMVRPUlwyNjIDXDIx MVRcMjYyAlwyMDIdAFwzMTEDBgYEXDMwNE9cMzExUlwyMDdcMjExXDIwNHoACFwzMTI9XDIwM3oA XDMxMyBcMjAzegBcMzE0XDMxNVwzMTZcMzE0XDMxN1wzMjAGByMjXDI2MgJcMzA1XDMyMQNcIlwy MDN1AFwzMjJcMzE0XDMyM1wzMjQFI1wzMjJRXDIwN1wzMTECXDMxMVFcMjA3AVwzMDJcMjMyXDIw M1wyMDIAXDMyNVwyMDdcMzI2XDMyN1wzMzBcMzE0XDMzMVwzMzIGByMjXDIwNyIgW3N5c3RlbS10 eXBlIG1zLWRvcyAiIiAwIG5pbCBzdHJpbmctbWF0Y2ggIlteXCJdIiAiW1wiXSIgIlxcIiAiXCIi IHdpbmRvd3MtbnQgdzMyLXNoZWxsLWRvcy1zZW1hbnRpY3MgcmVwbGFjZS1yZWdleHAtaW4tc3Ry aW5nICJcXChcXFxcKlxcKSQiICJcXDFcXDEiICJcXChcXFxcKlxcKVwiIiAiXFwxXFwxXFxcXFwi IiAiWyUhXCJdIiAiXlwiIiAiXFwoWyUhKClcIjw+JnxeXVxcKSIgIl5cXDEiICInJyIgc3RyaW5n LXJlcGxhY2UgIlxuIiAiJ1xuJyIgIlteLTAtOWEtekEtWl8uL1xuXSIgIlxcXFxcXCYiXSAxMSAo IyQgLiAxMzEwODUpXSkjQDUzIFJldHVybiBhIGxpc3Qgb2YgY2hhcmFjdGVycyBpbiBTVFJJTkcu CgooZm4gU1RSSU5HKR8KKGRlZmFsaWFzICdzdHJpbmctdG8tbGlzdCAjWzI1NyAiXDMwMAFcMzAx XCJcMjA3IiBbYXBwZW5kIG5pbF0gNCAoIyQgLiAxMzIyMDIpXSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgc3RyaW5nLXRv LWxpc3Qgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhw YW5kXSA1KSNANTUgUmV0dXJuIGEgdmVjdG9yIG9mIGNoYXJhY3RlcnMgaW4gU1RSSU5HLgoKKGZu IFNUUklORykfCihkZWZhbGlhcyAnc3RyaW5nLXRvLXZlY3RvciAjWzI1NyAiXDMwMAEhXDIwNyIg W3Zjb25jYXRdIDMgKCMkIC4gMTMyNDgwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHN0cmluZy10by12ZWN0b3Igc3Bl ZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNA NzYgUmV0dXJuIHQgaWYgT0JKRUNUIGlzIGEgc3RyaW5nIG9yIG5pbC4KT3RoZXJ3aXNlLCByZXR1 cm4gbmlsLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnc3RyaW5nLW9yLW51bGwtcCAjWzI1NyAi XDIxMTtcMjA2BwBcMjExP1wyMDciIFtdIDIgKCMkIC4gMTMyNzU2KV0pI0A2MiBSZXR1cm4gdCBp ZiBPQkpFQ1QgaXMgbmlsIG9yIGEgbGlzdCBvZiBzdHJpbmdzLgoKKGZuIE9CSkVDVCkfCihkZWZh bGlhcyAnbGlzdC1vZi1zdHJpbmdzLXAgI1syNTcgIlwyMTE6XDIwMxIAXDIxMUA7XDIwMxIAXDIx MUFcMjYyAVwyMDIAAFwyMTE/XDIwNyIgW10gMiAoIyQgLiAxMzI5MTQpXSkKKGJ5dGUtY29kZSAi XDMwMFwzMDFcMzAyXDMwMyNcMzAwXDMwMVwzMDRcMzA1I1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0 IGxpc3Qtb2Ytc3RyaW5ncy1wIHB1cmUgdCBzaWRlLWVmZmVjdC1mcmVlIGVycm9yLWZyZWVdIDUp I0AxMTAgUmV0dXJuIHQgaWYgT0JKRUNUIGlzIG9uZSBvZiB0aGUgdHdvIGNhbm9uaWNhbCBib29s ZWFuIHZhbHVlczogdCBvciBuaWwuCk90aGVyd2lzZSwgcmV0dXJuIG5pbC4KCihmbiBPQkpFQ1Qp HwooZGVmYWxpYXMgJ2Jvb2xlYW5wICNbMjU3ICJcMjExXDMwMD5cMjA1BwBcMzAxXDIwNyIgWyhu aWwgdCkgdF0gMyAoIyQgLiAxMzMyMTUpXSkjQDYzIE5vbi1uaWwgaWYgYW5kIG9ubHkgaWYgT0JK RUNUIGlzIGEgc3BlY2lhbCBmb3JtLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnc3BlY2lhbC1m b3JtLXAgI1syNTcgIlwyMTE5XDIwMxAAXDMwMAEhXDIwMxAAXDMwMQEhXDI2MgFcMzAyASFcMjA1 HABcMzAzASFBXDMwND1cMjA3IiBbZmJvdW5kcCBpbmRpcmVjdC1mdW5jdGlvbiBzdWJycCBzdWJy LWFyaXR5IHVuZXZhbGxlZF0gMyAoIyQgLiAxMzM0MTEpXSkjQDYyIE5vbi1uaWwgaWYgYW5kIG9u bHkgaWYgT0JKRUNUIGlzIGEgdmFsaWQgcGxpc3QuCgooZm4gT0JKRUNUKR8KKGRlZmFsaWFzICdw bGlzdHAgI1syNTcgIlwzMDABIVwyMTFcMjA1XGYAXDIxMVwzMDFcMjQ2XDMwMlVcMjA3IiBbcHJv cGVyLWxpc3QtcCAyIDBdIDQgKCMkIC4gMTMzNjQ4KV0pI0A1NiBOb24tbmlsIGlmIGFuZCBvbmx5 IGlmIE9CSkVDVCBpcyBhIG1hY3JvLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnbWFjcm9wICNb MjU3ICJcMzAwASFcMjExOlwyMDUeAFwyMTFAXDMwMT1cMjA2HgBcMjExXDIxMVwyNDJcMzAyPVwy NjIBXDIwNR4AXDMwMwE4XDMwND5cMjA3IiBbaW5kaXJlY3QtZnVuY3Rpb24gbWFjcm8gYXV0b2xv YWQgNCAobWFjcm8gdCldIDUgKCMkIC4gMTMzODE3KV0pI0AxNTggUmV0dXJuIG5vbi1uaWwgaWYg T0JKRUNUIGlzIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZC4KRG9lcyBub3QgZGlz dGluZ3Vpc2ggYmV0d2VlbiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gbWFjaGluZSBjb2RlCm9y IGJ5dGUtY29kZS4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ2NvbXBpbGVkLWZ1bmN0aW9uLXAg I1syNTcgIlwzMDABIVwyMDYJAFwzMDEBIVwyMDciIFtzdWJycCBieXRlLWNvZGUtZnVuY3Rpb24t cF0gMyAoIyQgLiAxMzQwNDYpXSkjQDgxIFJldHVybiB0aGUgZmllbGQgYXQgcG9zaXRpb24gUE9T LCB0YWtpbmcgc3RpY2tpbmVzcyBldGMgaW50byBhY2NvdW50LgoKKGZuIFBPUykfCihkZWZhbGlh cyAnZmllbGQtYXQtcG9zICNbMjU3ICJcMzAwXDMwMQIhXDMwMlwiXDIxMVwzMDM9XDIwMxQAXDMw MFwzMDQDIVNcMzAyXCJcMjA3XDIwNyIgW2dldC1jaGFyLXByb3BlcnR5IGZpZWxkLWJlZ2lubmlu ZyBmaWVsZCBib3VuZGFyeSBmaWVsZC1lbmRdIDUgKCMkIC4gMTM0MzE3KV0pI0A0NDIgUmV0dXJu IHRoZSBTSEEtMSAoU2VjdXJlIEhhc2ggQWxnb3JpdGhtKSBvZiBhbiBPQkpFQ1QuCk9CSkVDVCBp cyBlaXRoZXIgYSBzdHJpbmcgb3IgYSBidWZmZXIuICBPcHRpb25hbCBhcmd1bWVudHMgU1RBUlQg YW5kCkVORCBhcmUgY2hhcmFjdGVyIHBvc2l0aW9ucyBzcGVjaWZ5aW5nIHdoaWNoIHBvcnRpb24g b2YgT0JKRUNUIGZvcgpjb21wdXRpbmcgdGhlIGhhc2guICBJZiBCSU5BUlkgaXMgbm9uLW5pbCwg cmV0dXJuIGEgc3RyaW5nIGluIGJpbmFyeQpmb3JtLgoKTm90ZSB0aGF0IFNIQS0xIGlzIG5vdCBj b2xsaXNpb24gcmVzaXN0YW50IGFuZCBzaG91bGQgbm90IGJlIHVzZWQKZm9yIGFueXRoaW5nIHNl Y3VyaXR5LXJlbGF0ZWQuICBTZWUgYHNlY3VyZS1oYXNoJyBmb3IKYWx0ZXJuYXRpdmVzLgoKKGZu IE9CSkVDVCAmb3B0aW9uYWwgU1RBUlQgRU5EIEJJTkFSWSkfCihkZWZhbGlhcyAnc2hhMSAjWzEw MjUgIlwzMDBcMzAxBQUFBSVcMjA3IiBbc2VjdXJlLWhhc2ggc2hhMV0gMTAgKCMkIC4gMTM0NTcx KV0pI0AyNDEgUmV0dXJuIHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eSBQUk9QIG9mIGZ1bmN0aW9uIEYu CklmIEFVVE9MT0FEIGlzIG5vbi1uaWwgYW5kIEYgaXMgYXV0b2xvYWRlZCwgdHJ5IHRvIGxvYWQg aXQKaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIHNldCBQUk9QLiAgSWYgQVVUT0xPQUQgaXMgYG1h Y3JvJywgZG8gaXQgb25seQppZiBpdCdzIGFuIGF1dG9sb2FkZWQgbWFjcm8uCgooZm4gRiBQUk9Q ICZvcHRpb25hbCBBVVRPTE9BRCkfCihkZWZhbGlhcyAnZnVuY3Rpb24tZ2V0ICNbNzcwICJcMzAw AzlcMjAzPgADA05cMjExXDI2MgJcMjA0PgBcMzAxBCFcMjAzPgADSwJcMjAzNwBcMjExXDIxMVwy NDJcMzAyPVwyNjIBXDIwMzcAXDIxMVwzMDMCBgcGBlwzMDQ9XDIwNTIAXDMwNCNcMjMyXDIwMzoA XDIxMVwyNjIFXDIxMFwyMDIBAFwyMDciIFtuaWwgZmJvdW5kcCBhdXRvbG9hZCBhdXRvbG9hZC1k by1sb2FkIG1hY3JvXSAxMSAoIyQgLiAxMzUwOTkpXSkjQDIxMiBQcm9jZXNzIHRleHQgcHJvcGVy dGllcyBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQsIGluc2VydGVkIGZvciBhIGB5YW5rJy4KUGVyZm9y bSB0aGUgaGFuZGxpbmcgc3BlY2lmaWVkIGJ5IGB5YW5rLWhhbmRsZWQtcHJvcGVydGllcycsIHRo ZW4KcmVtb3ZlIHByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5IGB5YW5rLWV4Y2x1ZGVkLXByb3BlcnRp ZXMnLgoKKGZuIFNUQVJUIEVORCkfCihkZWZhbGlhcyAncmVtb3ZlLXlhbmstZXhjbHVkZWQtcHJv cGVydGllcyAjWzUxNCAiXDMwMxgJXDIxMVwyMDM0AFwyMTFAXDIxMUABQQVcMjExBgZXXDIwMysA XDMwNAEEXCJcMzA1AgVcMzA2BlxuJAMCBAMjXDIxMFwyNjZcMjAyXDIwMg4AXDI2NgMBQVwyNjZc MjAyXDIwMgMAXDIxMFxuXDMwMz1cMjAzQwBcMzA3AgJcMzA2I1wyMDJIAFwzMTACAlxuIylcMjA3 IiBbaW5oaWJpdC1yZWFkLW9ubHkgeWFuay1oYW5kbGVkLXByb3BlcnRpZXMgeWFuay1leGNsdWRl ZC1wcm9wZXJ0aWVzIHQgZ2V0LXRleHQtcHJvcGVydHkgbmV4dC1zaW5nbGUtcHJvcGVydHktY2hh bmdlIG5pbCBzZXQtdGV4dC1wcm9wZXJ0aWVzIHJlbW92ZS1saXN0LW9mLXRleHQtcHJvcGVydGll c10gMTMgKCMkIC4gMTM1NTg0KV0pI0AzMTEgSW5zZXJ0IFNUUklORyBhdCBwb2ludCBmb3IgdGhl IGB5YW5rJyBjb21tYW5kLgoKVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBpbnNlcnQnLCBleGNlcHQg aXQgaG9ub3JzIHRoZSB2YXJpYWJsZXMKYHlhbmstaGFuZGxlZC1wcm9wZXJ0aWVzJyBhbmQgYHlh bmstZXhjbHVkZWQtcHJvcGVydGllcycsIGFuZCB0aGUKYHlhbmstaGFuZGxlcicgdGV4dCBwcm9w ZXJ0eSwgaW4gdGhlIHdheSB0aGF0IGB5YW5rJyBkb2VzLgoKSXQgYWxzbyBydW5zIHRoZSBzdHJp bmcgdGhyb3VnaCBgeWFuay10cmFuc2Zvcm0tZnVuY3Rpb25zJy4KCihmbiBTVFJJTkcpHwooZGVm YWxpYXMgJ2luc2VydC1mb3IteWFuayAjWzI1NyAiXDIxMUNcMzAwXDMwMVwzMDJcMzAzBFwiXCJc MjEwXDMwNFwzMDVcMzA2XDMwNwRcMjQyI1wyMTFcMjYyAlwyMDMqAFwzMTACXDI0MlwzMDYDTyFc MjEwAVwyMTFcMjQyAlwzMDRPXDI0MFwyMTBcMjAyCwBcMjEwXDMxMAFcMjQyIVwyMDciIFtydW4t aG9vay13cmFwcGVkIHlhbmstdHJhbnNmb3JtLWZ1bmN0aW9ucyBtYWtlLWNsb3N1cmUgI1syNTcg IlwzMDABXDMwMFwyNDIhXDI0MFwyMTBcMzAxXDIwNyIgW1YwIG5pbF0gNCAiXG5cbihmbiBGKSJd IG5pbCBuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgMCB5YW5rLWhhbmRsZXIgaW5zZXJ0LWZv ci15YW5rLTFdIDcgKCMkIC4gMTM2MjAwKV0pI0A1NSBIZWxwZXIgZm9yIGBpbnNlcnQtZm9yLXlh bmsnLCB3aGljaCBzZWUuCgooZm4gU1RSSU5HKR8KKGRlZmFsaWFzICdpbnNlcnQtZm9yLXlhbmst MSAjWzI1NyAiXDIxMTtcMjA1XG4AXDMwM1wzMDRcMzA1AyNcMjExQUBcMjA2EQABYAgYXDMwNlwz MDcRA0BcMjAzJAADQAMhXDIxMFwyMDInAAJjXDIxMGBcMjYyAVwzMDcQXDMxMAQ4XDIwNDcAXDMx MQICXCJcMjEwXDIxMQJWXDIwM0wAXDMxMgFTIVwyMDNMAFwzMTMBUwJcMzE0XDMwNyRcMjEwCVwz MDc9XDIwM1YAXDMxNQQ4EVwzMTYEOFwyMDVhAFwzMTYEOFwyMTESKVwyMDciIFtpbmhpYml0LXJl YWQtb25seSB5YW5rLXVuZG8tZnVuY3Rpb24gdGhpcy1jb21tYW5kIGdldC10ZXh0LXByb3BlcnR5 IDAgeWFuay1oYW5kbGVyIG5pbCB0IDIgcmVtb3ZlLXlhbmstZXhjbHVkZWQtcHJvcGVydGllcyB0 ZXh0LXByb3BlcnRpZXMtYXQgcHV0LXRleHQtcHJvcGVydHkgcmVhci1ub25zdGlja3kgMyA0XSAx MCAoIyQgLiAxMzY4ODkpXSkjQDI4NiBJbnNlcnQgYmVmb3JlIHBvaW50IGEgc3Vic3RyaW5nIG9m IEJVRkZFUiwgd2l0aG91dCB0ZXh0IHByb3BlcnRpZXMuCkJVRkZFUiBtYXkgYmUgYSBidWZmZXIg b3IgYSBidWZmZXIgbmFtZS4KQXJndW1lbnRzIFNUQVJUIGFuZCBFTkQgYXJlIGNoYXJhY3RlciBw b3NpdGlvbnMgc3BlY2lmeWluZyB0aGUgc3Vic3RyaW5nLgpUaGV5IGRlZmF1bHQgdG8gdGhlIHZh bHVlcyBvZiAocG9pbnQtbWluKSBhbmQgKHBvaW50LW1heCkgaW4gQlVGRkVSLgoKKGZuIEJVRkZF UiAmb3B0aW9uYWwgU1RBUlQgRU5EKR8KKGRlZmFsaWFzICdpbnNlcnQtYnVmZmVyLXN1YnN0cmlu Zy1uby1wcm9wZXJ0aWVzICNbNzY5ICJgXDMwMQQEBCNcMjEwXDMwMhhcMzAzAWBcMzA0IylcMjA3 IiBbaW5oaWJpdC1yZWFkLW9ubHkgaW5zZXJ0LWJ1ZmZlci1zdWJzdHJpbmcgdCBzZXQtdGV4dC1w cm9wZXJ0aWVzIG5pbF0gOCAoIyQgLiAxMzczOTMpXSkjQDQwMSBJbnNlcnQgYmVmb3JlIHBvaW50 IGEgcGFydCBvZiBCVUZGRVIsIHN0cmlwcGluZyBzb21lIHRleHQgcHJvcGVydGllcy4KQlVGRkVS IG1heSBiZSBhIGJ1ZmZlciBvciBhIGJ1ZmZlciBuYW1lLgpBcmd1bWVudHMgU1RBUlQgYW5kIEVO RCBhcmUgY2hhcmFjdGVyIHBvc2l0aW9ucyBzcGVjaWZ5aW5nIHRoZSBzdWJzdHJpbmcuClRoZXkg ZGVmYXVsdCB0byB0aGUgdmFsdWVzIG9mIChwb2ludC1taW4pIGFuZCAocG9pbnQtbWF4KSBpbiBC VUZGRVIuCkJlZm9yZSBpbnNlcnRpb24sIHByb2Nlc3MgdGV4dCBwcm9wZXJ0aWVzIGFjY29yZGlu ZyB0bwpgeWFuay1oYW5kbGVkLXByb3BlcnRpZXMnIGFuZCBgeWFuay1leGNsdWRlZC1wcm9wZXJ0 aWVzJy4KCihmbiBCVUZGRVIgJm9wdGlvbmFsIFNUQVJUIEVORCkfCihkZWZhbGlhcyAnaW5zZXJ0 LWJ1ZmZlci1zdWJzdHJpbmctYXMteWFuayAjWzc2OSAiYFwzMDAEBAQjXDIxMFwzMDEBYFwiXDIw NyIgW2luc2VydC1idWZmZXItc3Vic3RyaW5nIHJlbW92ZS15YW5rLWV4Y2x1ZGVkLXByb3BlcnRp ZXNdIDggKCMkIC4gMTM3ODY0KV0pI0AyMDggSW5zZXJ0IHRoZSBjb250ZW50cyBvZiB0aGUgY3Vy cmVudCBidWZmZXIgaW50byBCVUZGRVIuCklmIFNUQVJUL0VORCwgb25seSBpbnNlcnQgdGhhdCBy ZWdpb24gZnJvbSB0aGUgY3VycmVudCBidWZmZXIuClBvaW50IGluIEJVRkZFUiB3aWxsIGJlIHBs YWNlZCBhZnRlciB0aGUgaW5zZXJ0ZWQgdGV4dC4KCihmbiBCVUZGRVIgJm9wdGlvbmFsIFNUQVJU IEVORCkfCihkZWZhbGlhcyAnaW5zZXJ0LWludG8tYnVmZmVyICNbNzY5ICJwcgNxXDIxMFwzMDAB BAQjKVwyMDciIFtpbnNlcnQtYnVmZmVyLXN1YnN0cmluZ10gOCAoIyQgLiAxMzg0MjMpXSkjQDMz NiBSZXBsYWNlIFNUUklORyB3aXRoIFJFUExBQ0VNRU5UIGluIHRoZSByZWdpb24gZnJvbSBTVEFS VCB0byBFTkQuClRoZSBudW1iZXIgb2YgcmVwbGFjZWQgb2NjdXJyZW5jZXMgYXJlIHJldHVybmVk LCBvciBuaWwgaWYgU1RSSU5HCmRvZXNuJ3QgZXhpc3QgaW4gdGhlIHJlZ2lvbi4KCklmIFNUQVJU IGlzIG5pbCwgdXNlIHRoZSBjdXJyZW50IHBvaW50LiAgSWYgRU5EIGlzIG5pbCwgdXNlIGBwb2lu dC1tYXgnLgoKQ29tcGFyaXNvbnMgYW5kIHJlcGxhY2VtZW50cyBhcmUgZG9uZSB3aXRoIGZpeGVk IGNhc2UuCgooZm4gU1RSSU5HIFJFUExBQ0VNRU5UICZvcHRpb25hbCBTVEFSVCBFTkQpHwooZGVm YWxpYXMgJ3JlcGxhY2Utc3RyaW5nLWluLXJlZ2lvbiAjWzEwMjYgIgFcMjAzEQABZVdcMjAzFABc MzAxXDMwMiFcMjEwXDIwMhQAYFwyNjICXDIxMVwyMDMlAFwyMTFkVlwyMDMoAFwzMDFcMzAzIVwy MTBcMjAyKABkXDI2MgFcMjEyAWJcMjEwXDIxNAEBfVwyMTBcMzA0XDMwNRhcMzA2BVwzMDVcMzA3 I1wyMDNMAFwzMDRcMjI0XDMwNFwyMjV8XDIxMANjXDIxMFwyMTFUXDI2MgFcMjAyNABcMjExXDMw NFU/XDIwNVQAXDIxMStcMjA3IiBbY2FzZS1mb2xkLXNlYXJjaCBlcnJvciAiU3RhcnQgYmVmb3Jl IHN0YXJ0IG9mIGJ1ZmZlciIgIkVuZCBhZnRlciBlbmQgb2YgYnVmZmVyIiAwIG5pbCBzZWFyY2gt Zm9yd2FyZCB0XSA5ICgjJCAuIDEzODc0MCldKSNANjE3IFJlcGxhY2UgUkVHRVhQIHdpdGggUkVQ TEFDRU1FTlQgaW4gdGhlIHJlZ2lvbiBmcm9tIFNUQVJUIHRvIEVORC4KVGhlIG51bWJlciBvZiBy ZXBsYWNlZCBvY2N1cnJlbmNlcyBhcmUgcmV0dXJuZWQsIG9yIG5pbCBpZiBSRUdFWFAKZG9lc24n dCBleGlzdCBpbiB0aGUgcmVnaW9uLgoKSWYgU1RBUlQgaXMgbmlsLCB1c2UgdGhlIGN1cnJlbnQg cG9pbnQuICBJZiBFTkQgaXMgbmlsLCB1c2UgYHBvaW50LW1heCcuCgpDb21wYXJpc29ucyBhbmQg cmVwbGFjZW1lbnRzIGFyZSBkb25lIHdpdGggZml4ZWQgY2FzZS4KClJFUExBQ0VNRU5UIGNhbiB1 c2UgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGVsZW1lbnRzOgoKICBgXCYnIGluIE5FV1RFWFQgbWVh bnMgc3Vic3RpdHV0ZSBvcmlnaW5hbCBtYXRjaGVkIHRleHQuCiAgYFxOJyBtZWFucyBzdWJzdGl0 dXRlIHdoYXQgbWF0Y2hlZCB0aGUgTnRoIGBcKC4uLlwpJy4KICAgICAgIElmIE50aCBwYXJlbnMg ZGlkbid0IG1hdGNoLCBzdWJzdGl0dXRlIG5vdGhpbmcuCiAgYFxcJyBtZWFucyBpbnNlcnQgb25l IGBcJy4KICBgXD8nIGlzIHRyZWF0ZWQgbGl0ZXJhbGx5LgoKKGZuIFJFR0VYUCBSRVBMQUNFTUVO VCAmb3B0aW9uYWwgU1RBUlQgRU5EKR8KKGRlZmFsaWFzICdyZXBsYWNlLXJlZ2V4cC1pbi1yZWdp b24gI1sxMDI2ICIBXDIwMxEAAWVXXDIwMxQAXDMwMVwzMDIhXDIxMFwyMDIUAGBcMjYyAlwyMTFc MjAzJQBcMjExZFZcMjAzKABcMzAxXDMwMyFcMjEwXDIwMigAZFwyNjIBXDIxMgFiXDIxMFwyMTQB AX1cMjEwXDMwNFwzMDUYXDMwNgVcMzA1XDMwNyNcMjAzSABcMzEwBFwzMDdcIlwyMTBcMjExVFwy NjIBXDIwMjQAXDIxMVwzMDRVP1wyMDVQAFwyMTErXDIwNyIgW2Nhc2UtZm9sZC1zZWFyY2ggZXJy b3IgIlN0YXJ0IGJlZm9yZSBzdGFydCBvZiBidWZmZXIiICJFbmQgYWZ0ZXIgZW5kIG9mIGJ1ZmZl ciIgMCBuaWwgcmUtc2VhcmNoLWZvcndhcmQgdCByZXBsYWNlLW1hdGNoXSA5ICgjJCAuIDEzOTQ1 NildKSNAMTc2IElmIGBmb250LWxvY2stZGVmYXVsdHMnIGlzIG5pbCwgYXBwbHkgRkFDRSBhcyBh IGBmYWNlJyBwcm9wZXJ0eS4KU1RBUlQgYW5kIEVORCBkZW5vdGUgdGhlIHN0YXJ0IGFuZCBlbmQg b2YgdGhlIHRleHQgdG8gYWN0IG9uLgpEbyBub3RoaW5nIGlmIEZBQ0UgaXMgbmlsLgoKKGZuIEZB Q0UgU1RBUlQgRU5EKR8KKGRlZmFsaWFzICd5YW5rLWhhbmRsZS1mb250LWxvY2stZmFjZS1wcm9w ZXJ0eSAjWzc3MSAiAlwyMDUQAAg/XDIwNRAAXDMwMQICXDMwMgYGJFwyMDciIFtmb250LWxvY2st ZGVmYXVsdHMgcHV0LXRleHQtcHJvcGVydHkgZmFjZV0gOCAoIyQgLiAxNDA0NTgpXSkjQDk1IEFw cGx5IHByb3BlcnR5IGNhdGVnb3J5IENBVEVHT1JZJ3MgcHJvcGVydGllcyBiZXR3ZWVuIFNUQVJU IGFuZCBFTkQuCgooZm4gQ0FURUdPUlkgU1RBUlQgRU5EKR8KKGRlZmFsaWFzICd5YW5rLWhhbmRs ZS1jYXRlZ29yeS1wcm9wZXJ0eSAjWzc3MSAiAlwyMDUqAAFcMjExAldcMjA1KABcMzAwAVwzMDEE I1wzMDICIVwzMDMDA1wzMDQGCSEjXDIxMFwzMDUDAwMjXDIxMAFcMjY2XDIwM1wyMDIFAFwyNjIB XDIwNyIgW25leHQtcHJvcGVydHktY2hhbmdlIG5pbCB0ZXh0LXByb3BlcnRpZXMtYXQgc2V0LXRl eHQtcHJvcGVydGllcyBzeW1ib2wtcGxpc3QgYWRkLXRleHQtcHJvcGVydGllc10gMTEgKCMkIC4g MTQwNzg4KV0pI0A0ODQgU3RhcnQgYSBwcm9ncmFtIGluIGEgc3VicHJvY2Vzcy4gIFJldHVybiB0 aGUgcHJvY2VzcyBvYmplY3QgZm9yIGl0LgpOQU1FIGlzIG5hbWUgZm9yIHByb2Nlc3MuICBJdCBp cyBtb2RpZmllZCBpZiBuZWNlc3NhcnkgdG8gbWFrZSBpdCB1bmlxdWUuCkJVRkZFUiBpcyB0aGUg YnVmZmVyIChvciBidWZmZXIgbmFtZSkgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb2Nlc3MuCiBQ cm9jZXNzIG91dHB1dCBnb2VzIGF0IGVuZCBvZiB0aGF0IGJ1ZmZlciwgdW5sZXNzIHlvdSBzcGVj aWZ5CiBhbiBvdXRwdXQgc3RyZWFtIG9yIGZpbHRlciBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG91 dHB1dC4KIEJVRkZFUiBtYXkgYmUgYWxzbyBuaWwsIG1lYW5pbmcgdGhhdCB0aGlzIHByb2Nlc3Mg aXMgbm90IGFzc29jaWF0ZWQKIHdpdGggYW55IGJ1ZmZlci4KQ09NTUFORCBpcyB0aGUgc2hlbGwg Y29tbWFuZCB0byBydW4uCgooZm4gTkFNRSBCVUZGRVIgQ09NTUFORCkfCihkZWZhbGlhcyAnc3Rh cnQtcHJvY2Vzcy1zaGVsbC1jb21tYW5kICNbNzcxICJcMzAyAwMICQUlXDIwNyIgW3NoZWxsLWZp bGUtbmFtZSBzaGVsbC1jb21tYW5kLXN3aXRjaCBzdGFydC1wcm9jZXNzXSA5ICgjJCAuIDE0MTE0 NyldKSNAMTY5IFN0YXJ0IGEgcHJvZ3JhbSBpbiBhIHN1YnByb2Nlc3MuICBSZXR1cm4gdGhlIHBy b2Nlc3Mgb2JqZWN0IGZvciBpdC4KU2ltaWxhciB0byBgc3RhcnQtcHJvY2Vzcy1zaGVsbC1jb21t YW5kJywgYnV0IGNhbGxzIGBzdGFydC1maWxlLXByb2Nlc3MnLgoKKGZuIE5BTUUgQlVGRkVSIENP TU1BTkQpHwooZGVmYWxpYXMgJ3N0YXJ0LWZpbGUtcHJvY2Vzcy1zaGVsbC1jb21tYW5kICNbNzcx ICJcMzAwXDMwMVwzMDIDBQYHJCFcMjA3IiBbd2l0aC1jb25uZWN0aW9uLWxvY2FsLXZhcmlhYmxl cy0xIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDVcMzAyXDMwMQtcZlwzMDAlXDIwNyIgW1YwIFYxIFYy IHNoZWxsLWZpbGUtbmFtZSBzaGVsbC1jb21tYW5kLXN3aXRjaCBzdGFydC1maWxlLXByb2Nlc3Nd IDZdXSA5ICgjJCAuIDE0MTc2OSldKSNAMTI0NCBFeGVjdXRlIHRoZSBzaGVsbCBjb21tYW5kIENP TU1BTkQgc3luY2hyb25vdXNseSBpbiBzZXBhcmF0ZSBwcm9jZXNzLgpUaGUgcmVtYWluaW5nIGFy Z3VtZW50cyBhcmUgb3B0aW9uYWwuClRoZSBwcm9ncmFtJ3MgaW5wdXQgY29tZXMgZnJvbSBmaWxl IElORklMRSAobmlsIG1lYW5zIGAvZGV2L251bGwnKS4KSW5zZXJ0IG91dHB1dCBpbiBCVUZGRVIg YmVmb3JlIHBvaW50OyB0IG1lYW5zIGN1cnJlbnQgYnVmZmVyOwogbmlsIGZvciBCVUZGRVIgbWVh bnMgZGlzY2FyZCBpdDsgMCBtZWFucyBkaXNjYXJkIGFuZCBkb24ndCB3YWl0LgpCVUZGRVIgY2Fu IGFsc28gaGF2ZSB0aGUgZm9ybSAoUkVBTC1CVUZGRVIgU1RERVJSLUZJTEUpOyBpbiB0aGF0IGNh c2UsClJFQUwtQlVGRkVSIHNheXMgd2hhdCB0byBkbyB3aXRoIHN0YW5kYXJkIG91dHB1dCwgYXMg YWJvdmUsCndoaWxlIFNUREVSUi1GSUxFIHNheXMgd2hhdCB0byBkbyB3aXRoIHN0YW5kYXJkIGVy cm9yIGluIHRoZSBjaGlsZC4KU1RERVJSLUZJTEUgbWF5IGJlIG5pbCAoZGlzY2FyZCBzdGFuZGFy ZCBlcnJvciBvdXRwdXQpLAp0IChtaXggaXQgd2l0aCBvcmRpbmFyeSBvdXRwdXQpLCBvciBhIGZp bGUgbmFtZSBzdHJpbmcuCgpGb3VydGggYXJnIERJU1BMQVkgbm9uLW5pbCBtZWFucyByZWRpc3Bs YXkgYnVmZmVyIGFzIG91dHB1dCBpcyBpbnNlcnRlZC4KV2lsZGNhcmRzIGFuZCByZWRpcmVjdGlv biBhcmUgaGFuZGxlZCBhcyB1c3VhbCBpbiB0aGUgc2hlbGwuCgpJZiBCVUZGRVIgaXMgMCwgYGNh bGwtcHJvY2Vzcy1zaGVsbC1jb21tYW5kJyByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggdmFsdWUg bmlsLgpPdGhlcndpc2UgaXQgd2FpdHMgZm9yIENPTU1BTkQgdG8gdGVybWluYXRlIGFuZCByZXR1 cm5zIGEgbnVtZXJpYyBleGl0CnN0YXR1cyBvciBhIHNpZ25hbCBkZXNjcmlwdGlvbiBzdHJpbmcu CklmIHlvdSBxdWl0LCB0aGUgcHJvY2VzcyBpcyBraWxsZWQgd2l0aCBTSUdJTlQsIG9yIFNJR0tJ TEwgaWYgeW91IHF1aXQgYWdhaW4uCgpBbiBvbGQgY2FsbGluZyBjb252ZW50aW9uIGFjY2VwdGVk IGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFmdGVyIERJU1BMQVksCndoaWNoIHdlcmUganVzdCBj b25jYXRlbmF0ZWQgdG8gQ09NTUFORC4gIFRoaXMgaXMgc3RpbGwgc3VwcG9ydGVkIGJ1dCBzdHJv bmdseQpkaXNjb3VyYWdlZC4KCihmbiBDT01NQU5EICZvcHRpb25hbCBJTkZJTEUgQlVGRkVSIERJ U1BMQVkgJnJlc3QgQVJHUykfCihkZWZhbGlhcyAnY2FsbC1wcm9jZXNzLXNoZWxsLWNvbW1hbmQg I1sxMTUzICJcMzAyCAUFBQlcMzAzXDMwNAZcZgYJQlwzMDUjJgZcMjA3IiBbc2hlbGwtZmlsZS1u YW1lIHNoZWxsLWNvbW1hbmQtc3dpdGNoIGNhbGwtcHJvY2VzcyBtYXBjb25jYXQgaWRlbnRpdHkg IiAiXSAxNSAoIyQgLiAxNDIxODcpXSkKKHNldC1hZHZlcnRpc2VkLWNhbGxpbmctY29udmVudGlv biAnY2FsbC1wcm9jZXNzLXNoZWxsLWNvbW1hbmQgJyhjb21tYW5kICZvcHRpb25hbCBpbmZpbGUg YnVmZmVyIGRpc3BsYXkpICIyNC41IikjQDE3NiBQcm9jZXNzIGZpbGVzIHN5bmNocm9ub3VzbHkg aW4gYSBzZXBhcmF0ZSBwcm9jZXNzLgpTaW1pbGFyIHRvIGBjYWxsLXByb2Nlc3Mtc2hlbGwtY29t bWFuZCcsIGJ1dCBjYWxscyBgcHJvY2Vzcy1maWxlJy4KCihmbiBDT01NQU5EICZvcHRpb25hbCBJ TkZJTEUgQlVGRkVSIERJU1BMQVkgJnJlc3QgQVJHUykfCihkZWZhbGlhcyAncHJvY2Vzcy1maWxl LXNoZWxsLWNvbW1hbmQgI1sxMTUzICJcMzAwXDMwMVwzMDIDBQYHBgkGCyYGIVwyMDciIFt3aXRo LWNvbm5lY3Rpb24tbG9jYWwtdmFyaWFibGVzLTEgbWFrZS1jbG9zdXJlICNbMCAiXDMwNg1cMzAz XDMwMlwzMDEOXG5cMzA3XDMxMFwzMDRcMzAwQlwzMTEjJgZcMjA3IiBbVjAgVjEgVjIgVjMgVjQg c2hlbGwtZmlsZS1uYW1lIHByb2Nlc3MtZmlsZSBtYXBjb25jYXQgaWRlbnRpdHkgIiAiIHNoZWxs LWNvbW1hbmQtc3dpdGNoXSAxMF1dIDEzICgjJCAuIDE0MzcyNildKQooc2V0LWFkdmVydGlzZWQt Y2FsbGluZy1jb252ZW50aW9uICdwcm9jZXNzLWZpbGUtc2hlbGwtY29tbWFuZCAnKGNvbW1hbmQg Jm9wdGlvbmFsIGluZmlsZSBidWZmZXIgZGlzcGxheSkgIjI0LjUiKSNAMTAyMyBTZW5kIHRleHQg ZnJvbSBTVEFSVCB0byBFTkQgYXMgaW5wdXQgdG8gYW4gaW5mZXJpb3Igc2hlbGwgcnVubmluZyBD T01NQU5ELgpEZWxldGUgdGhlIHRleHQgaWYgZm91cnRoIGFyZyBERUxFVEUgaXMgbm9uLW5pbC4K Ckluc2VydCBvdXRwdXQgaW4gQlVGRkVSIGJlZm9yZSBwb2ludDsgdCBtZWFucyBjdXJyZW50IGJ1 ZmZlcjsgbmlsIGZvcgogQlVGRkVSIG1lYW5zIGRpc2NhcmQgaXQ7IDAgbWVhbnMgZGlzY2FyZCBh bmQgZG9uJ3Qgd2FpdDsgYW5kIGAoOmZpbGUKIEZJTEUpJywgd2hlcmUgRklMRSBpcyBhIGZpbGUg bmFtZSBzdHJpbmcsIG1lYW5zIHRoYXQgaXQgc2hvdWxkIGJlCiB3cml0dGVuIHRvIHRoYXQgZmls ZSAoaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgaXMgb3ZlcndyaXR0ZW4pLgpCVUZGRVIg Y2FuIGFsc28gaGF2ZSB0aGUgZm9ybSAoUkVBTC1CVUZGRVIgU1RERVJSLUZJTEUpOyBpbiB0aGF0 IGNhc2UsClJFQUwtQlVGRkVSIHNheXMgd2hhdCB0byBkbyB3aXRoIHN0YW5kYXJkIG91dHB1dCwg YXMgYWJvdmUsCndoaWxlIFNUREVSUi1GSUxFIHNheXMgd2hhdCB0byBkbyB3aXRoIHN0YW5kYXJk IGVycm9yIGluIHRoZSBjaGlsZC4KU1RERVJSLUZJTEUgbWF5IGJlIG5pbCAoZGlzY2FyZCBzdGFu ZGFyZCBlcnJvciBvdXRwdXQpLAp0IChtaXggaXQgd2l0aCBvcmRpbmFyeSBvdXRwdXQpLCBvciBh IGZpbGUgbmFtZSBzdHJpbmcuCgpJZiBCVUZGRVIgaXMgMCwgYGNhbGwtc2hlbGwtcmVnaW9uJyBy ZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggdmFsdWUgbmlsLgpPdGhlcndpc2UgaXQgd2FpdHMgZm9y IENPTU1BTkQgdG8gdGVybWluYXRlCmFuZCByZXR1cm5zIGEgbnVtZXJpYyBleGl0IHN0YXR1cyBv ciBhIHNpZ25hbCBkZXNjcmlwdGlvbiBzdHJpbmcuCklmIHlvdSBxdWl0LCB0aGUgcHJvY2VzcyBp cyBraWxsZWQgd2l0aCBTSUdJTlQsIG9yIFNJR0tJTEwgaWYgeW91IHF1aXQgYWdhaW4uCgooZm4g U1RBUlQgRU5EIENPTU1BTkQgJm9wdGlvbmFsIERFTEVURSBCVUZGRVIpHwooZGVmYWxpYXMgJ2Nh bGwtc2hlbGwtcmVnaW9uICNbMTI4MyAiXDMwMgUFCAUFXDMwMwkGXG4mCFwyMDciIFtzaGVsbC1m aWxlLW5hbWUgc2hlbGwtY29tbWFuZC1zd2l0Y2ggY2FsbC1wcm9jZXNzLXJlZ2lvbiBuaWxdIDE0 ICgjJCAuIDE0NDMxNCldKSNAMjA2IEV2YWx1YXRlIEJPRFkgd2l0aCBtb3VzZSBtb3ZlbWVudCBl dmVudHMgZW5hYmxlZC4KV2l0aGluIGEgYHRyYWNrLW1vdXNlJyBmb3JtLCBtb3VzZSBtb3Rpb24g Z2VuZXJhdGVzIGlucHV0IGV2ZW50cyB0aGF0CiB5b3UgY2FuIHJlYWQgd2l0aCBgcmVhZC1ldmVu dCcuCk5vcm1hbGx5LCBtb3VzZSBtb3Rpb24gaXMgaWdub3JlZC4KCihmbiAmcmVzdCBCT0RZKR8K KGRlZmFsaWFzICd0cmFjay1tb3VzZSAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxXDMwMgNCQkRc MjA3IiBbaW50ZXJuYWwtLXRyYWNrLW1vdXNlIGxhbWJkYSBuaWxdIDUgKCMkIC4gMTQ1NDg2KV0p KQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBc MjA3IiBbcHV0IHRyYWNrLW1vdXNlIGVkZWJ1Zy1mb3JtLXNwZWMgKGRlZi1ib2R5KSBmdW5jdGlv bi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMF0gNCkjQDI1NSBFeGVjdXRlIHRoZSBmb3JtcyBp biBCT0RZIHdpdGggQlVGRkVSLU9SLU5BTUUgdGVtcG9yYXJpbHkgY3VycmVudC4KQlVGRkVSLU9S LU5BTUUgbXVzdCBiZSBhIGJ1ZmZlciBvciB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBidWZmZXIu ClRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZ LiAgU2VlCmFsc28gYHdpdGgtdGVtcC1idWZmZXInLgoKKGZuIEJVRkZFUi1PUi1OQU1FICZyZXN0 IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtY3VycmVudC1idWZmZXIgJyhtYWNybyAuICNbMzg1ICJc MzAwXDMwMQNEAkJCXDIwNyIgW3NhdmUtY3VycmVudC1idWZmZXIgc2V0LWJ1ZmZlcl0gNSAoIyQg LiAxNDU5NTgpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMw NiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtY3VycmVudC1idWZmZXIgbGlzcC1pbmRlbnQtZnVu Y3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAMTUgCgooZm4gV0lORE9XKR8KKGRl ZmFsaWFzICdpbnRlcm5hbC0tYmVmb3JlLXdpdGgtc2VsZWN0ZWQtd2luZG93ICNbMjU3ICJcMzAw ASEBXDMwMSBcMzAyIAM9P1wyMDURAFwzMDMDIVwzMDIgBD0/XDIwNRwAXDMwNAQhRlwyMDciIFt3 aW5kb3ctZnJhbWUgc2VsZWN0ZWQtd2luZG93IHNlbGVjdGVkLWZyYW1lIGZyYW1lLXNlbGVjdGVk LXdpbmRvdyB0dHktdG9wLWZyYW1lXSA3ICgjJCAuIDE0NjQ3MildKSNAMTQgCgooZm4gU1RBVEUp HwooZGVmYWxpYXMgJ2ludGVybmFsLS1hZnRlci13aXRoLXNlbGVjdGVkLXdpbmRvdyAjWzI1NyAi XDMwMFwzMDECOCFcMjAzJwBcMzAyXDMwMQI4XDMwM1wiXDIxMFwzMDRcMzA1AjghXDIwMycAXDMw NiBcMzA1Ajg9XDIwNCcAXDMwN1wzMDUCOFwzMDNcIlwyMTBcMzAwAUFAIVwyMDU1AFwzMDIBQUBc MzAzXCJcMjA3IiBbd2luZG93LWxpdmUtcCAyIHNlbGVjdC13aW5kb3cgbm9yZWNvcmQgZnJhbWUt bGl2ZS1wIDMgdHR5LXRvcC1mcmFtZSBzZWxlY3QtZnJhbWVdIDQgKCMkIC4gMTQ2NzA2KV0pI0Ay MjEgQ3JlYXRlIGFuZCByZXR1cm4gYSBidWZmZXIgd2l0aCBhIG5hbWUgYmFzZWQgb24gTkFNRS4K Q2hvb3NlIHRoZSBidWZmZXIncyBuYW1lIHVzaW5nIGBnZW5lcmF0ZS1uZXctYnVmZmVyLW5hbWUn LgpTZWUgYGdldC1idWZmZXItY3JlYXRlJyBmb3IgdGhlIG1lYW5pbmcgb2YgSU5ISUJJVC1CVUZG RVItSE9PS1MuCgooZm4gTkFNRSAmb3B0aW9uYWwgSU5ISUJJVC1CVUZGRVItSE9PS1MpHwooZGVm YWxpYXMgJ2dlbmVyYXRlLW5ldy1idWZmZXIgI1s1MTMgIlwzMDBcMzAxAyECXCJcMjA3IiBbZ2V0 LWJ1ZmZlci1jcmVhdGUgZ2VuZXJhdGUtbmV3LWJ1ZmZlci1uYW1lXSA1ICgjJCAuIDE0NzAwNild KSNANzU5IEV4ZWN1dGUgdGhlIGZvcm1zIGluIEJPRFkgd2l0aCBXSU5ET1cgYXMgdGhlIHNlbGVj dGVkIHdpbmRvdy4KVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBm b3JtIGluIEJPRFkuCgpUaGlzIG1hY3JvIHNhdmVzIGFuZCByZXN0b3JlcyB0aGUgc2VsZWN0ZWQg d2luZG93LCBhcyB3ZWxsIGFzIHRoZQpzZWxlY3RlZCB3aW5kb3cgb2YgZWFjaCBmcmFtZS4gIEl0 IGRvZXMgbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YKcmVjZW50bHkgc2VsZWN0ZWQgd2luZG93cy4g IElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdpbmRvdyBvZgpzb21lIGZyYW1lIGlzIG5vIGxv bmdlciBsaXZlIGF0IHRoZSBlbmQgb2YgQk9EWSwgdGhhdCBmcmFtZSdzCnNlbGVjdGVkIHdpbmRv dyBpcyBsZWZ0IGFsb25lLiAgSWYgdGhlIHNlbGVjdGVkIHdpbmRvdyBpcyBubwpsb25nZXIgbGl2 ZSwgdGhlbiB3aGF0ZXZlciB3aW5kb3cgaXMgc2VsZWN0ZWQgYXQgdGhlIGVuZCBvZiBCT0RZCnJl bWFpbnMgc2VsZWN0ZWQuCgpUaGlzIG1hY3JvIHVzZXMgYHNhdmUtY3VycmVudC1idWZmZXInIHRv IHNhdmUgYW5kIHJlc3RvcmUgdGhlCmN1cnJlbnQgYnVmZmVyLCBzaW5jZSBvdGhlcndpc2UgaXRz IG5vcm1hbCBvcGVyYXRpb24gY291bGQKcG90ZW50aWFsbHkgbWFrZSBhIGRpZmZlcmVudCBidWZm ZXIgY3VycmVudC4gIEl0IGRvZXMgbm90IGFsdGVyCnRoZSBidWZmZXIgbGlzdCBvcmRlcmluZy4K CihmbiBXSU5ET1cgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1zZWxlY3RlZC13aW5kb3cg JyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMVwzMDIERERDXDMwM1wzMDRcMzA1XDMwNgYGQkJcMzA3 QkJERVwyMDciIFtsZXQgc2F2ZS1zZWxlY3RlZC13aW5kb3ctLXN0YXRlIGludGVybmFsLS1iZWZv cmUtd2l0aC1zZWxlY3RlZC13aW5kb3cgc2F2ZS1jdXJyZW50LWJ1ZmZlciB1bndpbmQtcHJvdGVj dCBwcm9nbiAoc2VsZWN0LXdpbmRvdyAoY2FyIHNhdmUtc2VsZWN0ZWQtd2luZG93LS1zdGF0ZSkg J25vcmVjb3JkKSAoKGludGVybmFsLS1hZnRlci13aXRoLXNlbGVjdGVkLXdpbmRvdyBzYXZlLXNl bGVjdGVkLXdpbmRvdy0tc3RhdGUpKV0gOSAoIyQgLiAxNDczNTIpXSkpCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgt c2VsZWN0ZWQtd2luZG93IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3JtLXNw ZWMgdF0gNSkjQDI5MiBFeGVjdXRlIHRoZSBmb3JtcyBpbiBCT0RZIHdpdGggRlJBTUUgYXMgdGhl IHNlbGVjdGVkIGZyYW1lLgpUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHZhbHVlIG9mIHRoZSBs YXN0IGZvcm0gaW4gQk9EWS4KClRoaXMgbWFjcm8gc2F2ZXMgYW5kIHJlc3RvcmVzIHRoZSBzZWxl Y3RlZCBmcmFtZSwgYW5kIGNoYW5nZXMgdGhlCm9yZGVyIG9mIG5laXRoZXIgdGhlIHJlY2VudGx5 IHNlbGVjdGVkIHdpbmRvd3Mgbm9yIHRoZSBidWZmZXJzIGluCnRoZSBidWZmZXIgbGlzdC4KCihm biBGUkFNRSAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aXRoLXNlbGVjdGVkLWZyYW1lICcobWFj cm8gLiAjWzM4NSAiXDMwMFwzMDEhXDMwMFwzMDIhXDMwMwJcMzA0QgJcMzA1QkRcMzA2XDMwN1wz MTAGCFwzMTFCQgYHQkJcMzEyXDMxMwYHRFwzMTAGCFwzMTRCQkVcMzEyXDMxNQYHRFwzMTYGCERF RkVcMjA3IiBbbWFrZS1zeW1ib2wgIm9sZC1mcmFtZSIgIm9sZC1idWZmZXIiIGxldCAoKHNlbGVj dGVkLWZyYW1lKSkgKChjdXJyZW50LWJ1ZmZlcikpIHVud2luZC1wcm90ZWN0IHByb2duIHNlbGVj dC1mcmFtZSAoJ25vcmVjb3JkKSB3aGVuIGZyYW1lLWxpdmUtcCAoJ25vcmVjb3JkKSBidWZmZXIt bGl2ZS1wIHNldC1idWZmZXJdIDEzICgjJCAuIDE0ODYxMyldKSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1zZWxl Y3RlZC1mcmFtZSBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIHRd IDUpI0A1OTAgRXhlY3V0ZSBCT0RZLCB0aGVuIHJlc3RvcmUgcHJldmlvdXMgd2luZG93IGNvbmZp Z3VyYXRpb24uClRoaXMgbWFjcm8gc2F2ZXMgdGhlIHdpbmRvdyBjb25maWd1cmF0aW9uIG9uIHRo ZSBzZWxlY3RlZCBmcmFtZSwKZXhlY3V0ZXMgQk9EWSwgdGhlbiBjYWxscyBgc2V0LXdpbmRvdy1j b25maWd1cmF0aW9uJyB0byByZXN0b3JlCnRoZSBzYXZlZCB3aW5kb3cgY29uZmlndXJhdGlvbi4g IFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGxhc3QKZm9ybSBpbiBCT0RZLiAgVGhlIHdpbmRvdyBj b25maWd1cmF0aW9uIGlzIGFsc28gcmVzdG9yZWQgaWYgQk9EWQpleGl0cyBub25sb2NhbGx5LgoK QkVXQVJFOiBNb3N0IHVzZXMgb2YgdGhpcyBtYWNybyBpbnRyb2R1Y2UgYnVncy4KRS5nLiBpdCBz aG91bGQgbm90IGJlIHVzZWQgdG8gdHJ5IGFuZCBwcmV2ZW50IHNvbWUgY29kZSBmcm9tIG9wZW5p bmcKYSBuZXcgd2luZG93LCBzaW5jZSB0aGF0IHdpbmRvdyBtYXkgc29tZXRpbWVzIGFwcGVhciBp biBhbm90aGVyIGZyYW1lLAppbiB3aGljaCBjYXNlIGBzYXZlLXdpbmRvdy1leGN1cnNpb24nIGNh bm5vdCBoZWxwLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3NhdmUtd2luZG93LWV4Y3Vy c2lvbiAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxIVwzMDIBXDMwM0JDXDMwNFwzMDUFQlwzMDYF REVFXDIwNyIgW21ha2Utc3ltYm9sICJ3Y29uZmlnIiBsZXQgKChjdXJyZW50LXdpbmRvdy1jb25m aWd1cmF0aW9uKSkgdW53aW5kLXByb3RlY3QgcHJvZ24gc2V0LXdpbmRvdy1jb25maWd1cmF0aW9u XSA4ICgjJCAuIDE0OTQwNildKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMw MVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgc2F2ZS13aW5kb3ctZXhjdXJzaW9uIGxpc3At aW5kZW50LWZ1bmN0aW9uIDAgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDY2IEludGVybmFs IGZ1bmN0aW9uIGZvciBgd2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXInLgoKKGZuIEJVRkZFUikf CihkZWZhbGlhcyAnaW50ZXJuYWwtdGVtcC1vdXRwdXQtYnVmZmVyLXNob3cgI1syNTcgInJcMjEx cVwyMTBcMzA0XDMwNSFcMjEwZWIpXDIxMAhcMjAzFwAIASFcMjEwXDIwMnUAclwyMTFxXDIxMAlc MzA2PVwyMDQrAAlcMzA3PVwyMDMvAFxuXDIwMy8AXDMxMFwyMDIwAAkZXDMxMQEhKVwyMTFcMjA1 PABcMzEyASEBXDIwM3IAXDIxMVwzMTMgPVwyMDRLAFwzMTQBIVwyMTABE1wzMTUCXDMxNlwiXDIx MFwzMTcCZVwzMTAjXDIxMFwzMjACZVwiXDIxMFwzMjECIXJcMzIyXDMyMwJcIlwyMTZcMzI0AUBc MzI1XCJcMjEwXDMyNlwzMjchKlwyNjYCKVwyNjYCXDMwNVwyMDciIFt0ZW1wLWJ1ZmZlci1zaG93 LWZ1bmN0aW9uIHdpbmRvdy1jb21iaW5hdGlvbi1saW1pdCB0ZW1wLWJ1ZmZlci1yZXNpemUtbW9k ZSBtaW5pYnVmZmVyLXNjcm9sbC13aW5kb3cgc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCB0ZW1w LWJ1ZmZlciB0ZW1wLWJ1ZmZlci1yZXNpemUgdCBkaXNwbGF5LWJ1ZmZlciB3aW5kb3ctZnJhbWUg c2VsZWN0ZWQtZnJhbWUgbWFrZS1mcmFtZS12aXNpYmxlIHNldC13aW5kb3ctaHNjcm9sbCAwIHNl dC13aW5kb3ctc3RhcnQgc2V0LXdpbmRvdy1wb2ludCBpbnRlcm5hbC0tYmVmb3JlLXdpdGgtc2Vs ZWN0ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5h bC0tYWZ0ZXItd2l0aC1zZWxlY3RlZC13aW5kb3ddIDJdIHNlbGVjdC13aW5kb3cgbm9yZWNvcmQg cnVuLWhvb2tzIHRlbXAtYnVmZmVyLXNob3ctaG9va10gNyAoIyQgLiAxNTAzNTgpXSkjQDE2NzUg QmluZCBgc3RhbmRhcmQtb3V0cHV0JyB0byBidWZmZXIgQlVGTkFNRSwgZXZhbCBCT0RZLCB0aGVu IHNob3cgdGhhdCBidWZmZXIuCgpUaGlzIGlzIGEgY29udmVuaWVuY2UgbWFjcm8gbWVhbnQgZm9y IGRpc3BsYXlpbmcgaGVscCBidWZmZXJzIGFuZAp0aGUgbGlrZS4gIEl0IGVtcHRpZXMgdGhlIEJV Rk5BTUUgYnVmZmVyIGJlZm9yZSBldmFsdWF0aW5nIEJPRFkKYW5kIGRpc2FibGVzIHVuZG8gaW4g dGhhdCBidWZmZXIuCgpJdCBkb2VzIG5vdCBtYWtlIHRoZSBidWZmZXIgY3VycmVudCBmb3IgQk9E WS4gIEluc3RlYWQgaXQgYmluZHMKYHN0YW5kYXJkLW91dHB1dCcgdG8gdGhhdCBidWZmZXIsIHNv IHRoYXQgb3V0cHV0IGdlbmVyYXRlZCB3aXRoCmBwcmluMScgYW5kIHNpbWlsYXIgZnVuY3Rpb25z IGluIEJPRFkgZ29lcyBpbnRvIHRoZSBidWZmZXIuCgpBdCB0aGUgZW5kIG9mIEJPRFksIHRoaXMg bWFya3MgYnVmZmVyIEJVRk5BTUUgdW5tb2RpZmllZCBhbmQgZGlzcGxheXMKaXQgaW4gYSB3aW5k b3csIGJ1dCBkb2VzIG5vdCBzZWxlY3QgaXQuICBUaGUgbm9ybWFsIHdheSB0byBkbyB0aGlzIGlz CmJ5IGNhbGxpbmcgYGRpc3BsYXktYnVmZmVyJywgdGhlbiBydW5uaW5nIGB0ZW1wLWJ1ZmZlci1z aG93LWhvb2snLgpIb3dldmVyLCBpZiBgdGVtcC1idWZmZXItc2hvdy1mdW5jdGlvbicgaXMgbm9u LW5pbCwgaXQgY2FsbHMgdGhhdApmdW5jdGlvbiBpbnN0ZWFkIChhbmQgZG9lcyBub3QgcnVuIGB0 ZW1wLWJ1ZmZlci1zaG93LWhvb2snKS4gIFRoZQpmdW5jdGlvbiBnZXRzIG9uZSBhcmd1bWVudCwg dGhlIGJ1ZmZlciB0byBkaXNwbGF5LgoKVGhlIHJldHVybiB2YWx1ZSBvZiBgd2l0aC1vdXRwdXQt dG8tdGVtcC1idWZmZXInIGlzIHRoZSB2YWx1ZSBvZiB0aGUKbGFzdCBmb3JtIGluIEJPRFkuICBJ ZiBCT0RZIGRvZXMgbm90IGZpbmlzaCBub3JtYWxseSwgdGhlIGJ1ZmZlcgpCVUZOQU1FIGlzIG5v dCBkaXNwbGF5ZWQuCgpUaGlzIHJ1bnMgdGhlIGhvb2sgYHRlbXAtYnVmZmVyLXNldHVwLWhvb2sn IGJlZm9yZSBCT0RZLAp3aXRoIHRoZSBidWZmZXIgQlVGTkFNRSB0ZW1wb3JhcmlseSBjdXJyZW50 LiAgSXQgcnVucyB0aGUgaG9vawpgdGVtcC1idWZmZXItc2hvdy1ob29rJyBhZnRlciBkaXNwbGF5 aW5nIGJ1ZmZlciBCVUZOQU1FLCB3aXRoIHRoYXQKYnVmZmVyIHRlbXBvcmFyaWx5IGN1cnJlbnQs IGFuZCB0aGUgd2luZG93IHRoYXQgd2FzIHVzZWQgdG8gZGlzcGxheSBpdAp0ZW1wb3JhcmlseSBz ZWxlY3RlZC4gIEJ1dCBpdCBkb2Vzbid0IHJ1biBgdGVtcC1idWZmZXItc2hvdy1ob29rJwppZiBp dCB1c2VzIGB0ZW1wLWJ1ZmZlci1zaG93LWZ1bmN0aW9uJy4KCkJ5IGRlZmF1bHQsIHRoZSBzZXR1 cCBob29rIHB1dHMgdGhlIGJ1ZmZlciBpbnRvIEhlbHAgbW9kZSBiZWZvcmUgcnVubmluZyBCT0RZ LgpJZiBCT0RZIGRvZXMgbm90IGNoYW5nZSB0aGUgbWFqb3IgbW9kZSwgdGhlIHNob3cgaG9vayBt YWtlcyB0aGUgYnVmZmVyCnJlYWQtb25seSwgYW5kIHNjYW5zIGl0IGZvciBmdW5jdGlvbiBhbmQg dmFyaWFibGUgbmFtZXMgdG8gbWFrZSB0aGVtIGludG8KY2xpY2thYmxlIGNyb3NzLXJlZmVyZW5j ZXMuCgpTZWUgdGhlIHJlbGF0ZWQgZm9ybSBgd2l0aC10ZW1wLWJ1ZmZlci13aW5kb3cnLgoKKGZu IEJVRk5BTUUgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1vdXRwdXQtdG8tdGVtcC1idWZm ZXIgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMSFcMzAwXDMwMiFcMzAzAlwzMDRCAlwzMDVcMzA2 BghEXDMwN1wzMTBcMzExXDMxMlwzMTMGC0VcMzE0QkJCQkVEXDMxNQRERVwzMDdcMzE2BgZCXDMx NwVERUVcMjA3IiBbbWFrZS1zeW1ib2wgIm9sZC1kaXIiICJidWYiIGxldCogKGRlZmF1bHQtZGly ZWN0b3J5KSB3aXRoLWN1cnJlbnQtYnVmZmVyIGdldC1idWZmZXItY3JlYXRlIHByb2cxIChjdXJy ZW50LWJ1ZmZlcikgKGtpbGwtYWxsLWxvY2FsLXZhcmlhYmxlcykgc2V0cSBkZWZhdWx0LWRpcmVj dG9yeSAoKHNldHEgYnVmZmVyLXJlYWQtb25seSBuaWwpIChzZXRxIGJ1ZmZlci1maWxlLW5hbWUg bmlsKSAoc2V0cSBidWZmZXItdW5kby1saXN0IHQpIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0 KSAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpIChlcmFzZS1idWZmZXIpIChydW4taG9v a3MgJ3RlbXAtYnVmZmVyLXNldHVwLWhvb2spKSkgc3RhbmRhcmQtb3V0cHV0IHByb2duIGludGVy bmFsLXRlbXAtb3V0cHV0LWJ1ZmZlci1zaG93XSAxNSAoIyQgLiAxNTEyMjEpXSkpCihwdXQgJ3dp dGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICdlZGVidWctZm9ybS1zcGVjIHQpI0AyOTggQ3JlYXRl IGEgbmV3IGJ1ZmZlciwgZXZhbHVhdGUgQk9EWSB0aGVyZSwgYW5kIHdyaXRlIHRoZSBidWZmZXIg dG8gRklMRS4KVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBmb3Jt IGluIEJPRFkuClRoZSBidWZmZXIgZG9lcyBub3QgcnVuIHRoZSBob29rcyBga2lsbC1idWZmZXIt aG9vaycsCmBraWxsLWJ1ZmZlci1xdWVyeS1mdW5jdGlvbnMnLCBhbmQgYGJ1ZmZlci1saXN0LXVw ZGF0ZS1ob29rJy4KU2VlIGFsc28gYHdpdGgtdGVtcC1idWZmZXInLgoKKGZuIEZJTEUgJnJlc3Qg Qk9EWSkfCihkZWZhbGlhcyAnd2l0aC10ZW1wLWZpbGUgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMw MSFcMzAwXDMwMiFcMzAzAgVEAlwzMDRCRFwzMDVcMzA2XDMwNwUGCEJCXDMwNwYGXDMxMFwzMTFc MjExBgtcMzEyQkJCQkVFXDMxM1wzMTQGBkRcMzE1BgdERUVFXDIwNyIgW21ha2Utc3ltYm9sICJ0 ZW1wLWZpbGUiICJ0ZW1wLWJ1ZmZlciIgbGV0ICgoZ2VuZXJhdGUtbmV3LWJ1ZmZlciAiICp0ZW1w IGZpbGUqIiB0KSkgdW53aW5kLXByb3RlY3QgcHJvZzEgd2l0aC1jdXJyZW50LWJ1ZmZlciB3cml0 ZS1yZWdpb24gbmlsIChuaWwgMCkgYW5kIGJ1ZmZlci1uYW1lIGtpbGwtYnVmZmVyXSAxNiAoIyQg LiAxNTM1NTIpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMw NiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtdGVtcC1maWxlIGxpc3AtaW5kZW50LWZ1bmN0aW9u IDEgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDQyOCBEaXNwbGF5IE1FU1NBR0UgdGVtcG9y YXJpbHkgaWYgbm9uLW5pbCB3aGlsZSBCT0RZIGlzIGV2YWx1YXRlZC4KVGhlIG9yaWdpbmFsIG1l c3NhZ2UgaXMgcmVzdG9yZWQgdG8gdGhlIGVjaG8gYXJlYSBhZnRlciBCT0RZIGhhcyBmaW5pc2hl ZC4KVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBmb3JtIGluIEJP RFkuCk1FU1NBR0UgaXMgd3JpdHRlbiB0byB0aGUgbWVzc2FnZSBsb2cgYnVmZmVyIGlmIGBtZXNz YWdlLWxvZy1tYXgnIGlzIG5vbi1uaWwuCklmIE1FU1NBR0UgaXMgbmlsLCB0aGUgZWNobyBhcmVh IGFuZCBtZXNzYWdlIGxvZyBidWZmZXIgYXJlIHVuY2hhbmdlZC4KVXNlIGEgTUVTU0FHRSBvZiAi IiB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgZWNobyBhcmVhLgoKKGZuIE1FU1NBR0UgJnJlc3Qg Qk9EWSkfCihkZWZhbGlhcyAnd2l0aC10ZW1wLW1lc3NhZ2UgJyhtYWNybyAuICNbMzg1ICJcMzAw XDMwMSFcMzAwXDMwMiFcMzAzAQVEA0NEXDMwNFwzMDVcMzA2BVwzMDcGCFwzMTBCQlwzMTFcMzEy BglFRgYHQkJcMzEzBVwzMTQGCFwzMTFcMzEyBgtFXDMxNUJCQkVFRVwyMDciIFttYWtlLXN5bWJv bCAiY3VycmVudC1tZXNzYWdlIiAid2l0aC10ZW1wLW1lc3NhZ2UiIGxldCB1bndpbmQtcHJvdGVj dCBwcm9nbiB3aGVuIHNldHEgKChjdXJyZW50LW1lc3NhZ2UpKSBtZXNzYWdlICIlcyIgYW5kIGlm ICgobWVzc2FnZSBuaWwpKV0gMTUgKCMkIC4gMTU0MzM0KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMw MVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IHdpdGgtdGVtcC1t ZXNzYWdlIGVkZWJ1Zy1mb3JtLXNwZWMgdCBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rp b24gMV0gNCkjQDI1NCBDcmVhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyLCBhbmQgZXZhbHVhdGUgQk9E WSB0aGVyZSBsaWtlIGBwcm9nbicuClRoZSBidWZmZXIgZG9lcyBub3QgcnVuIHRoZSBob29rcyBg a2lsbC1idWZmZXItaG9vaycsCmBraWxsLWJ1ZmZlci1xdWVyeS1mdW5jdGlvbnMnLCBhbmQgYGJ1 ZmZlci1saXN0LXVwZGF0ZS1ob29rJy4KU2VlIGFsc28gYHdpdGgtdGVtcC1maWxlJyBhbmQgYHdp dGgtb3V0cHV0LXRvLXN0cmluZycuCgooZm4gJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC10 ZW1wLWJ1ZmZlciAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxIVwzMDIBXDMwM0JDXDMwNANcMzA1 XDMwNgYHQlwzMDdcMzEwBghEXDMxMQYJREVFRUVcMjA3IiBbbWFrZS1zeW1ib2wgInRlbXAtYnVm ZmVyIiBsZXQgKChnZW5lcmF0ZS1uZXctYnVmZmVyICIgKnRlbXAqIiB0KSkgd2l0aC1jdXJyZW50 LWJ1ZmZlciB1bndpbmQtcHJvdGVjdCBwcm9nbiBhbmQgYnVmZmVyLW5hbWUga2lsbC1idWZmZXJd IDEyICgjJCAuIDE1NTIyNSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMw MVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC10ZW1wLWJ1ZmZlciBsaXNwLWluZGVu dC1mdW5jdGlvbiAwIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0A1ODUgRXhlY3V0ZSBCT0RZ LCBwcmV0ZW5kaW5nIGl0IGRvZXMgbm90IG1vZGlmeSB0aGUgYnVmZmVyLgpUaGlzIG1hY3JvIGlz IHR5cGljYWxseSB1c2VkIGFyb3VuZCBtb2RpZmljYXRpb25zIG9mCnRleHQgcHJvcGVydGllcyB0 aGF0IGRvIG5vdCByZWFsbHkgYWZmZWN0IHRoZSBidWZmZXIncyBjb250ZW50LgpJZiBCT0RZIHBl cmZvcm1zIHJlYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVmZmVyJ3MgdGV4dCwgb3RoZXIKdGhh biBjb3NtZXRpYyBvbmVzLCB1bmRvIGRhdGEgbWF5IGJlY29tZSBjb3JydXB0ZWQuCgpUaGlzIG1h Y3JvIHdpbGwgcnVuIEJPRFkgbm9ybWFsbHksIGJ1dCBkb2Vzbid0IGNvdW50IGl0cyBidWZmZXIK bW9kaWZpY2F0aW9ucyBhcyBiZWluZyBidWZmZXIgbW9kaWZpY2F0aW9ucy4gIFRoaXMgYWZmZWN0 cyB0aGluZ3MKbGlrZSBgYnVmZmVyLW1vZGlmaWVkLXAnLCBjaGVja2luZyB3aGV0aGVyIHRoZSBm aWxlIGlzIGxvY2tlZCBieQpzb21lb25lIGVsc2UsIHJ1bm5pbmcgYnVmZmVyIG1vZGlmaWNhdGlv biBob29rcywgYW5kIG90aGVyIHRoaW5ncwpvZiB0aGF0IG5hdHVyZS4KCihmbiAmcmVzdCBCT0RZ KR8KKGRlZmFsaWFzICd3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zICcobWFjcm8gLiAjWzEyOCAi XDMwMFwzMDEhXDMwMgFcMzAzQlwzMDRCXDMwNVwzMDYFQlwzMDdcMzEwXDMxMQYHRFwzMTIGCFwz MTNCQkVcMzE0BgdERUVFXDIwNyIgW21ha2Utc3ltYm9sICJtb2RpZmllZCIgbGV0KiAoKGJ1ZmZl ci1tb2RpZmllZC1wKSkgKChidWZmZXItdW5kby1saXN0IHQpIChpbmhpYml0LXJlYWQtb25seSB0 KSAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpIHVud2luZC1wcm90ZWN0IHByb2duIHdo ZW4gb3Igbm90IGVxICgnYXV0b3NhdmVkKSByZXN0b3JlLWJ1ZmZlci1tb2RpZmllZC1wXSAxMiAo IyQgLiAxNTU4ODMpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDRcMzAx XDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgd2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucyBlZGVidWct Zm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDBdIDQpI0A5MSBF eGVjdXRlIEJPRFksIHJldHVybiB0aGUgdGV4dCBpdCBzZW50IHRvIGBzdGFuZGFyZC1vdXRwdXQn LCBhcyBhIHN0cmluZy4KCihmbiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aXRoLW91dHB1dC10 by1zdHJpbmcgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDJcMzAzXDMwMFwzMDQGBkJCXDMw NUJCXDMwNkJCRVwyMDciIFtsZXQgKChzdGFuZGFyZC1vdXRwdXQgKGdlbmVyYXRlLW5ldy1idWZm ZXIgIiAqc3RyaW5nLW91dHB1dCoiIHQpKSkgdW53aW5kLXByb3RlY3QgcHJvZ24gKChzdGFuZGFy ZC1vdXRwdXQgc3RhbmRhcmQtb3V0cHV0KSkgKCh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJk LW91dHB1dCAoYnVmZmVyLXN0cmluZykpKSAoKGtpbGwtYnVmZmVyIHN0YW5kYXJkLW91dHB1dCkp XSA4ICgjJCAuIDE1Njk3NyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMw MVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1vdXRwdXQtdG8tc3RyaW5nIGxpc3At aW5kZW50LWZ1bmN0aW9uIDAgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDI4OSBFeGVjdXRl IEJPRFksIGFsbG93aW5nIHF1aXRzIHRvIHRlcm1pbmF0ZSBCT0RZIGJ1dCBub3QgZXNjYXBlIGZ1 cnRoZXIuCldoZW4gYSBxdWl0IHRlcm1pbmF0ZXMgQk9EWSwgYHdpdGgtbG9jYWwtcXVpdCcgcmV0 dXJucyBuaWwgYnV0CnJlcXVlc3RzIGFub3RoZXIgcXVpdC4gIFRoYXQgcXVpdCB3aWxsIGJlIHBy b2Nlc3NlZCBhcyBzb29uIGFzIHF1aXR0aW5nCmlzIGFsbG93ZWQgb25jZSBhZ2Fpbi4gIChJbW1l ZGlhdGVseSwgaWYgYGluaGliaXQtcXVpdCcgaXMgbmlsLikKCihmbiAmcmVzdCBCT0RZKR8KKGRl ZmFsaWFzICd3aXRoLWxvY2FsLXF1aXQgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDJcMzAz BEJCXDMwNEJCQlwyMDciIFtjb25kaXRpb24tY2FzZSBuaWwgbGV0ICgoaW5oaWJpdC1xdWl0IG5p bCkpICgocXVpdCAoc2V0cSBxdWl0LWZsYWcgdCkgKGV2YWwgJyhpZ25vcmUgbmlsKSB0KSkpXSA2 ICgjJCAuIDE1NzU0MSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMjEwXDMwNFwz MDFcMzA1XDMwNiNcMzAwXDIwNyIgW3B1dCB3aXRoLWxvY2FsLXF1aXQgZWRlYnVnLWZvcm0tc3Bl YyB0IGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAwXSA0KSNAMjYwIEV4ZWN1dGUg Qk9EWSBvbmx5IGFzIGxvbmcgYXMgdGhlcmUncyBubyBwZW5kaW5nIGlucHV0LgpJZiBpbnB1dCBh cnJpdmVzLCB0aGF0IGVuZHMgdGhlIGV4ZWN1dGlvbiBvZiBCT0RZLAphbmQgYHdoaWxlLW5vLWlu cHV0JyByZXR1cm5zIHQuICBRdWl0dGluZyBtYWtlcyBpdCByZXR1cm4gbmlsLgpJZiBCT0RZIGZp bmlzaGVzLCBgd2hpbGUtbm8taW5wdXQnIHJldHVybnMgd2hhdGV2ZXIgdmFsdWUgQk9EWSBwcm9k dWNlZC4KCihmbiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aGlsZS1uby1pbnB1dCAnKG1hY3Jv IC4gI1sxMjggIlwzMDBcMzAxIVwzMDJcMzAzXDMwNANEXDMwNVwzMDZcMzA0BgZERFwzMDdCXDMx MFwzMTFcMzEyXDMxM1wzMTQGC0JFRVwzMTVCQkJFRFwyMDciIFttYWtlLXN5bWJvbCAiaW5wdXQi IHdpdGgtbG9jYWwtcXVpdCBjYXRjaCBxdW90ZSBsZXQgdGhyb3ctb24taW5wdXQgKHZhbCkgc2V0 cSB2YWwgb3IgKGlucHV0LXBlbmRpbmctcCkgcHJvZ24gKChjb25kICgoZXEgcXVpdC1mbGFnIHRo cm93LW9uLWlucHV0KSAoc2V0cSBxdWl0LWZsYWcgbmlsKSB0KSAocXVpdC1mbGFnIG5pbCkgKHQg dmFsKSkpXSAxMyAoIyQgLiAxNTgxNjcpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDIxMFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgd2hpbGUtbm8taW5wdXQgZWRlYnVn LWZvcm0tc3BlYyB0IGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAwXSA0KSNAMjEy IExpa2UgYGNvbmRpdGlvbi1jYXNlJyBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBwcmV2ZW50IGRl YnVnZ2luZy4KTW9yZSBzcGVjaWZpY2FsbHkgaWYgYGRlYnVnLW9uLWVycm9yJyBpcyBzZXQgdGhl biB0aGUgZGVidWdnZXIgd2lsbCBiZSBpbnZva2VkCmV2ZW4gaWYgdGhpcyBjYXRjaGVzIHRoZSBz aWduYWwuCgooZm4gVkFSIEJPRFlGT1JNICZyZXN0IEhBTkRMRVJTKR8KKGRlZmFsaWFzICdjb25k aXRpb24tY2FzZS11bmxlc3MtZGVidWcgJyhtYWNybyAuICNbNjQyICJcMzAwAwNcMzAxXDMwMgVc IkJCQlwyMDciIFtjb25kaXRpb24tY2FzZSBtYXBjYXIgI1syNTcgIlwzMDABQDxcMjAzXGYAAUBc MjAyDwABQENCAUFCXDIwNyIgW2RlYnVnXSAzICJcblxuKGZuIEhBTkRMRVIpIl1dIDkgKCMkIC4g MTU4OTE3KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVc MzA2I1wzMDBcMjA3IiBbcHV0IGNvbmRpdGlvbi1jYXNlLXVubGVzcy1kZWJ1ZyBlZGVidWctZm9y bS1zcGVjIGNvbmRpdGlvbi1jYXNlIGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAy XSA0KSNANDIwIFJ1biBCT0RZIGFuZCBkZW1vdGUgYW55IGVycm9ycyB0byBzaW1wbGUgbWVzc2Fn ZXMuCkZPUk1BVCBpcyBhIHN0cmluZyBwYXNzZWQgdG8gYG1lc3NhZ2UnIHRvIGZvcm1hdCBhbnkg ZXJyb3IgbWVzc2FnZS4KSXQgc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUgJS1zZXF1ZW5jZTsgZS5n LiwgIkVycm9yOiAlUyIuCgpJZiBgZGVidWctb24tZXJyb3InIGlzIG5vbi1uaWwsIHJ1biBCT0RZ IHdpdGhvdXQgY2F0Y2hpbmcgaXRzIGVycm9ycy4KVGhpcyBpcyB0byBiZSB1c2VkIGFyb3VuZCBj b2RlIHRoYXQgaXMgbm90IGV4cGVjdGVkIHRvIHNpZ25hbCBhbiBlcnJvcgpidXQgdGhhdCBzaG91 bGQgYmUgcm9idXN0IGluIHRoZSB1bmV4cGVjdGVkIGNhc2UgdGhhdCBhbiBlcnJvciBpcyBzaWdu YWxlZC4KCihmbiBGT1JNQVQgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1kZW1vdGVkLWVy cm9ycyAnKG1hY3JvIC4gI1szODUgIlwzMDBcMzAxIQEDO1wyMDMRAAJcMjAzEQADXDIwMhsAA1wy MDMaAAMDQlwyNjIDXDMwMlwzMDMDXDMwNAYGIVwzMDVcMzA2BQYIRVwzMDdCQkYCBT1cMjAzMgBc MjA3XDMxMFwzMTECXDMxMlwyMTEGBiVcMjA3IiBbbWFrZS1zeW1ib2wgImVyciIgIkVycm9yOiAl UyIgY29uZGl0aW9uLWNhc2UtdW5sZXNzLWRlYnVnIG1hY3JvZXhwLXByb2duIGVycm9yIG1lc3Nh Z2UgKG5pbCkgbWFjcm9leHAtd2Fybi1hbmQtcmV0dXJuICJNaXNzaW5nIGZvcm1hdCBhcmd1bWVu dCIgbmlsXSAxMiAoIyQgLiAxNTk0OTYpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDIxMFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgd2l0aC1kZW1vdGVkLWVycm9ycyBl ZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDFdIDQp I0A1MTQgRXhlY3V0ZSBCT0RZLCBidXQgZG9uJ3QgY2FsbCB0aGUgYWZ0ZXItY2hhbmdlIGZ1bmN0 aW9ucyB0aWxsIHRoZSBlbmQuCklmIEJPRFkgbWFrZXMgY2hhbmdlcyBpbiB0aGUgYnVmZmVyLCB0 aGV5IGFyZSByZWNvcmRlZAphbmQgdGhlIGZ1bmN0aW9ucyBvbiBgYWZ0ZXItY2hhbmdlLWZ1bmN0 aW9ucycgYXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCndoZW4gQk9EWSBpcyBmaW5pc2hlZC4KVGhl IHJldHVybiB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZLgoKSWYg YGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBpcyBub24tbmlsLCB0aGVuIGNhbGxzIHRvIHRoZSBh ZnRlci1jaGFuZ2UKZnVuY3Rpb25zIGNhbid0IGJlIGRlZmVycmVkLCBzbyBpbiB0aGF0IGNhc2Ug dGhpcyBtYWNybyBoYXMgbm8gZWZmZWN0LgoKRG8gbm90IGFsdGVyIGBhZnRlci1jaGFuZ2UtZnVu Y3Rpb25zJyBvciBgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnCmluIEJPRFkuCgooZm4gJnJlc3Qg Qk9EWSkfCihkZWZhbGlhcyAnY29tYmluZS1hZnRlci1jaGFuZ2UtY2FsbHMgJyhtYWNybyAuICNb MTI4ICJcMzAwXDMwMVwzMDIDQkJcMzAzQkJcMjA3IiBbdW53aW5kLXByb3RlY3QgbGV0ICgoY29t YmluZS1hZnRlci1jaGFuZ2UtY2FsbHMgdCkpICgoY29tYmluZS1hZnRlci1jaGFuZ2UtZXhlY3V0 ZSkpXSA1ICgjJCAuIDE2MDQwNCldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0 XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgY29tYmluZS1hZnRlci1jaGFuZ2UtY2Fs bHMgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNANTEg Tm9uLW5pbCB3aGVuIGBjb21iaW5lLWNoYW5nZS1jYWxscy0xJyBpcyBydW5uaW5nLh8KKGRlZnZh ciB1bmRvLS1jb21iaW5pbmctY2hhbmdlLWNhbGxzIG5pbCAoIyQgLiAxNjEyNTMpKSNAOTQ3IEV2 YWx1YXRlIEJPRFksIHJ1bm5pbmcgdGhlIGNoYW5nZSBob29rcyBqdXN0IG9uY2UsIGZvciByZWdp b24gKEJFRyBFTkQpLgoKRmlyc3RseSwgYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBpcyBpbnZv a2VkIGZvciB0aGUgcmVnaW9uCihCRUcgRU5EKSwgdGhlbiBCT0RZIChhIGZ1bmN0aW9uKSBpcyBl dmFsdWF0ZWQgd2l0aApgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnIGFuZCBgYWZ0ZXItY2hhbmdl LWZ1bmN0aW9ucycgYm91bmQgdG8KbmlsLCB0aGVuIGZpbmFsbHkgYGFmdGVyLWNoYW5nZS1mdW5j dGlvbnMnIGlzIGludm9rZWQgb24gdGhlCnVwZGF0ZWQgcmVnaW9uIChCRUcgTkVXLUVORCkgd2l0 aCBhIGNhbGN1bGF0ZWQgT0xELUxFTiBhcmd1bWVudC4KSWYgYGluaGliaXQtbW9kaWZpY2F0aW9u LWhvb2tzJyBpcyBpbml0aWFsbHkgbm9uLW5pbCwgdGhlIGNoYW5nZQpob29rcyBhcmUgbm90IHJ1 bi4KClRoZSByZXN1bHQgb2YgYGNvbWJpbmUtY2hhbmdlLWNhbGxzLTEnIGlzIHRoZSB2YWx1ZSBy ZXR1cm5lZCBieQpCT0RZLiAgQk9EWSBtdXN0IG5vdCBtYWtlIGEgZGlmZmVyZW50IGJ1ZmZlciBj dXJyZW50LCBleGNlcHQKdGVtcG9yYXJpbHkuICBJdCBtdXN0IG5vdCBtYWtlIGFueSBjaGFuZ2Vz IHRvIHRoZSBidWZmZXIgb3V0c2lkZQp0aGUgc3BlY2lmaWVkIHJlZ2lvbi4gIEl0IG11c3Qgbm90 IGNoYW5nZQpgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnIG9yIGBhZnRlci1jaGFuZ2UtZnVuY3Rp b25zJy4KCkFkZGl0aW9uYWxseSwgdGhlIGJ1ZmZlciBtb2RpZmljYXRpb25zIG9mIEJPRFkgYXJl IHJlY29yZGVkIG9uCnRoZSBidWZmZXIncyB1bmRvIGxpc3QgYXMgYSBzaW5nbGUgKGFwcGx5IC4u LikgZW50cnkgY29udGFpbmluZwp0aGUgZnVuY3Rpb24gYHVuZG8tLXdyYXAtYW5kLXJ1bi1wcmlt aXRpdmUtdW5kbycuCgooZm4gQkVHIEVORCBCT0RZKR8KKGRlZmFsaWFzICdjb21iaW5lLWNoYW5n ZS1jYWxscy0xICNbNzcxICJcMzA1AyFcMjAzCwBcMzA2AyFcMjYyA1wzMDUCIVwyMDMWAFwzMDYC IVwyNjICCFwzMDcDXDMxMFwiXDMxMQlcMjAzJwADIFwyNjIBXDIwMlwzMzIAXDMxMBlcblwyMDQ1 AFwzMTJcMzAzBgcGByNcMjEwC1xmXDMxM1wzMDMhXDMxM1wzMDQhXDMxNFwzMTUCBAYGBgglXDIx NlwzMTZcMzAzIVwyMTBcMzE3BD5cMjA1UgBcMzIwE1wzMTZcMzA0IVwyMTBcMzExFAYHIClcMjY2 XDIwNQhcMzEwPVwyMDRcMzA3AFwzMjEFA1oGB1wzMDYFIVwzMjIGXG5cMzA2BgghCFwyNTcICFwy MTEFPVwyMDRcMzA1AFwyMTFBBT1cMjA0XDI2MABcMjExQVwyMDNcMjYwAFwyMTFBOlwyMDNcMjUx AFwyMTFBQDpcMjAzXDI1MQBcMjExQUBAXDMxMD1cMjAzXDI1MQBcMjExQVwyMTFcMjYyBlwyMDRc MjYwAFwyMTFBXDI2MgFcMjAyfwBcMjExQVwyMDRcMjcxAFwzMjNcMzI0IVwyMTBcMjExXDMxMVwy NDFcMjEwAQhCXDIxMRAFXDI0MVwyMTBcMjY2AlxuXDIwNFwzMzEAXDMxMlwzMDQGB1wzMDYFIQYI BlxuWiRcMjEwKQFcMzExXDIxMVwyMjNcMjEwXDIwNyIgW2J1ZmZlci11bmRvLWxpc3QgdW5kby0t Y29tYmluaW5nLWNoYW5nZS1jYWxscyBpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyBiZWZvcmUt Y2hhbmdlLWZ1bmN0aW9ucyBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIG1hcmtlcnAgbWFya2VyLXBv c2l0aW9uIGNvcHktbWFya2VyIHQgbmlsIHJ1bi1ob29rLXdpdGgtYXJncyBsb2NhbC12YXJpYWJs ZS1wIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMjAzCQBcMzAzFFwyMDINAFwzMDZcMzA0IVwyMTBc MzAwXDIwMxUAXDMwMlwyMTEVXDIwN1wzMDZcMzA1IVwyMDciIFtWMCBWMSBWMiBWMyBiZWZvcmUt Y2hhbmdlLWZ1bmN0aW9ucyBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIGtpbGwtbG9jYWwtdmFyaWFi bGVdIDJdIG1ha2UtbG9jYWwtdmFyaWFibGUgc3ludGF4LXBwc3MtZmx1c2gtY2FjaGUgKHN5bnRh eC1wcHNzLWZsdXNoLWNhY2hlKSBhcHBseSB1bmRvLS13cmFwLWFuZC1ydW4tcHJpbWl0aXZlLXVu ZG8gbWVzc2FnZSAiY29tYmluZS1jaGFuZ2UtY2FsbHM6IGJ1ZmZlci11bmRvLWxpc3QgYnJva2Vu Il0gMTcgKCMkIC4gMTYxMzY1KV0pI0AxMDEzIEV2YWx1YXRlIEJPRFksIHJ1bm5pbmcgdGhlIGNo YW5nZSBob29rcyBqdXN0IG9uY2UuCgpCT0RZIGlzIGEgc2VxdWVuY2Ugb2YgTGlzcCBmb3JtcyB0 byBldmFsdWF0ZS4gIEJFRyBhbmQgRU5EIGJvdW5kCnRoZSByZWdpb24gdGhlIGNoYW5nZSBob29r cyB3aWxsIGJlIHJ1biBmb3IuCgpGaXJzdGx5LCBgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnIGlz IGludm9rZWQgZm9yIHRoZSByZWdpb24KKEJFRyBFTkQpLCB0aGVuIHRoZSBCT0RZIGZvcm1zIGFy ZSBldmFsdWF0ZWQgd2l0aApgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnIGFuZCBgYWZ0ZXItY2hh bmdlLWZ1bmN0aW9ucycgYm91bmQgdG8KbmlsLCBhbmQgZmluYWxseSBgYWZ0ZXItY2hhbmdlLWZ1 bmN0aW9ucycgaXMgaW52b2tlZCBvbiB0aGUKdXBkYXRlZCByZWdpb24uICBUaGUgY2hhbmdlIGhv b2tzIGFyZSBub3QgcnVuIGlmCmBpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcycgaXMgaW5pdGlh bGx5IG5vbi1uaWwuCgpUaGUgcmVzdWx0IG9mIGBjb21iaW5lLWNoYW5nZS1jYWxscycgaXMgdGhl IHZhbHVlIHJldHVybmVkIGJ5IHRoZQpsYXN0IG9mIHRoZSBCT0RZIGZvcm1zIHRvIGJlIGV2YWx1 YXRlZC4gIEJPRFkgbWF5IG5vdCBtYWtlIGEKZGlmZmVyZW50IGJ1ZmZlciBjdXJyZW50LCBleGNl cHQgdGVtcG9yYXJpbHkuICBCT0RZIG1heSBub3QKY2hhbmdlIHRoZSBidWZmZXIgb3V0c2lkZSB0 aGUgc3BlY2lmaWVkIHJlZ2lvbi4gIEl0IG11c3Qgbm90CmNoYW5nZSBgYmVmb3JlLWNoYW5nZS1m dW5jdGlvbnMnIG9yIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zJy4KCkFkZGl0aW9uYWxseSwgdGhl IGJ1ZmZlciBtb2RpZmljYXRpb25zIG9mIEJPRFkgYXJlIHJlY29yZGVkIG9uCnRoZSBidWZmZXIn cyB1bmRvIGxpc3QgYXMgYSBzaW5nbGUgKGFwcGx5IC4uLikgZW50cnkgY29udGFpbmluZwp0aGUg ZnVuY3Rpb24gYHVuZG8tLXdyYXAtYW5kLXJ1bi1wcmltaXRpdmUtdW5kbycuCgooZm4gQkVHIEVO RCAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdjb21iaW5lLWNoYW5nZS1jYWxscyAnKG1hY3JvIC4g I1s2NDIgIlwzMDADA1wzMDFcMzAyBUJCRlwyMDciIFtjb21iaW5lLWNoYW5nZS1jYWxscy0xIGxh bWJkYSBuaWxdIDkgKCMkIC4gMTYzNDQ3KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAz I1wyMTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IGNvbWJpbmUtY2hhbmdlLWNhbGxz IGVkZWJ1Zy1mb3JtLXNwZWMgKGZvcm0gZm9ybSBkZWYtYm9keSkgZnVuY3Rpb24tcHV0IGxpc3At aW5kZW50LWZ1bmN0aW9uIDJdIDQpI0A1ODcgQ2FsbCBgcHJpbWl0aXZlLXVuZG8nIG9uIHRoZSB1 bmRvIGVsZW1lbnRzIGluIExJU1QuCgpUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNh bGxlZCBwdXJlbHkgYnkgYHVuZG8nIGFzIHRoZQpmdW5jdGlvbiBpbiBhbiAoYXBwbHkgREVMVEEg QkVHIEVORCBGVU5OQU1FIC4gQVJHUykgdW5kbwplbGVtZW50LiAgSXQgaW52b2tlcyBgYmVmb3Jl LWNoYW5nZS1mdW5jdGlvbnMnIGFuZApgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucycgb25jZSBlYWNo IGZvciB0aGUgZW50aXJlIHJlZ2lvbiAoQkVHCkVORCkgcmF0aGVyIHRoYW4gb25jZSBmb3IgZWFj aCBpbmRpdmlkdWFsIGNoYW5nZS4KCkFkZGl0aW9uYWxseSB0aGUgZnJlc2ggInJlZG8iIGVsZW1l bnRzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgb24KYGJ1ZmZlci11bmRvLWxpc3QnIHdpbGwgdGhlbXNl bHZlcyBiZSAiZW5jbG9zZWQiIGluCmB1bmRvLS13cmFwLWFuZC1ydW4tcHJpbWl0aXZlLXVuZG8n LgoKVW5kbyBlbGVtZW50cyBvZiB0aGlzIGZvcm0gYXJlIGdlbmVyYXRlZCBieSB0aGUgbWFjcm8K YGNvbWJpbmUtY2hhbmdlLWNhbGxzJy4KCihmbiBCRUcgRU5EIExJU1QpHwooZGVmYWxpYXMgJ3Vu ZG8tLXdyYXAtYW5kLXJ1bi1wcmltaXRpdmUtdW5kbyAjWzc3MSAiXDIxMUNcMzAwBARcMzAxXDMw MgVcIiNcMjA3IiBbY29tYmluZS1jaGFuZ2UtY2FsbHMtMSBtYWtlLWNsb3N1cmUgI1swICJcMzAw XDI0MlwyMDUQAFwzMDBcMzAxXDMwMlwzMDBcMjQyXCJcMjQwXDIxMFwyMDIAAFwyMDciIFtWMCBw cmltaXRpdmUtdW5kbyAxXSA0XV0gMTAgKCMkIC4gMTY0NzU3KV0pI0AxNDYgRXhlY3V0ZSB0aGUg Zm9ybXMgaW4gQk9EWSB3aXRoIFRBQkxFIGFzIHRoZSBjdXJyZW50IGNhc2UgdGFibGUuClRoZSB2 YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZLgoKKGZu IFRBQkxFICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtY2FzZS10YWJsZSAnKG1hY3JvIC4g I1szODUgIlwzMDBcMzAxIVwzMDBcMzAyIVwzMDMCXDMwNEICXDMwNUJEXDMwNlwzMDdcMzEwBghE BgdCQlwzMTEFXDMxMAYIREVFRVwyMDciIFttYWtlLXN5bWJvbCAidGFibGUiICJidWZmZXIiIGxl dCAoKGN1cnJlbnQtY2FzZS10YWJsZSkpICgoY3VycmVudC1idWZmZXIpKSB1bndpbmQtcHJvdGVj dCBwcm9nbiBzZXQtY2FzZS10YWJsZSB3aXRoLWN1cnJlbnQtYnVmZmVyXSAxMiAoIyQgLiAxNjU1 NzMpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3 IiBbZnVuY3Rpb24tcHV0IHdpdGgtY2FzZS10YWJsZSBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1 dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0AxMzUgRXhlY3V0ZSBCT0RZIHdpdGggZGVmYXVsdCBm aWxlIHBlcm1pc3Npb25zIHRlbXBvcmFyaWx5IHNldCB0byBNT0RFUy4KTU9ERVMgaXMgYXMgZm9y IGBzZXQtZGVmYXVsdC1maWxlLW1vZGVzJy4KCihmbiBNT0RFUyAmcmVzdCBCT0RZKR8KKGRlZmFs aWFzICd3aXRoLWZpbGUtbW9kZXMgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMSFcMzAyAVwzMDNC Q1wzMDRcMzA1XDMwNgYHRAYGQkJcMzA2BURFRVwyMDciIFttYWtlLXN5bWJvbCAidW1hc2siIGxl dCAoKGRlZmF1bHQtZmlsZS1tb2RlcykpIHVud2luZC1wcm90ZWN0IHByb2duIHNldC1kZWZhdWx0 LWZpbGUtbW9kZXNdIDkgKCMkIC4gMTY2MTI4KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJc MzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLWZpbGUtbW9kZXMg bGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAMTYzIEV4 ZWN1dGUgQk9EWSB3aXRoIGBkZWZhdWx0LWRpcmVjdG9yeScgYm91bmQgdG8gYW4gZXhpc3Rpbmcg ZGlyZWN0b3J5LgpJZiBgZGVmYXVsdC1kaXJlY3RvcnknIGlzIGFscmVhZHkgYW4gZXhpc3Rpbmcg ZGlyZWN0b3J5LCBpdCdzIG5vdCBjaGFuZ2VkLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMg J3dpdGgtZXhpc3RpbmctZGlyZWN0b3J5ICcobWFjcm8gLiAjWzEyOCAiXDMwMFwzMDECQkJcMjA3 IiBbbGV0ICgoZGVmYXVsdC1kaXJlY3RvcnkgKHNlcS1maW5kIChsYW1iZGEgKGRpcikgKGFuZCBk aXIgKGZpbGUtZXhpc3RzLXAgZGlyKSkpIChsaXN0IGRlZmF1bHQtZGlyZWN0b3J5IChleHBhbmQt ZmlsZS1uYW1lICJ+LyIpIHRlbXBvcmFyeS1maWxlLWRpcmVjdG9yeSAoZ2V0ZW52ICJUTVBESVIi KSAiL3RtcC8iKSAiLyIpKSldIDQgKCMkIC4gMTY2NjA5KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMw MVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLWV4aXN0 aW5nLWRpcmVjdG9yeSBsaXNwLWluZGVudC1mdW5jdGlvbiAwIHB1dCBlZGVidWctZm9ybS1zcGVj IHRdIDUpI0AzOTEgRXhlY3V0ZSB0aGUgQk9EWSBmb3JtcywgcmVzdG9yaW5nIHRoZSBnbG9iYWwg dmFsdWUgb2YgdGhlIG1hdGNoIGRhdGEuClRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUg b2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZLgpOT1RFOiBUaGUgY29udmVudGlvbiBpbiBFbGlzcCBp cyB0aGF0IGFueSBmdW5jdGlvbiwgZXhjZXB0IGZvciBhIGZldwpleGNlcHRpb25zIGxpa2UgY2Fy L2Fzc29jLysvZ290by1jaGFyLCBjYW4gY2xvYmJlciB0aGUgbWF0Y2ggZGF0YSwKc28gYHNhdmUt bWF0Y2gtZGF0YScgc2hvdWxkIG5vcm1hbGx5IGJlIHVzZWQgdG8gc2F2ZSAqeW91ciogbWF0Y2gg ZGF0YQpyYXRoZXIgdGhhbiB5b3VyIGNhbGxlcidzIG1hdGNoIGRhdGEuCgooZm4gJnJlc3QgQk9E WSkfCihkZWZhbGlhcyAnc2F2ZS1tYXRjaC1kYXRhICcobWFjcm8gLiAjWzEyOCAiXDMwMFwzMDEh XDMwMgFcMzAzRENcMzA0XDMwNQVCXDMwNgVcMzA3RUVFXDIwNyIgW21ha2Utc3ltYm9sICJzYXZl ZC1tYXRjaC1kYXRhIiBsZXQgKG1hdGNoLWRhdGEpIHVud2luZC1wcm90ZWN0IHByb2duIHNldC1t YXRjaC1kYXRhIHRdIDkgKCMkIC4gMTY3MTkzKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJc MzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBzYXZlLW1hdGNoLWRhdGEg bGlzcC1pbmRlbnQtZnVuY3Rpb24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAOTY3IFJl dHVybiB0aGUgc3RyaW5nIG9mIHRleHQgbWF0Y2hlZCBieSB0aGUgcHJldmlvdXMgc2VhcmNoIG9y IHJlZ2V4cCBvcGVyYXRpb24uCk5VTSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aGUgcGFyZW50 aGVzaXplZCBzdWItZXhwcmVzc2lvbiBpbiB0aGUgbGFzdApyZWdleHAgd2hvc2UgbWF0Y2ggdG8g cmV0dXJuLiAgWmVybyBtZWFucyByZXR1cm4gdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUKZW50aXJl IHJlZ2V4cCBvciB0aGUgd2hvbGUgc3RyaW5nLgoKVGhlIHJldHVybiB2YWx1ZSBpcyBuaWwgaWYg TlVNdGggcGFpciBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcsIG9yIGlmIHRoZXJlCndlcmUgZmV3ZXIg dGhhbiBOVU0gc3ViLWV4cHJlc3Npb25zIGluIHRoZSByZWdleHAgdXNlZCBpbiB0aGUgc2VhcmNo LgoKU1RSSU5HIHNob3VsZCBiZSBnaXZlbiBpZiB0aGUgbGFzdCBzZWFyY2ggd2FzIGJ5IGBzdHJp bmctbWF0Y2gnCm9uIFNUUklORy4gIElmIFNUUklORyBpcyBuaWwsIHRoZSBjdXJyZW50IGJ1ZmZl ciBzaG91bGQgYmUgdGhlCnNhbWUgYnVmZmVyIGFzIHRoZSBvbmUgaW4gd2hpY2ggdGhlIHNlYXJj aC9tYXRjaCB3YXMgcGVyZm9ybWVkLgoKTm90ZSB0aGF0IG1hbnkgZnVuY3Rpb25zIGluIEVtYWNz IG1vZGlmeSB0aGUgbWF0Y2ggZGF0YSwgc28gdGhpcwpmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVk ICJjbG9zZSIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgZGlkIHRoZQpyZWdleHAgc2VhcmNoLiAgSW4g cGFydGljdWxhciwgc2F5aW5nIChmb3IgaW5zdGFuY2UpCmBNLTogKGxvb2tpbmctYXQgIlswLTld IikgUkVUJyBmb2xsb3dlZCBieSBgTS06IChtYXRjaC1zdHJpbmcgMCkgUkVUJwppbnRlcmFjdGl2 ZWx5IGlzIHNlbGRvbSBtZWFuaW5nZnVsLCBzaW5jZSB0aGUgRW1hY3MgY29tbWFuZCBsb29wCm1h eSBtb2RpZnkgdGhlIG1hdGNoIGRhdGEuCgooZm4gTlVNICZvcHRpb25hbCBTVFJJTkcpHwooZGVm YWxpYXMgJ21hdGNoLXN0cmluZyAjWzUxMyAiAVwyMjRcMjA1FQBcMjExXDIwMxAAXDIxMQJcMjI0 A1wyMjVPXDIwNwFcMjI0AlwyMjV7XDIwNyIgW10gNSAoIyQgLiAxNjc5MjApXSkKKGJ5dGUtY29k ZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBtYXRjaC1zdHJpbmcg c2lkZS1lZmZlY3QtZnJlZSB0XSA0KSNANDg2IFJldHVybiBzdHJpbmcgb2YgdGV4dCBtYXRjaGVk IGJ5IGxhc3Qgc2VhcmNoLCB3aXRob3V0IHRleHQgcHJvcGVydGllcy4KTlVNIHNwZWNpZmllcyB3 aGljaCBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gaW4gdGhlIGxhc3QgcmVnZXhwLgogVmFsdWUg aXMgbmlsIGlmIE5VTXRoIHBhaXIgZGlkbid0IG1hdGNoLCBvciB0aGVyZSB3ZXJlIGxlc3MgdGhh biBOVU0gcGFpcnMuClplcm8gbWVhbnMgdGhlIGVudGlyZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIHdo b2xlIHJlZ2V4cCBvciB3aG9sZSBzdHJpbmcuClNUUklORyBzaG91bGQgYmUgZ2l2ZW4gaWYgdGhl IGxhc3Qgc2VhcmNoIHdhcyBieSBgc3RyaW5nLW1hdGNoJyBvbiBTVFJJTkcuCklmIFNUUklORyBp cyBuaWwsIHRoZSBjdXJyZW50IGJ1ZmZlciBzaG91bGQgYmUgdGhlIHNhbWUgYnVmZmVyCnRoZSBz ZWFyY2gvbWF0Y2ggd2FzIHBlcmZvcm1lZCBpbi4KCihmbiBOVU0gJm9wdGlvbmFsIFNUUklORykf CihkZWZhbGlhcyAnbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgI1s1MTMgIgFcMjI0XDIwNRcA XDIxMVwyMDMRAFwzMDABA1wyMjQEXDIyNSNcMjA3XDMwMQJcMjI0A1wyMjVcIlwyMDciIFtzdWJz dHJpbmctbm8tcHJvcGVydGllcyBidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXNdIDYgKCMk IC4gMTY5MDkwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5j dGlvbi1wdXQgbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgc2lkZS1lZmZlY3QtZnJlZSB0XSA0 KSNAMzQyIFJldHVybiBSRVBMQUNFTUVOVCBhcyBpdCB3aWxsIGJlIGluc2VydGVkIGJ5IGByZXBs YWNlLW1hdGNoJy4KSW4gb3RoZXIgd29yZHMsIGFsbCBiYWNrLXJlZmVyZW5jZXMgaW4gdGhlIGZv cm0gYFwmJyBhbmQgYFxOJwphcmUgc3Vic3RpdHV0ZWQgd2l0aCBhY3R1YWwgc3RyaW5ncyBtYXRj aGVkIGJ5IHRoZSBsYXN0IHNlYXJjaC4KT3B0aW9uYWwgRklYRURDQVNFLCBMSVRFUkFMLCBTVFJJ TkcgYW5kIFNVQkVYUCBoYXZlIHRoZSBzYW1lCm1lYW5pbmcgYXMgZm9yIGByZXBsYWNlLW1hdGNo Jy4KCihmbiBSRVBMQUNFTUVOVCAmb3B0aW9uYWwgRklYRURDQVNFIExJVEVSQUwgU1RSSU5HIFNV QkVYUCkfCihkZWZhbGlhcyAnbWF0Y2gtc3Vic3RpdHV0ZS1yZXBsYWNlbWVudCAjWzEyODEgIlwz MDBcMzAxA1wiXDMwMiBcMzAzXDMwNAJcIlwyMTZcMzA1XDMwMVwyMjRbIVwyMTBcMzA2BgcGBwYH BQYHJSlcMjA3IiBbbWF0Y2gtc3RyaW5nIDAgbWF0Y2gtZGF0YSBtYWtlLWNsb3N1cmUgI1swICJc MzAxXDMwMFwzMDJcIlwyMDciIFtWMCBzZXQtbWF0Y2gtZGF0YSB0XSAzXSBtYXRjaC1kYXRhLS10 cmFuc2xhdGUgcmVwbGFjZS1tYXRjaF0gMTMgKCMkIC4gMTY5ODY3KV0pI0A2NTUgUmV0dXJuIG5v bi1uaWwgaWYgdGV4dCBiZWZvcmUgcG9pbnQgbWF0Y2hlcyByZWd1bGFyIGV4cHJlc3Npb24gUkVH RVhQLgpMaWtlIGBsb29raW5nLWF0JyBleGNlcHQgbWF0Y2hlcyBiZWZvcmUgcG9pbnQsIGFuZCBp cyBzbG93ZXIuCkxJTUlUIGlmIG5vbi1uaWwgc3BlZWRzIHVwIHRoZSBzZWFyY2ggYnkgc3BlY2lm eWluZyBhIG1pbmltdW0Kc3RhcnRpbmcgcG9zaXRpb24sIHRvIGF2b2lkIGNoZWNraW5nIG1hdGNo ZXMgdGhhdCB3b3VsZCBzdGFydApiZWZvcmUgTElNSVQuCgpJZiBHUkVFRFkgaXMgbm9uLW5pbCwg ZXh0ZW5kIHRoZSBtYXRjaCBiYWNrd2FyZHMgYXMgZmFyIGFzCnBvc3NpYmxlLCBzdG9wcGluZyB3 aGVuIGEgc2luZ2xlIGFkZGl0aW9uYWwgcHJldmlvdXMgY2hhcmFjdGVyCmNhbm5vdCBiZSBwYXJ0 IG9mIGEgbWF0Y2ggZm9yIFJFR0VYUC4gIFdoZW4gdGhlIG1hdGNoIGlzCmV4dGVuZGVkLCBpdHMg c3RhcnRpbmcgcG9zaXRpb24gaXMgYWxsb3dlZCB0byBvY2N1ciBiZWZvcmUKTElNSVQuCgpBcyBh IGdlbmVyYWwgcmVjb21tZW5kYXRpb24sIHRyeSB0byBhdm9pZCB1c2luZyBgbG9va2luZy1iYWNr Jwp3aGVyZXZlciBwb3NzaWJsZSwgc2luY2UgaXQgaXMgc2xvdy4KCihmbiBSRUdFWFAgJm9wdGlv bmFsIExJTUlUIEdSRUVEWSkfCihkZWZhbGlhcyAnbG9va2luZy1iYWNrICNbNzY5ICJgXDIxMlwz MDBcMzAxBVwzMDJRBFwzMDMjXDIwNQ4AYCkCXDIwM0gAXDIxMVwyMDNIAFwyMTRlAn1cMjEwXDIx MWVWXDIwMzsAXDIxMlwyMTFiXDIxMFwzMDR1XDIxMFwzMDVcMzAxBgZcMzA2USEpXDIwMzsAXDIx MVNcMjYyAVwyMDIcAFwyMTJcMjExYlwyMTBcMzA1XDMwMQYGXDMwNlEhKlwyMTBcMjExPz9cMjA3 IiBbcmUtc2VhcmNoLWJhY2t3YXJkICJcXCg/OiIgIlxcKVxcPSIgdCAtMSBsb29raW5nLWF0ICJc XClcXCciXSA5ICgjJCAuIDE3MDQ3OCldKQooc2V0LWFkdmVydGlzZWQtY2FsbGluZy1jb252ZW50 aW9uICdsb29raW5nLWJhY2sgJyhyZWdleHAgbGltaXQgJm9wdGlvbmFsIGdyZWVkeSkgIjI1LjEi KSNAODggU2FtZSBhcyBgbG9va2luZy1hdCcgZXhjZXB0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg Y2hhbmdlIHRoZSBtYXRjaCBkYXRhLgoKKGZuIFJFR0VYUCkfCihkZWZhbGlhcyAnbG9va2luZy1h dC1wICNbMjU3ICJcMzAwAVwzMDFcIlwyMDciIFtsb29raW5nLWF0IHRdIDQgKCMkIC4gMTcxNTE5 KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IGxvb2tpbmctYXQtcCBzcGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0 ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0AxMTMgU2FtZSBhcyBgc3RyaW5nLW1hdGNoJyBl eGNlcHQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIG1hdGNoIGRhdGEuCgooZm4g UkVHRVhQIFNUUklORyAmb3B0aW9uYWwgU1RBUlQpHwooZGVmYWxpYXMgJ3N0cmluZy1tYXRjaC1w ICNbNzcwICJcMzAwAwMDXDMwMSRcMjA3IiBbc3RyaW5nLW1hdGNoIHRdIDggKCMkIC4gMTcxODMx KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHN0cmluZy1tYXRjaC1wIHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBi eXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDQwMiBSZXR1cm4gbm9uLW5pbCBpZiBQT1Mg aXMgaW4gYSBub3JtYWwgc3VicmVnZXhwIGNvbnRleHQgaW4gUkVHRVhQLgpBIHN1YnJlZ2V4cCBj b250ZXh0IGlzIG9uZSB3aGVyZSBhIHN1Yi1yZWdleHAgY2FuIGFwcGVhci4KQSBub24tc3VicmVn ZXhwIGNvbnRleHQgaXMgZm9yIGV4YW1wbGUgd2l0aGluIGJyYWNrZXRzLCBvciB3aXRoaW4gYQpy ZXBldGl0aW9uIGJvdW5kcyBvcGVyYXRvciBgXD1cey4uLlx9Jywgb3IgcmlnaHQgYWZ0ZXIgYSBg XCcuCklmIFNUQVJUIGlzIG5vbi1uaWwsIGl0IHNob3VsZCBiZSBhIHBvc2l0aW9uIGluIFJFR0VY UCwgc21hbGxlcgp0aGFuIFBPUywgYW5kIGtub3duIHRvIGJlIGluIGEgc3VicmVnZXhwIGNvbnRl eHQuCgooZm4gUkVHRVhQIFBPUyAmb3B0aW9uYWwgU1RBUlQpHwooZGVmYWxpYXMgJ3N1YnJlZ2V4 cC1jb250ZXh0LXAgI1s3NzAgIlwzMDAxEwBcMzAxAwJcMjA2CwBcMzAyBE9cMzAzXCJcMjEwXDMw NDBcMjA3XDIxMUFAXDMwNVwyMzU/XDIwNyIgWyhpbnZhbGlkLXJlZ2V4cCkgc3RyaW5nLW1hdGNo IDAgIiIgdCAoIlVubWF0Y2hlZCBbIG9yIFteIiAiVW5tYXRjaGVkIFxceyIgIlRyYWlsaW5nIGJh Y2tzbGFzaCIpXSA3ICgjJCAuIDE3MjE3NSldKSNAMjkwIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHNl cGFyYXRvcnMgZm9yIGBzcGxpdC1zdHJpbmcnLgoKQSByZWdleHAgbWF0Y2hpbmcgc3RyaW5ncyBv ZiB3aGl0ZXNwYWNlLiAgTWF5IGJlIGxvY2FsZS1kZXBlbmRlbnQKKGFzIHlldCB1bmltcGxlbWVu dGVkKS4gIFNob3VsZCBub3QgbWF0Y2ggbm9uLWJyZWFraW5nIHNwYWNlcy4KCldhcm5pbmc6IGJp bmRpbmcgdGhpcyB0byBhIGRpZmZlcmVudCB2YWx1ZSBhbmQgdXNpbmcgaXQgYXMgZGVmYXVsdCBp cwpsaWtlbHkgdG8gaGF2ZSB1bmRlc2lyZWQgc2VtYW50aWNzLh8KKGRlZmNvbnN0IHNwbGl0LXN0 cmluZy1kZWZhdWx0LXNlcGFyYXRvcnMgIlsgXGYJXG4NC10rIiAoIyQgLiAxNzI4MDEpKSNAMTY1 NyBTcGxpdCBTVFJJTkcgaW50byBzdWJzdHJpbmdzIGJvdW5kZWQgYnkgbWF0Y2hlcyBmb3IgU0VQ QVJBVE9SUy4KClRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBTVFJJTkcsIGFuZCBlYWNoIG1hdGNo IGZvciBTRVBBUkFUT1JTLCBhcmUKc3BsaXR0aW5nIHBvaW50cy4gIFRoZSBzdWJzdHJpbmdzIG1h dGNoaW5nIFNFUEFSQVRPUlMgYXJlIHJlbW92ZWQsIGFuZAp0aGUgc3Vic3RyaW5ncyBiZXR3ZWVu IHRoZSBzcGxpdHRpbmcgcG9pbnRzIGFyZSBjb2xsZWN0ZWQgYXMgYSBsaXN0LAp3aGljaCBpcyBy ZXR1cm5lZC4KCklmIFNFUEFSQVRPUlMgaXMgbm9uLW5pbCwgaXQgc2hvdWxkIGJlIGEgcmVndWxh ciBleHByZXNzaW9uIG1hdGNoaW5nIHRleHQKdGhhdCBzZXBhcmF0ZXMsIGJ1dCBpcyBub3QgcGFy dCBvZiwgdGhlIHN1YnN0cmluZ3MuICBJZiBuaWwgaXQgZGVmYXVsdHMgdG8KYHNwbGl0LXN0cmlu Zy1kZWZhdWx0LXNlcGFyYXRvcnMnLCBub3JtYWxseSAiWyBcZlx0XG5cclx2XSsiLCBhbmQKT01J VC1OVUxMUyBpcyBmb3JjZWQgdG8gdC4KCklmIE9NSVQtTlVMTFMgaXMgdCwgemVyby1sZW5ndGgg c3Vic3RyaW5ncyBhcmUgb21pdHRlZCBmcm9tIHRoZSBsaXN0IChzbwp0aGF0IGZvciB0aGUgZGVm YXVsdCB2YWx1ZSBvZiBTRVBBUkFUT1JTIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UK YXJlIGVmZmVjdGl2ZWx5IHRyaW1tZWQpLiAgSWYgbmlsLCBhbGwgemVyby1sZW5ndGggc3Vic3Ry aW5ncyBhcmUgcmV0YWluZWQsCndoaWNoIGNvcnJlY3RseSBwYXJzZXMgQ1NWIGZvcm1hdCwgZm9y IGV4YW1wbGUuCgpJZiBUUklNIGlzIG5vbi1uaWwsIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgZXhw cmVzc2lvbiB0byBtYXRjaAp0ZXh0IHRvIHRyaW0gZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQg b2YgZWFjaCBzdWJzdHJpbmcuICBJZiB0cmltbWluZwptYWtlcyB0aGUgc3Vic3RyaW5nIGVtcHR5 LCBpdCBpcyB0cmVhdGVkIGFzIG51bGwuCgpJZiB5b3Ugd2FudCB0byB0cmltIHdoaXRlc3BhY2Ug ZnJvbSB0aGUgc3Vic3RyaW5ncywgdGhlIHJlbGlhYmx5IGNvcnJlY3QKd2F5IGlzIHVzaW5nIFRS SU0uICBNYWtpbmcgU0VQQVJBVE9SUyBtYXRjaCB0aGF0IHdoaXRlc3BhY2UgZ2l2ZXMgaW5jb3Jy ZWN0CnJlc3VsdHMgd2hlbiB0aGVyZSBpcyB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydCBvciBlbmQg b2YgU1RSSU5HLiAgSWYgeW91CnNlZSBzdWNoIGNhbGxzIHRvIGBzcGxpdC1zdHJpbmcnLCBwbGVh c2UgZml4IHRoZW0uCgpOb3RlIHRoYXQgdGhlIGVmZmVjdCBvZiBgKHNwbGl0LXN0cmluZyBTVFJJ TkcpJyBpcyB0aGUgc2FtZSBhcwpgKHNwbGl0LXN0cmluZyBTVFJJTkcgc3BsaXQtc3RyaW5nLWRl ZmF1bHQtc2VwYXJhdG9ycyB0KScuICBJbiB0aGUgcmFyZQpjYXNlIHRoYXQgeW91IHdpc2ggdG8g cmV0YWluIHplcm8tbGVuZ3RoIHN1YnN0cmluZ3Mgd2hlbiBzcGxpdHRpbmcgb24Kd2hpdGVzcGFj ZSwgdXNlIGAoc3BsaXQtc3RyaW5nIFNUUklORyBzcGxpdC1zdHJpbmctZGVmYXVsdC1zZXBhcmF0 b3JzKScuCgpNb2RpZmllcyB0aGUgbWF0Y2ggZGF0YTsgdXNlIGBzYXZlLW1hdGNoLWRhdGEnIGlm IG5lY2Vzc2FyeS4KCihmbiBTVFJJTkcgJm9wdGlvbmFsIFNFUEFSQVRPUlMgT01JVC1OVUxMUyBU UklNKR8KKGRlZmFsaWFzICdzcGxpdC1zdHJpbmcgI1sxMDI1ICICXDIwMwgAAVwyMDIJAFwzMDE/ A1wyMDYPAAhcMzAyXDMwM0NcMzAzQ1wzMDNcMjExQ1wzMDRcMzA1BgcGDQVcMjAzOAAGCFwzMDJc MjI0VVwyMDM4AAYIBg9HV1wyMDM4AAYIVFwyMDI6AAYII1wyMDNqAAUGXGZHV1wyMDNqAFwzMDFc MjYyAwQGBlwyNDBcMjEwA1wzMDJcMjI0XDI0MFwyMTBcMzAyXDIyNVwyNjIGXDIxMQZcZgZcbgZc bgYIBggGByYGXDIxMFwyMDIYAAQGBlwyNDBcMjEwAwZcZkdcMjQwXDIxMFwyMTEGXGYGXG4GXG4G CAYIBgcmBlwyMTABXDI0MlwyMzdcMjA3IiBbc3BsaXQtc3RyaW5nLWRlZmF1bHQtc2VwYXJhdG9y cyB0IDAgbmlsICNbMTU0MiAiBFwyMDMYAFwzMDAFBgcFXDI0MiNcMjExBFwyNDI9XDIwMxcAA1wz MDFcMjI1XDI0MFwyMTBcMjEwA1wyMDQkAAJcMjQyAlwyNDJXXDIwNVsABQNcMjQyA1wyNDJPBVwy MDNIAFwzMDAGBlwzMDJQAlwzMDEjXDIxMVwyMDNHAFwyMTECR1dcMjAzRwABXDMwMQJPXDI2MgJc MjEwBFwyMDRTAFwyMTFHXDMwMVZcMjA1WQABAQNcMjQyQlwyNDBcMjYyAVwyMDciIFtzdHJpbmct bWF0Y2ggMCAiXFwnIl0gMTEgIlxuXG4oZm4gU1RSSU5HIFRSSU0gS0VFUC1OVUxMUyBUSElTLVNU QVJUIFRISVMtRU5EIExJU1QpIl0gc3RyaW5nLW1hdGNoXSAxOSAoIyQgLiAxNzMxNjgpXSkKKGRl ZmFsaWFzICdzdHJpbmctc3BsaXQgJ3NwbGl0LXN0cmluZykjQDM4NyBDb25jYXRlbmF0ZSB0aGUg U1RSSU5HUywgYWRkaW5nIHRoZSBTRVBBUkFUT1IgKGRlZmF1bHQgIiAiKS4KVGhpcyB0cmllcyB0 byBxdW90ZSB0aGUgc3RyaW5ncyB0byBhdm9pZCBhbWJpZ3VpdHkgc3VjaCB0aGF0CiAgKHNwbGl0 LXN0cmluZy1hbmQtdW5xdW90ZSAoY29tYmluZS1hbmQtcXVvdGUtc3RyaW5ncyBzdHJzKSkgPT0g c3RycwpPbmx5IHNvbWUgU0VQQVJBVE9ScyB3aWxsIHdvcmsgcHJvcGVybHkuCgpOb3RlIHRoYXQg dGhpcyBpcyBub3QgaW50ZW5kZWQgdG8gcHJvdGVjdCBTVFJJTkdTIGZyb20KaW50ZXJwcmV0YXRp b24gYnkgc2hlbGxzLCB1c2UgYHNoZWxsLXF1b3RlLWFyZ3VtZW50JyBmb3IgdGhhdC4KCihmbiBT VFJJTkdTICZvcHRpb25hbCBTRVBBUkFUT1IpHwooZGVmYWxpYXMgJ2NvbWJpbmUtYW5kLXF1b3Rl LXN0cmluZ3MgI1s1MTMgIlwyMTFcMjA2BQBcMzAwXDMwMVwzMDICIVBcMzAzXDMwNFwzMDUDXCIF BCNcMjA3IiBbIiAiICJbXFxcIl1cXHwiIHJlZ2V4cC1xdW90ZSBtYXBjb25jYXQgbWFrZS1jbG9z dXJlICNbMjU3ICJcMzAxXDMwMAJcIlwyMDMQAFwzMDJcMzAzXDMwNFwzMDUEI1wzMDJRXDIwN1wy MDciIFtWMCBzdHJpbmctbWF0Y2ggIlwiIiByZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIltcXFwi XSIgIlxcXFxcXCYiXSA2ICJcblxuKGZuIFNUUikiXV0gOCAoIyQgLiAxNzU1NDQpXSkjQDI0NSBT cGxpdCB0aGUgU1RSSU5HIGludG8gYSBsaXN0IG9mIHN0cmluZ3MuCkl0IHVuZGVyc3RhbmRzIEVt YWNzIExpc3AgcXVvdGluZyB3aXRoaW4gU1RSSU5HLCBzdWNoIHRoYXQKICAoc3BsaXQtc3RyaW5n LWFuZC11bnF1b3RlIChjb21iaW5lLWFuZC1xdW90ZS1zdHJpbmdzIHN0cnMpKSA9PSBzdHJzClRo ZSBTRVBBUkFUT1IgcmVnZXhwIGRlZmF1bHRzIHRvICJccy0rIi4KCihmbiBTVFJJTkcgJm9wdGlv bmFsIFNFUEFSQVRPUikfCihkZWZhbGlhcyAnc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlICNbNTEz ICJcMjExXDIwNgUAXDMwMFwzMDFcMzAyBFwiXDIxMVwyMDQTAFwzMDMEA1wzMDQjXDIwN1wzMDUB XDMwNj0/XDIwNSMAXDMwMwVcMzA2BE8EXDMwNCNcMzA3BgYEXCJcMjExQFwzMTAGCANBXDMxMU8G B1wiQlwyNjIBXCJcMjA3IiBbIlxccy0rIiBzdHJpbmctc2VhcmNoICJcIiIgc3BsaXQtc3RyaW5n IHQgYXBwZW5kIDAgcmVhZC1mcm9tLXN0cmluZyBzcGxpdC1zdHJpbmctYW5kLXVucXVvdGUgbmls XSAxMiAoIyQgLiAxNzYyNDMpXSkjQDE3NCBSZXBsYWNlIEZST01DSEFSIHdpdGggVE9DSEFSIGlu IFNUUklORyBlYWNoIHRpbWUgaXQgb2NjdXJzLgpVbmxlc3Mgb3B0aW9uYWwgYXJndW1lbnQgSU5Q TEFDRSBpcyBub24tbmlsLCByZXR1cm4gYSBuZXcgc3RyaW5nLgoKKGZuIEZST01DSEFSIFRPQ0hB UiBTVFJJTkcgJm9wdGlvbmFsIElOUExBQ0UpHwooZGVmYWxpYXMgJ3N1YnN0LWNoYXItaW4tc3Ry aW5nICNbMTAyNyAiAUcBXDIwM1xuAAJcMjAyDQBcMzAwAyEBXDMwMVZcMjAzKQABU1wyNjICXDIx MQJIBgY9XDIwMw0AXDIxMQIGBklcMjEwXDIwMg0AXDIwNyIgW2NvcHktc2VxdWVuY2UgMF0gOSAo IyQgLiAxNzY3ODMpXSkjQDEwOCBSZXBsYWNlIEZST00tU1RSSU5HIHdpdGggVE8tU1RSSU5HIGlu IElOLVNUUklORyBlYWNoIHRpbWUgaXQgb2NjdXJzLgoKKGZuIEZST00tU1RSSU5HIFRPLVNUUklO RyBJTi1TVFJJTkcpHwooZGVmYWxpYXMgJ3N0cmluZy1yZXBsYWNlICNbNzcxICICXDMwMFwyMzJc MjAzCwBcMzAxXDMwMlwzMDNcIlwyMTBcMzA0XDMwNVwyMTFcMzA2BgYFBSNcMjExXDI2MgJcMjAz NwACAVVcMjA0KAADAwJPAkJcMjYyAgQCQlwyNjICXDIxMQYGR1xcXDI2MgNcMjAyDgABXDIwND0A A1wyMDcCBEdVXDIwNEwAAwNcMzA1TwJCXDI2MgJcMzA3XDMxMANcMjM3XCJcMjA3IiBbIiIgc2ln bmFsIHdyb25nLWxlbmd0aC1hcmd1bWVudCAoMCkgMCBuaWwgc3RyaW5nLXNlYXJjaCBhcHBseSBj b25jYXRdIDEwICgjJCAuIDE3NzExOSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wz MDBcMzAxXDMwNFwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgc3RyaW5nLXJlcGxhY2UgcHVy ZSB0IHNpZGUtZWZmZWN0LWZyZWVdIDUpI0AxMDIxIFJlcGxhY2UgYWxsIG1hdGNoZXMgZm9yIFJF R0VYUCB3aXRoIFJFUCBpbiBTVFJJTkcuCgpSZXR1cm4gYSBuZXcgc3RyaW5nIGNvbnRhaW5pbmcg dGhlIHJlcGxhY2VtZW50cy4KCk9wdGlvbmFsIGFyZ3VtZW50cyBGSVhFRENBU0UsIExJVEVSQUwg YW5kIFNVQkVYUCBhcmUgbGlrZSB0aGUKYXJndW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZXMgb2Yg ZnVuY3Rpb24gYHJlcGxhY2UtbWF0Y2gnLiAgSWYgU1RBUlQKaXMgbm9uLW5pbCwgc3RhcnQgcmVw bGFjZW1lbnRzIGF0IHRoYXQgaW5kZXggaW4gU1RSSU5HLCBhbmQgb21pdAp0aGUgZmlyc3QgU1RB UlQgY2hhcmFjdGVycyBvZiBTVFJJTkcgZnJvbSB0aGUgcmV0dXJuIHZhbHVlLgoKUkVQIGlzIGVp dGhlciBhIHN0cmluZyB1c2VkIGFzIHRoZSBORVdURVhUIGFyZyBvZiBgcmVwbGFjZS1tYXRjaCcg b3IgYQpmdW5jdGlvbi4gIElmIGl0IGlzIGEgZnVuY3Rpb24sIGl0IGlzIGNhbGxlZCB3aXRoIHRo ZSBhY3R1YWwgdGV4dCBvZiBlYWNoCm1hdGNoLCBhbmQgaXRzIHZhbHVlIGlzIHVzZWQgYXMgdGhl IHJlcGxhY2VtZW50IHRleHQuICBXaGVuIFJFUCBpcyBjYWxsZWQsCnRoZSBtYXRjaCBkYXRhIGFy ZSB0aGUgcmVzdWx0IG9mIG1hdGNoaW5nIFJFR0VYUCBhZ2FpbnN0IGEgc3Vic3RyaW5nCm9mIFNU UklORywgdGhlIHNhbWUgc3Vic3RyaW5nIHRoYXQgaXMgdGhlIGFjdHVhbCB0ZXh0IG9mIHRoZSBt YXRjaCB3aGljaAppcyBwYXNzZWQgdG8gUkVQIGFzIGl0cyBhcmd1bWVudC4KClRvIHJlcGxhY2Ug b25seSB0aGUgZmlyc3QgbWF0Y2ggKGlmIGFueSksIG1ha2UgUkVHRVhQIG1hdGNoIHVwIHRvIFxc PScKYW5kIHJlcGxhY2UgYSBzdWItZXhwcmVzc2lvbiwgZS5nLgogIChyZXBsYWNlLXJlZ2V4cC1p bi1zdHJpbmcgIlxcKGZvb1xcKS4qXFxcPSciICJiYXIiICIgZm9vIGZvbyIgbmlsIG5pbCAxKQog ICAgPT4gIiBiYXIgZm9vIgoKKGZuIFJFR0VYUCBSRVAgU1RSSU5HICZvcHRpb25hbCBGSVhFRENB U0UgTElURVJBTCBTVUJFWFAgU1RBUlQpHwooZGVmYWxpYXMgJ3JlcGxhY2UtcmVnZXhwLWluLXN0 cmluZyAjWzE3OTUgIgRHAVwyMDYHAFwzMDBcMzAxXDIxMVwyMTFcMjExXDMwMiBcMzAzXDMwNAJc IlwyMTYFBgdXXDIwM3QAXDMwNQYOBg0GCCNcMjAzdABcMzAwXDIyNFwyNjIDXDMwMFwyMjVcMjYy AgEDVVwyMDM5AAYGA1ReXDI2MgJcMzA2A1shXDIxMAYLAwNPXDI2MgRcMzA3Bg07XDIwM1EABg1c MjAyWQAGDVwzMTBcMzAwBgdcIiEGXGYGXGYGBwYNJQZcZgYHBU8GBkJCXDI2MgUBXDI2MgZcMjAy EgAGCwYGBghPBUJcMjYyBVwzMTFcMzEyBgZcMjM3XCIpXDIwNyIgWzAgbmlsIG1hdGNoLWRhdGEg bWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDBcMzAyXCJcMjA3IiBbVjAgc2V0LW1hdGNoLWRhdGEg dF0gM10gc3RyaW5nLW1hdGNoIG1hdGNoLWRhdGEtLXRyYW5zbGF0ZSByZXBsYWNlLW1hdGNoIG1h dGNoLXN0cmluZyBhcHBseSBjb25jYXRdIDIwICgjJCAuIDE3NzY0MyldKSNAMTg2IENvbXBhcmUg U1RSSU5HMSBhbmQgU1RSSU5HMiBjYXNlLWluc2Vuc2l0aXZlbHkuClVwcGVyLWNhc2UgYW5kIGxv d2VyLWNhc2UgbGV0dGVycyBhcmUgdHJlYXRlZCBhcyBlcXVhbC4KVW5pYnl0ZSBzdHJpbmdzIGFy ZSBjb252ZXJ0ZWQgdG8gbXVsdGlieXRlIGZvciBjb21wYXJpc29uLgoKKGZuIFNUUklORzEgU1RS SU5HMikfCihkZWZhbGlhcyAnc3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlICNbNTE0ICJcMzAwAlwz MDFcMzAyBFwzMDFcMzAyXDMwMyYHXDMwMz1cMjA3IiBbY29tcGFyZS1zdHJpbmdzIDAgbmlsIHRd IDEwICgjJCAuIDE3OTE0MyldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMzAx XDMwNFwzMDMjXDMwMFwzMDFcMzA1XDMwNiNcMzA3XDMwMVwzMTBcMzExI1wyMDciIFtmdW5jdGlv bi1wdXQgc3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIHB1cmUgdCBzaWRlLWVmZmVjdC1mcmVlIHNw ZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNykj QDE4NyBSZXR1cm4gbm9uLW5pbCBpZiBQUkVGSVggaXMgYSBwcmVmaXggb2YgU1RSSU5HLgpJZiBJ R05PUkUtQ0FTRSBpcyBub24tbmlsLCB0aGUgY29tcGFyaXNvbiBpcyBkb25lIHdpdGhvdXQgcGF5 aW5nIGF0dGVudGlvbgp0byBjYXNlIGRpZmZlcmVuY2VzLgoKKGZuIFBSRUZJWCBTVFJJTkcgJm9w dGlvbmFsIElHTk9SRS1DQVNFKR8KKGRlZmFsaWFzICdzdHJpbmctcHJlZml4LXAgI1s3NzAgIgJH XDIxMQNHVj9cMjA1GQBcMzAwBFwzMDEDBgZcMzAxBgYGCCYHXDMwMj1cMjA3IiBbY29tcGFyZS1z dHJpbmdzIDAgdF0gMTIgKCMkIC4gMTc5NjY5KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwMFwzMDFcMzA0XDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBzdHJpbmctcHJlZml4 LXAgcHVyZSB0IHNpZGUtZWZmZWN0LWZyZWVdIDUpI0AxODcgUmV0dXJuIG5vbi1uaWwgaWYgU1VG RklYIGlzIGEgc3VmZml4IG9mIFNUUklORy4KSWYgSUdOT1JFLUNBU0UgaXMgbm9uLW5pbCwgdGhl IGNvbXBhcmlzb24gaXMgZG9uZSB3aXRob3V0IHBheWluZwphdHRlbnRpb24gdG8gY2FzZSBkaWZm ZXJlbmNlcy4KCihmbiBTVUZGSVggU1RSSU5HICZvcHRpb25hbCBJR05PUkUtQ0FTRSkfCihkZWZh bGlhcyAnc3RyaW5nLXN1ZmZpeC1wICNbNzcwICIBRwNHWlwyMTFcMzAwWVwyMDUZAFwzMDEEXDMw MlwyMTEGBgVcMzAyBggmB1wzMDM9XDIwNyIgWzAgY29tcGFyZS1zdHJpbmdzIG5pbCB0XSAxMiAo IyQgLiAxODAwOTkpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDMwMVwzMDRc MzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IHN0cmluZy1zdWZmaXgtcCBwdXJlIHQgc2lkZS1l ZmZlY3QtZnJlZV0gNSkjQDU2MiBSZXR1cm4gYSBzdHJpbmcgdGhhdCBjYW4gYmUgc2FmZWx5IGlu c2VydGVkIGluIGxlZnQtdG8tcmlnaHQgdGV4dC4KCk5vcm1hbGx5LCBpbnNlcnRpbmcgYSBzdHJp bmcgd2l0aCByaWdodC10by1sZWZ0IChSVEwpIHNjcmlwdCBpbnRvCmEgYnVmZmVyIG1heSBjYXVz ZSBzb21lIHN1YnNlcXVlbnQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgYXMgcGFydApvZiB0aGUgUlRM IHNlZ21lbnQgKHVzdWFsbHkgdGhpcyBhZmZlY3RzIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMpLgpU aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgdGhhdCBkaXNwbGF5cyBhcyBTVFIgYnV0IGZv cmNlcwpzdWJzZXF1ZW50IHRleHQgdG8gYmUgZGlzcGxheWVkIGFzIGxlZnQtdG8tcmlnaHQuCgpJ ZiBTVFIgY29udGFpbnMgYW55IFJUTCBjaGFyYWN0ZXIsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBh IHN0cmluZwpjb25zaXN0aW5nIG9mIFNUUiBmb2xsb3dlZCBieSBhbiBpbnZpc2libGUgbGVmdC10 by1yaWdodCBtYXJrCihMUk0pIGNoYXJhY3Rlci4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyBTVFIu CgooZm4gU1RSKR8KKGRlZmFsaWFzICdiaWRpLXN0cmluZy1tYXJrLWxlZnQtdG8tcmlnaHQgI1sy NTcgIlwyMTE7XDIwNFxmAFwzMDBcMzAxXDMwMgNEXCJcMjEwXDMwM1wzMDQCXCJcMjAzHQBcMjEx XDMwNVwzMDZcMzA3IVwzMTBcMzExI1BcMjA3XDIwNyIgW3NpZ25hbCB3cm9uZy10eXBlLWFyZ3Vt ZW50IHN0cmluZ3Agc3RyaW5nLW1hdGNoICJcXGNSIiBwcm9wZXJ0aXplIHN0cmluZyA4MjA2IGlu dmlzaWJsZSB0XSA2ICgjJCAuIDE4MDUzOSldKSNAMTgwIFJldHVybiBub24tbmlsIGlmIFNUUklO RzEgaXMgZ3JlYXRlciB0aGFuIFNUUklORzIgaW4gbGV4aWNvZ3JhcGhpYyBvcmRlci4KQ2FzZSBp cyBzaWduaWZpY2FudC4KU3ltYm9scyBhcmUgYWxzbyBhbGxvd2VkOyB0aGVpciBwcmludCBuYW1l cyBhcmUgdXNlZCBpbnN0ZWFkLgoKKGZuIFNUUklORzEgU1RSSU5HMikfCihkZWZhbGlhcyAnc3Ry aW5nLWdyZWF0ZXJwICNbNTE0ICJcMjExAlwyMzFcMjA3IiBbXSA0ICgjJCAuIDE4MTM1MSldKSNA MTIyIEZvcm0gYSByZWdleHAgdG8gZmluZCBGSUxFIGluIGBsb2FkLWhpc3RvcnknLgpGSUxFLCBh IHN0cmluZywgaXMgZGVzY3JpYmVkIGluIHRoZSBmdW5jdGlvbiBgZXZhbC1hZnRlci1sb2FkJy4K CihmbiBGSUxFKR8KKGRlZmFsaWFzICdsb2FkLWhpc3RvcnktcmVnZXhwICNbMjU3ICJcMzAyASFc MjAzCwBcMzAzASFcMjYyAVwzMDIBIVwyMDMVAFwzMDRcMjAyFgBcMzA1XDMwNgIhXDMwNwMhXDIw MyMAXDMxMFwyMDIrAFwzMTFcMzEyXDMwNghcMzEzI1wzMTRRXDMxMVwzMTJcMzA2CVwzMTMjXDMx NVwyNjAGXDIwNyIgW2xvYWQtc3VmZml4ZXMgamthLWNvbXByLWxvYWQtc3VmZml4ZXMgZmlsZS1u YW1lLWFic29sdXRlLXAgZmlsZS10cnVlbmFtZSAiXFxgIiAiXFwoXFxgXFx8L1xcKSIgcmVnZXhw LXF1b3RlIGZpbGUtbmFtZS1leHRlbnNpb24gIiIgIlxcKCIgbWFwY29uY2F0ICJcXHwiICJcXCk/ IiAiXFwpP1xcJyJdIDkgKCMkIC4gMTgxNjA2KV0pI0AxMTcgR2V0IHRoZSBmaXJzdCBlbHQgb2Yg YGxvYWQtaGlzdG9yeScgd2hvc2UgY2FyIG1hdGNoZXMgRklMRS1SRUdFWFAuClJldHVybiBuaWwg aWYgdGhlcmUgaXNuJ3Qgb25lLgoKKGZuIEZJTEUtUkVHRVhQKR8KKGRlZmFsaWFzICdsb2FkLWhp c3RvcnktZmlsZW5hbWUtZWxlbWVudCAjWzI1NyAiCFwyMTFcMjA1BwBcMjExQFwzMDEgXDMwMlwz MDMCXCJcMjE2AlwyMDMuAAFAXDIwMx8AXDMwNAQDQFwiXDIwNC4AAkFcMjYyAwJcMjA1KQACQFwy NjICXDIwMg4AKVwyMTBcMjA3IiBbbG9hZC1oaXN0b3J5IG1hdGNoLWRhdGEgbWFrZS1jbG9zdXJl ICNbMCAiXDMwMVwzMDBcMzAyXCJcMjA3IiBbVjAgc2V0LW1hdGNoLWRhdGEgdF0gM10gc3RyaW5n LW1hdGNoXSA3ICgjJCAuIDE4MjA5NCldKSNAMTU2MyBBcnJhbmdlIHRoYXQgaWYgRklMRSBpcyBs b2FkZWQsIEZPUk0gd2lsbCBiZSBydW4gaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4KSWYgRklMRSBp cyBhbHJlYWR5IGxvYWRlZCwgZXZhbHVhdGUgRk9STSByaWdodCBub3cuCkZPUk0gY2FuIGJlIGFu IEVsaXNwIGV4cHJlc3Npb24gKGluIHdoaWNoIGNhc2UgaXQncyBwYXNzZWQgdG8gYGV2YWwnKSwK b3IgYSBmdW5jdGlvbiAoaW4gd2hpY2ggY2FzZSBpdCdzIHBhc3NlZCB0byBgZnVuY2FsbCcgd2l0 aCBubyBhcmd1bWVudCkuCgpJZiBhIG1hdGNoaW5nIGZpbGUgaXMgbG9hZGVkIGFnYWluLCBGT1JN IHdpbGwgYmUgZXZhbHVhdGVkIGFnYWluLgoKSWYgRklMRSBpcyBhIHN0cmluZywgaXQgbWF5IGJl IGVpdGhlciBhbiBhYnNvbHV0ZSBvciBhIHJlbGF0aXZlIGZpbGUKbmFtZSwgYW5kIG1heSBoYXZl IGFuIGV4dGVuc2lvbiAoZS5nLiAiLmVsIikgb3IgbWF5IGxhY2sgb25lLCBhbmQKYWRkaXRpb25h bGx5IG1heSBvciBtYXkgbm90IGhhdmUgYW4gZXh0ZW5zaW9uIGRlbm90aW5nIGEgY29tcHJlc3Nl ZApmb3JtYXQgKGUuZy4gIi5neiIpLgoKV2hlbiBGSUxFIGlzIGFic29sdXRlLCB0aGlzIGZpcnN0 IGNvbnZlcnRzIGl0IHRvIGEgdHJ1ZSBuYW1lIGJ5IGNoYXNpbmcKc3ltYm9saWMgbGlua3MuICBP bmx5IGEgZmlsZSBvZiB0aGlzIG5hbWUgKHNlZSBuZXh0IHBhcmFncmFwaCByZWdhcmRpbmcKZXh0 ZW5zaW9ucykgd2lsbCB0cmlnZ2VyIHRoZSBldmFsdWF0aW9uIG9mIEZPUk0uICBXaGVuIEZJTEUg aXMgcmVsYXRpdmUsCmEgZmlsZSB3aG9zZSBhYnNvbHV0ZSB0cnVlIG5hbWUgZW5kcyBpbiBGSUxF IHdpbGwgdHJpZ2dlciBldmFsdWF0aW9uLgoKV2hlbiBGSUxFIGxhY2tzIGFuIGV4dGVuc2lvbiwg YSBmaWxlIG5hbWUgd2l0aCBhbnkgZXh0ZW5zaW9uIHdpbGwgdHJpZ2dlcgpldmFsdWF0aW9uLiAg T3RoZXJ3aXNlLCBpdHMgZXh0ZW5zaW9uIG11c3QgbWF0Y2ggRklMRSdzLiAgQSBmdXJ0aGVyCmV4 dGVuc2lvbiBmb3IgYSBjb21wcmVzc2VkIGZvcm1hdCAoZS5nLiAiLmd6Iikgb24gRklMRSB3aWxs IG5vdCBhZmZlY3QKdGhpcyBuYW1lIG1hdGNoaW5nLgoKQWx0ZXJuYXRpdmVseSwgRklMRSBjYW4g YmUgYSBmZWF0dXJlIChpLmUuIGEgc3ltYm9sKSwgaW4gd2hpY2ggY2FzZSBGT1JNCmlzIGV2YWx1 YXRlZCBhdCB0aGUgZW5kIG9mIGFueSBmaWxlIHRoYXQgYHByb3ZpZGUncyB0aGlzIGZlYXR1cmUu CklmIHRoZSBmZWF0dXJlIGlzIHByb3ZpZGVkIHdoZW4gZXZhbHVhdGluZyBjb2RlIG5vdCBhc3Nv Y2lhdGVkIHdpdGggYQpmaWxlLCBGT1JNIGlzIGV2YWx1YXRlZCBpbW1lZGlhdGVseSBhZnRlciB0 aGUgcHJvdmlkZSBzdGF0ZW1lbnQuCgpVc3VhbGx5IEZJTEUgaXMganVzdCBhIGxpYnJhcnkgbmFt ZSBsaWtlICJmb250LWxvY2siIG9yIGEgZmVhdHVyZSBuYW1lCmxpa2UgYGZvbnQtbG9jaycuCgpU aGlzIGZ1bmN0aW9uIG1ha2VzIG9yIGFkZHMgdG8gYW4gZW50cnkgb24gYGFmdGVyLWxvYWQtYWxp c3QnLgoKU2VlIGFsc28gYHdpdGgtZXZhbC1hZnRlci1sb2FkJy4KCihmbiBGSUxFIEZPUk0pHwoo ZGVmYWxpYXMgJ2V2YWwtYWZ0ZXItbG9hZCAjWzUxNCAiATtcMjAzEABcMzAyXDMwMwMhIVwyMTFc MjYyA1wyMDIRAAFcMzA0AQhcIlwzMDUDIVwyMDMfAAJcMjAyJgBcMzA2XDMwN1wzMTAFRQlcIgFc MjA0MgACQ1wyNjICAQhCEAQ7XDIwMz0AXDMxMQMhXDIwMkAAXDMxMgUhXDIwNUUAXDIxMSADOVwy MDROAAFcMjAyUgBcMzEzXDMxNANcIlwyMTEEQVwyMzVcMjA0XgADAUNcMjQ0XDIxMFwyMTBcMjA3 IiBbYWZ0ZXItbG9hZC1hbGlzdCBsZXhpY2FsLWJpbmRpbmcgcHVyZWNvcHkgbG9hZC1oaXN0b3J5 LXJlZ2V4cCBhc3NvYyBmdW5jdGlvbnAgZXZhbCBsYW1iZGEgbmlsIGxvYWQtaGlzdG9yeS1maWxl bmFtZS1lbGVtZW50IGZlYXR1cmVwIG1ha2UtY2xvc3VyZSAjWzAgIglcMjA0BwBcMzAwIFwyMDcJ XDMwMlwzMDMhXDIxMVwzMDRcMzA1AwVcMzAwJE1cMjEwXDMwNlwzMDcCXDMxMCNcMjA3IiBbVjAg bG9hZC1maWxlLW5hbWUgbWFrZS1zeW1ib2wgImV2YWwtYWZ0ZXItbG9hZC1oZWxwZXIiIG1ha2Ut Y2xvc3VyZSAjWzI1NyAiXDIxMVwzMDFcMjMyXDIwNQ0AXDMwM1wzMDRcMzAwXCJcMjEwXDMwMiBc MjA3IiBbVjAgVjEgVjIgcmVtb3ZlLWhvb2sgYWZ0ZXItbG9hZC1mdW5jdGlvbnNdIDQgIlxuXG4o Zm4gRklMRSkiXSBhZGQtaG9vayBhZnRlci1sb2FkLWZ1bmN0aW9ucyBhcHBlbmRdIDhdXSA5ICgj JCAuIDE4MjQ4OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMzAxXDMwNFwz MDUjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgZXZhbC1hZnRlci1sb2FkIGxpc3AtaW5kZW50LWZ1 bmN0aW9uIDEgY29tcGlsZXItbWFjcm8gZXZhbC1hZnRlci1sb2FkLS1hbm9uLWNtYWNyb10gNSkj QDI0IAoKKGZuIFdIT0xFIEZJTEUgRk9STSkfCihkZWZhbGlhcyAnZXZhbC1hZnRlci1sb2FkLS1h bm9uLWNtYWNybyAjWzc3MSAiXDIxMVwyNDJcMzAwPVwyMDMRAFwzMDECXDMwMlwzMDMEQUBFRVwy MDcCXDIwNyIgW3F1b3RlIGV2YWwtYWZ0ZXItbG9hZCBsYW1iZGEgbmlsXSA4ICgjJCAuIDE4NDkx MildKSNAMjY2IEV4ZWN1dGUgQk9EWSBhZnRlciBGSUxFIGlzIGxvYWRlZC4KRklMRSBpcyBub3Jt YWxseSBhIGZlYXR1cmUgbmFtZSwgYnV0IGl0IGNhbiBhbHNvIGJlIGEgZmlsZSBuYW1lLAppbiBj YXNlIHRoYXQgZmlsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBmZWF0dXJlLiAgU2VlIGBldmFsLWFm dGVyLWxvYWQnCmZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGRpZmZlcmVudCBmb3JtcyBvZiBG SUxFIGFuZCB0aGVpciBzZW1hbnRpY3MuCgooZm4gRklMRSAmcmVzdCBCT0RZKR8KKGRlZmFsaWFz ICd3aXRoLWV2YWwtYWZ0ZXItbG9hZCAnKG1hY3JvIC4gI1szODUgIlwzMDACXDMwMVwzMDIEQkJF XDIwNyIgW2V2YWwtYWZ0ZXItbG9hZCBsYW1iZGEgbmlsXSA3ICgjJCAuIDE4NTA4OSldKSkKKGJ5 dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlv bi1wdXQgd2l0aC1ldmFsLWFmdGVyLWxvYWQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRl YnVnLWZvcm0tc3BlYyAoZm9ybSBkZWYtYm9keSldIDUpI0AxMzcgU3BlY2lhbCBob29rIHJ1biBh ZnRlciBsb2FkaW5nIGEgZmlsZS4KRWFjaCBmdW5jdGlvbiB0aGVyZSBpcyBjYWxsZWQgd2l0aCBh IHNpbmdsZSBhcmd1bWVudCwgdGhlIGFic29sdXRlCm5hbWUgb2YgdGhlIGZpbGUganVzdCBsb2Fk ZWQuHwooZGVmdmFyIGFmdGVyLWxvYWQtZnVuY3Rpb25zIG5pbCAoIyQgLiAxODU2MzEpKSNAMjAy IEV2YWx1YXRlIGFsbCBgZXZhbC1hZnRlci1sb2FkJyBmb3JtcywgaWYgYW55LCBmb3IgQUJTLUZJ TEUuCkFCUy1GSUxFLCBhIHN0cmluZywgc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSB0cnVlIG5hbWUg b2YgYSBmaWxlIGp1c3QgbG9hZGVkLgpUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkaXJlY3RseSBm cm9tIHRoZSBDIGNvZGUuCgooZm4gQUJTLUZJTEUpHwooZGVmYWxpYXMgJ2RvLWFmdGVyLWxvYWQt ZXZhbHVhdGlvbiAjWzI1NyAiCFwyMTFcMjAzKQBcMjExQFwyMTFAO1wyMDNcIgBcMjExQANcMzA1 XDMwNgMDA1wzMDckXDI2NlwyMDNcMjAzXCIAXDMxMFwzMTECQVwiXDIxMAFBXDI2NlwyMDJcMjAy AQBcMjEwXDMxMgFcMzA1XDMwNgMDA1wzMDckXDI2NlwyMDNcMjAzXDIyNQBcMzEzASFcMzE0AVwz MTVcMzA2XDMxNgVcIk8JXCJcMzE3XDMyMAJcIlwzMjFcMzIyXDMyMyFcMjAzVwBcMzIzXDMyNARc IlwyMDNcMjIzAFwzMjVcMzAyIVwyMDNcMjAwAFxuXDIwM1wyMDAAXG47XDIwM3cAXDMxMlwzMjZc bgtcIlwzMDVcMzA2AwMDXDMwNyRcMjY2XDIwM1wyMDRcMjIzAFwzMjdcMzMwA1wiXDI2NgVcMjAy XDIyNQBcZlwyMDNcMjE0AFwyMTECIVwyNjYFXDIwMlwyMjUAXDMzMVwzMTVcMzA1AwUkXDIxMFwy NjYEXDMzMlwzMzMCXCJcMjA3IiBbYWZ0ZXItbG9hZC1hbGlzdCBvYmFycmF5IGJ5dGUtY29tcGls ZS1jdXJyZW50LWZpbGUgYnl0ZS1jb21waWxlLXJvb3QtZGlyIG5vbmludGVyYWN0aXZlIG5pbCBz dHJpbmctbWF0Y2ggdCBtYXBjIGZ1bmNhbGwgIi9vYnNvbGV0ZS9bXi9dKlxcJyIgZmlsZS1uYW1l LW5vbmRpcmVjdG9yeSBpbnRlcm4gMCAiXFwuZWxjP1xcPiIgZm9ybWF0ICJQYWNrYWdlICVzIGlz IGRlcHJlY2F0ZWQiICNbMjU3ICJcMzAwXDMwMQJcIlwyMDciIFttZXNzYWdlICIlcyJdIDQgIlxu XG4oZm4gTVNHKSJdIGZib3VuZHAgYnl0ZS1jb21waWxlLXdhcm5pbmctZW5hYmxlZC1wIG9ic29s ZXRlIGJvdW5kcCBleHBhbmQtZmlsZS1uYW1lIGJ5dGUtY29tcGlsZS13YXJuICIlcyIgcnVuLXdp dGgtaWRsZS10aW1lciBydW4taG9vay13aXRoLWFyZ3MgYWZ0ZXItbG9hZC1mdW5jdGlvbnNdIDEz ICgjJCAuIDE4NTgyMSldKSNAMTAzIERpc3BsYXkgZGVsYXllZCB3YXJuaW5ncyBmcm9tIGBkZWxh eWVkLXdhcm5pbmdzLWxpc3QnLgpVc2VkIGZyb20gYGRlbGF5ZWQtd2FybmluZ3MtaG9vaycgKHdo aWNoIHNlZSkuHwooZGVmYWxpYXMgJ2Rpc3BsYXktZGVsYXllZC13YXJuaW5ncyAjWzAgIghcMjM3 XDIxMVwyMDMUAFwyMTFAXDMwMVwzMDICXCJcMjEwAUFcMjY2XDIwMlwyMDICAFwyMTBcMzAzXDIx MRBcMjA3IiBbZGVsYXllZC13YXJuaW5ncy1saXN0IGFwcGx5IGRpc3BsYXktd2FybmluZyBuaWxd IDUgKCMkIC4gMTg2OTI1KV0pI0AxNTYgUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBgZGVsYXllZC13 YXJuaW5ncy1saXN0Jy4KQ29sbGFwc2UgaWRlbnRpY2FsIGFkamFjZW50IHdhcm5pbmdzIGludG8g b25lIChwbHVzIGNvdW50KS4KVXNlZCBmcm9tIGBkZWxheWVkLXdhcm5pbmdzLWhvb2snICh3aGlj aCBzZWUpLh8KKGRlZmFsaWFzICdjb2xsYXBzZS1kZWxheWVkLXdhcm5pbmdzICNbMCAiXDMwMVwz MDJcMjExCFwyMDM8AAhcMjExQRBcMjQyXDI2MgFcMjExCEBcMjMyXDIwMxwAAlRcMjYyA1wyMDID AAJcMzAxVlwyMDM0AFwyMTFcMzAzXDMwNANBQAYGIwJBQUJcMjQxXDIxMFwzMDFcMjYyA1wyMTEC QlwyNjICXDIwMgMAAVwyMzdcMjExEFwyMDciIFtkZWxheWVkLXdhcm5pbmdzLWxpc3QgMSBuaWwg Zm9ybWF0ICIlcyBbJWQgdGltZXNdIl0gOCAoIyQgLiAxODcyMTIpXSkjQDIyMSBOb3JtYWwgaG9v ayBydW4gdG8gcHJvY2VzcyBhbmQgZGlzcGxheSBkZWxheWVkIHdhcm5pbmdzLgpCeSBkZWZhdWx0 LCB0aGlzIGhvb2sgY29udGFpbnMgZnVuY3Rpb25zIHRvIGNvbnNvbGlkYXRlIHRoZQp3YXJuaW5n cyBsaXN0ZWQgaW4gYGRlbGF5ZWQtd2FybmluZ3MtbGlzdCcsIGRpc3BsYXkgdGhlbSwgYW5kIHNl dApgZGVsYXllZC13YXJuaW5ncy1saXN0JyBiYWNrIHRvIG5pbC4fCihkZWZ2YXIgZGVsYXllZC13 YXJuaW5ncy1ob29rICcoY29sbGFwc2UtZGVsYXllZC13YXJuaW5ncyBkaXNwbGF5LWRlbGF5ZWQt d2FybmluZ3MpICgjJCAuIDE4NzYzNCkpI0AxNjYgRGlzcGxheSBhIGRlbGF5ZWQgd2FybmluZy4K QXNpZGUgZnJvbSBnb2luZyB0aHJvdWdoIGBkZWxheWVkLXdhcm5pbmdzLWxpc3QnLCB0aGlzIGlz IGVxdWl2YWxlbnQKdG8gYGRpc3BsYXktd2FybmluZycuCgooZm4gVFlQRSBNRVNTQUdFICZvcHRp b25hbCBMRVZFTCBCVUZGRVItTkFNRSkfCihkZWZhbGlhcyAnZGVsYXktd2FybmluZyAjWzEwMjYg IgMDAwNGCEJcMjExEFwyMDciIFtkZWxheWVkLXdhcm5pbmdzLWxpc3RdIDggKCMkIC4gMTg3OTU5 KV0pI0A0MjkgQWRkIEVMRU1FTlQgdG8gYGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYycuClNlZSBk b2N1bWVudGF0aW9uIGZvciBgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJyBmb3IgdGhlIGtpbmQg b2YgZWxlbWVudHMKdGhhdCBjYW4gYmUgYWRkZWQuCgpJZiBgYnVmZmVyLWludmlzaWJpbGl0eS1z cGVjJyBpc24ndCBhIGxpc3QgYmVmb3JlIGNhbGxpbmcgdGhpcwpmdW5jdGlvbiwgYGJ1ZmZlci1p bnZpc2liaWxpdHktc3BlYycgd2lsbCBhZnRlcndhcmRzIGJlIGEgbGlzdAp3aXRoIHRoZSB2YWx1 ZSBgKHQgRUxFTUVOVCknLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRleHQgZXhpc3RzCnRoYXQgaW52 aXNpYmlsaXR5IHZhbHVlcyB0aGF0IGFyZW4ndCBlaXRoZXIgdCBvciBFTEVNRU5ULCB0aGF0CnRl eHQgd2lsbCBiZWNvbWUgdmlzaWJsZS4KCihmbiBFTEVNRU5UKR8KKGRlZmFsaWFzICdhZGQtdG8t aW52aXNpYmlsaXR5LXNwZWMgI1syNTcgIghcMzAxPVwyMDMJAFwzMDFDEFwyMTEIQlwyMTEQXDIw NyIgW2J1ZmZlci1pbnZpc2liaWxpdHktc3BlYyB0XSAzICgjJCAuIDE4ODIyMyldKSNAMzAyIFJl bW92ZSBFTEVNRU5UIGZyb20gYGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYycuCklmIGBidWZmZXIt aW52aXNpYmlsaXR5LXNwZWMnIGlzbid0IGEgbGlzdCBiZWZvcmUgY2FsbGluZyB0aGlzCmZ1bmN0 aW9uLCBpdCB3aWxsIGJlIG1hZGUgaW50byBhIGxpc3QgY29udGFpbmluZyBqdXN0IHQgYXMgdGhl Cm9ubHkgbGlzdCBtZW1iZXIuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGV4dCBleGlzdHMgd2l0aCBu b24tdAppbnZpc2liaWxpdHkgdmFsdWVzLCB0aGF0IHRleHQgd2lsbCBiZWNvbWUgdmlzaWJsZS4K CihmbiBFTEVNRU5UKR8KKGRlZmFsaWFzICdyZW1vdmUtZnJvbS1pbnZpc2liaWxpdHktc3BlYyAj WzI1NyAiCDpcMjAzXGYAXDMwMQEIXCJcMjAyDgBcMzAyQ1wyMTEQXDIwNyIgW2J1ZmZlci1pbnZp c2liaWxpdHktc3BlYyBkZWxldGUgdF0gNCAoIyQgLiAxODg3ODIpXSkjQDI1MSBFdmFsdWF0ZSBC T0RZIHdpdGggc3ludGF4IHRhYmxlIG9mIGN1cnJlbnQgYnVmZmVyIHNldCB0byBUQUJMRS4KVGhl IHN5bnRheCB0YWJsZSBvZiB0aGUgY3VycmVudCBidWZmZXIgaXMgc2F2ZWQsIEJPRFkgaXMgZXZh bHVhdGVkLCBhbmQgdGhlCnNhdmVkIHRhYmxlIGlzIHJlc3RvcmVkLCBldmVuIGluIGNhc2Ugb2Yg YW4gYWJub3JtYWwgZXhpdC4KVmFsdWUgaXMgd2hhdCBCT0RZIHJldHVybnMuCgooZm4gVEFCTEUg JnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1zeW50YXgtdGFibGUgJyhtYWNybyAuICNbMzg1 ICJcMzAwXDMwMSFcMzAwXDMwMiFcMzAzAlwzMDRCAlwzMDVCRFwzMDZcMzA3XDMxMAYIRAYHQkJc MzExXDMxMgYGRFwzMTAGCERFRUVcMjA3IiBbbWFrZS1zeW1ib2wgInRhYmxlIiAiYnVmZmVyIiBs ZXQgKChzeW50YXgtdGFibGUpKSAoKGN1cnJlbnQtYnVmZmVyKSkgdW53aW5kLXByb3RlY3QgcHJv Z24gc2V0LXN5bnRheC10YWJsZSBzYXZlLWN1cnJlbnQtYnVmZmVyIHNldC1idWZmZXJdIDEyICgj JCAuIDE4OTIzMCldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMjEwXDMwNFwzMDFc MzA1XDMwNiNcMzAwXDIwNyIgW3B1dCB3aXRoLXN5bnRheC10YWJsZSBlZGVidWctZm9ybS1zcGVj IHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDFdIDQpI0AxNTkgUmV0dXJuIGEg bmV3IHN5bnRheCB0YWJsZS4KQ3JlYXRlIGEgc3ludGF4IHRhYmxlIHRoYXQgaW5oZXJpdHMgZnJv bSBPTERUQUJMRSAoaWYgbm9uLW5pbCkgb3IKZnJvbSBgc3RhbmRhcmQtc3ludGF4LXRhYmxlJyBv dGhlcndpc2UuCgooZm4gJm9wdGlvbmFsIE9MRFRBQkxFKR8KKGRlZmFsaWFzICdtYWtlLXN5bnRh eC10YWJsZSAjWzI1NiAiXDMwMFwzMDFcMzAyXCJcMzAzAQNcMjA2XGYAXDMwNCBcIlwyMTBcMjA3 IiBbbWFrZS1jaGFyLXRhYmxlIHN5bnRheC10YWJsZSBuaWwgc2V0LWNoYXItdGFibGUtcGFyZW50 IHN0YW5kYXJkLXN5bnRheC10YWJsZV0gNSAoIyQgLiAxODk5MTUpXSkjQDEzMSBSZXR1cm4gdGhl IHJhdyBzeW50YXggZGVzY3JpcHRvciBmb3IgdGhlIGNoYXIgYWZ0ZXIgUE9TLgpJZiBQT1MgaXMg b3V0c2lkZSB0aGUgYnVmZmVyJ3MgYWNjZXNzaWJsZSBwb3J0aW9uLCByZXR1cm4gbmlsLgoKKGZu IFBPUykfCihkZWZhbGlhcyAnc3ludGF4LWFmdGVyICNbMjU3ICJcMjExZVdcMjA2CQBcMjExZFk/ XDIwNSkACFwyMDUVAFwzMDEBXDMwMlwiXDIxMTpcMjAzHgBcMjExXDIwMicAXDIxMVwyMDYkAFwz MDIgAmZIXDI2MgFcMjA3IiBbcGFyc2Utc2V4cC1sb29rdXAtcHJvcGVydGllcyBnZXQtY2hhci1w cm9wZXJ0eSBzeW50YXgtdGFibGVdIDQgKCMkIC4gMTkwMjU2KV0pI0AyODkgUmV0dXJuIHRoZSBj b2RlIGZvciB0aGUgc3ludGF4IGNsYXNzIGRlc2NyaWJlZCBieSBTWU5UQVguCgpTWU5UQVggc2hv dWxkIGJlIGEgcmF3IHN5bnRheCBkZXNjcmlwdG9yOyB0aGUgcmV0dXJuIHZhbHVlIGlzIGEKaW50 ZWdlciB0aGF0IGVuY29kZXMgdGhlIGNvcnJlc3BvbmRpbmcgc3ludGF4IGNsYXNzLiAgU2VlIElu Zm8Kbm9kZSBgKGVsaXNwKVN5bnRheCBUYWJsZSBJbnRlcm5hbHMnIGZvciBhIGxpc3Qgb2YgY29k ZXMuCgpJZiBTWU5UQVggaXMgbmlsLCByZXR1cm4gbmlsLgoKKGZuIFNZTlRBWCkfCihkZWZhbGlh cyAnc3ludGF4LWNsYXNzICNbMjU3ICJcMjExXDIwNQkAXDMwMAFAXDMwMVwiXDIwNyIgW2xvZ2Fu ZCA2NTUzNV0gNCAoIyQgLiAxOTA1OTYpXSkjQDEyOCBVc2VkIGluIGBmb3J3YXJkLXdvcmQtc3Ry aWN0bHknIGFuZCBgYmFja3dhcmQtd29yZC1zdHJpY3RseScKdG8gY291bnRlcm1hbmQgdGhlIGVm ZmVjdCBvZiBgZmluZC13b3JkLWJvdW5kYXJ5LWZ1bmN0aW9uLXRhYmxlJy4fCihkZWZ2YXIgd29y ZC1tb3ZlLWVtcHR5LWNoYXItdGFibGUgbmlsICgjJCAuIDE5MDk4MikpI0A0NzEgTW92ZSBwb2lu dCBmb3J3YXJkIEFSRyB3b3JkcyAoYmFja3dhcmQgaWYgQVJHIGlzIG5lZ2F0aXZlKS4KSWYgQVJH IGlzIG9taXR0ZWQgb3IgbmlsLCBtb3ZlIHBvaW50IGZvcndhcmQgb25lIHdvcmQuCk5vcm1hbGx5 IHJldHVybnMgdC4KSWYgYW4gZWRnZSBvZiB0aGUgYnVmZmVyIG9yIGEgZmllbGQgYm91bmRhcnkg aXMgcmVhY2hlZCwgcG9pbnQgaXMgbGVmdCB0aGVyZQphbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMg bmlsLiAgRmllbGQgYm91bmRhcmllcyBhcmUgbm90IG5vdGljZWQgaWYKYGluaGliaXQtZmllbGQt dGV4dC1tb3Rpb24nIGlzIG5vbi1uaWwuCgpUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGZvcndhcmQt d29yZCcsIGJ1dCBpdCBpcyBub3QgYWZmZWN0ZWQKYnkgYGZpbmQtd29yZC1ib3VuZGFyeS1mdW5j dGlvbi10YWJsZScuICBJdCBpcyBhbHNvIG5vdCBpbnRlcmFjdGl2ZS4KCihmbiAmb3B0aW9uYWwg QVJHKR8KKGRlZmFsaWFzICdmb3J3YXJkLXdvcmQtc3RyaWN0bHkgI1syNTYgIlwzMDIIIVwyMDNc bgAIXDIwMg8AXDMwM1wzMDQhXDIxMRAZXDIxMVwyMDYVAFwzMDV2KVwyMDciIFt3b3JkLW1vdmUt ZW1wdHktY2hhci10YWJsZSBmaW5kLXdvcmQtYm91bmRhcnktZnVuY3Rpb24tdGFibGUgY2hhci10 YWJsZS1wIG1ha2UtY2hhci10YWJsZSBuaWwgMV0gMyAoIyQgLiAxOTExNjkpXSkjQDMxMCBNb3Zl IGJhY2t3YXJkIHVudGlsIGVuY291bnRlcmluZyB0aGUgYmVnaW5uaW5nIG9mIGEgd29yZC4KV2l0 aCBhcmd1bWVudCBBUkcsIGRvIHRoaXMgdGhhdCBtYW55IHRpbWVzLgpJZiBBUkcgaXMgb21pdHRl ZCBvciBuaWwsIG1vdmUgcG9pbnQgYmFja3dhcmQgb25lIHdvcmQuCgpUaGlzIGZ1bmN0aW9uIGlz IGxpa2UgYGZvcndhcmQtd29yZCcsIGJ1dCBpdCBpcyBub3QgYWZmZWN0ZWQKYnkgYGZpbmQtd29y ZC1ib3VuZGFyeS1mdW5jdGlvbi10YWJsZScuICBJdCBpcyBhbHNvIG5vdCBpbnRlcmFjdGl2ZS4K CihmbiAmb3B0aW9uYWwgQVJHKR8KKGRlZmFsaWFzICdiYWNrd2FyZC13b3JkLXN0cmljdGx5ICNb MjU2ICJcMzAyCCFcMjAzXG4ACFwyMDIPAFwzMDNcMzA0IVwyMTEQGVwyMTFcMjA2FQBcMzA1W3Yp XDIwNyIgW3dvcmQtbW92ZS1lbXB0eS1jaGFyLXRhYmxlIGZpbmQtd29yZC1ib3VuZGFyeS1mdW5j dGlvbi10YWJsZSBjaGFyLXRhYmxlLXAgbWFrZS1jaGFyLXRhYmxlIG5pbCAxXSAzICgjJCAuIDE5 MTg1OCldKSNAMjczIE1vdmUgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgbmV4dCBzZXF1ZW5jZSBv ZiB3aGl0ZXNwYWNlIGNoYXJzLgpFYWNoIHN1Y2ggc2VxdWVuY2UgbWF5IGJlIGEgc2luZ2xlIG5l d2xpbmUsIG9yIGEgc2VxdWVuY2Ugb2YKY29uc2VjdXRpdmUgc3BhY2UgYW5kL29yIHRhYiBjaGFy YWN0ZXJzLgpXaXRoIHByZWZpeCBhcmd1bWVudCBBUkcsIGRvIGl0IEFSRyB0aW1lcyBpZiBwb3Np dGl2ZSwgb3IgbW92ZQpiYWNrd2FyZHMgQVJHIHRpbWVzIGlmIG5lZ2F0aXZlLgoKKGZuIEFSRykf CihkZWZhbGlhcyAnZm9yd2FyZC13aGl0ZXNwYWNlICNbMjU3ICJcMzAwASFcMjAzDQBcMzAxXDMw MlwzMDNcMzA0BCRcMjA3XDIxMVwzMDVXXDIwNS4AXDMwNlwzMDJcMzAzXDMwNCNcMjAzJwBcMzA1 XDIyNGZcMzA3PVwyMDQnAFwzMTBcMzAzeFwyMTBcMjExVFwyNjIBXDIwMg0AXDIwNyIgW25hdG51 bXAgcmUtc2VhcmNoLWZvcndhcmQgIlsgCV0rXFx8XG4iIG5pbCBtb3ZlIDAgcmUtc2VhcmNoLWJh Y2t3YXJkIDEwICIgCSJdIDYgKCMkIC4gMTkyMzg4KSAiXnAiXSkjQDI4MyBNb3ZlIHBvaW50IHRv IHRoZSBuZXh0IHBvc2l0aW9uIHRoYXQgaXMgdGhlIGVuZCBvZiBhIHN5bWJvbC4KQSBzeW1ib2wg aXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgaW4gZWl0aGVyIHRoZQp3b3Jk IGNvbnN0aXR1ZW50IG9yIHN5bWJvbCBjb25zdGl0dWVudCBzeW50YXggY2xhc3MuCldpdGggcHJl Zml4IGFyZ3VtZW50IEFSRywgZG8gaXQgQVJHIHRpbWVzIGlmIHBvc2l0aXZlLCBvciBtb3ZlCmJh Y2t3YXJkcyBBUkcgdGltZXMgaWYgbmVnYXRpdmUuCgooZm4gQVJHKR8KKGRlZmFsaWFzICdmb3J3 YXJkLXN5bWJvbCAjWzI1NyAiXDMwMAEhXDIwMw0AXDMwMVwzMDJcMzAzXDMwNAQkXDIwN1wyMTFc MzA1V1wyMDUmAFwzMDZcMzAyXDMwM1wzMDQjXDIwMx8AXDMwN1wzMTAhXDIxMFwyMTFUXDI2MgFc MjAyDQBcMjA3IiBbbmF0bnVtcCByZS1zZWFyY2gtZm9yd2FyZCAiXFwoXFxzd1xcfFxcc19cXCkr IiBuaWwgbW92ZSAwIHJlLXNlYXJjaC1iYWNrd2FyZCBza2lwLXN5bnRheC1iYWNrd2FyZCAid18i XSA2ICgjJCAuIDE5MjkzMikgIl5wIl0pI0AxNzYgTW92ZSBwb2ludCBwYXN0IGFsbCBjaGFyYWN0 ZXJzIHdpdGggdGhlIHNhbWUgc3ludGF4IGNsYXNzLgpXaXRoIHByZWZpeCBhcmd1bWVudCBBUkcs IGRvIGl0IEFSRyB0aW1lcyBpZiBwb3NpdGl2ZSwgb3IgbW92ZQpiYWNrd2FyZHMgQVJHIHRpbWVz IGlmIG5lZ2F0aXZlLgoKKGZuICZvcHRpb25hbCBBUkcpHwooZGVmYWxpYXMgJ2ZvcndhcmQtc2Ft ZS1zeW50YXggI1syNTYgIlwyMTFcMjA0BwBcMzAwXDI2MgFcMjExXDMwMVdcMjAzHQBcMzAyXDMw M2BTZnohIVwyMTBcMjExVFwyNjIBXDIwMgcAXDIxMVwzMDFWXDIwNTIAXDMwNFwzMDNcMzA1Znoh IVwyMTBcMjExU1wyNjIBXDIwMh0AXDIwNyIgWzEgMCBza2lwLXN5bnRheC1iYWNrd2FyZCBjaGFy LXRvLXN0cmluZyBza2lwLXN5bnRheC1mb3J3YXJkIG5pbF0gNCAoIyQgLiAxOTM0ODgpICJecCJd KQooZGVmdmFyIHRleHQtY2xvbmUtLW1haW50YWluaW5nIG5pbCkjQDE3NSBQcm9wYWdhdGUgdGhl IGNoYW5nZXMgbWFkZSB1bmRlciB0aGUgb3ZlcmxheSBPTDEgdG8gdGhlIG90aGVyIGNsb25lcy4K VGhpcyBpcyB1c2VkIG9uIHRoZSBgbW9kaWZpY2F0aW9uLWhvb2tzJyBwcm9wZXJ0eSBvZiB0ZXh0 IGNsb25lcy4KCihmbiBPTDEgQUZURVIgQkVHIEVORCAmb3B0aW9uYWwgTEVOKR8KKGRlZmFsaWFz ICd0ZXh0LWNsb25lLS1tYWludGFpbiAjWzEyODQgIgNcMjA1CAEIP1wyMDUIAQk/XDIwNQgBXDMw MgUhXDIwNQgBXDMwMwVcMzA0XCJcMjAzHwBcMzA1XDIwMiAAXDMwNgNcMzAyBgchAlxcXVwyNjIE AlwzMDcGByECWl5cMjYyAwMDWFwyMDUGAVwyMTJcMzAzBgZcMzEwXCJcMjAzXDI0NQBcMzAyBgYh AVxcXDMwNwYHIQJaAWJcMjEwXDMxMSBcMzEyXDMxMwJcIlwyMTZcMzE0XDMwMwZcblwzMTBcIgNc MzE1I1wyMDRrAAJcMjYyBlwyMDJcMjQyAFwzMDZcMjI1AldcMjAzXDIwNgAFXDMwNlwyMjVeXDI2 MgZcMzE2BglcMzAyBgshXDMwNlwyMjUGB1xcI1wyMTBcMzA2XDIyNANWXDIwM1wyNDIAXDMwNlwy MjQGB11cMjYyB1wzMTYGCVwzMDZcMjI0BgZaXDMwNwZcZiEjXDIxMClcMjY2AwNcMzAyBgchWlwz MDcGByEEWgUFe1wzMTVcMjExGVwzMDMGXG5cMzE3XCJcMjExXDIwM1wzNzEAXDIxMUBcMzA3ASEG XGYCPVwyMDRcMzYxAFwyMTFcMjAzXDM2MQBcMzIwXDI2MgRcMzAyAiEGB1xcXDMwNwMhBgdaYlwy MTBcMjExYFZcMjA0XDM2MABcMjEyBWMpXDIxMFwyMTFgfFwyMTBcMjEwXDIxMAFBXDI2NlwyMDJc MjAyXDI3NABcMjEwXDIxMVwyMDUCAVwzMjEGXG4hKVwyNjZcMjA0KVwyNjIBXDIwNyIgW3VuZG8t aW4tcHJvZ3Jlc3MgdGV4dC1jbG9uZS0tbWFpbnRhaW5pbmcgb3ZlcmxheS1zdGFydCBvdmVybGF5 LWdldCB0ZXh0LWNsb25lLXNwcmVhZHAgMSAwIG92ZXJsYXktZW5kIHRleHQtY2xvbmUtc3ludGF4 IG1hdGNoLWRhdGEgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDBcMzAyXCJcMjA3IiBbVjAgc2V0 LW1hdGNoLWRhdGEgdF0gM10gcmUtc2VhcmNoLWZvcndhcmQgdCBtb3ZlLW92ZXJsYXkgdGV4dC1j bG9uZXMgbmlsIGRlbGV0ZS1vdmVybGF5XSAxNiAoIyQgLiAxOTM5NTgpXSkjQDYyNiBDcmVhdGUg YSB0ZXh0IGNsb25lIG9mIFNUQVJULi4uRU5EIGF0IHBvaW50LgpUZXh0IGNsb25lcyBhcmUgY2h1 bmtzIG9mIHRleHQgdGhhdCBhcmUgYXV0b21hdGljYWxseSBrZXB0IGlkZW50aWNhbDoKY2hhbmdl cyBkb25lIHRvIG9uZSBvZiB0aGUgY2xvbmVzIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRl ZCB0byB0aGUgb3RoZXIuCgpUaGUgYnVmZmVyJ3MgY29udGVudCBhdCBwb2ludCBpcyBhc3N1bWVk IHRvIGJlIGFscmVhZHkgaWRlbnRpY2FsIHRvCnRoZSBvbmUgYmV0d2VlbiBTVEFSVCBhbmQgRU5E LgpJZiBTWU5UQVggaXMgcHJvdmlkZWQgaXQncyBhIHJlZ2V4cCB0aGF0IGRlc2NyaWJlcyB0aGUg cG9zc2libGUgdGV4dCBvZgp0aGUgY2xvbmVzOyB0aGUgY2xvbmUgd2lsbCBiZSBzaHJ1bmsgb3Ig a2lsbGVkIGlmIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdAppdHMgdGV4dCBtYXRjaGVzIHRoZSBy ZWdleHAuCklmIFNQUkVBRFAgaXMgbm9uLW5pbCBpdCBpbmRpY2F0ZXMgdGhhdCB0ZXh0IGluc2Vy dGVkIGJlZm9yZS9hZnRlciB0aGUKY2xvbmUgc2hvdWxkIGJlIGluY29ycG9yYXRlZCBpbiB0aGUg Y2xvbmUuCgooZm4gU1RBUlQgRU5EICZvcHRpb25hbCBTUFJFQURQIFNZTlRBWCkfCihkZWZhbGlh cyAndGV4dC1jbG9uZS1jcmVhdGUgI1sxMDI2ICJgAwVaXFwCXDIwMxMAb1wyMDQTAARlWFwyMDMX AFwzMDBcMjAyGABcMzAxA1wyMDMoAAFkWVwyMDQoAAVkWVwyMDMsAFwzMDBcMjAyLQBcMzAxXDMw MgYHA1oGBwNcXFwzMDNcMzA0JFwzMDJgBFoFBFxcXDMwM1wzMDQkAQFEXDMwNQNcMzA2XDMwNyNc MjEwBgdcMjAzVwBcMzA1A1wzMTBcMzA0I1wyMTAGBlwyMDNjAFwzMDUDXDMxMQYJI1wyMTBcMzA1 A1wzMTJcMzA0I1wyMTBcMzA1A1wzMTMDI1wyMTBcMzA1AlwzMDZcMzE0I1wyMTAGB1wyMDNcMjAw AFwzMDUCXDMxMFwzMDQjXDIxMAYGXDIwM1wyMTQAXDMwNQJcMzExBgkjXDIxMFwzMDUCXDMxMlwz MDQjXDIxMFwzMDUCXDMxMwMjXDIwNyIgWzAgMSBtYWtlLW92ZXJsYXkgbmlsIHQgb3ZlcmxheS1w dXQgbW9kaWZpY2F0aW9uLWhvb2tzICh0ZXh0LWNsb25lLS1tYWludGFpbikgdGV4dC1jbG9uZS1z cHJlYWRwIHRleHQtY2xvbmUtc3ludGF4IGV2YXBvcmF0ZSB0ZXh0LWNsb25lcyAodGV4dC1jbG9u ZS0tbWFpbnRhaW4pXSAxNCAoIyQgLiAxOTUwNDcpXSkjQDEzNTggRGVmaW5lIGEgc3ltYm9sIHRv IGlkZW50aWZ5IGEgbWFpbC1zZW5kaW5nIHBhY2thZ2UgZm9yIGBtYWlsLXVzZXItYWdlbnQnLgoK U1lNQk9MIGNhbiBiZSBhbnkgTGlzcCBzeW1ib2wuICBJdHMgZnVuY3Rpb24gZGVmaW5pdGlvbiBh bmQvb3IKdmFsdWUgYXMgYSB2YXJpYWJsZSBkbyBub3QgbWF0dGVyIGZvciB0aGlzIHVzYWdlOyB3 ZSB1c2Ugb25seSBjZXJ0YWluCnByb3BlcnRpZXMgb24gaXRzIHByb3BlcnR5IGxpc3QsIHRvIGVu Y29kZSB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLgoKQ09NUE9TRUZVTkMgaXMgcHJvZ3JhbSBj YWxsYWJsZSBmdW5jdGlvbiB0aGF0IGNvbXBvc2VzIGFuIG91dGdvaW5nCm1haWwgbWVzc2FnZSBi dWZmZXIuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgdXAgdGhlIGJhc2ljcyBvZiB0aGUKYnVm ZmVyIHdpdGhvdXQgcmVxdWlyaW5nIHVzZXIgaW50ZXJhY3Rpb24uICBJdCBzaG91bGQgcG9wdWxh dGUgdGhlCnN0YW5kYXJkIG1haWwgaGVhZGVycywgbGVhdmluZyB0aGUgYHRvOicgYW5kIGBzdWJq ZWN0OicgaGVhZGVycyBibGFuawpieSBkZWZhdWx0LgoKQ09NUE9TRUZVTkMgc2hvdWxkIGFjY2Vw dCBzZXZlcmFsIG9wdGlvbmFsIGFyZ3VtZW50cy0tdGhlIHNhbWUKYXJndW1lbnRzIHRoYXQgYGNv bXBvc2UtbWFpbCcgdGFrZXMuICBTZWUgdGhhdCBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24uCgpT RU5ERlVOQyBpcyB0aGUgY29tbWFuZCBhIHVzZXIgd291bGQgcnVuIHRvIHNlbmQgdGhlIG1lc3Nh Z2UuCgpPcHRpb25hbCBBQk9SVEZVTkMgaXMgdGhlIGNvbW1hbmQgYSB1c2VyIHdvdWxkIHJ1biB0 byBhYm9ydCB0aGUKbWVzc2FnZS4gIEZvciBtYWlsIHBhY2thZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBh IHNlcGFyYXRlIGFib3J0IGZ1bmN0aW9uLAp0aGlzIGNhbiBiZSBga2lsbC1idWZmZXInICh0aGUg ZXF1aXZhbGVudCBvZiBvbWl0dGluZyB0aGlzIGFyZ3VtZW50KS4KCk9wdGlvbmFsIEhPT0tWQVIg aXMgYSBob29rIHZhcmlhYmxlIHRoYXQgZ2V0cyBydW4gYmVmb3JlIHRoZSBtZXNzYWdlCmlzIGFj dHVhbGx5IHNlbnQuICBDYWxsZXJzIHRoYXQgdXNlIHRoZSBgbWFpbC11c2VyLWFnZW50JyBtYXkK aW5zdGFsbCBhIGhvb2sgZnVuY3Rpb24gdGVtcG9yYXJpbHkgb24gdGhpcyBob29rIHZhcmlhYmxl LgpJZiBIT09LVkFSIGlzIG5pbCwgYG1haWwtc2VuZC1ob29rJyBpcyB1c2VkLgoKVGhlIHByb3Bl cnRpZXMgdXNlZCBvbiBTWU1CT0wgYXJlIGBjb21wb3NlZnVuYycsIGBzZW5kZnVuYycsCmBhYm9y dGZ1bmMnLCBhbmQgYGhvb2t2YXInLgoKKGZuIFNZTUJPTCBDT01QT1NFRlVOQyBTRU5ERlVOQyAm b3B0aW9uYWwgQUJPUlRGVU5DIEhPT0tWQVIpHwooZGVmYWxpYXMgJ2RlZmluZS1tYWlsLXVzZXIt YWdlbnQgI1sxMjgzICJcMzAwBVwzMDEGBiNcMjEwXDMwMAVcMzAyBSNcMjEwXDMwMAVcMzAzBFwy MDYVAFwzMDQjXDIxMFwzMDAFXDMwNQNcMjA2HwBcMzA2I1wyMDciIFtwdXQgY29tcG9zZWZ1bmMg c2VuZGZ1bmMgYWJvcnRmdW5jIGtpbGwtYnVmZmVyIGhvb2t2YXIgbWFpbC1zZW5kLWhvb2tdIDkg KCMkIC4gMTk2MjMzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtm dW5jdGlvbi1wdXQgZGVmaW5lLW1haWwtdXNlci1hZ2VudCBsaXNwLWluZGVudC1mdW5jdGlvbiBk ZWZ1bl0gNCkjQDE3NiBDb2xsZWN0IGFsbCBmcmFtZXMgb2YgY3VycmVudCBiYWNrdHJhY2UgaW50 byBhIGxpc3QuCklmIG5vbi1uaWwsIEJBU0Ugc2hvdWxkIGJlIGEgZnVuY3Rpb24sIGFuZCBmcmFt ZXMgYmVmb3JlIGl0cwpuZWFyZXN0IGFjdGl2YXRpb24gZnJhbWUgYXJlIGRpc2NhcmRlZC4KCihm biAmb3B0aW9uYWwgQkFTRSkfCihkZWZhbGlhcyAnYmFja3RyYWNlLWZyYW1lcyAjWzI1NiAiXDMw MENcMzAxXDMwMlwzMDMDXCIDXDIwNlxmAFwzMDRcIlwyMTBcMjExXDI0MlwyMzdcMjA3IiBbbmls IG1hcGJhY2t0cmFjZSBtYWtlLWNsb3N1cmUgI1sxMjggIlwzMDABXDMwMFwyNDJCXDI0MFwyMDci IFtWMF0gNCAiXG5cbihmbiAmcmVzdCBGUkFNRSkiXSBiYWNrdHJhY2UtZnJhbWVzXSA2ICgjJCAu IDE5NzkxOCldKSNANjU1IFJldHVybiB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyBORlJBTUVT IHVwIGZyb20gY3VycmVudCBleGVjdXRpb24gcG9pbnQuCklmIG5vbi1uaWwsIEJBU0Ugc2hvdWxk IGJlIGEgZnVuY3Rpb24sIGFuZCBORlJBTUVTIGNvdW50cyBmcm9tIGl0cwpuZWFyZXN0IGFjdGl2 YXRpb24gZnJhbWUuCklmIHRoZSBmcmFtZSBoYXMgbm90IGV2YWx1YXRlZCB0aGUgYXJndW1lbnRz IHlldCAob3IgaXMgYSBzcGVjaWFsIGZvcm0pLAp0aGUgdmFsdWUgaXMgKG5pbCBGVU5DVElPTiBB UkctRk9STVMuLi4pLgpJZiB0aGUgZnJhbWUgaGFzIGV2YWx1YXRlZCBpdHMgYXJndW1lbnRzIGFu ZCBjYWxsZWQgaXRzIGZ1bmN0aW9uIGFscmVhZHksCnRoZSB2YWx1ZSBpcyAodCBGVU5DVElPTiBB UkctVkFMVUVTLi4uKS4KQSAmcmVzdCBhcmcgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIHRhaWwgb2Yg dGhlIGxpc3QgQVJHLVZBTFVFUy4KRlVOQ1RJT04gaXMgd2hhdGV2ZXIgd2FzIHN1cHBsaWVkIGFz IGNhciBvZiBldmFsdWF0ZWQgbGlzdCwKb3IgYSBsYW1iZGEgZXhwcmVzc2lvbiBmb3IgbWFjcm8g Y2FsbHMuCklmIE5GUkFNRVMgaXMgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgZnJhbWVzLCB0aGUg dmFsdWUgaXMgbmlsLgoKKGZuIE5GUkFNRVMgJm9wdGlvbmFsIEJBU0UpHwooZGVmYWxpYXMgJ2Jh Y2t0cmFjZS1mcmFtZSAjWzUxMyAiXDMwMFwzMDEDA1wyMDYIAFwzMDIjXDIwNyIgW2JhY2t0cmFj ZS1mcmFtZS0taW50ZXJuYWwgI1sxMDI4ICIDAwNCQlwyMDciIFtdIDcgIlxuXG4oZm4gRVZBTEQg RlVOQyBBUkdTIF8pIl0gYmFja3RyYWNlLWZyYW1lXSA2ICgjJCAuIDE5ODMxOSldKSNAMzY3IFNw ZWNpYWwgaG9vayBjYWxsZWQgdG8gc2tpcCBzcGVjaWFsIGZyYW1lcyBpbiBgY2FsbGVkLWludGVy YWN0aXZlbHktcCcuClRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIDMgYXJndW1lbnRzOiAo SSBGUkFNRTEgRlJBTUUyKSwKd2hlcmUgRlJBTUUxIGlzIGEgImN1cnJlbnQgZnJhbWUiLCBGUkFN RTIgaXMgdGhlIG5leHQgZnJhbWUsCkkgaXMgdGhlIGluZGV4IG9mIHRoZSBmcmFtZSBhZnRlciBG UkFNRTIuICBJdCBzaG91bGQgcmV0dXJuIG5pbAppZiB0aG9zZSBmcmFtZXMgZG9uJ3Qgc2VlbSBz cGVjaWFsIGFuZCBvdGhlcndpc2UsIGl0IHNob3VsZCByZXR1cm4KdGhlIG51bWJlciBvZiBmcmFt ZXMgdG8gc2tpcCAobWludXMgMSkuHwooZGVmdmFyIGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAtZnVu Y3Rpb25zIG5pbCAoIyQgLiAxOTkxNTYpKQooZGVmY29uc3QgaW50ZXJuYWwtLWZ1bmNhbGwtaW50 ZXJhY3RpdmVseSAoc3ltYm9sLWZ1bmN0aW9uICdmdW5jYWxsLWludGVyYWN0aXZlbHkpKSNAMTQy NCBSZXR1cm4gdCBpZiB0aGUgY29udGFpbmluZyBmdW5jdGlvbiB3YXMgY2FsbGVkIGJ5IGBjYWxs LWludGVyYWN0aXZlbHknLgpJZiBLSU5EIGlzIGBpbnRlcmFjdGl2ZScsIHRoZW4gcmV0dXJuIHQg b25seSBpZiB0aGUgY2FsbCB3YXMgbWFkZQppbnRlcmFjdGl2ZWx5IGJ5IHRoZSB1c2VyLCBpLmUu IG5vdCBpbiBgbm9uaW50ZXJhY3RpdmUnIG1vZGUgbm9yCndoZW4gYGV4ZWN1dGluZy1rYmQtbWFj cm8nLgpJZiBLSU5EIGlzIGBhbnknLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXQgd2lsbCByZXR1cm4g dCBmb3IgYW55IGtpbmQgb2YKaW50ZXJhY3RpdmUgY2FsbCwgaW5jbHVkaW5nIGJlaW5nIGNhbGxl ZCBhcyB0aGUgYmluZGluZyBvZiBhIGtleSBvcgpmcm9tIGEga2V5Ym9hcmQgbWFjcm8sIGV2ZW4g aW4gYG5vbmludGVyYWN0aXZlJyBtb2RlLgoKVGhpcyBmdW5jdGlvbiBpcyB2ZXJ5IGJyaXR0bGUs IGl0IG1heSBmYWlsIHRvIHJldHVybiB0aGUgaW50ZW5kZWQgcmVzdWx0IHdoZW4KdGhlIGNvZGUg aXMgZGVidWdnZWQsIGFkdmlzZWQsIG9yIGluc3RydW1lbnRlZCBpbiBzb21lIGZvcm0uICBTb21l IG1hY3JvcyBhbmQKc3BlY2lhbCBmb3JtcyAoc3VjaCBhcyBgY29uZGl0aW9uLWNhc2UnKSBtYXkg YWxzbyBzb21ldGltZXMgd3JhcCB0aGVpciBib2RpZXMKaW4gYSBgbGFtYmRhJywgc28gYW55IGNh bGwgdG8gYGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAnIGZyb20gdGhvc2UgYm9kaWVzIHdpbGwKaW5k aWNhdGUgd2hldGhlciB0aGF0IGxhbWJkYSAocmF0aGVyIHRoYW4gdGhlIHN1cnJvdW5kaW5nIGZ1 bmN0aW9uKSB3YXMgY2FsbGVkCmludGVyYWN0aXZlbHkuCgpJbnN0ZWFkIG9mIHVzaW5nIHRoaXMg ZnVuY3Rpb24sIGl0IGlzIGNsZWFuZXIgYW5kIG1vcmUgcmVsaWFibGUgdG8gZ2l2ZSB5b3VyCmZ1 bmN0aW9uIGFuIGV4dHJhIG9wdGlvbmFsIGFyZ3VtZW50IHdob3NlIGBpbnRlcmFjdGl2ZScgc3Bl YyBzcGVjaWZpZXMKbm9uLW5pbCB1bmNvbmRpdGlvbmFsbHkgKCJwIiBpcyBhIGdvb2Qgd2F5IHRv IGRvIHRoaXMpLCBvciB2aWEKKG5vdCAob3IgZXhlY3V0aW5nLWtiZC1tYWNybyBub25pbnRlcmFj dGl2ZSkpLgoKVGhlIG9ubHkga25vd24gcHJvcGVyIHVzZSBvZiBgaW50ZXJhY3RpdmUnIGZvciBL SU5EIGlzIGluIGRlY2lkaW5nCndoZXRoZXIgdG8gZGlzcGxheSBhIGhlbHBmdWwgbWVzc2FnZSwg b3IgaG93IHRvIGRpc3BsYXkgaXQuICBJZiB5b3UncmUKdGhpbmtpbmcgb2YgdXNpbmcgaXQgZm9y IGFueSBvdGhlciBwdXJwb3NlLCBpdCBpcyBxdWl0ZSBsaWtlbHkgdGhhdAp5b3UncmUgbWFraW5n IGEgbWlzdGFrZS4gIFRoaW5rOiB3aGF0IGRvIHlvdSB3YW50IHRvIGRvIHdoZW4gdGhlCmNvbW1h bmQgaXMgY2FsbGVkIGZyb20gYSBrZXlib2FyZCBtYWNybz8KCihmbiAmb3B0aW9uYWwgS0lORCkf CihkZWZhbGlhcyAnY2FsbGVkLWludGVyYWN0aXZlbHktcCAjWzI1NiAiXDIxMVwzMDM9XDIwNQsA CFwyMDYLAAk/XDIwNREBXDMwNENcMzA1Q1wzMDVDXDMwNlwyMTEEBAQjXDIxMFwyMTEEBAQjXDIx MAJcMjQyXDIwMy0AAlwyNDJAXDIwMxwAAlwyNDJBQFwzMDc+XDIwNBwAXDMxMFwzMTEFXDI0MgVc MjQyBVwyNDIkXDIxMVwzMTJcMjY3XDIwMk0AXDMwNVwyMDJaAFwzMTNcMjAyWgAEXDIxMVwyNDIC XFxTXDI0MFwyMTABBQUFI1wyNjIBXDIwNBwAAlwyNDICXDI0MkJcMjExOlwyMDUNAVwyMTFcMjQy XDIxMTpcMjAzXDM0NABcMjExXDI0M1wyMTE6XDIwM1wyNzAAXDIxMVwyNDJcMzE0ASFcMzE1ASFc MjA1XDIwNgBcMzE2ASE/XDI2MgE/XDIwNVwyNjMAA1wyNDNcMjExOlwyMDVcMjYxAFwyMTFcMjQy XDIxMVwzMTM9XDIwNVwyNTcAAVwyNDNcMjExOlwyMDVcMjU1AFwyMTFcMjQyXG5cMzE0AiE9Pz9c MjYyAVwyNjIBXDI2MgFcMjYyAVwyNjIBXDIwMlwzMzcAAlwyNDNcMjExOlwyMDVcMzM1AFwyMTFc MjQyXDIxMVwzMTM9XDIwNVwzMzMAAVwyNDNcMjExOlwyMDVcMzMxAFwyMTFcMjQyXG5cMzE0AiE9 Pz9cMjYyAVwyNjIBXDI2MgFcMjYyAVwyNjIBXDIwMgsBAVwyNDNcMjExOlwyMDUJAVwyMTFcMjQy XDIxMVwzMTM9XDIwNQcBAVwyNDNcMjExOlwyMDUFAVwyMTFcMjQyXG5cMzE0AiE9Pz9cMjYyAVwy NjIBXDI2MgFcMjYyAVwyNjIBXDI2MgFcMjY2XDIwNFwyMDciIFtleGVjdXRpbmcta2JkLW1hY3Jv IG5vbmludGVyYWN0aXZlIGludGVybmFsLS1mdW5jYWxsLWludGVyYWN0aXZlbHkgaW50ZXJhY3Rp dmUgMSBuaWwgI1s3NzEgIgEBXDI0MlwyNDBcMjEwXDIxMVwzMDAEXDI0MlwzMDFcIlwyNDBcMjEw AlwyMTFcMjQyVFwyNDBcMjA3IiBbYmFja3RyYWNlLWZyYW1lIGNhbGxlZC1pbnRlcmFjdGl2ZWx5 LXBdIDcgIlxuXG4oZm4gSSBGUkFNRSBORVhURlJBTUUpIl0gKGludGVyYWN0aXZlLXAgJ2J5dGUt Y29kZSkgcnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgY2FsbGVkLWludGVyYWN0aXZl bHktcC1mdW5jdGlvbnMgI3MoaGFzaC10YWJsZSBzaXplIDIgdGVzdCBlcSByZWhhc2gtc2l6ZSAx LjUgcmVoYXNoLXRocmVzaG9sZCAwLjgxMjUgcHVyZWNvcHkgdCBkYXRhIChuaWwgNjkgMCA3Mykp IHQgaW5kaXJlY3QtZnVuY3Rpb24gc3VicnAgc3Vici1uYXRpdmUtZWxpc3AtcF0gMTYgKCMkIC4g MTk5NjczKV0pCihzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNvbnZlbnRpb24gJ2NhbGxlZC1pbnRl cmFjdGl2ZWx5LXAgJyhraW5kKSAiMjMuMSIpI0A5NjAgUmV0dXJuIHQgaWYgdGhlIGNvbnRhaW5p bmcgZnVuY3Rpb24gd2FzIHJ1biBkaXJlY3RseSBieSB1c2VyIGlucHV0LgpUaGlzIG1lYW5zIHRo YXQgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBgY2FsbC1pbnRlcmFjdGl2ZWx5Jwood2hp Y2ggaW5jbHVkZXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBiaW5kaW5nIG9mIGEga2V5KQphbmQgaW5w dXQgaXMgY3VycmVudGx5IGNvbWluZyBmcm9tIHRoZSBrZXlib2FyZCAobm90IGEga2V5Ym9hcmQg bWFjcm8pLAphbmQgRW1hY3MgaXMgbm90IHJ1bm5pbmcgaW4gYmF0Y2ggbW9kZSAoYG5vbmludGVy YWN0aXZlJyBpcyBuaWwpLgoKVGhlIG9ubHkga25vd24gcHJvcGVyIHVzZSBvZiBgaW50ZXJhY3Rp dmUtcCcgaXMgaW4gZGVjaWRpbmcgd2hldGhlciB0bwpkaXNwbGF5IGEgaGVscGZ1bCBtZXNzYWdl LCBvciBob3cgdG8gZGlzcGxheSBpdC4gIElmIHlvdSdyZSB0aGlua2luZwpvZiB1c2luZyBpdCBm b3IgYW55IG90aGVyIHB1cnBvc2UsIGl0IGlzIHF1aXRlIGxpa2VseSB0aGF0IHlvdSdyZQptYWtp bmcgYSBtaXN0YWtlLiAgVGhpbms6IHdoYXQgZG8geW91IHdhbnQgdG8gZG8gd2hlbiB0aGUgY29t bWFuZCBpcwpjYWxsZWQgZnJvbSBhIGtleWJvYXJkIG1hY3JvIG9yIGluIGJhdGNoIG1vZGU/CgpU byB0ZXN0IHdoZXRoZXIgeW91ciBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggYGNhbGwtaW50ZXJh Y3RpdmVseScsCmVpdGhlciAoaSkgYWRkIGFuIGV4dHJhIG9wdGlvbmFsIGFyZ3VtZW50IGFuZCBn aXZlIGl0IGFuIGBpbnRlcmFjdGl2ZScKc3BlYyB0aGF0IHNwZWNpZmllcyBub24tbmlsIHVuY29u ZGl0aW9uYWxseSAoc3VjaCBhcyAicCIpOyBvciAoaWkpCnVzZSBgY2FsbGVkLWludGVyYWN0aXZl bHktcCcuCgpUbyB0ZXN0IHdoZXRoZXIgYSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGludGVyYWN0 aXZlbHksIHVzZQpgY29tbWFuZHAnLh8KKGRlZmFsaWFzICdpbnRlcmFjdGl2ZS1wICNbMCAiXDMw MFwzMDEhXDIwNyIgW2NhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgaW50ZXJhY3RpdmVdIDIgKCMkIC4g MjAyMzgzKV0pCihtYWtlLW9ic29sZXRlICdpbnRlcmFjdGl2ZS1wICdjYWxsZWQtaW50ZXJhY3Rp dmVseS1wICIyMy4yIikjQDIyIAoKKGZuIEtFWU1BUCBTWU1CT0wpHwooZGVmYWxpYXMgJ2ludGVy bmFsLXB1c2gta2V5bWFwICNbNTE0ICJcMjExSgIBPj9cMjA1KABcMzAwAko+XDIwNFwiAFwzMDFc MzAyA0pcIlwyNjIBXDIxMVwzMDACQUJcMjQxXDIxMAEBTFwyMTBcMjExAwJBQlwyNDFcMjA3IiBb YWRkLWtleW1hcC13aXRuZXNzIG1ha2UtY29tcG9zZWQta2V5bWFwIG5pbF0gNiAoIyQgLiAyMDM1 MDkpXSkjQDIyIAoKKGZuIEtFWU1BUCBTWU1CT0wpHwooZGVmYWxpYXMgJ2ludGVybmFsLXBvcC1r ZXltYXAgI1s1MTQgIlwyMTFKAgE+XDIwMxAAXDIxMVwzMDAEA0FcIlwyNDFcMjEwXDIxMUFBXDIx MVwyMDMdAFwzMDEBIVwyMDUoAAFBQFwzMDI9XDIwNSgAAgFMXDIwNyIgW2RlbHEga2V5bWFwcCBh ZGQta2V5bWFwLXdpdG5lc3NdIDcgKCMkIC4gMjAzNzI4KV0pCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDIxMFwzMDRcMzAxXDMwMlwzMDUjXDIwNyIgW2RlZmFsaWFzIHNldC10ZW1wb3Jh cnktb3ZlcmxheS1tYXAgc2V0LXRyYW5zaWVudC1tYXAgbmlsIG1ha2Utb2Jzb2xldGUgIjI0LjQi XSA0KSNAMjUxIFRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgZGVhY3RpdmF0aW9uIG9mIGEgdHJhbnNp ZW50IGtleW1hcC4KSWYgdGhpcyBpcyBhIG51bWJlciwgaXQgc3BlY2lmaWVzIHRoZSBhbW91bnQg b2YgaWRsZSB0aW1lCmFmdGVyIHdoaWNoIHRvIGRlYWN0aXZhdGUgdGhlIGtleW1hcCBzZXQgYnkg YHNldC10cmFuc2llbnQtbWFwJywKdGh1cyBvdmVycmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVElN RU9VVCBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uLh8KKGRlZnZhciBzZXQtdHJhbnNpZW50LW1h cC10aW1lb3V0IG5pbCAoIyQgLiAyMDQwNzApKSNANDAgVGltZXIgZm9yIGBzZXQtdHJhbnNpZW50 LW1hcC10aW1lb3V0Jy4fCihkZWZ2YXIgc2V0LXRyYW5zaWVudC1tYXAtdGltZXIgbmlsICgjJCAu IDIwNDM3OCkpI0AxNTM5IFNldCBNQVAgYXMgYSB0ZW1wb3Jhcnkga2V5bWFwIHRha2luZyBwcmVj ZWRlbmNlIG92ZXIgb3RoZXIga2V5bWFwcy4KTm9ybWFsbHksIE1BUCBpcyB1c2VkIG9ubHkgb25j ZSwgdG8gbG9vayB1cCB0aGUgdmVyeSBuZXh0IGtleS4KSG93ZXZlciwgaWYgdGhlIG9wdGlvbmFs IGFyZ3VtZW50IEtFRVAtUFJFRCBpcyB0LCBNQVAgc3RheXMKYWN0aXZlIGlmIGEga2V5IGZyb20g TUFQIGlzIHVzZWQuICBLRUVQLVBSRUQgY2FuIGFsc28gYmUgYQpmdW5jdGlvbiBvZiBubyBhcmd1 bWVudHM6IGl0IGlzIGNhbGxlZCBmcm9tIGBwcmUtY29tbWFuZC1ob29rJyBhbmQKaWYgaXQgcmV0 dXJucyBub24tbmlsLCB0aGVuIE1BUCBzdGF5cyBhY3RpdmUuCgpPcHRpb25hbCBhcmcgT04tRVhJ VCwgaWYgbm9uLW5pbCwgc3BlY2lmaWVzIGEgZnVuY3Rpb24gdGhhdCBpcwpjYWxsZWQsIHdpdGgg bm8gYXJndW1lbnRzLCBhZnRlciBNQVAgaXMgZGVhY3RpdmF0ZWQuCgpPcHRpb25hbCBhcmcgTUVT U0FHRSwgaWYgbm9uLW5pbCwgcmVxdWVzdHMgZGlzcGxheSBvZiBhbiBpbmZvcm1hdGl2ZQptZXNz YWdlIGFmdGVyIGFjdGl2YXRpbmcgdGhlIHRyYW5zaWVudCBtYXAuICBJZiBNRVNTQUdFIGlzIGEg c3RyaW5nLAppdCBzcGVjaWZpZXMgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBtZXNzYWdlIHRv IGRpc3BsYXksIGFuZCB0aGUgJWsKc3BlY2lmaWVyIGluIHRoZSBzdHJpbmcgaXMgcmVwbGFjZWQg d2l0aCB0aGUgbGlzdCBvZiBrZXlzIGZyb20gdGhlCnRyYW5zaWVudCBtYXAuICBBbnkgb3RoZXIg bm9uLW5pbCB2YWx1ZSBvZiBNRVNTQUdFIG1lYW5zIHRvIHVzZSB0aGUKbWVzc2FnZSBmb3JtYXQg c3RyaW5nICJSZXBlYXQgd2l0aCAlayIuICBVcG9uIGRlYWN0aXZhdGluZyB0aGUgbWFwLAp0aGUg ZGlzcGxheWVkIG1lc3NhZ2Ugd2lsbCBiZSBjbGVhcmVkIG91dC4KCk9wdGlvbmFsIGFyZyBUSU1F T1VULCBpZiBub24tbmlsLCBzaG91bGQgYmUgYSBudW1iZXIgc3BlY2lmeWluZyB0aGUKbnVtYmVy IG9mIHNlY29uZHMgb2YgaWRsZSB0aW1lIGFmdGVyIHdoaWNoIHRoZSBtYXAgaXMgZGVhY3RpdmF0 ZWQuClRoZSB2YXJpYWJsZSBgc2V0LXRyYW5zaWVudC1tYXAtdGltZW91dCcsIGlmIG5vbi1uaWws IG92ZXJyaWRlcyB0aGUKdmFsdWUgb2YgVElNRU9VVC4KClRoaXMgZnVuY3Rpb24gdXNlcyBgb3Zl cnJpZGluZy10ZXJtaW5hbC1sb2NhbC1tYXAnLCB3aGljaCB0YWtlcyBwcmVjZWRlbmNlCm92ZXIg YWxsIG90aGVyIGtleW1hcHMuICBBcyB1c3VhbCwgaWYgbm8gbWF0Y2ggZm9yIGEga2V5IGlzIGZv dW5kIGluIE1BUCwKdGhlIG5vcm1hbCBrZXkgbG9va3VwIHNlcXVlbmNlIHRoZW4gY29udGludWVz LgoKVGhpcyByZXR1cm5zIGFuICJleGl0IGZ1bmN0aW9uIiwgd2hpY2ggY2FuIGJlIGNhbGxlZCB3 aXRoIG5vIGFyZ3VtZW50CnRvIGRlYWN0aXZhdGUgdGhpcyB0cmFuc2llbnQgbWFwLCByZWdhcmRs ZXNzIG9mIEtFRVAtUFJFRC4KCihmbiBNQVAgJm9wdGlvbmFsIEtFRVAtUFJFRCBPTi1FWElUIE1F U1NBR0UgVElNRU9VVCkfCihkZWZhbGlhcyAnc2V0LXRyYW5zaWVudC1tYXAgI1sxMjgxICIIXDIw NgUAXDIxMQJcMjA1KwBcMzAyQ1wzMDNcMzA0XDMwNQNcIgYIXCJcMjEwXDMwNgQ7XDIwMx4ABFwy MDIfAFwzMDdcMzEwXDMxMVwzMTIFXDI0MlwzMTMjQkNcIlwyNjIBXDMxNFwzMTUhXDMwNFwzMTYC BAYJBlxmJQFcMzA0XDMxNwMGBgZcZgYOJU1cMjEwXDMyMFwzMjEDXCJcMjEwXDMyMgYJXDMyM1wi XDIxMANcMjAzYQAJXDIwM1sAXDMyNAkhXDIxMFwzMjUEXDMwMgMjEQJcMjAzagBcMzI2XDMyNwRc IlwyMTBcMjA3IiBbc2V0LXRyYW5zaWVudC1tYXAtdGltZW91dCBzZXQtdHJhbnNpZW50LW1hcC10 aW1lciBuaWwgbWFwLWtleW1hcCBtYWtlLWNsb3N1cmUgI1s1MTQgIlwyMTFcMjA1XG4AXDMwMAJc MzAwXDI0MkJcMjQwXDIwNyIgW1YwXSA1ICJcblxuKGZuIEtFWSBDTUQpIl0gZm9ybWF0LXNwZWMg IlJlcGVhdCB3aXRoICVrIiAxMDcgbWFwY29uY2F0ICNbMjU3ICJcMzAwXDMwMVwzMDJcMzAzXDMw NAUhIVwiIVwyMDciIFtzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyBmb3JtYXQgIlxcYCVzJyIga2V5 LWRlc2NyaXB0aW9uIHZlY3Rvcl0gNyAiXG5cbihmbiBLRVkpIl0gIiwgIiBtYWtlLXN5bWJvbCAi Y2xlYXItdHJhbnNpZW50LW1hcCIgI1swICJcMzA1XDMwM1wzMDZcIlwyMTBcMzA3XDMxMFwzMDBc IlwyMTBcMzAxXDIwMxIAXDMxMVwzMTIhXDIxMFxmXDIwMxoAXDMxM1xmIVwyMTBcMzAyXDIwNSAA XDMwMiBcMjA3IiBbVjAgVjEgVjIgVjMgc2V0LXRyYW5zaWVudC1tYXAtdGltZXIgaW50ZXJuYWwt cG9wLWtleW1hcCBvdmVycmlkaW5nLXRlcm1pbmFsLWxvY2FsLW1hcCByZW1vdmUtaG9vayBwcmUt Y29tbWFuZC1ob29rIG1lc3NhZ2UgIiIgY2FuY2VsLXRpbWVyXSAzXSAjWzAgIlwzMDYxVQBcMzAy XDIwM1EAXDMwM1xmQUA9XDIwNBgAXDMwM1xmQUE+XDIwNEYAXDMwMlwzMDc9XDIwM0EAXDMxMFwz MDNcMzExIFwiXDIxMVwyMDM1AFwyMTE5XDIwMzUAXDMxMgEhXDIwNjMAXDIxMVwyNjIBXDIxMVwy MDU8AA0BPVwyNjIBXDIwMkMAXDMwMiBcMjAzUQBcMzAxXDIwNVMAXDMxM1wzMTRcMzAxXCJcMjAy UwBcMzAwIDBcMjA3XDMxM1wzMTUCXCJcMjEwXDMxNlwyMDciIFtWMCBWMSBWMiBWMyBvdmVycmlk aW5nLXRlcm1pbmFsLWxvY2FsLW1hcCB0aGlzLWNvbW1hbmQgKGRlYnVnIGVycm9yKSB0IGxvb2t1 cC1rZXkgdGhpcy1jb21tYW5kLWtleXMtdmVjdG9yIGNvbW1hbmQtcmVtYXBwaW5nIG1lc3NhZ2Ug IiVzIiAic2V0LXRyYW5zaWVudC1tYXAgUENIOiAlUyIgbmlsXSA0XSBhZGQtaG9vayBwcmUtY29t bWFuZC1ob29rIGludGVybmFsLXB1c2gta2V5bWFwIG92ZXJyaWRpbmctdGVybWluYWwtbG9jYWwt bWFwIGNhbmNlbC10aW1lciBydW4td2l0aC1pZGxlLXRpbWVyIG1lc3NhZ2UgIiVzIl0gMTYgKCMk IC4gMjA0NDc1KV0pI0A3MTcgUmVwb3J0IHByb2dyZXNzIG9mIGFuIG9wZXJhdGlvbiBpbiB0aGUg ZWNobyBhcmVhLgpSRVBPUlRFUiBzaG91bGQgYmUgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gYG1h a2UtcHJvZ3Jlc3MtcmVwb3J0ZXInLgoKSWYgUkVQT1JURVIgaXMgYSBudW1lcmljYWwgcHJvZ3Jl c3MgcmVwb3J0ZXItLS1pLmUuIGlmIGl0IHdhcwogbWFkZSB1c2luZyBub24tbmlsIE1JTi1WQUxV RSBhbmQgTUFYLVZBTFVFIGFyZ3VtZW50cyB0bwogYG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInLS0t dGhlbiBWQUxVRSBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbgogTUlOLVZBTFVFIGFuZCBNQVgt VkFMVUUuCgpPcHRpb25hbCBhcmd1bWVudCBTVUZGSVggaXMgYSBzdHJpbmcgdG8gYmUgZGlzcGxh eWVkIGFmdGVyClJFUE9SVEVSJ3MgbWFpbiBtZXNzYWdlIGFuZCBwcm9ncmVzcyB0ZXh0LiAgSWYg UkVQT1JURVIgaXMgYQpub24tbnVtZXJpY2FsIHJlcG9ydGVyLCB0aGVuIFZBTFVFIHNob3VsZCBi ZSBuaWwsIG9yIGEgc3RyaW5nIHRvCnVzZSBpbnN0ZWFkIG9mIFNVRkZJWC4KClRoaXMgZnVuY3Rp b24gaXMgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZS4gIElmIHRoZSBjaGFuZ2Ugc2luY2UKbGFzdCB1 cGRhdGUgaXMgdG9vIHNtYWxsIG9yIGluc3VmZmljaWVudCB0aW1lIGhhcyBwYXNzZWQsIGl0IGRv ZXMKbm90aGluZy4KCihmbiBSRVBPUlRFUiAmb3B0aW9uYWwgVkFMVUUgU1VGRklYKR8KKGRlZmFs aWFzICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUgI1s3NjkgIgFcMjQ3XDIwM1xmAAEDQFlcMjA1 EQBcMzAwAwMDI1wyMDciIFtwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGVdIDcgKCMkIC4gMjA3 NDQxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3 IiBbZnVuY3Rpb24tcHV0IHByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSBzcGVlZCAtMSBwdXQgYnl0 ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0AxMjA0IFJldHVybiBw cm9ncmVzcyByZXBvcnRlciBvYmplY3QgZm9yIHVzZSB3aXRoIGBwcm9ncmVzcy1yZXBvcnRlci11 cGRhdGUnLgoKTUVTU0FHRSBpcyBzaG93biBpbiB0aGUgZWNobyBhcmVhLCB3aXRoIGEgc3RhdHVz IGluZGljYXRvcgphcHBlbmRlZCB0byB0aGUgZW5kLiAgV2hlbiB5b3UgY2FsbCBgcHJvZ3Jlc3Mt cmVwb3J0ZXItZG9uZScsIHRoZQp3b3JkICJkb25lIiBpcyBwcmludGVkIGFmdGVyIHRoZSBNRVNT QUdFLiAgWW91IGNhbiBjaGFuZ2UgdGhlCk1FU1NBR0Ugb2YgYW4gZXhpc3RpbmcgcHJvZ3Jlc3Mg cmVwb3J0ZXIgYnkgY2FsbGluZwpgcHJvZ3Jlc3MtcmVwb3J0ZXItZm9yY2UtdXBkYXRlJy4KCk1J Ti1WQUxVRSBhbmQgTUFYLVZBTFVFLCBpZiBub24tbmlsLCBhcmUgc3RhcnRpbmcgKDAlIGNvbXBs ZXRlKQphbmQgZmluYWwgKDEwMCUgY29tcGxldGUpIHN0YXRlcyBvZiBvcGVyYXRpb247IHRoZSBs YXR0ZXIgc2hvdWxkCmJlIGxhcmdlci4gIEluIHRoaXMgY2FzZSwgdGhlIHN0YXR1cyBtZXNzYWdl IHNob3dzIHRoZSBwZXJjZW50YWdlCnByb2dyZXNzLgoKSWYgTUlOLVZBTFVFIGFuZC9vciBNQVgt VkFMVUUgaXMgb21pdHRlZCBvciBuaWwsIHRoZSBzdGF0dXMKbWVzc2FnZSBzaG93cyBhICJzcGlu bmluZyIsIG5vbi1udW1lcmljIGluZGljYXRvci4KCk9wdGlvbmFsIENVUlJFTlQtVkFMVUUgaXMg dGhlIGluaXRpYWwgcHJvZ3Jlc3M7IHRoZSBkZWZhdWx0IGlzCk1JTi1WQUxVRS4KT3B0aW9uYWwg TUlOLUNIQU5HRSBpcyB0aGUgbWluaW1hbCBjaGFuZ2UgaW4gcGVyY2VudHMgdG8gcmVwb3J0Owp0 aGUgZGVmYXVsdCBpcyAxJS4KQ1VSUkVOVC1WQUxVRSBhbmQgTUlOLUNIQU5HRSBkbyBub3QgaGF2 ZSBhbnkgZWZmZWN0IGlmIE1JTi1WQUxVRQphbmQvb3IgTUFYLVZBTFVFIGFyZSBuaWwuCgpPcHRp b25hbCBNSU4tVElNRSBzcGVjaWZpZXMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdGltZSBiZXR3ZWVu CmVjaG8gYXJlYSB1cGRhdGVzIChkZWZhdWx0IGlzIDAuMiBzZWNvbmRzLikgIElmIHRoZSBPUyBp cyBub3QKY2FwYWJsZSBvZiBtZWFzdXJpbmcgZnJhY3Rpb25zIG9mIHNlY29uZHMsIHRoaXMgcGFy YW1ldGVyIGlzCmVmZmVjdGl2ZWx5IHJvdW5kZWQgdXAuCgooZm4gTUVTU0FHRSAmb3B0aW9uYWwg TUlOLVZBTFVFIE1BWC1WQUxVRSBDVVJSRU5ULVZBTFVFIE1JTi1DSEFOR0UgTUlOLVRJTUUpHwoo ZGVmYWxpYXMgJ21ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIgI1sxNTM3ICJcMzAwXDMwMQYHXCJcMjAz DQAFXDMwMlBcMjYyBlwyMTFcMjA0FABcMzAzXDI2MgEEXDIwNhkAXDMwNFwzMDUCXDMwNllcMjA1 XCIAXDMwNyAGBwYHBlxuBgdcMjAzNgAGB1wzMTBeXDMxMV1cMjAyNwBcMzExBgdcMzEyJgdCXDIx MQRcMjA2RAAGBlwzMTIBXDI0N1wyMDNRAAEDQFlcMjA1VgBcMzEzAwMDI1wyNjYEXDIwNyIgW3N0 cmluZy1tYXRjaCAiW1s6YWxudW06XV1cXCciICIuLi4iIDAuMiAwIHZlY3RvciAwLjAyIGZsb2F0 LXRpbWUgNTAgMSBuaWwgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlXSAxNSAoIyQgLiAyMDg0 NDEpXSkjQDI1NSBSZXBvcnQgcHJvZ3Jlc3Mgb2YgYW4gb3BlcmF0aW9uIGluIHRoZSBlY2hvIGFy ZWEgdW5jb25kaXRpb25hbGx5LgoKUkVQT1JURVIsIFZBTFVFLCBhbmQgU1VGRklYIGFyZSB0aGUg c2FtZSBhcyBpbiBgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlJy4KTkVXLU1FU1NBR0UsIGlmIG5v bi1uaWwsIHNldHMgYSBuZXcgbWVzc2FnZSBmb3IgdGhlIHJlcG9ydGVyLgoKKGZuIFJFUE9SVEVS ICZvcHRpb25hbCBWQUxVRSBORVctTUVTU0FHRSBTVUZGSVgpHwooZGVmYWxpYXMgJ3Byb2dyZXNz LXJlcG9ydGVyLWZvcmNlLXVwZGF0ZSAjWzEwMjUgIgNBAlwyMDMLAFwyMTFcMzAwBElcMjEwXDIx MVwzMDFIXDIwMxcAXDIxMVwzMDFcMzAyIElcMjEwXDMwMwUFBCNcMjA3IiBbMyAwIGZsb2F0LXRp bWUgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlXSA5ICgjJCAuIDIwOTk5OSldKSNANTEgQ2hh cmFjdGVycyB0byB1c2UgZm9yIHB1bHNpbmcgcHJvZ3Jlc3MgcmVwb3J0ZXJzLh8KKGRlZnZhciBw cm9ncmVzcy1yZXBvcnRlci0tcHVsc2UtY2hhcmFjdGVycyBbIi0iICJcXCIgInwiICIvIl0gKCMk IC4gMjEwNDQxKSkjQDQwIAoKKGZuIFJFUE9SVEVSIFZBTFVFICZvcHRpb25hbCBTVUZGSVgpHwoo ZGVmYWxpYXMgJ3Byb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZSAjWzc3MCAiAkFcMjExXDMwMkgB XDMwM0gCXDMwNEgDXDMwNUgDP1wyMDYjAFwzMDYEXDMwN1wiXDIwNSMABFwzMDIFBgdcMzEwSFxc SQNcMjAzXDIzNgACXDIwM1wyMzYAAgRaXDMxMVwyNDUDBVVcMjAzOgBcMzAyXDIwMkMAXDMxMgYJ BgZaAlwyNDUhBlxuBgYCBVwyMDNTAAZcblwzMTNIXDIwMlQAXDMwM1xcBF9cXAYGXlwyNDBcMjEw BglcMjUwXDIwM2wABlxuXDMxNAZcZkAhXDI0MFwyMTACXDIwNVwyMzUABghcMjAzfwAGB1wzMTUG XG5JXDIxMFwyMDJcMjExAAYHXDMxNUhcMjA2XDIwNwBcMzE2XDI2MglcMjExXDMwMlZcMjAzXDIy NwBcMzE3XDMyMAUDBlxmJFwyMDdcMzE3XDMyMQUGCyNcMjA3XDIxMVwyMDVcMzQyAAYHXDIwM1wy NjAABgZcMjA0XDI2MAAGB1wyNjIHBgZcMjAzXDI3NgAFXDMxNQYISVwyMTBcMjAyXDMwNwAFXDMx NUhcMjA2XDMwNQBcMzE2XDI2MgdcMzIyBglAVFwzMTNcIlwzMDcYCQFIBlxuAlwyNDBcMjEwXDMx N1wzMjMFAwZcZiQpXDI2NlwyMDJcMjA3IiBbbWVzc2FnZS1sb2ctbWF4IHByb2dyZXNzLXJlcG9y dGVyLS1wdWxzZS1jaGFyYWN0ZXJzIDAgMSAyIDMgdGltZS1sZXNzLXAgbmlsIDUgMTAwLjAgdHJ1 bmNhdGUgNCBjZWlsaW5nIDYgIiIgbWVzc2FnZSAiJXMlZCUlICVzIiAiJXMgJXMiIG1vZCAiJXMg JXMgJXMiXSAxNiAoIyQgLiAyMTA1NzQpXSkjQDc5IFByaW50IHJlcG9ydGVyJ3MgbWVzc2FnZSBm b2xsb3dlZCBieSB3b3JkICJkb25lIiBpbiBlY2hvIGFyZWEuCgooZm4gUkVQT1JURVIpHwooZGVm YWxpYXMgJ3Byb2dyZXNzLXJlcG9ydGVyLWRvbmUgI1syNTcgIlwzMDBcMzAxAkFcMzAySFwiXDIw NyIgW21lc3NhZ2UgIiVzZG9uZSIgM10gNSAoIyQgLiAyMTEzMzApXSkjQDY5NSBMb29wIGEgY2Vy dGFpbiBudW1iZXIgb2YgdGltZXMgYW5kIHJlcG9ydCBwcm9ncmVzcyBpbiB0aGUgZWNobyBhcmVh LgpFdmFsdWF0ZSBCT0RZIHdpdGggVkFSIGJvdW5kIHRvIHN1Y2Nlc3NpdmUgaW50ZWdlcnMgcnVu bmluZyBmcm9tCjAsIGluY2x1c2l2ZSwgdG8gQ09VTlQsIGV4Y2x1c2l2ZS4gIFRoZW4gZXZhbHVh dGUgUkVTVUxUIHRvIGdldAp0aGUgcmV0dXJuIHZhbHVlIChuaWwgaWYgUkVTVUxUIGlzIG9taXR0 ZWQpLgoKUkVQT1JURVItT1ItTUVTU0FHRSBpcyBhIHByb2dyZXNzIHJlcG9ydGVyIG9iamVjdCBv ciBhIHN0cmluZy4gIEluIHRoZSBsYXR0ZXIKY2FzZSwgdXNlIHRoaXMgc3RyaW5nIHRvIGNyZWF0 ZSBhIHByb2dyZXNzIHJlcG9ydGVyLgoKQXQgZWFjaCBpdGVyYXRpb24sIHByaW50IHRoZSByZXBv cnRlciBtZXNzYWdlIGZvbGxvd2VkIGJ5IHByb2dyZXNzCnBlcmNlbnRhZ2UgaW4gdGhlIGVjaG8g YXJlYS4gIEFmdGVyIHRoZSBsb29wIGlzIGZpbmlzaGVkLApwcmludCB0aGUgcmVwb3J0ZXIgbWVz c2FnZSBmb2xsb3dlZCBieSB0aGUgd29yZCAiZG9uZSIuCgpUaGlzIG1hY3JvIGlzIGEgY29udmVu aWVuY2Ugd3JhcHBlciBhcm91bmQgYG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInIGFuZCBmcmllbmRz LgoKKGZuIChWQVIgQ09VTlQgW1JFU1VMVF0pIFJFUE9SVEVSLU9SLU1FU1NBR0UgQk9EWS4uLikf CihkZWZhbGlhcyAnZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyICcobWFjcm8gLiAjWzY0 MiAiXDMwMFwzMDEhXDMwMFwzMDIhXDMwMwIFRAIGB0FARERcMzA0XDMwNQVEXDMwNgYGXDMwNwYI XDMxMAYJRkVFXDMxMQYIQAVEXDMxMgYIXDMxMwYJXDMxNAYOQERFQ1wiQkJcMzE1BgZEXDMxNlwz MTIGC0FBXDMxN1wiQlwyNTcGXDIwNyIgW21ha2Utc3ltYm9sICItLWRvdGltZXMtcHJlcC0tIiAi LS1kb3RpbWVzLWVuZC0tIiBsZXQgd2hlbiBzdHJpbmdwIHNldHEgbWFrZS1wcm9ncmVzcy1yZXBv cnRlciAwIGRvdGltZXMgYXBwZW5kIHByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSAxKyBwcm9ncmVz cy1yZXBvcnRlci1kb25lIG9yIChuaWwpXSAxNiAoIyQgLiAyMTE1MTcpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IGRv dGltZXMtd2l0aC1wcm9ncmVzcy1yZXBvcnRlciBsaXNwLWluZGVudC1mdW5jdGlvbiAyIHB1dCBl ZGVidWctZm9ybS1zcGVjICgoc3ltYm9scCBmb3JtICZvcHRpb25hbCBmb3JtKSBmb3JtIGJvZHkp XSA1KSNANTQwIExvb3Agb3ZlciBhIGxpc3QgYW5kIHJlcG9ydCBwcm9ncmVzcyBpbiB0aGUgZWNo byBhcmVhLgpFdmFsdWF0ZSBCT0RZIHdpdGggVkFSIGJvdW5kIHRvIGVhY2ggY2FyIGZyb20gTElT VCwgaW4gdHVybi4KVGhlbiBldmFsdWF0ZSBSRVNVTFQgdG8gZ2V0IHJldHVybiB2YWx1ZSwgZGVm YXVsdCBuaWwuCgpSRVBPUlRFUi1PUi1NRVNTQUdFIGlzIGEgcHJvZ3Jlc3MgcmVwb3J0ZXIgb2Jq ZWN0IG9yIGEgc3RyaW5nLiAgSW4gdGhlIGxhdHRlcgpjYXNlLCB1c2UgdGhpcyBzdHJpbmcgdG8g Y3JlYXRlIGEgcHJvZ3Jlc3MgcmVwb3J0ZXIuCgpBdCBlYWNoIGl0ZXJhdGlvbiwgcHJpbnQgdGhl IHJlcG9ydGVyIG1lc3NhZ2UgZm9sbG93ZWQgYnkgcHJvZ3Jlc3MKcGVyY2VudGFnZSBpbiB0aGUg ZWNobyBhcmVhLiAgQWZ0ZXIgdGhlIGxvb3AgaXMgZmluaXNoZWQsCnByaW50IHRoZSByZXBvcnRl ciBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSB3b3JkICJkb25lIi4KCihmbiAoVkFSIExJU1QgW1JF U1VMVF0pIFJFUE9SVEVSLU9SLU1FU1NBR0UgQk9EWS4uLikfCihkZWZhbGlhcyAnZG9saXN0LXdp dGgtcHJvZ3Jlc3MtcmVwb3J0ZXIgJyhtYWNybyAuICNbNjQyICJcMzAwXDMwMSFcMzAwXDMwMiFc MzAwXDMwMyFcMzA0AwYGRANcMzA1QgMGCUFAREVcMzA2XDMwNwYGRFwzMTAGB1wzMTEGCVwzMTJc MzEzBlxuREZFRVwzMTQGCUAFRFwzMTUGCVwzMTYGXG5cMzEwBgtcMzE3Bg1ERUVDXCJCQlwzMjAG B0RcMzIxXDMxNQZcZkFBXDMyMlwiQlwyNTcGXDIwNyIgW21ha2Utc3ltYm9sICItLWRvbGlzdC1w cm9ncmVzcy1yZXBvcnRlci0tIiAiLS1kb2xpc3QtY291bnQtLSIgIi0tZG9saXN0LWxpc3QtLSIg bGV0ICgwKSB3aGVuIHN0cmluZ3Agc2V0cSBtYWtlLXByb2dyZXNzLXJlcG9ydGVyIDAgbGVuZ3Ro IGRvbGlzdCBhcHBlbmQgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlIDErIHByb2dyZXNzLXJlcG9y dGVyLWRvbmUgb3IgKG5pbCldIDE5ICgjJCAuIDIxMjc5MSldKSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgZG9saXN0LXdp dGgtcHJvZ3Jlc3MtcmVwb3J0ZXIgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMiBwdXQgZWRlYnVnLWZv cm0tc3BlYyAoKHN5bWJvbHAgZm9ybSAmb3B0aW9uYWwgZm9ybSkgZm9ybSBib2R5KV0gNSkjQDEy MiBTcGVjaWZ5IHRoZSBzdHJpbmcgdXNlZCB0byBzZXBhcmF0ZSB0aGUgdmVyc2lvbiBlbGVtZW50 cy4KClVzdWFsbHkgdGhlIHNlcGFyYXRvciBpcyAiLiIsIGJ1dCBpdCBjYW4gYmUgYW55IG90aGVy IHN0cmluZy4fCihkZWZjb25zdCB2ZXJzaW9uLXNlcGFyYXRvciAiLiIgKCMkIC4gMjEzOTgwKSkj QDk4MyBTcGVjaWZ5IGFzc29jaWF0aW9uIGJldHdlZW4gbm9uLW51bWVyaWMgdmVyc2lvbiBhbmQg aXRzIHByaW9yaXR5LgoKVGhpcyBhc3NvY2lhdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB2ZXJzaW9u IHN0cmluZyBsaWtlICIxLjBwcmUyIiwKIjAuOWFscGhhMSIsIGV0Yy4gIEl0J3MgdXNlZCBieSBg dmVyc2lvbi10by1saXN0JyAod2hpY2ggc2VlKSB0byBjb252ZXJ0IHRoZQpub24tbnVtZXJpYyBw YXJ0IG9mIGEgdmVyc2lvbiBzdHJpbmcgdG8gYW4gaW50ZWdlci4gIEZvciBleGFtcGxlOgoKICAg U3RyaW5nIFZlcnNpb24gICAgSW50ZWdlciBMaXN0IFZlcnNpb24KICAgIjAuOXNuYXBzaG90IiAg ICAgKDAgIDkgLTQpCiAgICIxLjAtZ2l0IiAgICAgICAgICgxICAwIC00KQogICAiMS4wLmN2cyIg ICAgICAgICAoMSAgMCAtNCkKICAgIjEuMHByZTIiICAgICAgICAgKDEgIDAgLTEgMikKICAgIjEu MFBSRTIiICAgICAgICAgKDEgIDAgLTEgMikKICAgIjIyLjhiZXRhMyIgICAgICAgKDIyIDggLTIg MykKICAgIjIyLjggQmV0YTMiICAgICAgKDIyIDggLTIgMykKICAgIjAuOWFscGhhMSIgICAgICAg KDAgIDkgLTMgMSkKICAgIjAuOUFscGhBMSIgICAgICAgKDAgIDkgLTMgMSkKICAgIjAuOSBhbHBo YSIgICAgICAgKDAgIDkgLTMpCgpFYWNoIGVsZW1lbnQgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToK CiAgIChSRUdFWFAgLiBQUklPUklUWSkKCldoZXJlOgoKUkVHRVhQCQlyZWdleHAgdXNlZCB0byBt YXRjaCBub24tbnVtZXJpYyBwYXJ0IG9mIGEgdmVyc2lvbiBzdHJpbmcuCgkJSXQgc2hvdWxkIGJl Z2luIHdpdGggdGhlIGBeJyBhbmNob3IgYW5kIGVuZCB3aXRoIGEgYCQnIHRvCgkJcHJldmVudCBm YWxzZSBoaXRzLiAgTGV0dGVyLWNhc2UgaXMgaWdub3JlZCB3aGlsZSBtYXRjaGluZwoJCVJFR0VY UC4KClBSSU9SSVRZCWEgbmVnYXRpdmUgaW50ZWdlciBzcGVjaWZ5aW5nIG5vbi1udW1lcmljIHBy aW9yaXR5IG9mIFJFR0VYUC4fCihkZWZjb25zdCB2ZXJzaW9uLXJlZ2V4cC1hbGlzdCAnKCgiXlst Ll8rIF0/c25hcHNob3QkIiAuIC00KSAoIl5bLS5fK10kIiAuIC00KSAoIl5bLS5fKyBdP1xcKGN2 c1xcfGdpdFxcfGJ6clxcfHN2blxcfGhnXFx8ZGFyY3NcXCkkIiAuIC00KSAoIl5bLS5fKyBdP3Vu a25vd24kIiAuIC00KSAoIl5bLS5fKyBdP2FscGhhJCIgLiAtMykgKCJeWy0uXysgXT9iZXRhJCIg LiAtMikgKCJeWy0uXysgXT9cXChwcmVcXHxyY1xcKSQiIC4gLTEpKSAoIyQgLiAyMTQxNTQpKSNA MTA5MyBDb252ZXJ0IHZlcnNpb24gc3RyaW5nIFZFUiBpbnRvIGEgbGlzdCBvZiBpbnRlZ2Vycy4K ClRoZSB2ZXJzaW9uIHN5bnRheCBpcyBnaXZlbiBieSB0aGUgZm9sbG93aW5nIEVCTkY6CgogICBW RVJTSU9OIDo6PSBOVU1CRVIgKCBTRVBBUkFUT1IgTlVNQkVSICkqLgoKICAgTlVNQkVSIDo6PSAo MHwxfDJ8M3w0fDV8Nnw3fDh8OSkrLgoKICAgU0VQQVJBVE9SIDo6PSBgdmVyc2lvbi1zZXBhcmF0 b3InICh3aGljaCBzZWUpCgkgICAgICAgfCBgdmVyc2lvbi1yZWdleHAtYWxpc3QnICh3aGljaCBz ZWUpLgoKVGhlIE5VTUJFUiBwYXJ0IGlzIG9wdGlvbmFsIGlmIFNFUEFSQVRPUiBpcyBhIG1hdGNo IGZvciBhbiBlbGVtZW50CmluIGB2ZXJzaW9uLXJlZ2V4cC1hbGlzdCcuCgpFeGFtcGxlcyBvZiB2 YWxpZCB2ZXJzaW9uIHN5bnRheDoKCiAgIDEuMHByZTIgICAxLjAuNy41ICAgMjIuOGJldGEzICAg MC45YWxwaGExICAgNi45LjMwQmV0YSAgIDIuNC5zbmFwc2hvdCAgIC41CgpFeGFtcGxlcyBvZiBp bnZhbGlkIHZlcnNpb24gc3ludGF4OgoKICAgMS4wcHJlcHJlMiAgIDEuMC4uNy41ICAgMjIuOFgz ICAgYWxwaGEzLjIKCkV4YW1wbGVzIG9mIHZlcnNpb24gY29udmVyc2lvbjoKCiAgIFZlcnNpb24g U3RyaW5nICAgIFZlcnNpb24gYXMgYSBMaXN0IG9mIEludGVnZXJzCiAgICIuNSIgICAgICAgICAg ICAgICgwIDUpCiAgICIwLjkgYWxwaGEiICAgICAgICgwICA5IC0zKQogICAiMC45QWxwaEExIiAg ICAgICAoMCAgOSAtMyAxKQogICAiMC45c25hcHNob3QiICAgICAoMCAgOSAtNCkKICAgIjEuMC1n aXQiICAgICAgICAgKDEgIDAgLTQpCiAgICIxLjAuNy41IiAgICAgICAgICgxICAwICA3IDUpCiAg ICIxLjAuY3ZzIiAgICAgICAgICgxICAwIC00KQogICAiMS4wUFJFMiIgICAgICAgICAoMSAgMCAt MSAyKQogICAiMS4wcHJlMiIgICAgICAgICAoMSAgMCAtMSAyKQogICAiMjIuOCBCZXRhMyIgICAg ICAoMjIgOCAtMiAzKQogICAiMjIuOGJldGEzIiAgICAgICAoMjIgOCAtMiAzKQoKU2VlIGRvY3Vt ZW50YXRpb24gZm9yIGB2ZXJzaW9uLXNlcGFyYXRvcicgYW5kIGB2ZXJzaW9uLXJlZ2V4cC1hbGlz dCcuCgooZm4gVkVSKR8KKGRlZmFsaWFzICd2ZXJzaW9uLXRvLWxpc3QgI1syNTcgIlwyMTE7XDIw NAkAXDMwM1wzMDQhXDIxMFwyMTFHCEdZXDIwMyAAXDIxMVwzMDUIR08IXDIzMFwyMDMgAFwzMDYB UFwyNjIBXDMwNwFcMzEwXDMxMQMDA1wzMTIkXDI2NlwyMDNcMjA0MwBcMzAzXDMxMwJcIlwyMTBc MzE0IFwzMTVcMzE2AlwiXDIxNlwzMDVcMzEyXDMxMFwyMTFcMjExAxlcMzExXDMxNwYIBgcjXDIx MVwyNjIDXDIwM1wzMzAAAQVVXDIwM1wzMzAAXDMyMAYHBgZcMzA1XDIyNU8hA0JcMjYyA1wzMDVc MjI1XDI2MgVcMzExXDMyMQYIBgcjXDIxMVwyNjIDXDIwM0EAAQVVXDIwM0EABgYFXDMwNVwyMjVP XDI2MgJcMzA1XDIyNVwyNjIFAQhcMjMwXDIwNEEAXG5cMjYyAVwyMTFcMjAzXDI0MQBcMzExAUBA A1wiXDIwNFwyNDEAXDIxMUFcMjYyAVwyMDJcMjE1AFwyMTFcMjAzXDI1NwBcMjExQEEDQlwyNjID XDIwMkEAXDMxMVwzMjIDXCJcMjAzXDMxNwAEBgdHVVwyMDNcMzE3AFwzMjNcMzI0A1wiXDIyN1wz MDVIXDMyNVpUA0JcMjYyA1wyMDJBAFwzMDNcMzI2BghcIlwyMTBcMjAyQQACXDIzNylcMjY2XDIw NSlcMjA3IiBbdmVyc2lvbi1zZXBhcmF0b3IgY2FzZS1mb2xkLXNlYXJjaCB2ZXJzaW9uLXJlZ2V4 cC1hbGlzdCBlcnJvciAiVmVyc2lvbiBtdXN0IGJlIGEgc3RyaW5nIiAwICIwIiAiXlswLTldIiBu aWwgc3RyaW5nLW1hdGNoIHQgIkludmFsaWQgdmVyc2lvbiBzeW50YXg6IGAlcycgKG11c3Qgc3Rh cnQgd2l0aCBhIG51bWJlcikiIG1hdGNoLWRhdGEgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDBc MzAyXCJcMjA3IiBbVjAgc2V0LW1hdGNoLWRhdGEgdF0gM10gIlswLTldKyIgc3RyaW5nLXRvLW51 bWJlciAiW14wLTldKyIgIl5bLS5fKyBdP1xcKFthLXpBLVpdXFwpJCIgbWF0Y2gtc3RyaW5nIDEg OTcgIkludmFsaWQgdmVyc2lvbiBzeW50YXg6IGAlcyciXSAxMSAoIyQgLiAyMTU0MDgpXSkjQDM0 OCBSZXR1cm4gdCBpZiBMMSwgYSBsaXN0IHNwZWNpZmljYXRpb24gb2YgYSB2ZXJzaW9uLCBpcyBs b3dlciB0aGFuIEwyLgoKTm90ZSB0aGF0IGEgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlIGxpc3Qg KDEpIGlzIGVxdWFsIHRvICgxIDApLAooMSAwIDApLCAoMSAwIDAgMCksIGV0Yy4gIFRoYXQgaXMs IHRoZSB0cmFpbGluZyB6ZXJvcyBhcmUgaW5zaWduaWZpY2FudC4KQWxzbywgYSB2ZXJzaW9uIGdp dmVuIGJ5IHRoZSBsaXN0ICgxKSBpcyBoaWdoZXIgdGhhbiAoMSAtMSksIHdoaWNoIGluCnR1cm4g aXMgaGlnaGVyIHRoYW4gKDEgLTIpLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAoMSAtMykuCgooZm4g TDEgTDIpHwooZGVmYWxpYXMgJ3ZlcnNpb24tbGlzdC08ICNbNTE0ICIBXDIwMxsAXDIxMVwyMDMb AAFAAUBVXDIwMxsAAUFcMjYyAlwyMTFBXDI2MgFcMjAyAAABXDIwMykAXDIxMVwyMDMpAAFAAUBX XDIwNwFcMjA0MwBcMjExXDIwNDMAXDMwMFwyMDcBXDIwMz0AXDMwMQIhXDMwMldcMjA3XDMwMlwz MDECIVdcMjA3IiBbbmlsIHZlcnNpb24tbGlzdC1ub3QtemVybyAwXSA1ICgjJCAuIDIxNzQ1Nyld KSNAMzQ2IFJldHVybiB0IGlmIEwxLCBhIGxpc3Qgc3BlY2lmaWNhdGlvbiBvZiBhIHZlcnNpb24s IGlzIGVxdWFsIHRvIEwyLgoKTm90ZSB0aGF0IGEgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlIGxp c3QgKDEpIGlzIGVxdWFsIHRvICgxIDApLAooMSAwIDApLCAoMSAwIDAgMCksIGV0Yy4gIFRoYXQg aXMsIHRoZSB0cmFpbGluZyB6ZXJvcyBhcmUgaW5zaWduaWZpY2FudC4KQWxzbywgYSB2ZXJzaW9u IGdpdmVuIGJ5IHRoZSBsaXN0ICgxKSBpcyBoaWdoZXIgdGhhbiAoMSAtMSksIHdoaWNoIGluCnR1 cm4gaXMgaGlnaGVyIHRoYW4gKDEgLTIpLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAoMSAtMykuCgoo Zm4gTDEgTDIpHwooZGVmYWxpYXMgJ3ZlcnNpb24tbGlzdC09ICNbNTE0ICIBXDIwMxsAXDIxMVwy MDMbAAFAAUBVXDIwMxsAAUFcMjYyAlwyMTFBXDI2MgFcMjAyAAABXDIwMyUAXDIxMVwyMDMlAFwz MDBcMjA3AVwyMDQuAFwyMTE/XDIwNj0AAVwyMDM4AFwzMDECIVwzMDJVXDIwN1wzMDEBIVwzMDJV XDIwNyIgW25pbCB2ZXJzaW9uLWxpc3Qtbm90LXplcm8gMF0gNCAoIyQgLiAyMTgwMzIpXSkjQDMx NiBSZXR1cm4gdCBpZiBMMSwgYSBsaXN0IHNwZWNpZmljYXRpb24gb2YgYSB2ZXJzaW9uLCBpcyBs b3dlciBvciBlcXVhbCB0byBMMi4KCk5vdGUgdGhhdCBpbnRlZ2VyIGxpc3QgKDEpIGlzIGVxdWFs IHRvICgxIDApLCAoMSAwIDApLCAoMSAwIDAgMCksCmV0Yy4gIFRoYXQgaXMsIHRoZSB0cmFpbGlu ZyB6ZXJvZXMgYXJlIGluc2lnbmlmaWNhbnQuICBBbHNvLCBpbnRlZ2VyCmxpc3QgKDEpIGlzIGdy ZWF0ZXIgdGhhbiAoMSAtMSkgd2hpY2ggaXMgZ3JlYXRlciB0aGFuICgxIC0yKQp3aGljaCBpcyBn cmVhdGVyIHRoYW4gKDEgLTMpLgoKKGZuIEwxIEwyKR8KKGRlZmFsaWFzICd2ZXJzaW9uLWxpc3Qt PD0gI1s1MTQgIgFcMjAzGwBcMjExXDIwMxsAAUABQFVcMjAzGwABQVwyNjICXDIxMUFcMjYyAVwy MDIAAAFcMjAzKQBcMjExXDIwMykAAUABQFdcMjA3AVwyMDQyAFwyMTE/XDIwNkEAAVwyMDM8AFwz MDACIVwzMDFYXDIwN1wzMDFcMzAwAiFYXDIwNyIgW3ZlcnNpb24tbGlzdC1ub3QtemVybyAwXSA1 ICgjJCAuIDIxODU5NyldKSNAMTQxIFJldHVybiB0aGUgZmlyc3Qgbm9uLXplcm8gZWxlbWVudCBv ZiBMU1QsIHdoaWNoIGlzIGEgbGlzdCBvZiBpbnRlZ2Vycy4KCklmIGFsbCBMU1QgZWxlbWVudHMg YXJlIHplcm9zIG9yIExTVCBpcyBuaWwsIHJldHVybiB6ZXJvLgoKKGZuIExTVCkfCihkZWZhbGlh cyAndmVyc2lvbi1saXN0LW5vdC16ZXJvICNbMjU3ICJcMjExXDIwMxIAXDIxMUBcMzAwVVwyMDMS AFwyMTFBXDI2MgFcMjAyAABcMjExXDIwMxkAXDIxMUBcMjA3XDMwMFwyMDciIFswXSAzICgjJCAu IDIxOTEzMCldKSNANDAyIFJldHVybiB0IGlmIHZlcnNpb24gVjEgaXMgbG93ZXIgKG9sZGVyKSB0 aGFuIFYyLgoKTm90ZSB0aGF0IHZlcnNpb24gc3RyaW5nICIxIiBpcyBlcXVhbCB0byAiMS4wIiwg IjEuMC4wIiwgIjEuMC4wLjAiLApldGMuICBUaGF0IGlzLCB0aGUgdHJhaWxpbmcgIi4wInMgYXJl IGluc2lnbmlmaWNhbnQuICBBbHNvLCB2ZXJzaW9uCnN0cmluZyAiMSIgaXMgaGlnaGVyIChuZXdl cikgdGhhbiAiMXByZSIsIHdoaWNoIGlzIGhpZ2hlciB0aGFuICIxYmV0YSIsCndoaWNoIGlzIGhp Z2hlciB0aGFuICIxYWxwaGEiLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAiMXNuYXBzaG90Ii4KQWxz bywgIi1HSVQiLCAiLUNWUyIgYW5kICItTk5OIiBhcmUgdHJlYXRlZCBhcyBzbmFwc2hvdCB2ZXJz aW9ucy4KCihmbiBWMSBWMikfCihkZWZhbGlhcyAndmVyc2lvbjwgI1s1MTQgIlwzMDBcMzAxAyFc MzAxAyFcIlwyMDciIFt2ZXJzaW9uLWxpc3QtPCB2ZXJzaW9uLXRvLWxpc3RdIDYgKCMkIC4gMjE5 NDA5KV0pI0A0MTQgUmV0dXJuIHQgaWYgdmVyc2lvbiBWMSBpcyBsb3dlciAob2xkZXIpIHRoYW4g b3IgZXF1YWwgdG8gVjIuCgpOb3RlIHRoYXQgdmVyc2lvbiBzdHJpbmcgIjEiIGlzIGVxdWFsIHRv ICIxLjAiLCAiMS4wLjAiLCAiMS4wLjAuMCIsCmV0Yy4gIFRoYXQgaXMsIHRoZSB0cmFpbGluZyAi LjAicyBhcmUgaW5zaWduaWZpY2FudC4gIEFsc28sIHZlcnNpb24Kc3RyaW5nICIxIiBpcyBoaWdo ZXIgKG5ld2VyKSB0aGFuICIxcHJlIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gIjFiZXRhIiwKd2hp Y2ggaXMgaGlnaGVyIHRoYW4gIjFhbHBoYSIsIHdoaWNoIGlzIGhpZ2hlciB0aGFuICIxc25hcHNo b3QiLgpBbHNvLCAiLUdJVCIsICItQ1ZTIiBhbmQgIi1OTk4iIGFyZSB0cmVhdGVkIGFzIHNuYXBz aG90IHZlcnNpb25zLgoKKGZuIFYxIFYyKR8KKGRlZmFsaWFzICd2ZXJzaW9uPD0gI1s1MTQgIlwz MDBcMzAxAyFcMzAxAyFcIlwyMDciIFt2ZXJzaW9uLWxpc3QtPD0gdmVyc2lvbi10by1saXN0XSA2 ICgjJCAuIDIxOTkxOCldKSNAMzkyIFJldHVybiB0IGlmIHZlcnNpb24gVjEgaXMgZXF1YWwgdG8g VjIuCgpOb3RlIHRoYXQgdmVyc2lvbiBzdHJpbmcgIjEiIGlzIGVxdWFsIHRvICIxLjAiLCAiMS4w LjAiLCAiMS4wLjAuMCIsCmV0Yy4gIFRoYXQgaXMsIHRoZSB0cmFpbGluZyAiLjAicyBhcmUgaW5z aWduaWZpY2FudC4gIEFsc28sIHZlcnNpb24Kc3RyaW5nICIxIiBpcyBoaWdoZXIgKG5ld2VyKSB0 aGFuICIxcHJlIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gIjFiZXRhIiwKd2hpY2ggaXMgaGlnaGVy IHRoYW4gIjFhbHBoYSIsIHdoaWNoIGlzIGhpZ2hlciB0aGFuICIxc25hcHNob3QiLgpBbHNvLCAi LUdJVCIsICItQ1ZTIiBhbmQgIi1OTk4iIGFyZSB0cmVhdGVkIGFzIHNuYXBzaG90IHZlcnNpb25z LgoKKGZuIFYxIFYyKR8KKGRlZmFsaWFzICd2ZXJzaW9uPSAjWzUxNCAiXDMwMFwzMDEDIVwzMDED IVwiXDIwNyIgW3ZlcnNpb24tbGlzdC09IHZlcnNpb24tdG8tbGlzdF0gNiAoIyQgLiAyMjA0NDEp XSkjQDIwNSBBbGlzdCBnaXZpbmcgdGhlIHZlcnNpb24gb2YgZWFjaCB2ZXJzaW9uZWQgYnVpbHRp biBwYWNrYWdlLgpJLmUuIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCBpcyBvZiB0aGUgZm9ybSAo TkFNRSAuIFZFUlNJT04pIHdoZXJlCk5BTUUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBhIHN5bWJv bCwgYW5kIFZFUlNJT04gaXMgaXRzIHZlcnNpb24KYXMgYSBsaXN0Lh8KKGRlZnZhciBwYWNrYWdl LS1idWlsdGluLXZlcnNpb25zIChieXRlLWNvZGUgIlwzMDFcMzAyXDMwMwghQkMhXDIwNyIgW2Vt YWNzLXZlcnNpb24gcHVyZWNvcHkgZW1hY3MgdmVyc2lvbi10by1saXN0XSA0KSAoIyQgLiAyMjA5 NDApKSNANjUgUmV0dXJuIHBhY2thZ2UgZGVzY3JpcHRpb24gZmlsZSBuYW1lIGZvciBwYWNrYWdl IERJUi4KCihmbiBESVIpHwooZGVmYWxpYXMgJ3BhY2thZ2UtLWRlc2NyaXB0aW9uLWZpbGUgI1sy NTcgIlwzMDBcMzAxAiEhXDMwMlwzMDMCXCJcMjAzEwBcMzA0XDMwNQJcIlwyMDIUAFwyMTFcMjYy AVwzMDZQXDIwNyIgW2ZpbGUtbmFtZS1ub25kaXJlY3RvcnkgZGlyZWN0b3J5LWZpbGUtbmFtZSBz dHJpbmctbWF0Y2ggIlxcKFteLl0uKj9cXCktXFwoWzAtOV0rXFwoPzpbLl1bMC05XStcXHxcXCg/ OnByZVxcfGJldGFcXHxhbHBoYVxcKVswLTldK1xcKSpcXCkiIG1hdGNoLXN0cmluZyAxICItcGtn LmVsIl0gNSAoIyQgLiAyMjEyODMpXSkjQDE0MiBJbnZva2UgQk9EWSB3aXRoIE1VVEVYIGhlbGQs IHJlbGVhc2luZyBNVVRFWCB3aGVuIGRvbmUuClRoaXMgaXMgdGhlIHNpbXBsZXN0IHNhZmUgd2F5 IHRvIGFjcXVpcmUgYW5kIHJlbGVhc2UgYSBtdXRleC4KCihmbiBNVVRFWCAmcmVzdCBCT0RZKR8K KGRlZmFsaWFzICd3aXRoLW11dGV4ICcobWFjcm8gLiAjWzM4NSAiXDMwMFwzMDEhXDMwMgEERENc MzAzA0RcMzA0XDMwNQYGQlwzMDYGBkRFRlwyMDciIFttYWtlLXN5bWJvbCAibXV0ZXgiIGxldCBt dXRleC1sb2NrIHVud2luZC1wcm90ZWN0IHByb2duIG11dGV4LXVubG9ja10gMTAgKCMkIC4gMjIx NjQ1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIw NyIgW2Z1bmN0aW9uLXB1dCB3aXRoLW11dGV4IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVk ZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDI2OCBTaG93IGFsbCBzeW1ib2xzIHdob3NlIG5hbWVzIGNv bnRhaW4gbWF0Y2ggZm9yIFJFR0VYUC4KSWYgb3B0aW9uYWwgMm5kIGFyZyBQUkVESUNBVEUgaXMg bm9uLW5pbCwgKGZ1bmNhbGwgUFJFRElDQVRFIFNZTUJPTCkgaXMgZG9uZQpmb3IgZWFjaCBzeW1i b2wgYW5kIGEgc3ltYm9sIGlzIG1lbnRpb25lZCBvbmx5IGlmIHRoYXQgcmV0dXJucyBub24tbmls LgpSZXR1cm4gbGlzdCBvZiBzeW1ib2xzIGZvdW5kLgoKKGZuIFJFR0VYUCAmb3B0aW9uYWwgUFJF RElDQVRFKR8KKGRlZmFsaWFzICdhcHJvcG9zLWludGVybmFsICNbNTEzICJcMzAwQ1wzMDFcMzAy XDMwMwMFBgckIVwyMTBcMzA0AVwyNDJcMzA1XCJcMjA3IiBbbmlsIG1hcGF0b21zIG1ha2UtY2xv c3VyZSAjWzI1NyAiXDMwM1wzMDJcMzA0AyFcIlwyMDUZAFwzMDFcMjAzEwBcMzAxASFcMjA1GQBc MzAwAVwzMDBcMjQyQlwyNDBcMjA3IiBbVjAgVjEgVjIgc3RyaW5nLW1hdGNoIHN5bWJvbC1uYW1l XSA1ICJcblxuKGZuIFNZTUJPTCkiXSBzb3J0IHN0cmluZy1sZXNzcF0gOSAoIyQgLiAyMjIwOTgp XSkjQDYzMSBIYXNoIHRhYmxlIG1hcHBpbmcgcHJlZml4ZXMgdG8gdGhlIGZpbGVzIGluIHdoaWNo IHRoZXkncmUgdXNlZC4KVGhpcyBjYW4gYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGZldGNoIG5v dC15ZXQtbG9hZGVkIGRlZmluaXRpb25zLgpNb3JlIHNwZWNpZmljYWxseSwgaWYgdGhlcmUgaXMg YSB2YWx1ZSBvZiB0aGUgZm9ybSAoRklMRVMuLi4pIGZvcgphIHN0cmluZyBQUkVGSVggaXQgbWVh bnMgdGhhdCB0aGUgRklMRVMgZGVmaW5lIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMKd2l0aCBuYW1l cyB0aGF0IHN0YXJ0IHdpdGggUFJFRklYLgoKTm90ZSB0aGF0IGl0IGRvZXMgbm90IGltcGx5IHRo YXQgYWxsIGRlZmluaXRpb25zIHN0YXJ0aW5nIHdpdGggUFJFRklYIGNhbgpiZSBmb3VuZCBpbiB0 aG9zZSBmaWxlcy4gIEUuZy4gaWYgcHJlZml4IGlzICJnbnVzLWFydGljbGUtIiB0aGVyZSBtaWdo dApzdGlsbCBiZSBkZWZpbml0aW9ucyBvZiB0aGUgZm9ybSAiZ251cy1hcnRpY2xlLXRvdG8tdGl0 aSIgaW4gb3RoZXIgZmlsZXMsCndoaWNoIHdvdWxkIHByZXN1bWFibHkgYXBwZWFyIGluIHRoaXMg dGFibGUgdW5kZXIgYW5vdGhlciBwcmVmaXggc3VjaCBhcwoiZ251cy0iIG9yICJnbnVzLWFydGlj bGUtdG90by0iLh8KKGRlZnZhciBkZWZpbml0aW9uLXByZWZpeGVzIChtYWtlLWhhc2gtdGFibGUg OnRlc3QgJ2VxdWFsKSAoIyQgLiAyMjI2NTApKSNANTUgUmVnaXN0ZXIgdGhhdCBGSUxFIHVzZXMg UFJFRklYRVMuCgooZm4gRklMRSBQUkVGSVhFUykfCihkZWZhbGlhcyAncmVnaXN0ZXItZGVmaW5p dGlvbi1wcmVmaXhlcyAjWzUxNCAiXDIxMVwyMTFcMjA1GQBcMjExQFwzMDEBBVwzMDIECFwiQggj XDIxMAFBXDI2NlwyMDJcMjAyAQBcMjA3IiBbZGVmaW5pdGlvbi1wcmVmaXhlcyBwdXRoYXNoIGdl dGhhc2hdIDEwICgjJCAuIDIyMzM1OSldKSNAMjIgU2VwYXJhdG9yIGZvciBtZW51cy4fCihkZWZj b25zdCBtZW51LWJhci1zZXBhcmF0b3IgJygiLS0iKSAoIyQgLiAyMjM1ODQpKQooYnl0ZS1jb2Rl ICJcMzAwXDMwMVwzMDJcMzAzICEhQCFcMjAzEABcMzA0XDMwNSFcMjEwXDMwMFwyMDciIFtoYXNo LXRhYmxlLXAgcmVhZC1mcm9tLXN0cmluZyBwcmluMS10by1zdHJpbmcgbWFrZS1oYXNoLXRhYmxl IHByb3ZpZGUgaGFzaHRhYmxlLXByaW50LXJlYWRhYmxlXSA0KSNAMzAxIFByb2R1Y2UgdGhlIGNh bm9uaWNhbCBmaWxlIG5hbWUgZm9yIEZJTEUgZnJvbSBpdHMgTVNZUyBmb3JtLgoKT24gc3lzdGVt cyBvdGhlciB0aGFuIE1TLVdpbmRvd3MsIGp1c3QgcmV0dXJucyBGSUxFLgpPbiBNUy1XaW5kb3dz LCBjb252ZXJ0cyAvZC9mb28vYmFyIGZvcm0gb2YgZmlsZSBuYW1lcwpwYXNzZWQgYnkgTVNZUyBN YWtlIGludG8gZDovZm9vL2JhciB0aGF0IEVtYWNzIGNhbiBncm9rLgoKVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgZnJvbSBsaXNwL01ha2VmaWxlIGFuZCBsZWltL01ha2VmaWxlLgoKKGZuIEZJTEUp HwooZGVmYWxpYXMgJ3VubXN5cy0tZmlsZS1uYW1lICNbMjU3ICIIXDMwMT1cMjAzGQBcMzAyXDMw MwJcIlwyMDMZAFwyMTFcMzA0XDMwNU9cMzA2AlwzMDVcMzA3T1FcMjYyAVwyMDciIFtzeXN0ZW0t dHlwZSB3aW5kb3dzLW50IHN0cmluZy1tYXRjaCAiXFxgL1thLXpBLVpdLyIgMSAyICI6IiBuaWxd IDYgKCMkIC4gMjIzODI1KV0pI0AyOTAgUmV0dXJuIGEgImZsYXR0ZW5lZCIgY29weSBvZiBUUkVF LgpJbiBvdGhlciB3b3JkcywgcmV0dXJuIGEgbGlzdCBvZiB0aGUgbm9uLW5pbCB0ZXJtaW5hbCBu b2Rlcywgb3IKbGVhdmVzLCBvZiB0aGUgdHJlZSBvZiBjb25zIGNlbGxzIHJvb3RlZCBhdCBUUkVF LiAgTGVhdmVzIGluIHRoZQpyZXR1cm5lZCBsaXN0IGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBp biBUUkVFLgoKKGZsYXR0ZW4tdHJlZSBcPScoMSAoMiAuIDMpIG5pbCAoNCA1ICg2KSkgNykpCj0+ ICgxIDIgMyA0IDUgNiA3KQoKKGZuIFRSRUUpHwooZGVmYWxpYXMgJ2ZsYXR0ZW4tdHJlZSAjWzI1 NyAiXDMwMAE6XDIwMysAAVwyMTFBXDI2MgNcMjQyXDIxMTpcMjAzHgBcMjExQQNCXDI2MgNcMjEx QFwyNjIBXDIwMlxmAFwyMTFcMjAzJwBcMjExAkJcMjYyAlwyMTBcMjAyAQABXDIwMzQAAQFCXDI2 MgFcMjExXDIzN1wyMDciIFtuaWxdIDUgKCMkIC4gMjI0MzE5KV0pCihkZWZhbGlhcyAnZmxhdHRl bi1saXN0ICdmbGF0dGVuLXRyZWUpI0AxMTIgVHJpbSBTVFJJTkcgb2YgbGVhZGluZyBzdHJpbmcg bWF0Y2hpbmcgUkVHRVhQLgoKUkVHRVhQIGRlZmF1bHRzIHRvICJbIFx0XG5ccl0rIi4KCihmbiBT VFJJTkcgJm9wdGlvbmFsIFJFR0VYUCkfCihkZWZhbGlhcyAnc3RyaW5nLXRyaW0tbGVmdCAjWzUx MyAiXDMwMFwzMDECXDIwNgcAXDMwMlwzMDNRA1wiXDIwMxQAAVwzMDRcMjI1XDMwNU9cMjA3AVwy MDciIFtzdHJpbmctbWF0Y2ggIlxcYFxcKD86IiAiWyAJXG4NXSsiICJcXCkiIDAgbmlsXSA2ICgj JCAuIDIyNDgzNSldKSNAMTE0IFRyaW0gU1RSSU5HIG9mIHRyYWlsaW5nIHN0cmluZyBtYXRjaGlu ZyBSRUdFWFAuCgpSRUdFWFAgZGVmYXVsdHMgdG8gICJbIFx0XG5ccl0rIi4KCihmbiBTVFJJTkcg Jm9wdGlvbmFsIFJFR0VYUCkfCihkZWZhbGlhcyAnc3RyaW5nLXRyaW0tcmlnaHQgI1s1MTMgIlwz MDABXDIwNgYAXDMwMVwzMDJRAlwzMDNcMzA0AwMDXDMwNSRcMjY2XDIwM1wyMTFcMjAzGwACXDMw NgJPXDIwNwJcMjA3IiBbIlxcKD86IiAiWyAJXG4NXSsiICJcXClcXCciIG5pbCBzdHJpbmctbWF0 Y2ggdCAwXSAxMCAoIyQgLiAyMjUxMTIpXSkjQDE3NSBUcmltIFNUUklORyBvZiBsZWFkaW5nIGFu ZCB0cmFpbGluZyBzdHJpbmdzIG1hdGNoaW5nIFRSSU0tTEVGVCBhbmQgVFJJTS1SSUdIVC4KClRS SU0tTEVGVCBhbmQgVFJJTS1SSUdIVCBkZWZhdWx0IHRvICJbIFx0XG5ccl0rIi4KCihmbiBTVFJJ TkcgJm9wdGlvbmFsIFRSSU0tTEVGVCBUUklNLVJJR0hUKR8KKGRlZmFsaWFzICdzdHJpbmctdHJp bSAjWzc2OSAiXDMwMFwzMDEEA1wiA1wiXDIwNyIgW3N0cmluZy10cmltLWxlZnQgc3RyaW5nLXRy aW0tcmlnaHRdIDcgKCMkIC4gMjI1NDEwKV0pI0A2MCBTdGFuZGFyZCByZWdleHAgZ3VhcmFudGVl ZCBub3QgdG8gbWF0Y2ggYW55IHN0cmluZyBhdCBhbGwuHwooZGVmY29uc3QgcmVnZXhwLXVubWF0 Y2hhYmxlICJcXGBhXFxgIiAoIyQgLiAyMjU2OTUpKSNAMjg2IFJ1biBIT09LLCBjYXRjaGluZyBl cnJvcnMsIGFuZCBxdWVyeWluZyB0aGUgdXNlciBhYm91dCB3aGV0aGVyIHRvIGNvbnRpbnVlLgpJ ZiBhIGZ1bmN0aW9uIGluIEhPT0sgc2lnbmFscyBhbiBlcnJvciwgdGhlIHVzZXIgd2lsbCBiZSBw cm9tcHRlZAp3aGV0aGVyIHRvIGNvbnRpbnVlIG9yIG5vdC4gIElmIHRoZSB1c2VyIGRvZXNuJ3Qg cmVzcG9uZCwKZXZhbHVhdGlvbiB3aWxsIGNvbnRpbnVlIGlmIHRoZSB1c2VyIGRvZXNuJ3QgcmVz cG9uZCB3aXRoaW4gZml2ZQpzZWNvbmRzLgoKKGZuIEhPT0spHwooZGVmYWxpYXMgJ3J1bi1ob29r LXF1ZXJ5LWVycm9yLXdpdGgtdGltZW91dCAjWzI1NyAiXDMwMAFcMzAxXCJcMjA3IiBbcnVuLWhv b2std3JhcHBlZCAjWzI1NyAiXDMwMDELAFwyMTEgMFwyMTBcMjAyHABcMzAxXDMwMlwzMDMDXCJc MzA0XDMwNSM/XDIwNRoAXDMwNgEhXDI2NgJcMzA3XDIwNyIgWyhlcnJvcikgeS1vci1uLXAtd2l0 aC10aW1lb3V0IGZvcm1hdCAiRXJyb3IgJXM7IGNvbnRpbnVlPyIgNSB0IGVycm9yIG5pbF0gNiAi XG5cbihmbiBGVU4pIl1dIDQgKCMkIC4gMjI1ODE0KV0pI0AyMTEgRmlsbCBzdHJpbmcgU1RSIHRv IGBmaWxsLWNvbHVtbicuClRoaXMgaXMgaW50ZW5kZWQgZm9yIHZlcnkgc2ltcGxlIGZpbGxpbmcg d2hpbGUgYm9vdHN0cmFwcGluZwpFbWFjcyBpdHNlbGYsIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGFs bCB0aGUgY3VzdG9taXphdGlvbiBvcHRpb25zCm9mIGZpbGwuZWwgKGZvciBleGFtcGxlIGBmaWxs LXJlZ2lvbicpLgoKKGZuIFNUUikfCihkZWZhbGlhcyAnaW50ZXJuYWwtLWZpbGwtc3RyaW5nLXNp bmdsZS1saW5lICNbMjU3ICJcMjExRwhXXDIwMwgAXDIwNwgBR14BXDMwMQJPAgJcMzAyT1wzMDNc MzA0A1wiXDIwMycAXDMwNVwzMDZcMzAyXDIxMQVcMzA3JVwyNjICXDIwMlQAXDMwM1wzMTACXCJc MjAzPAABXDMwNlBcMjYyAlwzMTFcMzA3AlwiXDI2MgFcMjAyVABcMzAzXDMxMgNcIlwyMDNUAFwz MTFcMzEzA1wiAVBcMjYyAVwzMDVcMzA2XDMwMlwyMTEFXDMwNyVcMjYyAgFcMzE0AiFQXDIwNyIg W2ZpbGwtY29sdW1uIDAgbmlsIHN0cmluZy1tYXRjaCAiXFwoIFxcKSQiIHJlcGxhY2UtbWF0Y2gg IlxuIiAxICJeIFxcKC4qXFwpIiBtYXRjaC1zdHJpbmcgIi4qXFwoIFxcKC4rXFwpXFwpJCIgMiBp bnRlcm5hbC0tZmlsbC1zdHJpbmctc2luZ2xlLWxpbmVdIDEwICgjJCAuIDIyNjM4NildKSNAMzM0 IEZvcm1hdCBhIHNpbmdsZSBsaW5lIGZyb20gYSBkb2N1bWVudGF0aW9uIHN0cmluZyBvdXQgb2Yg U1RSSU5HIGFuZCBPQkpFQ1RTLgpTaWduYWwgYW4gZXJyb3IgaWYgU1RSSU5HIGNvbnRhaW5zIGEg bmV3bGluZS4KVGhpcyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBBdm9pZCB1 c2luZyB0aGlzIGZvciB0aGUKZmlyc3QgbGluZSBvZiBhIGRvY3N0cmluZzsgdGhlIGZpcnN0IGxp bmUgc2hvdWxkIGJlIGEgY29tcGxldGUKc2VudGVuY2UgKHNlZSBJbmZvIG5vZGUgYChlbGlzcCkg RG9jdW1lbnRhdGlvbiBUaXBzJykuCgooZm4gU1RSSU5HICZyZXN0IE9CSkVDVFMpHwooZGVmYWxp YXMgJ2ludGVybmFsLS1mb3JtYXQtZG9jc3RyaW5nLWxpbmUgI1szODUgIlwzMDBcMzAxA1wiXDIw M1xmAFwzMDJcMzAzA1wiXDIxMFwzMDRcMzA1XDMwNgQEIyFcMjA3IiBbc3RyaW5nLW1hdGNoICJc biIgZXJyb3IgIlVuYWJsZSB0byBmaWxsIHN0cmluZyBjb250YWluaW5nIG5ld2xpbmU6ICVTIiBp bnRlcm5hbC0tZmlsbC1zdHJpbmctc2luZ2xlLWxpbmUgYXBwbHkgZm9ybWF0XSA3ICgjJCAuIDIy NzAzMildKSNANDkgUmV0dXJuIG5vbi1uaWwgaWYgRW1hY3MgaGFzIGxpYmphbnNzb24gc3VwcG9y dC4fCihkZWZhbGlhcyAnanNvbi1hdmFpbGFibGUtcCAjWzAgIlwzMDBcMzAxIVwyMDURAFwzMDIx DwBcMzAzMFwyMTBcMzA0XDIwN1wyMTBcMzA1XDIwNyIgW2Zib3VuZHAganNvbi1zZXJpYWxpemUg KGpzb24tdW5hdmFpbGFibGUpICJ0cnVlIiB0IG5pbF0gMiAoIyQgLiAyMjc2MTMpXSkjQDE1NiBS ZXR1cm4gT0JKRUNUIGFzIGEgbGlzdC4KSWYgT0JKRUNUIGlzIGFscmVhZHkgYSBsaXN0LCByZXR1 cm4gT0JKRUNUIGl0c2VsZi4gIElmIGl0J3MKbm90IGEgbGlzdCwgcmV0dXJuIGEgb25lLWVsZW1l bnQgbGlzdCBjb250YWluaW5nIE9CSkVDVC4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ2Vuc3Vy ZS1saXN0ICNbMjU3ICJcMjExPFwyMDMGAFwyMDdcMjExQ1wyMDciIFtdIDIgKCMkIC4gMjI3ODI4 KV0pI0AyNTIgTGlrZSBgcHJvZ24nLCBidXQgZGlzcGxheSBNRVNTQUdFIGlmIEJPRFkgdGFrZXMg bG9uZ2VyIHRoYW4gVElNRU9VVCBzZWNvbmRzLgpUaGUgTUVTU0FHRSBmb3JtIHdpbGwgYmUgZXZh bHVhdGVkIGltbWVkaWF0ZWx5LCBidXQgdGhlIHJlc3VsdGluZwpzdHJpbmcgd2lsbCBiZSBkaXNw bGF5ZWQgb25seSBpZiBCT0RZIHRha2VzIGxvbmdlciB0aGFuIFRJTUVPVVQgc2Vjb25kcy4KCihm biAodGltZW91dCBtZXNzYWdlKSAmcmVzdCBib2R5KR8KKGRlZmFsaWFzICd3aXRoLWRlbGF5ZWQt bWVzc2FnZSAnKG1hY3JvIC4gI1szODUgIlwzMDACQANBQFwzMDFcMzAyBUJCRlwyMDciIFtmdW5j YWxsLXdpdGgtZGVsYXllZC1tZXNzYWdlIGxhbWJkYSBuaWxdIDggKCMkIC4gMjI4MDY2KV0pKQoo Ynl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgt ZGVsYXllZC1tZXNzYWdlIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDFdIDQpI0AyNjYgUmV0dXJuIG5p bCBpZiBGVU5DIGlzIG5vdCBhIGZ1bmN0aW9uIGFsaWFzLgpJZiBGVU5DIGlzIGEgZnVuY3Rpb24g YWxpYXMsIHJldHVybiB0aGUgZnVuY3Rpb24gYWxpYXMgY2hhaW4uCgpJZiB0aGUgZnVuY3Rpb24g YWxpYXMgY2hhaW4gY29udGFpbnMgbG9vcHMsIGFuIGVycm9yIHdpbGwgYmUKc2lnbmFsZWQuICBJ ZiBOT0VSUk9SLCB0aGUgbm9uLWxvb3AgcGFydHMgb2YgdGhlIGNoYWluIGlzIHJldHVybmVkLgoK KGZuIEZVTkMgJm9wdGlvbmFsIE5PRVJST1IpHwooZGVmYWxpYXMgJ2Z1bmN0aW9uLWFsaWFzLXAg I1s1MTMgIlwzMDACXDMwMTJAAAM5XDIwMz4AA0tcMjExXDI2MgVcMjAzPgADOVwyMDM+AAMCPlwy MDQkAAMBPVwyMDM2AAJcMjAzMABcMzAyXDMwMQNcIlwyMTBcMjAyNgBcMzAzXDMwNAJDXCJcMjEw AwJCXDI2MgJcMjAyBgABMFwyMzdcMjA3IiBbbmlsIGxvb3AgdGhyb3cgc2lnbmFsIGN5Y2xpYy1m dW5jdGlvbi1pbmRpcmVjdGlvbl0gNyAoIyQgLiAyMjg1NjEpXSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBmdW5jdGlvbi1hbGlhcy1wIHNpZGUt ZWZmZWN0LWZyZWUgdF0gNCkjQDI3MCBTYXkgd2hldGhlciBPQkpFQ1QgaGFzIGEgcmVhZGFibGUg c3ludGF4LgpUaGlzIG1lYW5zIHRoYXQgT0JKRUNUIGNhbiBiZSBwcmludGVkIG91dCBhbmQgdGhl biByZWFkIGJhY2sKYWdhaW4gYnkgdGhlIExpc3AgcmVhZGVyLiAgVGhpcyBmdW5jdGlvbiByZXR1 cm5zIG5pbCBpZiBPQkpFQ1QgaXMKdW5yZWFkYWJsZSwgYW5kIHRoZSBwcmludGVkIHJlcHJlc2Vu dGF0aW9uIChmcm9tIGBwcmluMScpIG9mCk9CSkVDVCBpZiBpdCBpcyByZWFkYWJsZS4KCihmbiBP QkpFQ1QpHwooZGVmYWxpYXMgJ3JlYWRhYmxlcCAjWzI1NyAiXDMwMTILAFwzMDIYXDMwMwEhKTBc MjA3IiBbcHJpbnQtdW5yZWFkYWJsZS1mdW5jdGlvbiB1bnJlYWRhYmxlICNbNTE0ICJcMzAwXDMw MVwzMDJcIlwyMDciIFt0aHJvdyB1bnJlYWRhYmxlIG5pbF0gNSAiXG5cbihmbiBPQkpFQ1QgRVND QVBFKSJdIHByaW4xLXRvLXN0cmluZ10gMyAoIyQgLiAyMjkxNjMpXSkKKGJ5dGUtY29kZSAiXDMw MFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCByZWFkYWJsZXAgc2lkZS1lZmZl Y3QtZnJlZSBlcnJvci1mcmVlXSA0KSNAMjYgRGVsZXRlIHRoZSBjdXJyZW50IGxpbmUuHwooZGVm YWxpYXMgJ2RlbGV0ZS1saW5lICNbMCAiXDMwMCBcMzAwXDMwMSF8XDIwNyIgW3Bvcy1ib2wgMl0g MyAoIyQgLiAyMjk3MzcpXSkjQDQ1OSBFbnN1cmUgdGhhdCB0aGVyZSBhcmUgTElORVMgbnVtYmVy IG9mIGVtcHR5IGxpbmVzIGJlZm9yZSBwb2ludC4KSWYgTElORVMgaXMgbmlsIG9yIG9taXR0ZWQs IGVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgc2luZ2xlIGVtcHR5CmxpbmUgYmVmb3JlIHBvaW50LgoK SWYgY2FsbGVkIGludGVyYWN0aXZlbHksIExJTkVTIGlzIGdpdmVuIGJ5IHRoZSBwcmVmaXggYXJn dW1lbnQuCgpJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIExJTkVTIGVtcHR5IGxpbmVzIGJlZm9yZSBw b2ludCwgdGhlIG51bWJlcgpvZiBlbXB0eSBsaW5lcyBpcyByZWR1Y2VkIHRvIExJTkVTLgoKSWYg cG9pbnQgaXMgbm90IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLCBhIG5ld2xpbmUgY2hhcmFj dGVyCmlzIGluc2VydGVkIGJlZm9yZSBhZGp1c3RpbmcgdGhlIG51bWJlciBvZiBlbXB0eSBsaW5l cy4KCihmbiAmb3B0aW9uYWwgTElORVMpHwooZGVmYWxpYXMgJ2Vuc3VyZS1lbXB0eS1saW5lcyAj WzI1NiAiblwyMDQHAFwzMDBjXDIxMFwyMTFcMjA2XGYAXDMwMVwyMTJcMzAyXDMwM1wzMDRcMzA1 I1wyMDMbAGBcMzA2XFxcMjAyHABlKWABWgJWXDIwMy8AYGBgA1oEWlp8XDIwN2ABWgJXXDIwNUAA XDMwNwJgA1paXDMxMFwiY1wyMDciIFsiXG4iIDEgcmUtc2VhcmNoLWJhY2t3YXJkICJbXlxuXSIg bmlsIHQgMiBtYWtlLXN0cmluZyAxMF0gNyAoIyQgLiAyMjk4NDcpICJwIl0pI0AyMTYgU3BsaXQg U1RSSU5HIGludG8gYSBsaXN0IG9mIGxpbmVzLgpJZiBPTUlULU5VTExTLCBlbXB0eSBsaW5lcyB3 aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0cy4KSWYgS0VFUC1ORVdMSU5FUywgZG9uJ3Qg c3RyaXAgdHJhaWxpbmcgbmV3bGluZXMgZnJvbSB0aGUgcmVzdWx0CmxpbmVzLgoKKGZuIFNUUklO RyAmb3B0aW9uYWwgT01JVC1OVUxMUyBLRUVQLU5FV0xJTkVTKR8KKGRlZmFsaWFzICdzdHJpbmct bGluZXMgI1s3NjkgIgJcMzAwXDIzMlwyMDMOAAE/XDIwNXQAXDMwMENcMjA3XDMwMVwzMDJcMjEx BUdXXDIwM3AAXDMwM1wzMDQGBgMjXDIxMVwyMDNTAARcMjAzKwABAVVcMjA0TAAFAgVcMjAzNgAC VFwyMDI3AAJPBFwyMDNGAAVcMjAzRgBcMjExXDMwNFwyMzJcMjA0SwBcMjExBEJcMjYyBFwyMTBc MjExVFwyNjZcMjAyXDIwMhAAAVwzMDJVXDIwM2EABQNCXDI2MgNcMjAyaQAFAlwzMDFPA0JcMjYy AwVHXDI2NlwyMDJcMjAyEAABXDIzN1wyNjZcMjAyXDIwNyIgWyIiIG5pbCAwIHN0cmluZy1zZWFy Y2ggIlxuIl0gOSAoIyQgLiAyMzA1NTkpXSkjQDk4NCBSZXR1cm4gbm9uLW5pbCBpZiBCVUZGRVIt T1ItTkFNRSBtYXRjaGVzIENPTkRJVElPTi4KQ09ORElUSU9OIGlzIGVpdGhlcjoKLSB0aGUgc3lt Ym9sIHQsIHRvIGFsd2F5cyBtYXRjaCwKLSB0aGUgc3ltYm9sIG5pbCwgd2hpY2ggbmV2ZXIgbWF0 Y2hlcywKLSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdG8gbWF0Y2ggYSBidWZmZXIgbmFtZSwKLSBh IHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgYnVmZmVyIG9iamVjdCBhbmQgQVJHIGFz CiAgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBub24tbmlsIGlmIHRoZSBidWZmZXIgbWF0Y2hlcywK LSBhIGNvbnMtY2VsbCwgd2hlcmUgdGhlIGNhciBkZXNjcmliZXMgaG93IHRvIGludGVycHJldCB0 aGUgY2RyLgogIFRoZSBjYXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICogYGRlcml2 ZWQtbW9kZSc6IHRoZSBidWZmZXIgbWF0Y2hlcyBpZiB0aGUgYnVmZmVyJ3MgbWFqb3IgbW9kZQog ICAgaXMgZGVyaXZlZCBmcm9tIHRoZSBtYWpvciBtb2RlIGluIHRoZSBjb25zLWNlbGwncyBjZHIu CiAgKiBgbWFqb3ItbW9kZSc6IHRoZSBidWZmZXIgbWF0Y2hlcyBpZiB0aGUgYnVmZmVyJ3MgbWFq b3IgbW9kZQogICAgaXMgZXEgdG8gdGhlIGNvbnMtY2VsbCdzIGNkci4gIFByZWZlciB1c2luZyBg ZGVyaXZlZC1tb2RlJwogICAgaW5zdGVhZCB3aGVuIGJvdGggY2FuIHdvcmsuCiAgKiBgbm90Jzog dGhlIGNkciBpcyBpbnRlcnByZXRlZCBhcyBhIG5lZ2F0aW9uIG9mIGEgY29uZGl0aW9uLgogICog YGFuZCc6IHRoZSBjZHIgaXMgYSBsaXN0IG9mIHJlY3Vyc2l2ZSBjb25kaXRpb25zLCB0aGF0IGFs bCBoYXZlCiAgICB0byBiZSBtZXQuCiAgKiBgb3InOiB0aGUgY2RyIGlzIGEgbGlzdCBvZiByZWN1 cnNpdmUgY29uZGl0aW9uLCBvZiB3aGljaCBhdAogICAgbGVhc3Qgb25lIGhhcyB0byBiZSBtZXQu CgooZm4gQ09ORElUSU9OIEJVRkZFUi1PUi1OQU1FICZvcHRpb25hbCBBUkcpHwooZGVmYWxpYXMg J2J1ZmZlci1tYXRjaC1wICNbNzcwICJcMzAwAiFcMzAxQ1wyMTFcMzAyXDMwMwMFBgckXDI0MFwy MTBcMjExXDI0MgVDIVwyMDciIFtnZXQtYnVmZmVyIG5pbCBtYWtlLWNsb3N1cmUgI1syNTcgIlwz MDMyXDI3NwBcMjExXDIxMVwyMDVcMjc0AFwyMTFAXDIxMVwzMDQ9XDIwNFwyNjAAXDIxMTtcMjAz JgBcMjExXDMwNVwzMDEhXDMwNlwzMDcDAwNcMzA0JFwyNjZcMjAzXDIwMlwyNTUAXDMxMAEhXDIw M0IAXDMxMQEhQVwzMTI9XDIwMzsAXDIxMVwzMDEhXDIwMlwyNTUAXDIxMVwzMDFcMzAyXCJcMjAy XDI1NQBcMjExOlwyMDNcMjY1AFwyMTFcMjQyXDIxMVwzMTNcMjY3XDIwMlwyNTIAAVwyNDNcMzE0 XDMxNVwzMDFcIgE9XDI2MgFcMjAyXDI1MwABXDI0M1wzMTZcMzE0XDMxNVwzMDFcIgJcIlwyNjIB XDIwMlwyNTMAAVwyNDNcMzAwXDI0MgEhP1wyNjIBXDIwMlwyNTMAAVwyNDNcMzAwXDI0MgEhXDI2 MgFcMjAyXDI1MwABXDI0M1wzMTcyXDI0NQBcMjExXDIxMVwyMDNcMjQyAFwyMTFAXDMwMFwyNDIB QyFcMjA0XDIzMwBcMzIwXDMxN1wzMDZcIlwyMTABQVwyNjZcMjAyXDIwMlwyMTAAXDIxMFwzMDQw XDI2MgFcMjAyXDI1MwBcMzA2XDI2MgFcMjAzXDI2NQBcMzIwXDMwM1wzMDRcIlwyMTABQVwyNjZc MjAyXDIwMgUAXDI2MgEwXDIwNyIgW1YwIFYxIFYyIG1hdGNoIHQgYnVmZmVyLW5hbWUgbmlsIHN0 cmluZy1tYXRjaCBmdW5jdGlvbnAgZnVuYy1hcml0eSAxICNzKGhhc2gtdGFibGUgc2l6ZSA1IHRl c3QgZXEgcmVoYXNoLXNpemUgMS41IHJlaGFzaC10aHJlc2hvbGQgMC44MTI1IHB1cmVjb3B5IHQg ZGF0YSAobWFqb3ItbW9kZSA3OSBkZXJpdmVkLW1vZGUgOTIgbm90IDEwNiBvciAxMTggYW5kIDEy OSkpIGJ1ZmZlci1sb2NhbC12YWx1ZSBtYWpvci1tb2RlIHByb3ZpZGVkLW1vZGUtZGVyaXZlZC1w IGZhaWwgdGhyb3ddIDExICJcblxuKGZuIENPTkRJVElPTlMpIl1dIDExICgjJCAuIDIzMTExMCld KSNAMzQxIFJldHVybiBhIGxpc3Qgb2YgYnVmZmVycyB0aGF0IG1hdGNoIENPTkRJVElPTi4KU2Vl IGBidWZmZXItbWF0Y2gtcCcgZm9yIGRldGFpbHMgb24gQ09ORElUSU9OLiAgQnkgZGVmYXVsdCBh bGwKYnVmZmVycyBhcmUgY2hlY2tlZCwgdGhpcyBjYW4gYmUgcmVzdHJpY3RlZCBieSBwYXNzaW5n IGFuCm9wdGlvbmFsIGFyZ3VtZW50IEJVRkZFUlMsIHNldCB0byBhIGxpc3Qgb2YgYnVmZmVycyB0 byBjaGVjay4KQVJHIGlzIHBhc3NlZCB0byBgYnVmZmVyLW1hdGNoJywgZm9yIHByZWRpY2F0ZSBj b25kaXRpb25zIGluCkNPTkRJVElPTi4KCihmbiBDT05ESVRJT04gJm9wdGlvbmFsIEJVRkZFUlMg QVJHKR8KKGRlZmFsaWFzICdtYXRjaC1idWZmZXJzICNbNzY5ICJcMzAwAlwyMDYHAFwzMDEgXDIx MVwyMDMlAFwyMTFAXDMwMgYGXDMwMwMhBgYjXDIwMx4AXDIxMQNCXDI2MgMBQVwyNjZcMjAyXDIw MgcAXDIxMFwyMDciIFtuaWwgYnVmZmVyLWxpc3QgYnVmZmVyLW1hdGNoLXAgZ2V0LWJ1ZmZlcl0g MTAgKCMkIC4gMjMzMDgwKV0pI0AxODAgUmV0dXJuIHRoZSB2YWx1ZSBvZiBDT0RFIGFuZCBzdGFz aCBpdCBpbiBQTEFDRS4KSWYgUExBQ0UncyB2YWx1ZSBpcyBub24tbmlsLCB0aGVuIGRvbid0IGJv dGhlciBldmFsdWF0aW5nIENPREUKYW5kIHJldHVybiB0aGUgdmFsdWUgZm91bmQgaW4gUExBQ0Ug aW5zdGVhZC4KCihmbiBQTEFDRSAmcmVzdCBDT0RFKR8KKGRlZmFsaWFzICd3aXRoLW1lbW9pemF0 aW9uICcobWFjcm8gLiAjWzM4NSAiXDMwMAJcMzAxXDMwMgRcIlwiXDIwNyIgW2d2LWdldCBtYWtl LWNsb3N1cmUgI1s1MTQgIlwzMDECXDMwMlwzMDAhXDMwMwEhXDIwMw8AXDIxMVwyMDISAFwzMDRc MzA1IVwzMDYFAiECRQEDPVwyMDMkAFwyMTFcMjY2XDIwM1wyMDItAFwzMDcCBERDAlwiXDI2Nlwy MDNFXDIwNyIgW1YwIG9yIG1hY3JvZXhwLXByb2duIG1hY3JvZXhwLWNvbnN0LXAgbWFrZS1zeW1i b2wgInZhbCIgcHJvZ24gbWFjcm9leHAtbGV0Kl0gMTAgIlxuXG4oZm4gR0VUVEVSIFNFVFRFUiki XV0gNyAoIyQgLiAyMzM2MTApXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwz MDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtbWVtb2l6YXRpb24gbGlzcC1pbmRl bnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyAoZ3YtcGxhY2UgYm9keSldIDUpCg== --=-=-= Content-Type: text/plain In GNU Emacs 29.0.60 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars) of 2022-12-03 built on Tumashu Repository revision: 1e36ad9458e8deacfc85da573bb0ca0f270d4802 Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12011000 System Description: Debian GNU/Linux 11 (bullseye) Configured using: 'configure --with-x-toolkit=lucid --with-json' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LANG: zh_CN.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Eat Minor modes in effect: eat--semi-char-mode: t global-git-commit-mode: t magit-auto-revert-mode: t shell-dirtrack-mode: t emms-playing-time-display-mode: t emms-playing-time-mode: t cnfonts-mode: t projectile-mode: t company-posframe-mode: t global-company-mode: t company-mode: t org-super-agenda-mode: t pyim-isearch-mode: t vertico-mode: t savehist-mode: t global-tab-line-mode: t tab-line-mode: t global-so-long-mode: t electric-pair-mode: t pixel-scroll-precision-mode: t recentf-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t mouse-wheel-mode: t file-name-shadow-mode: t context-menu-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/feng/.emacs.d/elpa-29/transient-0.3.7/transient hides /home/feng/emacs/emacs29/lisp/transient Features: (shadow mail-extr emacsbug cursor-sensor eat emacs-helper eh-guix skeleton guix geiser-guile info-look geiser-debug geiser-repl geiser-image geiser-capf geiser-doc geiser-menu geiser-autodoc geiser-edit geiser-completion geiser-eval geiser-connection geiser-syntax scheme geiser-impl help-fns radix-tree geiser-log geiser-popup view geiser-custom geiser-base geiser eh-misc vundo magit-bookmark magit-submodule magit-obsolete magit-popup magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func imenu edebug debug backtrace magit-diff smerge-mode diff diff-mode git-commit log-edit pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor shell server magit-mode transient magit-git magit-section magit-utils aggressive-indent eh-emms emms-player-vlc emms-player-mpv emms-player-mplayer emms-setup emms-librefm-stream emms-librefm-scrobbler emms-playlist-limit emms-i18n emms-history emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks emms-cue emms-mode-line-icon emms-browser emms-volume emms-volume-sndioctl emms-volume-mixerctl emms-volume-pulse emms-volume-amixer emms-playlist-sort emms-last-played emms-player-xine emms-player-mpd tq emms-playing-time emms-lyrics emms-url emms-player-simple emms-streams emms-show-all emms-tag-editor emms-tag-tracktag emms-mark emms-mode-line easy-mmode emms-cache emms-info-native bindat emms-info-exiftool emms-info-tinytag emms-info-metaflac emms-info-opusinfo emms-info-ogginfo emms-info-mp3info emms-info emms-later-do emms-playlist-mode emms-source-playlist emms-source-file locate emms emms-compat el2org cnfonts tempel citre-config citre-lang-fileref citre-tags citre-ctags citre-readtags citre-readtags-tables citre-backend-interface citre-ui-peek color citre-ui-jump citre-common-tag citre-common-util projectile lisp-mnt grep compile ibuf-ext ibuffer ibuffer-loaddefs eh-gnus-common ebdb-message ebdb-gnus nnselect ebdb-mua ebdb-complete ebdb-com crm ebdb-format ebdb-i18n-chn ebdb-i18n ebdb-i18n-basic ebdb inline eieio-base timezone eww url-queue thingatpt mm-url gnus-demon gnus-search eieio-opt cl-extra speedbar ezimage dframe gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg nntp gnus-cite gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-cache gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range message sendmail yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util mail-utils range mm-util mail-prsvr eh-complete company-posframe company-keywords company-etags etags fileloop xref company-gtags company-template company-dabbrev-code company-dabbrev company-files company-capf company edmacro eh-org org-ql peg org-super-agenda ts ht s dash org-habit org-capture ob-python python project treesit ob-org ox-md ox-org ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-element org-persist xdg avl-tree generator autorevert filenotify org-attach org-id org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete pcomplete comint ansi-osc ansi-color org-list org-footnote org-faces org-entities time-date noutline outline icons ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs find-func org-version org-compat org-macs format-spec eh-functions eh-theme modus-vivendi-theme modus-themes eh-basic cal-china-x cal-china lunar solar cal-dst holidays holiday-loaddefs cal-menu calendar cal-loaddefs pyim-basedict pyim-cregexp-utils pyim pyim-cloudim pyim-probe pyim-preview pyim-page posframe pyim-indicator pyim-dregcache pyim-dhashcache sort pyim-dict async pcase pyim-autoselector pyim-process pyim-punctuation pyim-outcome pyim-candidates pyim-cstring pyim-cregexp xr rx pyim-codes pyim-imobjs pyim-pinyin pyim-entered pyim-dcache pyim-pymap pyim-scheme pyim-common wdired dired dired-loaddefs vc vc-dispatcher consult-vertico consult compat-28 compat compat-macs kmacro orderless vertico-directory vertico savehist tab-line switch-window switch-window-mvborder switch-window-asciiart quail help-mode so-long elec-pair bookmark text-property-search pp pixel-scroll cua-base ring recentf tree-widget wid-edit elpa-mirror finder-inf company-posframe-autoloads org-ql-autoloads f-autoloads ov-autoloads vertico-posframe-autoloads standard-themes-autoloads corfu-terminal-autoloads aggressive-indent-autoloads posframe-autoloads company-autoloads paredit-autoloads citre-autoloads dired-ranger-autoloads dired-hacks-utils-autoloads kotlin-mode-autoloads geiser-guile-autoloads org-download-autoloads org-super-agenda-autoloads ht-autoloads pos-tip-autoloads switch-window-autoloads vertico-autoloads ts-autoloads s-autoloads orderless-autoloads liberime-autoloads modus-themes-autoloads xmlgen-autoloads wrap-region-autoloads wgrep-autoloads vundo-autoloads consult-autoloads cape-autoloads recentf-ext-autoloads rainbow-mode-autoloads rainbow-delimiters-autoloads pyim-basedict-autoloads flycheck-autoloads tempel-autoloads popon-autoloads projectile-autoloads emms-autoloads org-contrib-autoloads ox-gfm-autoloads magit-autoloads git-commit-autoloads compat-autoloads guix-autoloads bui-autoloads edit-indirect-autoloads transient-autoloads marginalia-autoloads geiser-autoloads pkg-info-autoloads epl-autoloads elpa-mirror-autoloads el2org-autoloads ebdb-i18n-chn-autoloads ebdb-autoloads pyim-autoloads async-autoloads markdown-mode-autoloads xr-autoloads magit-section-autoloads dash-autoloads with-editor-autoloads ef-themes-autoloads peg-autoloads cnfonts-autoloads cal-china-x-autoloads autopair-autoloads corfu-autoloads adaptive-wrap-autoloads info package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib china-util rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 1037039 194901) (symbols 48 53037 10) (strings 32 552314 5779) (string-bytes 1 9927388) (vectors 16 96033) (vector-slots 8 13241192 54062) (floats 8 1205 139) (intervals 56 1667 0) (buffers 984 16)) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 04:56:08 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 09:56:09 +0000 Received: from localhost ([127.0.0.1]:51456 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1PFg-0007I0-Hz for submit@debbugs.gnu.org; Sat, 03 Dec 2022 04:56:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54984) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1PFd-0007Hc-2t for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 04:56:07 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1PFV-0005VZ-Ot; Sat, 03 Dec 2022 04:55:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=6F0+OPanr5vGzkClvcb0nNXT87gwSJHKQYk0A0C4+Tk=; b=lbChamLDR6FY tLEXRulShXKnom0bOV3SOYABE8YIg0uYzRolL0XADoGF9/SfN7NPw6tkAz1bVi53JUnq1n0gI2CM7 ElbAk1B+Z87YHHfZiM34enBtQ59lI/D+PqdkRAanTWG9GnQ8B3KJTuH8zgbh/Qus2cXBXrR7++P6x OegWCOVA43wjQ10zfkT7MqwjhEHrbLjHnaywV8rhzR+vZYFg7rI8ovq49uRrZDguE/PAR4yi6h/w5 qS3hStmNjzBu/4KfO+UChV6CEG4kDhQYKUTT8NKGdhAtEwVOB53CnsDAaOTrvrkalQJ+2uYGHRnOr Kmm6Z7NNU2N2dA0RRX25oQ==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1PFV-0000gG-81; Sat, 03 Dec 2022 04:55:57 -0500 Date: Sat, 03 Dec 2022 11:55:35 +0200 Message-Id: <83cz90erqg.fsf@gnu.org> From: Eli Zaretskii To: Feng Shu In-Reply-To: <87lenpne48.fsf@163.com> (message from Feng Shu on Sat, 03 Dec 2022 15:24:55 +0800) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Feng Shu > Date: Sat, 03 Dec 2022 15:24:55 +0800 > > This week, I faced an issue about emacs-eat: > > > eat-yank not work well: https://codeberg.org/akib/emacs-eat/issues/9 > > > ------------- > (defun eat-yank (&optional arg) > "Same as `yank', but for Eat. > > ARG is passed to `yank', which see." > (interactive "*P") > (when eat--terminal > (funcall eat--synchronize-scroll-function) > (cl-letf* ((inhibit-read-only t) > (insert-for-yank (symbol-function #'insert-for-yank)) > ((symbol-function #'insert-for-yank) > (lambda (&rest args) > (cl-letf (((symbol-function #'insert) > (lambda (&rest args) > (eat-send-string-as-yank > eat--terminal > (mapconcat (lambda (arg) > (if (stringp arg) > arg > (string arg))) > args ""))))) > (apply insert-for-yank args))))) > (yank arg)))) > --------- > > > After some test with author of emacs-eat, we find that config > > (require 'eat) > (load "subr.el") > > work, while the below config do not work. > > (require 'eat) > (load "subr.elc") > > > we find that C-x C-e insert-for-yank and insert-for-yank-1 works too. > > > so we think subr.elc is not compiled correctly, I use the below > script to compile emacs, do not install and run ~/emacs/emacs29/src/emacs directly Thanks, but what exactly "does not work" in the byte-compiled version of subr.el? Do you have a recipe to reproduce the problem you see without using emacs-eat? If so, please post such a recipe. Because from your report, I don't see how to reproduce the problem and how to investigate it. From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 10:17:59 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 15:17:59 +0000 Received: from localhost ([127.0.0.1]:51857 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1UH8-0004Ht-Nz for submit@debbugs.gnu.org; Sat, 03 Dec 2022 10:17:59 -0500 Received: from knopi.disroot.org ([178.21.23.139]:41568) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1UH6-0004Hn-IR for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 10:17:57 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id E65ED41426; Sat, 3 Dec 2022 16:17:55 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hdVUFyQST7g1; Sat, 3 Dec 2022 16:17:54 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670080674; bh=FFOmuzQ/yBSmArTlkLCXCFg8g2twvErihIX41/X32T0=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=TUcKQJa/ggPwOSw/8pbAO+AJFxtjmKocc3Ca/wsw0BtOtkLB/Bo31sc5opRuZXJCo vvNzzGoyG6YS54tUVUl0DjlMpXfWHj1qemBXLylumT6g13zM/adscs8tOYlE8+cWA/ /ClUGW4upmvMtJp9/LMyeaajb+WEX7v1qNWKX2v1vObmk3IWMI2H01PNirGGhP1acr ZWQoSvyhIsmqWwjgigXq5rDhTKZksfva9W+Ie/l5NXPDDFWQfkVK1Rwz8fPRkz5YRk sEDQuPxY05exV98d9sxU38BSRxKSkgfLcKbNuNVfIpZP+TY19RR9FF0nNDqwpB6CKa WUUY8c+Rtm8MA== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <83cz90erqg.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 03 Dec 2022 11:55:35 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> Date: Sat, 03 Dec 2022 21:10:52 +0600 Message-ID: <87359wr08z.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: >> From: Feng Shu >> Date: Sat, 03 Dec 2022 15:24:55 +0800 >>=20 >> This week, I faced an issue about emacs-eat:=20 >>=20 >>=20 >> eat-yank not work well: https://codeberg.org/akib/emacs-eat/issues/9 >>=20 >>=20 >> ------------- >> (defun eat-yank (&optional arg) >> "Same as `yank', but for Eat. >>=20 >> ARG is passed to `yank', which see." >> (interactive "*P") >> (when eat--terminal >> (funcall eat--synchronize-scroll-function) >> (cl-letf* ((inhibit-read-only t) >> (insert-for-yank (symbol-function #'insert-for-yank)) >> ((symbol-function #'insert-for-yank) >> (lambda (&rest args) >> (cl-letf (((symbol-function #'insert) >> (lambda (&rest args) >> (eat-send-string-as-yank >> eat--terminal >> (mapconcat (lambda (arg) >> (if (stringp arg) >> arg >> (string arg))) >> args ""))))) >> (apply insert-for-yank args))))) >> (yank arg)))) >> --------- >>=20 >>=20 >> After some test with author of emacs-eat, we find that config >>=20 >> (require 'eat) >> (load "subr.el") >>=20 >> work, while the below config do not work. >>=20 >> (require 'eat) >> (load "subr.elc")=20 >>=20 >>=20 >> we find that C-x C-e insert-for-yank and insert-for-yank-1 works too. >>=20 >>=20 >> so we think subr.elc is not compiled correctly, I use the below=20 >> script to compile emacs, do not install and run ~/emacs/emacs29/src/emac= s directly > > Thanks, but what exactly "does not work" in the byte-compiled version of > subr.el? Do you have a recipe to reproduce the problem you see without > using emacs-eat? If so, please post such a recipe. Because from your > report, I don't see how to reproduce the problem and how to investigate i= t. > > > I have figured out a simpler reproduction method, but since I don't have the much information other than the subr.elc file, Feng should verify it. 1. Save the following in a file. =2D-8<---------------cut here---------------start------------->8--- (require 'cl-lib) (defun bug59593-yank (&optional arg) (interactive "*P") (cl-letf* ((inhibit-read-only t) (insert-for-yank (symbol-function #'insert-for-yank)) ((symbol-function #'insert-for-yank) (lambda (&rest args) (cl-letf (((symbol-function #'insert) (lambda (&rest args) (message "%S" (mapconcat (lambda (arg) (if (stringp arg) arg (string arg))) args ""))))) (apply insert-for-yank args))))) (yank arg))) =2D-8<---------------cut here---------------end--------------->8--- 2. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/YOUR/SUBR.EL.GZ 3. Kill something. 4. M-x bug59593-yank. Now you should see the yank text in echo area. 5. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/ATTACHED/SUBR.ELC 6. Kill something. 7. M-x bug59593-yank. The yank text got unexpectedly inserted. Feng, can you precisely specify the commit you're building from? It'll allow to reproducing your problem more easily and precisely. =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOLZvwACgkQVTX89U2I YWuTLw/+Mqgye1GT0Ue0geUQr2/AyhGuurTHvi3PyYeADTGWjRkdBpyYXFY39GZK kxVnKQgb51Chw9CUd7kpYcT6dp/pp5HxjfkQYcWRu2LBnvs9SpMYQyvcxXHJ2hnw /SFvnjppHSEhy72QSgKAnG/2e/PZS9nIfdPIAutCg5XwDWwBdjdtYKqgh4zUjCyQ LLLZz0fxlUQqtE155YafXJEKQXZ7JTzaV/iSpjse9mFryeJVqESoClYaDm81SGk5 8/fPSu6+8Fv8tKZjkElN5oP4A3uW7akHfsHrGgSqtzuy3M7PZ0hnDIkBsSIlbhpo 51IvQdM5u/eB+4kW43g/xh8eiUT2B1uVpuNj9zMiSrduuUKUhJaQDicxl37WCKkW +78XUY2rP8essTbfL2HHsA3J/jFArOjn+hR/XAx2kh6FAsBe/rFAOsuAFSclWOt/ nU7Lg8dKMEb3hs/QqH8Itpkmc0sKYU3ZNCvypv9Xxlvq3uKLR81EeWH1hLGMTHE1 6H8udztjc1f+VHBFrCqGLTL94Im58aDECmsw11AwI1Yq8vRM4Hoejg3AxheqXkKB 4XtWNJ4ctHzunEA1ZtdtT60jiIlUQLYf1Hv8Zz+AFgsOFC9m70qNdP4tE9WNGY5L 4hNf66ZIIZ63CG5Yv5UPmMtaJxNDAm+4Z1015HALXR8rIBfQyA4= =DZaO -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 10:37:44 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 15:37:44 +0000 Received: from localhost ([127.0.0.1]:51942 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1UaG-0004T5-0G for submit@debbugs.gnu.org; Sat, 03 Dec 2022 10:37:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45748) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1UaE-0004Sz-I4 for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 10:37:43 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1Ua6-0003lk-Ph; Sat, 03 Dec 2022 10:37:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Subject:To:From: Date; bh=BeH8U9c4l4+bQvTvNJHt4FtYYxefLdrBSNn9Zk9a5G0=; b=ka6ECZ6Up83FiSkfIAOl VFN2TzIRD/Vfm2QWUBRcn9uAM/0/AQMOkav3aSNpAcQ9gU4j3HVoPSERuZObqDVx83MKVhM1h43Mn XjvhQPnLB4QkKRZcyqS1tFjQzr5u/Vqtd+op5CWmFdTnlzCiip5Lj22sQPGj4deZ5+TTbLHK58DDt sFfieIcr6s66A6ARMmavNrKqSimfE1q/IAXySUZ8FrEgHAux+oVa/akH3PbY4MjV1pnWAm8pentpj HQsmZSqV1J6aNlds45TuuqBRwrhs+EDo2bS121U67TfrNTllWVpBXL2tfRSB4U+fG+J28Rl1NIq46 x07PquJlgg2a2Q==; Received: from [2a0d:6fc2:4de0:4000:d0d7:f3d8:ae2c:a0f4] (helo=[IPv6:::1]) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p1Ua5-0004cC-Rc; Sat, 03 Dec 2022 10:37:34 -0500 Date: Sat, 03 Dec 2022 17:37:31 +0200 From: Eli Zaretskii To: Akib Azmain Turja Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly User-Agent: K-9 Mail for Android In-Reply-To: <87359wr08z.fsf@disroot.org> References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> Message-ID: <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Autocrypt: addr=eliz@gnu.org; keydata= mQENBF+pf4UBCAC6vjkWLSAsQpe8YIGKLQzNOJx/IjGtCdFF8uzmO5jmME+SD8ROuJN+t5KXVw58 uzu75EFD0vHTY9e+udJ2gkpuy0NnzkFcbumdLLo2ERKCoSctZZRhzKXI5z5cHxCqW0B2ygHRrRLt oNlGID7bAgcgSViT1ptGqTXO7zGVu4Airok7dNzcPtHgns8GlR5YAFX0TvE6oGd0l2VPghNeVJKJ OjrbfhoDxl3ucFpqbqMH8z9HTLDOFpz8UaYYUdJMi3xX6vwTZxI2sM2RRVLUpZyllAkSMI4lln1O OgazM/62DJUs/rKIHKBnF6h3/qsJUjUYXaAHbrXY26mWllAd536lABEBAAG0I0VsaSBaYXJldHNr aWkgKGVsaXopIDxlbGl6QGdudS5vcmc+iQE4BBMBAgAiBQJfqX+FAhsDBgsJCAcDAgYVCAIJCgsE FgIDAQIeAQIXgAAKCRCRwSYvAeuNOYUQB/4/iIKKOG45ijNaRoTvmJJZMvj1S07WQxEm7c5SHEeE QbLOAxB9vESOV7sLueuN3oqEndtzyYt4x1WTSBmHFF7h5fcCMjBs41siOIp5Sj/xD0Bvaa0IKGCR SZ7PAo8Mq3wgajXpTpn9vxE2PmtzA8KdEE0K1+f9pVAfOpUIcCl44rIxLUW352XG0y7iz6c/O6LB 1deOKMiKFctKO7pBti1dJEm1ImewLH3H8uTbwspLOs3EB8xhsESxmTidnze68HX2jt+2EeMgCdki NU+LWbexQZPfIS7+ZmE06ll0v6+Jy7ZdTkCCRypKWTnW7pIFsq/p4kybV8O/kHSV6B4vvQBfuQEN BF+pf4UBCACvFrdx/m22lgObypSmSS4TNlNvQnMUorrMmp0U32hv5adt6CKXeMjk05F+GcIfVMrp xqMBn4sEUIXWhhogQJa9ZbWEP/HbS8XjMMbz0Q0Siaty9+DSspK/9u2GWKsz3uQzLCexIJtzmXvj AVmvoMCAU/F2t038ggygjYLRgyLRNLgbbartu2dMkvrfxRjheip60S4S3utOcwUf/qdoa1grNann CFluHr/ftXCeeuGB4H8iO0BXWNby6NZPizxJttx9gdcH8/OmDOJkXyRMTT/3sSem76CSOjfXcz7s aJlg680NQhG5TmuYERjJD4+U02K5RuqTsEnOuWeFy4p+/mslABEBAAGJATYEGAECAAkFAl+pf4UC GwwAIQkQkcEmLwHrjTkWIQTmyQKcNjrUHXh6jruRwSYvAeuNOejsB/9rVegsfEBSRLjeeYXyJrOf dme7BYpYsQCw2vGTnrJTGFQ9HM2zT9+wAENBHWjQPJOptJwo5w4xIbZgwJy0uIN3sV18xbCRSxX0 ZSk8GJG0PrQTCaf2xs0kqsShnkvqyo5QSyUlFUAG7m1o7NUhF95Q89oxGO8JyvR356kqNbzUn0Cq PxKyS42QfC8dyFNgVhVPbZp6aONnUwY5SbtCLJtZCBgvppI9XaBH41BDukSE4GgSLoYsSIGShg4h e+bGypAsGtQ9uwmryUi1gRrDgca3wFo/G0rbJn2ZKoLbGFZivWPVgAgd9/O5sLSPFznOdcRGxEA2 gk7A1ReaJ10PtQz0 X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) On December 3, 2022 5:10:52 PM GMT+02:00, Akib Azmain Turja wrote: >=20 > 1=2E Save the following in a file=2E >=20 > --8<---------------cut here---------------start------------->8--- > (require 'cl-lib) > (defun bug59593-yank (&optional arg) > (interactive "*P") > (cl-letf* ((inhibit-read-only t) > (insert-for-yank (symbol-function #'insert-for-yank)) > ((symbol-function #'insert-for-yank) > (lambda (&rest args) > (cl-letf (((symbol-function #'insert) > (lambda (&rest args) > (message > "%S" > (mapconcat (lambda (arg) > (if (stringp arg) > arg > (string arg))) > args ""))))) > (apply insert-for-yank args))))) > (yank arg))) > --8<---------------cut here---------------end--------------->8--- >=20 > 2=2E emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/YOUR/SUBR=2EEL=2EGZ > 3=2E Kill something=2E > 4=2E M-x bug59593-yank=2E Now you should see the yank text in echo area= =2E > 5=2E emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/ATTACHED/SUBR=2EELC > 6=2E Kill something=2E > 7=2E M-x bug59593-yank=2E The yank text got unexpectedly inserted=2E Am I missing something, or do you redefine a function and then expect it t= o work like you never redefined it? And what do you mean by ATTACHED/SUBR=2EELC? I don't see any attachments = to your message=2E So I'm still confused=2E=2E=2E From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 12:45:22 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 17:45:22 +0000 Received: from localhost ([127.0.0.1]:52449 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WZm-0005Xz-8p for submit@debbugs.gnu.org; Sat, 03 Dec 2022 12:45:22 -0500 Received: from knopi.disroot.org ([178.21.23.139]:46788) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WZk-0005Xt-7y for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 12:45:21 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id B7D8841036; Sat, 3 Dec 2022 18:45:18 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YC_EVQTv0K3T; Sat, 3 Dec 2022 18:45:17 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670089517; bh=txY91UnDxna+zOU1CvqidHkvR3g7E+dS0h6AOS1IyjY=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=CNi6SbRwShzEgNV/jmP/BTqR03jbSi+1iG0ZFfJCB6OZBv4vqlOq9/ccT+Vcf+Al1 WzVemU+7AlE9xvLnGLt3tTdJ3L9KDtSlcEzDdeMOg4dHA6tDsc2MSq/XC5Cd/CGjkX PLk0j9TKOLJAWmVKUnCqxDBKf0HdMUqM8dKAC3am/Bs3hsntj4Ov0/sjBOiNtefWcZ xbdklwREcqa9nrJBUTB9uHOPkdieDXj/fszYzOGzUc8sT6OCdtavkaeCvaSv0LTG4U IVKq4basnJ6c9jixCoQQMfpemueW4QlJfOrycUKtxN7dxfWQNkrC/VoJFcmk+0hCu7 INAiJOlkpmt7A== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> (Eli Zaretskii's message of "Sat, 03 Dec 2022 17:37:31 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> Date: Sat, 03 Dec 2022 23:16:47 +0600 Message-ID: <87v8mspfuo.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: > On December 3, 2022 5:10:52 PM GMT+02:00, Akib Azmain Turja wrote: >>=20 >> 1. Save the following in a file. >>=20 >> --8<---------------cut here---------------start------------->8--- >> (require 'cl-lib) >> (defun bug59593-yank (&optional arg) >> (interactive "*P") >> (cl-letf* ((inhibit-read-only t) >> (insert-for-yank (symbol-function #'insert-for-yank)) >> ((symbol-function #'insert-for-yank) >> (lambda (&rest args) >> (cl-letf (((symbol-function #'insert) >> (lambda (&rest args) >> (message >> "%S" >> (mapconcat (lambda (arg) >> (if (stringp arg) >> arg >> (string arg))) >> args ""))))) >> (apply insert-for-yank args))))) >> (yank arg))) >> --8<---------------cut here---------------end--------------->8--- >>=20 >> 2. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/YOUR/SUBR.EL.GZ >> 3. Kill something. >> 4. M-x bug59593-yank. Now you should see the yank text in echo area. >> 5. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/ATTACHED/SUBR.ELC >> 6. Kill something. >> 7. M-x bug59593-yank. The yank text got unexpectedly inserted. > > Am I missing something, or do you redefine a function and then expect it = to work like you never redefined it? Unexpected: bug59593-yank just inserts the killed text. Expected: bug59593-yank intercepts and shows the killed text in echo area. > > And what do you mean by ATTACHED/SUBR.ELC? I don't see any attachments t= o your message. > I mean, the subr.elc attached in the original file. I'm also attaching the subr.elc I got from Feng Shu on Codeberg. > So I'm still confused... Is it clear now? (Somehow, I think, no.) =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOLhIAACgkQVTX89U2I YWu0WRAAp2bJDlreGEML0PU5W49dJbrYbxhJdRxhmnZezUpV6SUt9w5gvmvf3gVM QxtNg/nn/UERNg7YXrwOvFrcrADL3MpMMNDkKaCGfG49av2uGr+1CkCmu7C1DKwq Yr8Pd4D6ZV83+ybs7T6yqt4Dw3ayrYT+tlN7wAP8ngw9HPjAwTyDbFcQBtGPWxyh nW44rT4ZvsOf0eIQ9laGZGBycNC1mek2hRMBoFrkmyFMYuHNwhp8z+mgnJQ3yVCH LreJ8FQAGWBCoosEg8nfI0qUlFqXpzI+3IY8Gwsivwq7M2nNj/2E/WDA09a2K8h1 e5DcukOXDl/r081uyN5QCca8X2/w8nl/Eol5tDxBbyryp9zkiaJgdYnt/oV14W5t ulmOTOnrQpRM9d6qwlWRqYPH4+vcqWnKIxl8h4UyO38PSL3gk7StpUXsUqe/XurL qva0JSTlfBs2+MB0mu/gFPvss4q7ZzTDOHgfr5i2uk4HSgNZ1MUXDKr0AagNVebd g3RCbvqvansZWTg/L5QyGVrj+iKrCaxtiwGA8m00uTQraKj1uRQ8b5q3Na6/xmi5 N/bCwYIwL4sohRXKxv6ncqaNZHX/mnF4pM1ACei9/3uSsB/ybaP0+lS3DjGh0Mdy bM1hU77AHi3GRLEt1W7GcYiYNNjpFPUNXtv0Ap7+vua+9aMI72o= =kDwb -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 12:51:21 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 17:51:21 +0000 Received: from localhost ([127.0.0.1]:52475 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WfZ-0005dh-58 for submit@debbugs.gnu.org; Sat, 03 Dec 2022 12:51:21 -0500 Received: from knopi.disroot.org ([178.21.23.139]:46766) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WfY-0005db-2k for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 12:51:20 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 1C92441334; Sat, 3 Dec 2022 18:51:19 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id m42X1OhcbRfv; Sat, 3 Dec 2022 18:51:17 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670089877; bh=jMa8831euRIOjVgj+PllD3EaMjjL0XRw6aVuJBLe39Y=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=LuMYmA6WjMXYG84uCefU6M9H14s/aCoiP8muNfyUz0pDBLkajYvWIQ5Y5ixutiNkl 0RAl1qolnBLTHeoXh4xnp8CvHMhxcKjJJJ0tPprY60SAA5GDNvO6ujXr2wdtwkGc44 TA1XAFBhQcklq+6IHlMHUIquvVy6sFr8EvsnhISnPb7uf/RbIZLIAVqaqY/A3pz074 JEsc4sD3s4P8x3OXiRSLumwl5YSpVOXqaE3JPlhjzrPNoQ+tihcjJj33abVEacF/QM 3/mjIYmh2rkQOc3dKRc0q8BsijeGNDDmsVCCKVorEFaEw0p+LwbEmWm6vIJSnxa8IT IlV6x4YuWmt7Q== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> (Eli Zaretskii's message of "Sat, 03 Dec 2022 17:37:31 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> Date: Sat, 03 Dec 2022 23:48:50 +0600 Message-ID: <87tu2cped9.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: > On December 3, 2022 5:10:52 PM GMT+02:00, Akib Azmain Turja wrote: >>=20 >> 1. Save the following in a file. >>=20 >> --8<---------------cut here---------------start------------->8--- >> (require 'cl-lib) >> (defun bug59593-yank (&optional arg) >> (interactive "*P") >> (cl-letf* ((inhibit-read-only t) >> (insert-for-yank (symbol-function #'insert-for-yank)) >> ((symbol-function #'insert-for-yank) >> (lambda (&rest args) >> (cl-letf (((symbol-function #'insert) >> (lambda (&rest args) >> (message >> "%S" >> (mapconcat (lambda (arg) >> (if (stringp arg) >> arg >> (string arg))) >> args ""))))) >> (apply insert-for-yank args))))) >> (yank arg))) >> --8<---------------cut here---------------end--------------->8--- >>=20 >> 2. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/YOUR/SUBR.EL.GZ >> 3. Kill something. >> 4. M-x bug59593-yank. Now you should see the yank text in echo area. >> 5. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/ATTACHED/SUBR.ELC >> 6. Kill something. >> 7. M-x bug59593-yank. The yank text got unexpectedly inserted. > > Am I missing something, or do you redefine a function and then expect it = to work like you never redefined it? Unexpected: bug59593-yank just inserts the killed text. Expected: bug59593-yank intercepts and shows the killed text in echo area. > > And what do you mean by ATTACHED/SUBR.ELC? I don't see any attachments t= o your message. > I mean, the subr.elc attached in the original file. I'm also attaching the subr.elc I got from Feng Shu on Codeberg. > So I'm still confused... Is it clear now? (Somehow, I think, no.) =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOLjAIACgkQVTX89U2I YWtNZxAAud6JHIQBGvrXaKFzyqRUuNlQN7OiLSxk/AW3O0NYeldcPThRCBxXWHnt 4+tPRjkY4eA/jGDR8aEUpYmXmOc7Sw7nX3htO7nMzlIEDAN1a5lgG7QW6ocMlhbY ArQLhRgc3kPIcmJeUE2NtDiThUSqTyzKfokzURJSgGdP0fPLL0+uotfYztTm6ivD 2JNbBu/Ga1KGZ6DsUT15bmnxS2nAlAQbBzJk38d09P/q+oXFHWiCj8+0yRaeNyuU 5X6jE1z+rxjbfhipaTfu8bFVAr+6jY0ZVaBbJ0Rp3H3x+iW3p6ua2izjFFxN0jg3 WjHgjt+hA4+AWwd2+m7lNV34FGyDZ6vbl3CFwpc8zGQ4BBBQDx4ADOo09nyp5tfz v/25f8bagpdor/Sivj/GAwUWLhRtIvenrn7gPd8I1NR8Nb03wN8np/Z00tKNwDO6 AnEUdrswka/Qj006+WbSZe/OUbZCMcYW9QDP/QfbEUpCE7EUjfJyO9icXORvHFWr f4xX+F8aYQXDXKY25l6Kt5m75UPXwmRASKKowmWpCjke02uMVDsDaJbagblx4/1Y hri+SEO7NyqaU1vumoxphK2DqU0AW5IZh1n3rptaUlSk6lB1clbdNVJq9hVPgLe3 tgfij1u7lfMyMfDahRM+Tc2NP4ukgAwDMXM/7V1NbWDLKLVYWbE= =UglF -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 12:51:56 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 17:51:56 +0000 Received: from localhost ([127.0.0.1]:52480 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1Wg8-0005dy-LV for submit@debbugs.gnu.org; Sat, 03 Dec 2022 12:51:56 -0500 Received: from knopi.disroot.org ([178.21.23.139]:55022) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1Wg7-0005ds-4I for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 12:51:55 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 632F14134C; Sat, 3 Dec 2022 18:51:54 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ssTRfl32-ft5; Sat, 3 Dec 2022 18:51:52 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670089912; bh=O3WYTRMzGyO5t1SuyGK8g5DwLSRSZNNCjkl8GWHGkcs=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=IUvUOAZy3rAQH1bVq6j9NCiepSf06K+5ix2ar0iV+LJeBLZph9m23rg4so/7U2AwS fcHS8NZhOnj3Tvr59bOkDFqJwkh+U10au0xoryl5cXRrvEoa3pSFhq6G94/DdxOf5m JZaHKUgBgPzbr29oVU+rk5DGiwdPb16lTht8oW/8ZiLimFdGq4lDuMgbzUvJ2Z1fdm Lf64RyJIchjzH3clzyOH1Znf8yodd+IBXWSfTseDO1USBji+jZ04VSS+YgpqzkILF0 YcQC7YJgRTAW/msEnEPVBG8worlntGdGwntZ1S10JoFQkesjDmlVlotvcyG+g4BNxa wURjwpTT23w7Q== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87tu2cped9.fsf@disroot.org> (Akib Azmain Turja's message of "Sat, 03 Dec 2022 23:48:50 +0600") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87tu2cped9.fsf@disroot.org> Date: Sat, 03 Dec 2022 23:50:18 +0600 Message-ID: <87pmd0peat.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Akib Azmain Turja writes: [...] > I mean, the subr.elc attached in the original file. I'm also attaching > the subr.elc I got from Feng Shu on Codeberg. [...] Ah, I forgot. Now attaching. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=#9-subr.elc Content-Transfer-Encoding: base64 Content-Description: subr.elc O0VMQx0AAAAKOzs7IENvbXBpbGVkCjs7OyBpbiBFbWFjcyB2ZXJzaW9uIDMwLjAuNTAKOzs7IHdp dGggYWxsIG9wdGltaXphdGlvbnMuCgoKI0AxMzgzIFRlbGwgdGhlIGJ5dGUtY29tcGlsZXIgdGhh dCBmdW5jdGlvbiBGTiBpcyBkZWZpbmVkLCBpbiBGSUxFLgpUaGUgRklMRSBhcmd1bWVudCBpcyBu b3QgdXNlZCBieSB0aGUgYnl0ZS1jb21waWxlciwgYnV0IGJ5IHRoZQpgY2hlY2stZGVjbGFyZScg cGFja2FnZSwgd2hpY2ggY2hlY2tzIHRoYXQgRklMRSBjb250YWlucyBhCmRlZmluaXRpb24gZm9y IEZOLiAgKEZJTEUgY2FuIGJlIG5pbCwgYW5kIHRoYXQgZGlzYWJsZXMgdGhpcwpjaGVjay4pCgpG SUxFIGNhbiBiZSBlaXRoZXIgYSBMaXNwIGZpbGUgKGluIHdoaWNoIGNhc2UgdGhlICIuZWwiCmV4 dGVuc2lvbiBpcyBvcHRpb25hbCksIG9yIGEgQyBmaWxlLiAgQyBmaWxlcyBhcmUgZXhwYW5kZWQK cmVsYXRpdmUgdG8gdGhlIEVtYWNzICJzcmMvIiBkaXJlY3RvcnkuICBMaXNwIGZpbGVzIGFyZQpz ZWFyY2hlZCBmb3IgdXNpbmcgYGxvY2F0ZS1saWJyYXJ5JywgYW5kIGlmIHRoYXQgZmFpbHMgdGhl eSBhcmUKZXhwYW5kZWQgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIGNvbnRh aW5pbmcgdGhlCmRlY2xhcmF0aW9uLiAgQSBGSUxFIHdpdGggYW4gImV4dDoiIHByZWZpeCBpcyBh biBleHRlcm5hbCBmaWxlLgpgY2hlY2stZGVjbGFyZScgd2lsbCBjaGVjayBzdWNoIGZpbGVzIGlm IHRoZXkgYXJlIGZvdW5kLCBhbmQgc2tpcAp0aGVtIHdpdGhvdXQgZXJyb3IgaWYgdGhleSBhcmUg bm90LgoKT3B0aW9uYWwgQVJHTElTVCBzcGVjaWZpZXMgRk4ncyBhcmd1bWVudHMsIG9yIGlzIHQg dG8gbm90IHNwZWNpZnkKRk4ncyBhcmd1bWVudHMuICBBbiBvbWl0dGVkIEFSR0xJU1QgZGVmYXVs dHMgdG8gdCwgbm90IG5pbDogYSBuaWwKQVJHTElTVCBzcGVjaWZpZXMgYW4gZW1wdHkgYXJndW1l bnQgbGlzdCwgYW5kIGFuIGV4cGxpY2l0IHQKQVJHTElTVCBpcyBhIHBsYWNlaG9sZGVyIHRoYXQg YWxsb3dzIHN1cHBseWluZyBhIGxhdGVyIGFyZy4KCk9wdGlvbmFsIEZJTEVPTkxZIG5vbi1uaWwg bWVhbnMgdGhhdCBgY2hlY2stZGVjbGFyZScgd2lsbCBjaGVjawpvbmx5IHRoYXQgRklMRSBleGlz dHMsIG5vdCB0aGF0IGl0IGRlZmluZXMgRk4uICBUaGlzIGlzIGludGVuZGVkCmZvciBmdW5jdGlv biBkZWZpbml0aW9ucyB0aGF0IGBjaGVjay1kZWNsYXJlJyBkb2VzIG5vdCByZWNvZ25pemUsCmUu Zy4sIGBkZWZzdHJ1Y3QnLgoKTm90ZSB0aGF0IGZvciB0aGUgcHVycG9zZXMgb2YgYGNoZWNrLWRl Y2xhcmUnLCB0aGlzIHN0YXRlbWVudAptdXN0IGJlIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBv biBhIGxpbmUuCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEluZm8gbm9kZSBgKGVsaXNwKURl Y2xhcmluZyBGdW5jdGlvbnMnLgoKKGZuIEZOIEZJTEUgJnJlc3QgQVJHUykfCihkZWZhbGlhcyAn ZGVjbGFyZS1mdW5jdGlvbiAnKG1hY3JvIC4gI1s2NDIgIlwzMDBcMjA3IiBbbmlsXSA0ICgjJCAu IDg4KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwNVwzMDZcIlwy MTBcMzA0XDMwN1wzMTBcIlwyMDciIFtzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNvbnZlbnRpb24g ZGVjbGFyZS1mdW5jdGlvbiAoZm4gZmlsZSAmb3B0aW9uYWwgYXJnbGlzdCBmaWxlb25seSkgbmls IGRlZmFsaWFzIG5vdCBudWxsIHN4aGFzaCBzeGhhc2gtZXF1YWxdIDQpI0A5MyBFdmFsdWF0ZSBG T1JNLCBleHBlY3RpbmcgaXQgbm90IHRvIHJldHVybi4KSWYgRk9STSBkb2VzIHJldHVybiwgc2ln bmFsIGFuIGVycm9yLgoKKGZuIEZPUk0pHwooZGVmYWxpYXMgJ25vcmV0dXJuICcobWFjcm8gLiAj WzI1NyAiXDMwMAFcMzAxQkJcMjA3IiBbcHJvZzEgKChlcnJvciAiRm9ybSBtYXJrZWQgd2l0aCBg bm9yZXR1cm4nIGRpZCByZXR1cm4iKSldIDQgKCMkIC4gMTc1NyldKSkKKHB1dCAnbm9yZXR1cm4g J2VkZWJ1Zy1mb3JtLXNwZWMgdCkjQDE1NiBFdmFsdWF0ZSBGT1JNLCBleHBlY3RpbmcgYSBjb25z dGFudCByZXR1cm4gdmFsdWUuCklmIEZPUk0gcmV0dXJucyBkaWZmZXJpbmcgdmFsdWVzIHdoZW4g cnVubmluZyB1bmRlciBUZXN0Y292ZXIsClRlc3Rjb3ZlciB3aWxsIHJhaXNlIGFuIGVycm9yLgoK KGZuIEZPUk0pHwooZGVmYWxpYXMgJzF2YWx1ZSAnKG1hY3JvIC4gI1syNTcgIlwyMDciIFtdIDIg KCMkIC4gMjAyMSldKSkKKHB1dCAnMXZhbHVlICdlZGVidWctZm9ybS1zcGVjIHQpI0AzNzcgU2V0 IHRoZSBFZGVidWcgU1BFQyB0byB1c2UgZm9yIHNleHBzIHdoaWNoIGhhdmUgU1lNQk9MIGFzIGhl YWQuCkJvdGggU1lNQk9MIGFuZCBTUEVDIGFyZSB1bmV2YWx1YXRlZC4gIFRoZSBTUEVDIGNhbiBi ZToKMCAoaW5zdHJ1bWVudCBubyBhcmd1bWVudHMpOyB0IChpbnN0cnVtZW50IGFsbCBhcmd1bWVu dHMpOwphIHN5bWJvbCAobmFtaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBFZGVidWcgc3BlY2lmaWNh dGlvbik7IG9yIGEgbGlzdC4KVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGRlc2NyaWJlIHRoZSBh cmd1bWVudCB0eXBlczsgc2VlCkluZm8gbm9kZSBgKGVsaXNwKVNwZWNpZmljYXRpb24gTGlzdCcg Zm9yIGRldGFpbHMuCgooZm4gU1lNQk9MIFNQRUMpHwooZGVmYWxpYXMgJ2RlZi1lZGVidWctc3Bl YyAnKG1hY3JvIC4gI1s1MTQgIlwzMDBcMzAxA0RcMzAyXDMwMQRERlwyMDciIFtwdXQgcXVvdGUg J2VkZWJ1Zy1mb3JtLXNwZWNdIDcgKCMkIC4gMjI3NyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBkZWYtZWRlYnVnLXNwZWMgbGlzcC1pbmRl bnQtZnVuY3Rpb24gMV0gNCkjQDEwNSBEZWZpbmUgYSBuZXcgRWRlYnVnIHNwZWMgZWxlbWVudCBO QU1FIGFzIHNob3J0aGFuZCBmb3IgU1BFQy4KVGhlIFNQRUMgaGFzIHRvIGJlIGEgbGlzdC4KCihm biBOQU1FIFNQRUMpHwooZGVmYWxpYXMgJ2RlZi1lZGVidWctZWxlbS1zcGVjICNbNTE0ICJcMzAw XDMwMVwzMDIEIVwiXDIwMw0AXDMwM1wzMDQhXDIxMFwyMTE6XDIwNBcAXDMwM1wzMDUCXCJcMjEw XDMwNgJcMzA3AyNcMjA3IiBbc3RyaW5nLW1hdGNoICJcXGBbJjpdIiBzeW1ib2wtbmFtZSBlcnJv ciAiRWRlYnVnIHNwZWMgbmFtZSBjYW5ub3Qgc3RhcnQgd2l0aCAnJicgb3IgJzonIiAiRWRlYnVn IHNwZWMgaGFzIHRvIGJlIGEgbGlzdDogJVMiIHB1dCBlZGVidWctZWxlbS1zcGVjXSA2ICgjJCAu IDI4NzMpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9u LXB1dCBkZWYtZWRlYnVnLWVsZW0tc3BlYyBsaXNwLWluZGVudC1mdW5jdGlvbiAxXSA0KSNAODEz IFJldHVybiBhbiBhbm9ueW1vdXMgZnVuY3Rpb24uClVuZGVyIGR5bmFtaWMgYmluZGluZywgYSBj YWxsIG9mIHRoZSBmb3JtIChsYW1iZGEgQVJHUyBET0NTVFJJTkcKSU5URVJBQ1RJVkUgQk9EWSkg aXMgc2VsZi1xdW90aW5nOyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlCmxhbWJkYSBleHBy ZXNzaW9uIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gIFVuZGVyIGxleGljYWwKYmluZGluZywg dGhlIHJlc3VsdCBpcyBhIGNsb3N1cmUuICBSZWdhcmRsZXNzLCB0aGUgcmVzdWx0IGlzIGEKZnVu Y3Rpb24sIGkuZS4sIGl0IG1heSBiZSBzdG9yZWQgYXMgdGhlIGZ1bmN0aW9uIHZhbHVlIG9mIGEK c3ltYm9sLCBwYXNzZWQgdG8gYGZ1bmNhbGwnIG9yIGBtYXBjYXInLCBldGMuCgpBUkdTIHNob3Vs ZCB0YWtlIHRoZSBzYW1lIGZvcm0gYXMgYW4gYXJndW1lbnQgbGlzdCBmb3IgYSBgZGVmdW4nLgpE T0NTVFJJTkcgaXMgYW4gb3B0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdHJpbmcuCiBJZiBwcmVzZW50 LCBpdCBzaG91bGQgZGVzY3JpYmUgaG93IHRvIGNhbGwgdGhlIGZ1bmN0aW9uLgogQnV0IGRvY3Vt ZW50YXRpb24gc3RyaW5ncyBhcmUgdXN1YWxseSBub3QgdXNlZnVsIGluIG5hbWVsZXNzIGZ1bmN0 aW9ucy4KSU5URVJBQ1RJVkUgc2hvdWxkIGJlIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gYGludGVy YWN0aXZlJywgd2hpY2ggc2VlLgpJdCBtYXkgYWxzbyBiZSBvbWl0dGVkLgpCT0RZIHNob3VsZCBi ZSBhIGxpc3Qgb2YgTGlzcCBleHByZXNzaW9ucy4KCihmbiBBUkdTIFtET0NTVFJJTkddIFtJTlRF UkFDVElWRV0gQk9EWSkfCihkZWZhbGlhcyAnbGFtYmRhICcobWFjcm8gLiAjWzEyOCAiXDMwMFwz MDECQkRcMjA3IiBbZnVuY3Rpb24gbGFtYmRhXSA0ICgjJCAuIDMzNjQpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwzMDFcMzA0XDMwNSNcMzA2XDMwMVwzMDdcMzEwI1wyMDci IFtmdW5jdGlvbi1wdXQgbGFtYmRhIGRvYy1zdHJpbmctZWx0IDIgbGlzcC1pbmRlbnQtZnVuY3Rp b24gZGVmdW4gcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgKCZkZWZpbmUgbGFtYmRhLWxpc3QgbGFtYmRh LWRvYyBbJm9wdGlvbmFsICgiaW50ZXJhY3RpdmUiIGludGVyYWN0aXZlKV0gZGVmLWJvZHkpXSA2 KSNAMTk3IEV2YWwgRk9STTEsIEZPUk0yIGFuZCBCT0RZIHNlcXVlbnRpYWxseTsgcmV0dXJuIHZh bHVlIGZyb20gRk9STTIuClRoZSB2YWx1ZSBvZiBGT1JNMiBpcyBzYXZlZCBkdXJpbmcgdGhlIGV2 YWx1YXRpb24gb2YgdGhlCnJlbWFpbmluZyBhcmdzLCB3aG9zZSB2YWx1ZXMgYXJlIGRpc2NhcmRl ZC4KCihmbiBGT1JNMSBGT1JNMiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdwcm9nMiAnKG1hY3Jv IC4gI1s2NDIgIlwzMDADXDMwMQQEQkJFXDIwNyIgW3Byb2duIHByb2cxXSA4ICgjJCAuIDQ1MTAp XSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHByb2cyIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDIgcHV0IGVkZWJ1Zy1mb3Jt LXNwZWMgdF0gNSkjQDUzOCBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdmFyaWFibGUgVkFSIHRv IFZBTFVFLgpWQVIsIHRoZSB2YXJpYWJsZSBuYW1lLCBpcyBsaXRlcmFsIChub3QgZXZhbHVhdGVk KTsKVkFMVUUgaXMgYW4gZXhwcmVzc2lvbjogaXQgaXMgZXZhbHVhdGVkIGFuZCBpdHMgdmFsdWUg cmV0dXJuZWQuClRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgdmFyaWFibGUgaXMgc2VlbiBpbiBidWZm ZXJzCnRoYXQgZG8gbm90IGhhdmUgdGhlaXIgb3duIHZhbHVlcyBmb3IgdGhlIHZhcmlhYmxlLgoK TW9yZSBnZW5lcmFsbHksIHlvdSBjYW4gdXNlIG11bHRpcGxlIHZhcmlhYmxlcyBhbmQgdmFsdWVz LCBhcyBpbgogIChzZXRxLWRlZmF1bHQgVkFSIFZBTFVFIFZBUiBWQUxVRS4uLikKVGhpcyBzZXRz IGVhY2ggVkFSJ3MgZGVmYXVsdCB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZyBWQUxVRS4KVGhl IFZBTFVFIGZvciB0aGUgTnRoIFZBUiBjYW4gcmVmZXIgdG8gdGhlIG5ldyBkZWZhdWx0IHZhbHVl cwpvZiBwcmV2aW91cyBWQVJzLgoKKGZuIFtWQVIgVkFMVUVdLi4uKR8KKGRlZmFsaWFzICdzZXRx LWRlZmF1bHQgJyhtYWNybyAuICNbMTI4ICJcMzAwAVwyMDMcAFwzMDFcMzAyA1wyMTFBXDI2MgVc MjQyRANcMjExQVwyNjIFXDI0MkUBQlwyNjIBXDIwMgEAXDMwMwFcMjM3QlwyMDciIFtuaWwgc2V0 LWRlZmF1bHQgcXVvdGUgcHJvZ25dIDYgKCMkIC4gNDkxOSldKSkKKHB1dCAnc2V0cS1kZWZhdWx0 ICdlZGVidWctZm9ybS1zcGVjICdzZXRxKSNANTU4IE1ha2UgZWFjaCBWQVJJQUJMRSBidWZmZXIt bG9jYWwgYW5kIGFzc2lnbiB0byBpdCB0aGUgY29ycmVzcG9uZGluZyBWQUxVRS4KClRoZSBhcmd1 bWVudHMgYXJlIHZhcmlhYmxlL3ZhbHVlIHBhaXJzICBGb3IgZWFjaCBWQVJJQUJMRSBpbiBhIHBh aXIsCm1ha2UgVkFSSUFCTEUgYnVmZmVyLWxvY2FsIGFuZCBhc3NpZ24gdG8gaXQgdGhlIGNvcnJl c3BvbmRpbmcgVkFMVUUKb2YgdGhlIHBhaXIuICBUaGUgVkFSSUFCTEVzIGFyZSBsaXRlcmFsIHN5 bWJvbHMgYW5kIHNob3VsZCBub3QgYmUgcXVvdGVkLgoKVGhlIFZBTFVFIG9mIHRoZSBOdGggcGFp ciBpcyBub3QgY29tcHV0ZWQgdW50aWwgYWZ0ZXIgdGhlIFZBUklBQkxFCm9mIHRoZSAoTi0xKXRo IHBhaXIgaXMgc2V0OyB0aHVzLCBlYWNoIFZBTFVFIGNhbiB1c2UgdGhlIG5ldyBWQUxVRXMKb2Yg VkFSSUFCTEVzIHNldCBieSBlYXJsaWVyIHBhaXJzLgoKVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUg YHNldHEtbG9jYWwnIGZvcm0gaXMgdGhlIFZBTFVFIG9mIHRoZSBsYXN0CnBhaXIuCgooZm4gW1ZB UklBQkxFIFZBTFVFXS4uLikfCihkZWZhbGlhcyAnc2V0cS1sb2NhbCAnKG1hY3JvIC4gI1sxMjgg IlwzMDABR1wzMDFcIlwzMDJVXDIwNA4AXDMwM1wzMDQhXDIxMFwzMDUBXDIwMzYAAUA5XDIwNB8A XDMwM1wzMDYDQFwiXDIxMFwzMDdcMzEwXDMxMQRAREQDQUBFAUJcMjYyAQFBQVwyNjICXDIwMg8A XDMxMgFcMjM3IVwyMDciIFttb2QgMiAwIGVycm9yICJQQUlSUyBtdXN0IGhhdmUgYW4gZXZlbiBu dW1iZXIgb2YgdmFyaWFibGUvdmFsdWUgbWVtYmVycyIgbmlsICJBdHRlbXB0aW5nIHRvIHNldCBh IG5vbi1zeW1ib2w6ICVzIiBzZXQgbWFrZS1sb2NhbC12YXJpYWJsZSBxdW90ZSBtYWNyb2V4cC1w cm9nbl0gNiAoIyQgLiA1Njc0KV0pKQoocHV0ICdzZXRxLWxvY2FsICdlZGVidWctZm9ybS1zcGVj ICdzZXRxKSNAMjAzIERlZmluZSBWQVIgYXMgYSBidWZmZXItbG9jYWwgdmFyaWFibGUgd2l0aCBk ZWZhdWx0IHZhbHVlIFZBTC4KTGlrZSBgZGVmdmFyJyBidXQgYWRkaXRpb25hbGx5IG1hcmtzIHRo ZSB2YXJpYWJsZSBhcyBiZWluZyBhdXRvbWF0aWNhbGx5CmJ1ZmZlci1sb2NhbCB3aGVyZXZlciBp dCBpcyBzZXQuCgooZm4gVkFSIFZBTCAmb3B0aW9uYWwgRE9DU1RSSU5HKR8KKGRlZmFsaWFzICdk ZWZ2YXItbG9jYWwgJyhtYWNybyAuICNbNzcwICJcMzAwXDMwMQQEBEZcMzAyXDMwMwYGRERFXDIw NyIgW3Byb2duIGRlZnZhciBtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCBxdW90ZV0gOCAoIyQg LiA2NjI1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVc MzA2I1wzMDRcMzAxXDMwN1wzMTAjXDMwMFwyMDciIFtwdXQgZGVmdmFyLWxvY2FsIGVkZWJ1Zy1m b3JtLXNwZWMgZGVmdmFyIGZ1bmN0aW9uLXB1dCBkb2Mtc3RyaW5nLWVsdCAzIGxpc3AtaW5kZW50 LWZ1bmN0aW9uIDJdIDUpI0A5NSBSZXR1cm4gbm9uLW5pbCBpZiBTWU1CT0wgaXMgYm91bmQgaW4g QlVGRkVSLgpBbHNvIHNlZSBgbG9jYWwtdmFyaWFibGUtcCcuCgooZm4gU1lNQk9MIEJVRkZFUikf CihkZWZhbGlhcyAnYnVmZmVyLWxvY2FsLWJvdW5kcCAjWzUxNCAiXDMwMDFcZgBcMzAxAgJcIjBc MjEwXDMwMlwyMDdcMjEwXDMwM1wyMDciIFsodm9pZC12YXJpYWJsZSkgYnVmZmVyLWxvY2FsLXZh bHVlIHQgbmlsXSA1ICgjJCAuIDcxNDUpXSkjQDI1NSBMaWtlIGBzZXRxLWxvY2FsJywgYnV0IGFs bG93IHJlc3RvcmluZyB0aGUgcHJldmlvdXMgc3RhdGUgb2YgbG9jYWxzIGxhdGVyLgpUaGlzIG1h Y3JvIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byBgYnVmZmVyLWxvY2Fs LXJlc3RvcmUtc3RhdGUnCmluIG9yZGVyIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBsb2Nh bCB2YXJpYWJsZXMgc2V0IHZpYSB0aGlzIG1hY3JvLgoKKGZuIFtWQVJJQUJMRSBWQUxVRV0uLi4p HwooZGVmYWxpYXMgJ2J1ZmZlci1sb2NhbC1zZXQtc3RhdGUgJyhtYWNybyAuICNbMTI4ICJcMzAw AUdcMzAxXCJcMzAyVVwyMDQOAFwzMDNcMzA0IVwyMTBcMzA1XDMwNlwzMDcDRERcMzEwA0JFXDIw NyIgW21vZCAyIDAgZXJyb3IgIlBBSVJTIG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBvZiB2YXJp YWJsZS92YWx1ZSBtZW1iZXJzIiBwcm9nMSBidWZmZXItbG9jYWwtc2V0LXN0YXRlLS1nZXQgcXVv dGUgc2V0cS1sb2NhbF0gNSAoIyQgLiA3Mzg1KV0pKQoocHV0ICdidWZmZXItbG9jYWwtc2V0LXN0 YXRlICdlZGVidWctZm9ybS1zcGVjICdzZXRxKSNAMTQgCgooZm4gUEFJUlMpHwooZGVmYWxpYXMg J2J1ZmZlci1sb2NhbC1zZXQtc3RhdGUtLWdldCAjWzI1NyAiXDMwMAFcMjAzKQABQFwzMDEDQCFc MjA1EgBcMzAyA0AhXDMwMQRAIVwyMDUcAANASkUBQlwyNjIBAUFBXDI2MgJcMjAyAQBcMjExXDIz N1wyMDciIFtuaWwgYm91bmRwIGxvY2FsLXZhcmlhYmxlLXBdIDYgKCMkIC4gNzk1NildKSNAMTQw IFJlc3RvcmUgdmFsdWVzIG9mIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZXMgcmVjb3JkZWQgaW4gU1RB VEVTLgpTVEFURVMgc2hvdWxkIGJlIGFuIG9iamVjdCByZXR1cm5lZCBieSBgYnVmZmVyLWxvY2Fs LXNldC1zdGF0ZScuCgooZm4gU1RBVEVTKR8KKGRlZmFsaWFzICdidWZmZXItbG9jYWwtcmVzdG9y ZS1zdGF0ZSAjWzI1NyAiXDIxMVwyMTFcMjA1LABcMjExQFwyMTFcMjQyAVwyNDNcMjExXDI0MgFc MjQzXDIxMVwyNDIBXDI0MwNcMjAzHwAFAkxcMjY2B1wyMDIlAFwzMDAGBiFcMjY2BwFBXDI2Nlwy MDJcMjAyAQBcMjA3IiBba2lsbC1sb2NhbC12YXJpYWJsZV0gMTEgKCMkIC4gODE1MildKSNAMjA2 IEFkZCBORVdFTFQgdG8gdGhlIGxpc3Qgc3RvcmVkIGluIHRoZSBnZW5lcmFsaXplZCB2YXJpYWJs ZSBQTEFDRS4KVGhpcyBpcyBtb3JhbGx5IGVxdWl2YWxlbnQgdG8gKHNldGYgUExBQ0UgKGNvbnMg TkVXRUxUIFBMQUNFKSksCmV4Y2VwdCB0aGF0IFBMQUNFIGlzIGV2YWx1YXRlZCBvbmx5IG9uY2Ug KGFmdGVyIE5FV0VMVCkuCgooZm4gTkVXRUxUIFBMQUNFKR8KKGRlZmFsaWFzICdwdXNoICcobWFj cm8gLiAjWzUxNCAiXDIxMTlcMjAzDQBcMzAwAVwzMDEEBEVFXDIwN1wzMDJcMzAzIVwyMTBcMzA0 AiFcMjAzGwABXDIwMh4AXDMwNVwzMDYhXDMwNwJcMzEwXDMxMQRcIlwiAQQ9XDIwMywAXDIwN1wz MTICBURDAlwiXDIwNyIgW3NldHEgY29ucyByZXF1aXJlIG1hY3JvZXhwIG1hY3JvZXhwLWNvcHlh YmxlLXAgbWFrZS1zeW1ib2wgIngiIGd2LWdldCBtYWtlLWNsb3N1cmUgI1s1MTQgIlwyMTFcMzAx XDMwMARFIVwyMDciIFtWMCBjb25zXSA2ICJcblxuKGZuIEdFVFRFUiBTRVRURVIpIl0gbWFjcm9l eHAtbGV0Kl0gOCAoIyQgLiA4NDk0KV0pKQoocHV0ICdwdXNoICdlZGVidWctZm9ybS1zcGVjICco Zm9ybSBndi1wbGFjZSkpI0AyMjMgUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IG9mIFBMQUNFJ3Mg dmFsdWUsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4KUExBQ0UgbXVzdCBiZSBhIGdlbmVy YWxpemVkIHZhcmlhYmxlIHdob3NlIHZhbHVlIGlzIGEgbGlzdC4KSWYgdGhlIHZhbHVlIGlzIG5p bCwgYHBvcCcgcmV0dXJucyBuaWwgYnV0IGRvZXMgbm90IGFjdHVhbGx5CmNoYW5nZSB0aGUgbGlz dC4KCihmbiBQTEFDRSkfCihkZWZhbGlhcyAncG9wICcobWFjcm8gLiAjWzI1NyAiXDMwMAE5XDIw MxMAXDMwMQJcMzAyBFwzMDMGBkRFRVwyMDIXAFwzMDQCXDMwNVwiRFwyMDciIFtjYXItc2FmZSBw cm9nMSBzZXRxIGNkciBndi1nZXQgI1s1MTQgIlwzMDACIVwyMDNcbgABXDIwMg0AXDMwMVwzMDIh XDMwMwEDXDMwNAREIUUBBD1cMjAzHABcMjA3XDMwNQIFREMCXCJcMjA3IiBbbWFjcm9leHAtY29w eWFibGUtcCBtYWtlLXN5bWJvbCAieCIgcHJvZzEgY2RyIG1hY3JvZXhwLWxldCpdIDggIlxuXG4o Zm4gR0VUVEVSIFNFVFRFUikiXV0gOCAoIyQgLiA5MDg0KV0pKQoocHV0ICdwb3AgJ2VkZWJ1Zy1m b3JtLXNwZWMgJyhndi1wbGFjZSkpI0AxODQgSWYgQ09ORCB5aWVsZHMgbm9uLW5pbCwgZG8gQk9E WSwgZWxzZSByZXR1cm4gbmlsLgpXaGVuIENPTkQgeWllbGRzIG5vbi1uaWwsIGV2YWwgQk9EWSBm b3JtcyBzZXF1ZW50aWFsbHkgYW5kIHJldHVybgp2YWx1ZSBvZiBsYXN0IG9uZSwgb3IgbmlsIGlm IHRoZXJlIGFyZSBub25lLgoKKGZuIENPTkQgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2hlbiAn KG1hY3JvIC4gI1szODUgIlwzMDACXDMwMQNCRVwyMDciIFtpZiBwcm9nbl0gNiAoIyQgLiA5NjYw KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIg W2Z1bmN0aW9uLXB1dCB3aGVuIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3Jt LXNwZWMgdF0gNSkjQDE3NiBJZiBDT05EIHlpZWxkcyBuaWwsIGRvIEJPRFksIGVsc2UgcmV0dXJu IG5pbC4KV2hlbiBDT05EIHlpZWxkcyBuaWwsIGV2YWwgQk9EWSBmb3JtcyBzZXF1ZW50aWFsbHkg YW5kIHJldHVybgp2YWx1ZSBvZiBsYXN0IG9uZSwgb3IgbmlsIGlmIHRoZXJlIGFyZSBub25lLgoK KGZuIENPTkQgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAndW5sZXNzICcobWFjcm8gLiAjWzM4NSAi XDMwMAJcMzAxA0JCQlwyMDciIFtpZiBuaWxdIDYgKCMkIC4gMTAwNDkpXSkpCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHVu bGVzcyBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0A2 NyBSZXR1cm4gdCBpZiBPQkpFQ1QgaXMgYSBidWlsdC1pbiBwcmltaXRpdmUgZnVuY3Rpb24uCgoo Zm4gT0JKRUNUKR8KKGRlZmFsaWFzICdzdWJyLXByaW1pdGl2ZS1wICNbMjU3ICJcMzAwASFcMjA1 XG4AXDMwMQEhP1wyMDciIFtzdWJycCBzdWJyLW5hdGl2ZS1lbGlzcC1wXSAzICgjJCAuIDEwNDMz KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHN1YnItcHJpbWl0aXZlLXAgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVy IGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMTQ1IFJldHVybiB0aGUgYm9vbGVhbiBl eGNsdXNpdmUtb3Igb2YgQ09ORDEgYW5kIENPTkQyLgpJZiBvbmx5IG9uZSBvZiB0aGUgYXJndW1l bnRzIGlzIG5vbi1uaWwsIHJldHVybiBpdDsgb3RoZXJ3aXNlCnJldHVybiBuaWwuCgooZm4gQ09O RDEgQ09ORDIpHwooZGVmYWxpYXMgJ3hvciAjWzUxNCAiAVwyMDQFAFwyMDdcMjExP1wyMDULAAFc MjA3IiBbXSAzICgjJCAuIDEwNzUzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMw MFwzMDFcMzA0XDMwNSNcMzAwXDMwMVwzMDZcMzA3I1wzMTBcMzAxXDMxMVwzMTIjXDIwNyIgW2Z1 bmN0aW9uLXB1dCB4b3IgcHVyZSB0IHNpZGUtZWZmZWN0LWZyZWUgZXJyb3ItZnJlZSBzcGVlZCAt MSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDcpI0AxNjkg TG9vcCBvdmVyIGEgbGlzdC4KRXZhbHVhdGUgQk9EWSB3aXRoIFZBUiBib3VuZCB0byBlYWNoIGNh ciBmcm9tIExJU1QsIGluIHR1cm4uClRoZW4gZXZhbHVhdGUgUkVTVUxUIHRvIGdldCByZXR1cm4g dmFsdWUsIGRlZmF1bHQgbmlsLgoKKGZuIChWQVIgTElTVCBbUkVTVUxUXSkgQk9EWS4uLikfCihk ZWZhbGlhcyAnZG9saXN0ICcobWFjcm8gLiAjWzM4NSAiATpcMjA0XGYAXDMwMFwzMDFcMzAyBERc IlwyMTBcMzAzXDMwNANHXDMwNSNcMjA0HQBcMzAwXDMwNlwzMDcER0RcIlwyMTBcMzEwXDMxMSFc MzEyAQRBQERDXDMxMwNcMzEyBgdAXDMxNAYHRERDXDMxNQYIXDMxNgYJXDMxNwYLREVDXCJCQkUF QUFCQkJcMjA3IiBbc2lnbmFsIHdyb25nLXR5cGUtYXJndW1lbnQgY29uc3AgPD0gMiAzIHdyb25n LW51bWJlci1vZi1hcmd1bWVudHMgKDIgLiAzKSBtYWtlLXN5bWJvbCAidGFpbCIgbGV0IHdoaWxl IGNhciBhcHBlbmQgc2V0cSBjZHJdIDE1ICgjJCAuIDExMTcyKV0pKQooYnl0ZS1jb2RlICJcMzAw XDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBkb2xpc3Qg bGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyAoKHN5bWJvbHAgZm9y bSAmb3B0aW9uYWwgZm9ybSkgYm9keSldIDUpI0AzNDEgTG9vcCBhIGNlcnRhaW4gbnVtYmVyIG9m IHRpbWVzLgpFdmFsdWF0ZSBCT0RZIHdpdGggVkFSIGJvdW5kIHRvIHN1Y2Nlc3NpdmUgaW50ZWdl cnMgcnVubmluZyBmcm9tIDAsCmluY2x1c2l2ZSwgdG8gQ09VTlQsIGV4Y2x1c2l2ZS4KCkZpbmFs bHkgUkVTVUxUIGlzIGV2YWx1YXRlZCB0byBnZXQgdGhlIHJldHVybiB2YWx1ZSAobmlsIGlmClJF U1VMVCBpcyBvbWl0dGVkKS4gIFVzaW5nIFJFU1VMVCBpcyBkZXByZWNhdGVkLCBhbmQgbWF5IHJl c3VsdAppbiBjb21waWxhdGlvbiB3YXJuaW5ncyBhYm91dCB1bnVzZWQgdmFyaWFibGVzLgoKKGZu IChWQVIgQ09VTlQgW1JFU1VMVF0pIEJPRFkuLi4pHwooZGVmYWxpYXMgJ2RvdGltZXMgJyhtYWNy byAuICNbMzg1ICIBQAJBQFwzMDBcMzAxIVwzMDBcMzAyIVwzMDMCBEQCXDMwNEJEXDMwNVwzMDYE BgZFXDMwMwYIBgZEQwZcbkJCXDMwNwYGXDMxMAYIREVGBghBQVwyMDVBAFwzMDMGBwVEQwZcbkFB QkJDQkJCXDIwNyIgW21ha2Utc3ltYm9sICJ1cHBlci1ib3VuZCIgImNvdW50ZXIiIGxldCAoMCkg d2hpbGUgPCBzZXRxIDErXSAxNSAoIyQgLiAxMTgzMildKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgZG90aW1lcyBsaXNw LWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIGRvbGlzdF0gNSkjQDQ3NyBE byBub3QgZXZhbHVhdGUgYW55IGFyZ3VtZW50cywgYW5kIHJldHVybiBuaWwuCklmIGEgYGRlY2xh cmUnIGZvcm0gYXBwZWFycyBhcyB0aGUgZmlyc3QgZm9ybSBpbiB0aGUgYm9keSBvZiBhCmBkZWZ1 bicgb3IgYGRlZm1hY3JvJyBmb3JtLCBTUEVDUyBzcGVjaWZpZXMgdmFyaW91cyBhZGRpdGlvbmFs CmluZm9ybWF0aW9uIGFib3V0IHRoZSBmdW5jdGlvbiBvciBtYWNybzsgdGhlc2UgZ28gaW50byBl ZmZlY3QKZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBgZGVmdW4nIG9yIGBkZWZtYWNybycg Zm9ybS4KClRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgU1BFQ1MgYXJlIHNwZWNpZmllZCBieQpgZGVm dW4tZGVjbGFyYXRpb25zLWFsaXN0JyBhbmQgYG1hY3JvLWRlY2xhcmF0aW9ucy1hbGlzdCcuCgpG b3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGluZm8gbm9kZSBgKGVsaXNwKURlY2xhcmUgRm9ybScu CgooZm4gJnJlc3QgU1BFQ1MpHwooZGVmYWxpYXMgJ2RlY2xhcmUgJyhtYWNybyAuICNbMTI4ICJc MzAwAUJcMzAxXDMwMlwzMDMDXCJcMzA0XDMwNQREXDMwNkJCXDMwN1wzMTAkXDIwNyIgW2RlY2xh cmUgbWFjcm9leHAtd2Fybi1hbmQtcmV0dXJuIGZvcm1hdC1tZXNzYWdlICJTdHJheSBgZGVjbGFy ZScgZm9ybTogJVMiIHByb2duIHF1b3RlIChuaWwpIG5pbCBjb21waWxlLW9ubHldIDcgKCMkIC4g MTI1MzkpXSkpI0AyMDAgRXhlY3V0ZSBCT0RZOyBpZiBhbiBlcnJvciBvY2N1cnMsIHJldHVybiBu aWwuCk90aGVyd2lzZSwgcmV0dXJuIHJlc3VsdCBvZiBsYXN0IGZvcm0gaW4gQk9EWS4KU2VlIGFs c28gYHdpdGgtZGVtb3RlZC1lcnJvcnMnIHRoYXQgZG9lcyBzb21ldGhpbmcgc2ltaWxhcgp3aXRo b3V0IHNpbGVuY2luZyBhbGwgZXJyb3JzLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ2ln bm9yZS1lcnJvcnMgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDIDQlwzMDNCQkJcMjA3IiBb Y29uZGl0aW9uLWNhc2UgbmlsIHByb2duICgoZXJyb3IgbmlsKSldIDUgKCMkIC4gMTMyMzkpXSkp CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwy MDciIFtwdXQgaWdub3JlLWVycm9ycyBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxp c3AtaW5kZW50LWZ1bmN0aW9uIDBdIDQpI0AxODMgRXhlY3V0ZSBCT0RZOyBpZiB0aGUgZXJyb3Ig Q09ORElUSU9OIG9jY3VycywgcmV0dXJuIG5pbC4KT3RoZXJ3aXNlLCByZXR1cm4gcmVzdWx0IG9m IGxhc3QgZm9ybSBpbiBCT0RZLgoKQ09ORElUSU9OIGNhbiBhbHNvIGJlIGEgbGlzdCBvZiBlcnJv ciBjb25kaXRpb25zLgoKKGZuIENPTkRJVElPTiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdpZ25v cmUtZXJyb3IgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMVwzMDIDQgRcMzAzQkZcMjA3IiBbY29u ZGl0aW9uLWNhc2UgbmlsIHByb2duIChuaWwpXSA3ICgjJCAuIDEzNzEwKV0pKQooYnl0ZS1jb2Rl ICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IGln bm9yZS1lcnJvciBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1 bmN0aW9uIDFdIDQpI0A3NSBOdW1iZXIgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhl IG5leHQgc3ltYm9sIGNyZWF0ZWQgYnkgYGdlbnN5bScuHwooZGVmdmFyIGdlbnN5bS1jb3VudGVy IDAgKCMkIC4gMTQxNTMpKSNAMTU1IFJldHVybiBhIG5ldyB1bmludGVybmVkIHN5bWJvbC4KVGhl IG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgYGdlbnN5bS1jb3VudGVyJyB0byBQUkVGSVguClBS RUZJWCBpcyBhIHN0cmluZywgYW5kIGRlZmF1bHRzIHRvICJnIi4KCihmbiAmb3B0aW9uYWwgUFJF RklYKR8KKGRlZmFsaWFzICdnZW5zeW0gI1syNTYgIghcMjExVBBcMzAxXDMwMlwzMDMEXDIwNlxm AFwzMDQEIyFcMjA3IiBbZ2Vuc3ltLWNvdW50ZXIgbWFrZS1zeW1ib2wgZm9ybWF0ICIlcyVkIiAi ZyJdIDcgKCMkIC4gMTQyNzIpXSkjQDEzNCBEbyBub3RoaW5nIGFuZCByZXR1cm4gbmlsLgpUaGlz IGZ1bmN0aW9uIGFjY2VwdHMgYW55IG51bWJlciBvZiBBUkdVTUVOVFMsIGJ1dCBpZ25vcmVzIHRo ZW0uCkFsc28gc2VlIGBhbHdheXMnLgoKKGZuICZyZXN0IEFSR1VNRU5UUykfCihkZWZhbGlhcyAn aWdub3JlICNbMTI4ICJcMzAwXDIwNyIgW25pbF0gMiAoIyQgLiAxNDU2MSkgbmlsXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMSNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBpZ25vcmUgY29t cGxldGlvbi1wcmVkaWNhdGVdIDQpI0AxMzIgRG8gbm90aGluZyBhbmQgcmV0dXJuIHQuClRoaXMg ZnVuY3Rpb24gYWNjZXB0cyBhbnkgbnVtYmVyIG9mIEFSR1VNRU5UUywgYnV0IGlnbm9yZXMgdGhl bS4KQWxzbyBzZWUgYGlnbm9yZScuCgooZm4gJnJlc3QgQVJHVU1FTlRTKR8KKGRlZmFsaWFzICdh bHdheXMgI1sxMjggIlwzMDBcMjA3IiBbdF0gMiAoIyQgLiAxNDg0NyldKSNANTk1IFNpZ25hbCBh biBlcnJvciwgbWFraW5nIGEgbWVzc2FnZSBieSBwYXNzaW5nIEFSR1MgdG8gYGZvcm1hdC1tZXNz YWdlJy4KRXJyb3JzIGNhdXNlIGVudHJ5IHRvIHRoZSBkZWJ1Z2dlciB3aGVuIGBkZWJ1Zy1vbi1l cnJvcicgaXMgbm9uLW5pbC4KVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBgZGVidWctaWdub3Jl ZC1lcnJvcnMnLgoKVG8gc2lnbmFsIHdpdGggTUVTU0FHRSB3aXRob3V0IGludGVycHJldGluZyBm b3JtYXQgY2hhcmFjdGVycwpsaWtlIGAlJywgYFw9YCcgYW5kIGBcPScnLCB1c2UgKGVycm9yICIl cyIgTUVTU0FHRSkuCkluIEVtYWNzLCB0aGUgY29udmVudGlvbiBpcyB0aGF0IGVycm9yIG1lc3Nh Z2VzIHN0YXJ0IHdpdGggYSBjYXBpdGFsCmxldHRlciBidXQgKmRvIG5vdCogZW5kIHdpdGggYSBw ZXJpb2QuICBQbGVhc2UgZm9sbG93IHRoaXMgY29udmVudGlvbgpmb3IgdGhlIHNha2Ugb2YgY29u c2lzdGVuY3kuCgpUbyBhbHRlciB0aGUgbG9vayBvZiB0aGUgZGlzcGxheWVkIGVycm9yIG1lc3Nh Z2VzLCB5b3UgY2FuIHVzZQp0aGUgYGNvbW1hbmQtZXJyb3ItZnVuY3Rpb24nIHZhcmlhYmxlLgoK KGZuICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ2Vycm9yICNbMTI4ICJcMzAwXDMwMVwzMDJcMzAz BFwiQ1wiXDIwNyIgW3NpZ25hbCBlcnJvciBhcHBseSBmb3JtYXQtbWVzc2FnZV0gNiAoIyQgLiAx NTA0MCldKQooc2V0LWFkdmVydGlzZWQtY2FsbGluZy1jb252ZW50aW9uICdlcnJvciAnKHN0cmlu ZyAmcmVzdCBhcmdzKSAiMjMuMSIpI0A4MTIgU2lnbmFsIGEgdXNlciBlcnJvciwgbWFraW5nIGEg bWVzc2FnZSBieSBwYXNzaW5nIEFSR1MgdG8gYGZvcm1hdC1tZXNzYWdlJy4KVGhpcyBpcyBsaWtl IGBlcnJvcicgZXhjZXB0IHRoYXQgYSB1c2VyIGVycm9yIChvciAicGlsb3QgZXJyb3IiKSBjb21l cwpmcm9tIGFuIGluY29ycmVjdCBtYW5pcHVsYXRpb24gYnkgdGhlIHVzZXIsIG5vdCBmcm9tIGFu IGFjdHVhbCBwcm9ibGVtLgpJbiBjb250cmFzdCB3aXRoIG90aGVyIGVycm9ycywgdXNlciBlcnJv cnMgbm9ybWFsbHkgZG8gbm90IGNhdXNlCmVudHJ5IHRvIHRoZSBkZWJ1Z2dlciwgZXZlbiB3aGVu IGBkZWJ1Zy1vbi1lcnJvcicgaXMgbm9uLW5pbC4KVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBg ZGVidWctaWdub3JlZC1lcnJvcnMnLgoKVG8gc2lnbmFsIHdpdGggTUVTU0FHRSB3aXRob3V0IGlu dGVycHJldGluZyBmb3JtYXQgY2hhcmFjdGVycwpsaWtlIGAlJywgYFw9YCcgYW5kIGBcPScnLCB1 c2UgKHVzZXItZXJyb3IgIiVzIiBNRVNTQUdFKS4KSW4gRW1hY3MsIHRoZSBjb252ZW50aW9uIGlz IHRoYXQgZXJyb3IgbWVzc2FnZXMgc3RhcnQgd2l0aCBhIGNhcGl0YWwKbGV0dGVyIGJ1dCAqZG8g bm90KiBlbmQgd2l0aCBhIHBlcmlvZC4gIFBsZWFzZSBmb2xsb3cgdGhpcyBjb252ZW50aW9uCmZv ciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeS4KClRvIGFsdGVyIHRoZSBsb29rIG9mIHRoZSBkaXNw bGF5ZWQgZXJyb3IgbWVzc2FnZXMsIHlvdSBjYW4gdXNlCnRoZSBgY29tbWFuZC1lcnJvci1mdW5j dGlvbicgdmFyaWFibGUuCgooZm4gRk9STUFUICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ3VzZXIt ZXJyb3IgI1szODUgIlwzMDBcMzAxXDMwMlwzMDMFBSNDXCJcMjA3IiBbc2lnbmFsIHVzZXItZXJy b3IgYXBwbHkgZm9ybWF0LW1lc3NhZ2VdIDggKCMkIC4gMTU4MTYpXSkjQDI5NCBEZWZpbmUgTkFN RSBhcyBhIG5ldyBlcnJvciBzaWduYWwuCk1FU1NBR0UgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJl IG91dHB1dCB0byB0aGUgZWNobyBhcmVhIGlmIHN1Y2ggYW4gZXJyb3IKaXMgc2lnbmFsZWQgd2l0 aG91dCBiZWluZyBjYXVnaHQgYnkgYSBgY29uZGl0aW9uLWNhc2UnLgpQQVJFTlQgaXMgZWl0aGVy IGEgc2lnbmFsIG9yIGEgbGlzdCBvZiBzaWduYWxzIGZyb20gd2hpY2ggaXQgaW5oZXJpdHMuCkRl ZmF1bHRzIHRvIGBlcnJvcicuCgooZm4gTkFNRSBNRVNTQUdFICZvcHRpb25hbCBQQVJFTlQpHwoo ZGVmYWxpYXMgJ2RlZmluZS1lcnJvciAjWzc3MCAiXDIxMVwyMDQHAFwzMDBcMjYyAVwyMTE6XDIw MxYAXDMwMVwzMDJcMzAzXDMwNARcIlwiXDIwMhsAXDIxMQFcMzA1TkJcMzA2BFwzMDVcMzA3XDMx MAYIBgZCISEjXDIxMAJcMjA1MgBcMzA2BFwzMTEFI1wyMDciIFtlcnJvciBhcHBseSBhcHBlbmQg bWFwY2FyICNbMjU3ICJcMjExAVwzMDBOXDIwNgsAXDMwMVwzMDIDXCJCXDIwNyIgW2Vycm9yLWNv bmRpdGlvbnMgZXJyb3IgIlVua25vd24gc2lnbmFsIGAlcyciXSA1ICJcblxuKGZuIFBBUkVOVCki XSBlcnJvci1jb25kaXRpb25zIHB1dCBkZWxldGUtZHVwcyBjb3B5LXNlcXVlbmNlIGVycm9yLW1l c3NhZ2VdIDExICgjJCAuIDE2NzQ4KV0pI0AxNTggUmV0dXJuIG5vbi1uaWwgaWYgT0JKRUNUIHNl ZW1zIHRvIGJlIGEgZnJhbWUgY29uZmlndXJhdGlvbi4KQW55IGxpc3Qgd2hvc2UgY2FyIGlzIGBm cmFtZS1jb25maWd1cmF0aW9uJyBpcyBhc3N1bWVkIHRvIGJlIGEgZnJhbWUKY29uZmlndXJhdGlv bi4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ2ZyYW1lLWNvbmZpZ3VyYXRpb24tcCAjWzI1NyAi XDIxMTpcMjA1CQBcMjExQFwzMDA9XDIwNyIgW2ZyYW1lLWNvbmZpZ3VyYXRpb25dIDMgKCMkIC4g MTc0MTUpXSkjQDI5NCBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGlzIGEgcGFydGlhbCBhcHBsaWNh dGlvbiBvZiBGVU4gdG8gQVJHUy4KQVJHUyBpcyBhIGxpc3Qgb2YgdGhlIGZpcnN0IE4gYXJndW1l bnRzIHRvIHBhc3MgdG8gRlVOLgpUaGUgcmVzdWx0IGlzIGEgbmV3IGZ1bmN0aW9uIHdoaWNoIGRv ZXMgdGhlIHNhbWUgYXMgRlVOLCBleGNlcHQgdGhhdAp0aGUgZmlyc3QgTiBhcmd1bWVudHMgYXJl IGZpeGVkIGF0IHRoZSB2YWx1ZXMgd2l0aCB3aGljaCB0aGlzIGZ1bmN0aW9uCndhcyBjYWxsZWQu CgooZm4gRlVOICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ2FwcGx5LXBhcnRpYWxseSAjWzM4NSAi XDMwMFwzMDECBCNcMjA3IiBbbWFrZS1jbG9zdXJlICNbMTI4ICJcMzAyXDMwMVwzMDNcMzAwBFwi XCJcMjA3IiBbVjAgVjEgYXBwbHkgYXBwZW5kXSA2ICJcblxuKGZuICZyZXN0IEFSR1MyKSJdXSA2 ICgjJCAuIDE3Njg0KV0pI0A0MiBSZXR1cm4gdCBpZiBOVU1CRVIgaXMgemVyby4KCihmbiBOVU1C RVIpHwooZGVmYWxpYXMgJ3plcm9wICNbMjU3ICJcMjExXDMwMFVcMjA3IiBbMF0gMyAoIyQgLiAx ODE0NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24t cHV0IHplcm9wIGNvbXBpbGVyLW1hY3JvIHplcm9wLS1hbm9uLWNtYWNyb10gNCkjQDE3IAoKKGZu IF8gTlVNQkVSKR8KKGRlZmFsaWFzICd6ZXJvcC0tYW5vbi1jbWFjcm8gI1s1MTQgIlwzMDBcMzAx AkVcMjA3IiBbPSAwXSA1ICgjJCAuIDE4MzQ5KV0pI0A0NiBSZXR1cm4gdCBpZiBPQkpFQ1QgaXMg YSBmaXhudW0uCgooZm4gT0JKRUNUKR8KKGRlZmFsaWFzICdmaXhudW1wICNbMjU3ICJcMjExXDI1 MFwyMDUOAAgBWFwyMDUOAFwyMTEJWFwyMDciIFttb3N0LW5lZ2F0aXZlLWZpeG51bSBtb3N0LXBv c2l0aXZlLWZpeG51bV0gMyAoIyQgLiAxODQ0NildKSNANDYgUmV0dXJuIHQgaWYgT0JKRUNUIGlz IGEgYmlnbnVtLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnYmlnbnVtcCAjWzI1NyAiXDIxMVwy NTBcMjA1CQBcMzAwASE/XDIwNyIgW2ZpeG51bXBdIDMgKCMkIC4gMTg2MTgpXSkjQDM0NCBSZXR1 cm4gVkFMVUUgd2l0aCBpdHMgYml0cyBzaGlmdGVkIGxlZnQgYnkgQ09VTlQuCklmIENPVU5UIGlz IG5lZ2F0aXZlLCBzaGlmdGluZyBpcyBhY3R1YWxseSB0byB0aGUgcmlnaHQuCkluIHRoaXMgY2Fz ZSwgaWYgVkFMVUUgaXMgYSBuZWdhdGl2ZSBmaXhudW0gdHJlYXQgaXQgYXMgdW5zaWduZWQsCmku ZS4sIHN1YnRyYWN0IDIgKiBgbW9zdC1uZWdhdGl2ZS1maXhudW0nIGZyb20gVkFMVUUgYmVmb3Jl IHNoaWZ0aW5nIGl0LgoKVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0 eS4gIEluIG5ldyBjb2RlLCB1c2UgYGFzaCcKaW5zdGVhZC4KCihmbiBWQUxVRSBDT1VOVCkfCihk ZWZhbGlhcyAnbHNoICNbNTE0ICIBXDMwMldcMjAzJgBcMjExXDMwMldcMjAzJgABCFdcMjAzGQBc MzAzXDMwNAMDRFwiXDIxMFwzMDVcMzA2A1wzMDdcIglcIlwyNjICXDIxMVRcMjYyAVwzMDYCAlwi XDIwNyIgW21vc3QtbmVnYXRpdmUtZml4bnVtIG1vc3QtcG9zaXRpdmUtZml4bnVtIDAgc2lnbmFs IGFyZ3Mtb3V0LW9mLXJhbmdlIGxvZ2FuZCBhc2ggLTFdIDYgKCMkIC4gMTg3NDkpXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBsc2ggY29tcGls ZXItbWFjcm8gbHNoLS1hbm9uLWNtYWNyb10gNCkjQDI1IAoKKGZuIEZPUk0gVkFMVUUgQ09VTlQp HwooZGVmYWxpYXMgJ2xzaC0tYW5vbi1jbWFjcm8gI1s3NzEgIlwzMDBcMzAxBFwzMDJcMzAzBgcl XDIwNyIgW21hY3JvZXhwLXdhcm4tYW5kLXJldHVybiAiYXZvaWQgYGxzaCc7IHVzZSBgYXNoJyBp bnN0ZWFkIiAoc3VzcGljaW91cyBsc2gpIHRdIDkgKCMkIC4gMTk0MTQpXSkjQDE1IAoKKGZuIEZP Uk0gWCkfCihkZWZhbGlhcyAnaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHIgI1s1MTQgIgFA XDMwMAEhXDIxMUdcMzAxWlwzMDJcMzAzA1wiXDIwNCoAXDMwNAMhXDIwMyYAAks5XDIwMyYAXDMw NQNLBgZBQgVcIlwyMDdcMzA2XDMwNyFcMjA3XDIxMVwzMTBcMjI0VlwyMDNJAAEBSFwzMTE9XDIw Mz0AXDMxMlwyMDI+AFwzMTMERFwyNjIEXDIxMVNcMjYyAVwyMDIqAANcMjA3IiBbc3ltYm9sLW5h bWUgMiBzdHJpbmctbWF0Y2ggImNbYWRdK3JcXCciIGZib3VuZHAgaW50ZXJuYWwtLWNvbXBpbGVy LW1hY3JvLWNYWHIgZXJyb3IgIkNvbXBpbGVyIG1hY3JvIGZvciBjWFhyIGFwcGxpZWQgdG8gbm9u LWNYWHIgZm9ybSIgMCA5NyBjYXIgY2RyXSA4ICgjJCAuIDE5NjAwKV0pI0A0MSBSZXR1cm4gdGhl IGNhciBvZiB0aGUgY2FyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2FhciAjWzI1NyAiXDIx MUBAXDIwNyIgW10gMiAoIyQgLiAxOTk5NyldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAz I1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IGNhYXIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNv bXBpbGVyLW1hY3JvLWNYWHJdIDQpI0A0MSBSZXR1cm4gdGhlIGNhciBvZiB0aGUgY2RyIG9mIFgu CgooZm4gWCkfCihkZWZhbGlhcyAnY2FkciAjWzI1NyAiXDIxMUFAXDIwNyIgW10gMiAoIyQgLiAy MDIwNCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24t cHV0IGNhZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHJdIDQp I0A0MSBSZXR1cm4gdGhlIGNkciBvZiB0aGUgY2FyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAn Y2RhciAjWzI1NyAiXDIxMUBBXDIwNyIgW10gMiAoIyQgLiAyMDQxMSldKQooYnl0ZS1jb2RlICJc MzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IGNkYXIgY29tcGlsZXItbWFj cm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3JvLWNYWHJdIDQpI0A0MSBSZXR1cm4gdGhlIGNkciBv ZiB0aGUgY2RyIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2RkciAjWzI1NyAiXDIxMUFBXDIw NyIgW10gMiAoIyQgLiAyMDYxOCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBc MjA3IiBbZnVuY3Rpb24tcHV0IGNkZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVy LW1hY3JvLWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjYXInIG9mIHRoZSBgY2FyJyBvZiB0aGUg YGNhcicgb2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjYWFhciAjWzI1NyAiXDIxMUBAQFwyMDci IFtdIDIgKCMkIC4gMjA4MjUpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIw NyIgW2Z1bmN0aW9uLXB1dCBjYWFhciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXIt bWFjcm8tY1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNhcicgb2YgdGhlIGBjYXInIG9mIHRoZSBg Y2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWRyICNbMjU3ICJcMjExQUBAXDIwNyIg W10gMiAoIyQgLiAyMTA1MildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3 IiBbZnVuY3Rpb24tcHV0IGNhYWRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1t YWNyby1jWFhyXSA0KSNANTggUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBj YXInIG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2FkYXIgI1syNTcgIlwyMTFAQUBcMjA3IiBb XSAyICgjJCAuIDIxMjc5KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDci IFtmdW5jdGlvbi1wdXQgY2FkYXIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1h Y3JvLWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiB0aGUgYGNk cicgb2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjYWRkciAjWzI1NyAiXDIxMUFBQFwyMDciIFtd IDIgKCMkIC4gMjE1MDYpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIg W2Z1bmN0aW9uLXB1dCBjYWRkciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXItbWFj cm8tY1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNkcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2Fy JyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWFyICNbMjU3ICJcMjExQEBBXDIwNyIgW10g MiAoIyQgLiAyMTczMyldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBb ZnVuY3Rpb24tcHV0IGNkYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNy by1jWFhyXSA0KSNANTggUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHIn IG9mIFguCgooZm4gWCkfCihkZWZhbGlhcyAnY2RhZHIgI1syNTcgIlwyMTFBQEFcMjA3IiBbXSAy ICgjJCAuIDIxOTYwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtm dW5jdGlvbi1wdXQgY2RhZHIgY29tcGlsZXItbWFjcm8gaW50ZXJuYWwtLWNvbXBpbGVyLW1hY3Jv LWNYWHJdIDQpI0A1OCBSZXR1cm4gdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicg b2YgWC4KCihmbiBYKR8KKGRlZmFsaWFzICdjZGRhciAjWzI1NyAiXDIxMUBBQVwyMDciIFtdIDIg KCMkIC4gMjIxODcpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1 bmN0aW9uLXB1dCBjZGRhciBjb21waWxlci1tYWNybyBpbnRlcm5hbC0tY29tcGlsZXItbWFjcm8t Y1hYcl0gNCkjQDU4IFJldHVybiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBv ZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRyICNbMjU3ICJcMjExQUFBXDIwNyIgW10gMiAo IyQgLiAyMjQxNCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVu Y3Rpb24tcHV0IGNkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1j WFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjYXInIG9m IHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWFhciAjWzI1NyAiXDIxMUBA QEBcMjA3IiBbXSAyICgjJCAuIDIyNjQxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FhYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1j b21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicg b2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWFk ciAjWzI1NyAiXDIxMUFAQEBcMjA3IiBbXSAyICgjJCAuIDIyODg0KV0pCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FhYWRyIGNvbXBpbGVyLW1h Y3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2Fy JyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwoo ZGVmYWxpYXMgJ2NhYWRhciAjWzI1NyAiXDIxMUBBQEBcMjA3IiBbXSAyICgjJCAuIDIzMTI3KV0p CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2Fh ZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEg UmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2RyJyBv ZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhYWRkciAjWzI1NyAiXDIxMUFBQEBcMjA3IiBbXSAy ICgjJCAuIDIzMzcwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtm dW5jdGlvbi1wdXQgY2FhZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNy by1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjYXIn IG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhZGFhciAjWzI1NyAiXDIx MUBAQUBcMjA3IiBbXSAyICgjJCAuIDIzNjEzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FkYWFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFs LS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNk cicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2Nh ZGFkciAjWzI1NyAiXDIxMUFAQUBcMjA3IiBbXSAyICgjJCAuIDIzODU2KV0pCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2FkYWRyIGNvbXBpbGVy LW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBg Y2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgp HwooZGVmYWxpYXMgJ2NhZGRhciAjWzI1NyAiXDIxMUBBQUBcMjA3IiBbXSAyICgjJCAuIDI0MDk5 KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQg Y2FkZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNA NzEgUmV0dXJuIHRoZSBgY2FyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2Ry JyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NhZGRkciAjWzI1NyAiXDIxMUFBQUBcMjA3IiBb XSAyICgjJCAuIDI0MzQyKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDci IFtmdW5jdGlvbi1wdXQgY2FkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1t YWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBj YXInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWFhciAjWzI1NyAi XDIxMUBAQEFcMjA3IiBbXSAyICgjJCAuIDI0NTg1KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMw MlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RhYWFyIGNvbXBpbGVyLW1hY3JvIGludGVy bmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUg YGNhcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMg J2NkYWFkciAjWzI1NyAiXDIxMUFAQEFcMjA3IiBbXSAyICgjJCAuIDI0ODI4KV0pCihieXRlLWNv ZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RhYWRyIGNvbXBp bGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRo ZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZu IFgpHwooZGVmYWxpYXMgJ2NkYWRhciAjWzI1NyAiXDIxMUBBQEFcMjA3IiBbXSAyICgjJCAuIDI1 MDcxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1w dXQgY2RhZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0 KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNhcicgb2YgdGhlIGBjZHInIG9mIHRoZSBg Y2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkYWRkciAjWzI1NyAiXDIxMUFBQEFcMjA3 IiBbXSAyICgjJCAuIDI1MzE0KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwy MDciIFtmdW5jdGlvbi1wdXQgY2RhZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxl ci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhl IGBjYXInIG9mIHRoZSBgY2FyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGFhciAjWzI1 NyAiXDIxMUBAQUFcMjA3IiBbXSAyICgjJCAuIDI1NTU3KV0pCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkYWFyIGNvbXBpbGVyLW1hY3JvIGlu dGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0 aGUgYGNkcicgb2YgdGhlIGBjYXInIG9mIHRoZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxp YXMgJ2NkZGFkciAjWzI1NyAiXDIxMUFAQUFcMjA3IiBbXSAyICgjJCAuIDI1ODAwKV0pCihieXRl LWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkYWRyIGNv bXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhyXSA0KSNANzEgUmV0dXJu IHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRoZSBgY2FyJyBvZiBYLgoK KGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRhciAjWzI1NyAiXDIxMUBBQUFcMjA3IiBbXSAyICgjJCAu IDI2MDQzKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlv bi1wdXQgY2RkZGFyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21waWxlci1tYWNyby1jWFhy XSA0KSNANzEgUmV0dXJuIHRoZSBgY2RyJyBvZiB0aGUgYGNkcicgb2YgdGhlIGBjZHInIG9mIHRo ZSBgY2RyJyBvZiBYLgoKKGZuIFgpHwooZGVmYWxpYXMgJ2NkZGRkciAjWzI1NyAiXDIxMUFBQUFc MjA3IiBbXSAyICgjJCAuIDI2Mjg2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMw MFwyMDciIFtmdW5jdGlvbi1wdXQgY2RkZGRyIGNvbXBpbGVyLW1hY3JvIGludGVybmFsLS1jb21w aWxlci1tYWNyby1jWFhyXSA0KSNAMjE5IFJldHVybiB0aGUgbGFzdCBsaW5rIG9mIExJU1QuICBJ dHMgY2FyIGlzIHRoZSBsYXN0IGVsZW1lbnQuCklmIExJU1QgaXMgbmlsLCByZXR1cm4gbmlsLgpJ ZiBOIGlzIG5vbi1uaWwsIHJldHVybiB0aGUgTnRoLXRvLWxhc3QgbGluayBvZiBMSVNULgpJZiBO IGlzIGJpZ2dlciB0aGFuIHRoZSBsZW5ndGggb2YgTElTVCwgcmV0dXJuIExJU1QuCgooZm4gTElT VCAmb3B0aW9uYWwgTikfCihkZWZhbGlhcyAnbGFzdCAjWzUxMyAiXDIxMVwyMDMbAFwyMTFcMzAw WVwyMDUlAFwzMDECIQEBV1wyMDMZAFwyMTECWgNcMjMzXDIwNwJcMjA3AVwyMDUlAFwzMDECIVMC XDIzM1wyMDciIFswIHNhZmUtbGVuZ3RoXSA1ICgjJCAuIDI2NTMwKV0pCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgbGFzdCBzaWRlLWVmZmVjdC1m cmVlIHRdIDQpI0AxOTEgUmV0dXJuIGEgY29weSBvZiBMSVNUIHdpdGggdGhlIGxhc3QgTiBlbGVt ZW50cyByZW1vdmVkLgpJZiBOIGlzIG9taXR0ZWQgb3IgbmlsLCByZXR1cm4gYSBjb3B5IG9mIExJ U1Qgd2l0aG91dCBpdHMgbGFzdCBlbGVtZW50LgpJZiBOIGlzIHplcm8gb3IgbmVnYXRpdmUsIHJl dHVybiBMSVNULgoKKGZuIExJU1QgJm9wdGlvbmFsIE4pHwooZGVmYWxpYXMgJ2J1dGxhc3QgI1s1 MTMgIlwyMTFcMjA0BwBcMzAwXDI2MgFcMjExXDMwMVhcMjAzDwABXDIwN1wzMDICRwJaA1wiXDIw NyIgWzEgMCB0YWtlXSA1ICgjJCAuIDI2OTc2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgYnV0bGFzdCBzaWRlLWVmZmVjdC1mcmVlIHRdIDQp I0AxMTYgTW9kaWZ5IExJU1QgdG8gcmVtb3ZlIHRoZSBsYXN0IE4gZWxlbWVudHMuCklmIE4gaXMg b21pdHRlZCBvciBuaWwsIHJlbW92ZSB0aGUgbGFzdCBlbGVtZW50LgoKKGZuIExJU1QgJm9wdGlv bmFsIE4pHwooZGVmYWxpYXMgJ25idXRsYXN0ICNbNTEzICIBRwFcMjA0CQBcMzAwXDI2MgIBAVdc MjA1HwABXDMwMVZcMjAzHgBcMjExUwJaA1wyMzNcMzAyXDI0MVwyMTACXDIwNyIgWzEgMCBuaWxd IDUgKCMkIC4gMjczNjYpXSkjQDI1NiBEZXN0cnVjdGl2ZWx5IHJlbW92ZSBgZXF1YWwnIGR1cGxp Y2F0ZXMgZnJvbSBMSVNULgpTdG9yZSB0aGUgcmVzdWx0IGluIExJU1QgYW5kIHJldHVybiBpdC4g IExJU1QgbXVzdCBiZSBhIHByb3BlciBsaXN0LgpPZiBzZXZlcmFsIGBlcXVhbCcgb2NjdXJyZW5j ZXMgb2YgYW4gZWxlbWVudCBpbiBMSVNULCB0aGUgZmlyc3QKb25lIGlzIGtlcHQuICBTZWUgYHNl cS11bmlxJyBmb3Igbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbi4KCihmbiBMSVNUKR8KKGRlZmFs aWFzICdkZWxldGUtZHVwcyAjWzI1NyAiXDIxMUdcMjExXDMwMFZcMjAzQgBcMzAxXDMwMlwzMDNc MzA0BCQCXDMwNVwzMDYFQFwzMDcFI1wyMTABQVwyMTFcMjYyAlwyMDM/AFwyMTFAXDMxMAEFXCJc MjAzMQACAkFcMjQxXDI2NgJcMjAyFwBcMzA2AVwzMDcGBiNcMjEwAVwyNjIDXDIxMFwyMDIXAFwy NjYEXDIwNwFcMjExXDIwM1cAXDIxMVwzMTECQANBXCJcMjQxXDIxMFwyMTFBXDI2MgFcMjAyQwBc MjY2AlwyMDciIFsxMDAgbWFrZS1oYXNoLXRhYmxlIDp0ZXN0IGVxdWFsIDpzaXplIG5pbCBwdXRo YXNoIHQgZ2V0aGFzaCBkZWxldGVdIDEwICgjJCAuIDI3NjExKV0pI0AxNjkgRGVzdHJ1Y3RpdmVs eSByZW1vdmUgYGVxdWFsJyBjb25zZWN1dGl2ZSBkdXBsaWNhdGVzIGZyb20gTElTVC4KRmlyc3Qg YW5kIGxhc3QgZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgY29uc2VjdXRpdmUgaWYgQ0lSQ1VMQVIg aXMKbm9uLW5pbC4KCihmbiBMSVNUICZvcHRpb25hbCBDSVJDVUxBUikfCihkZWZhbGlhcyAnZGVs ZXRlLWNvbnNlY3V0aXZlLWR1cHMgI1s1MTMgIgFcMzAwAUFcMjAzIwABQAJBQFwyMzJcMjAzGQAB XDIxMUFBXDI0MVwyMTBcMjAyAgABXDI2MgEBQVwyNjICXDIwMgIAAlwyMDM3AFwyMTFcMjAzNwAB QARAXDIzMlwyMDM3AFwyMTFcMzAwXDI0MVwyMTBcMjY2AgFcMjA3IiBbbmlsXSA2ICgjJCAuIDI4 MjAzKV0pI0AxMzA3IFJldHVybiBhIHNlcXVlbmNlIG9mIG51bWJlcnMgZnJvbSBGUk9NIHRvIFRP IChib3RoIGluY2x1c2l2ZSkgYXMgYSBsaXN0LgpJTkMgaXMgdGhlIGluY3JlbWVudCB1c2VkIGJl dHdlZW4gbnVtYmVycyBpbiB0aGUgc2VxdWVuY2UgYW5kIGRlZmF1bHRzIHRvIDEuClNvLCB0aGUg TnRoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgKCsgRlJPTSAoKiBOIElOQykpIHdoZXJlIE4gY291 bnRzIGZyb20KemVyby4gIFRPIGlzIGluY2x1ZGVkIG9ubHkgaWYgdGhlcmUgaXMgYW4gTiBmb3Ig d2hpY2ggVE8gPSBGUk9NICsgTiAqIElOQy4KSWYgVE8gaXMgbmlsIG9yIG51bWVyaWNhbGx5IGVx dWFsIHRvIEZST00sIHJldHVybiAoRlJPTSkuCklmIElOQyBpcyBwb3NpdGl2ZSBhbmQgVE8gaXMg bGVzcyB0aGFuIEZST00sIG9yIElOQyBpcyBuZWdhdGl2ZQphbmQgVE8gaXMgbGFyZ2VyIHRoYW4g RlJPTSwgcmV0dXJuIG5pbC4KSWYgSU5DIGlzIHplcm8gYW5kIFRPIGlzIG5laXRoZXIgbmlsIG5v ciBudW1lcmljYWxseSBlcXVhbCB0bwpGUk9NLCBzaWduYWwgYW4gZXJyb3IuCgpUaGlzIGZ1bmN0 aW9uIGlzIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgaW50ZWdlciBhcmd1bWVudHMuCk5ldmVydGhl bGVzcywgRlJPTSwgVE8gYW5kIElOQyBjYW4gYmUgaW50ZWdlciBvciBmbG9hdC4gIEhvd2V2ZXIs CmZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgaXMgaW5leGFjdC4gIEZvciBpbnN0YW5jZSwgZGVw ZW5kaW5nIG9uCnRoZSBtYWNoaW5lLCBpdCBtYXkgcXVpdGUgd2VsbCBoYXBwZW4gdGhhdAoobnVt YmVyLXNlcXVlbmNlIDAuNCAwLjYgMC4yKSByZXR1cm5zIHRoZSBvbmUgZWxlbWVudCBsaXN0ICgw LjQpLAp3aGVyZWFzIChudW1iZXItc2VxdWVuY2UgMC40IDAuOCAwLjIpIHJldHVybnMgYSBsaXN0 IHdpdGggdGhyZWUKZWxlbWVudHMuICBUaHVzLCBpZiBzb21lIG9mIHRoZSBhcmd1bWVudHMgYXJl IGZsb2F0cyBhbmQgb25lIHdhbnRzCnRvIG1ha2Ugc3VyZSB0aGF0IFRPIGlzIGluY2x1ZGVkLCBv bmUgbWF5IGhhdmUgdG8gZXhwbGljaXRseSB3cml0ZQpUTyBhcyAoKyBGUk9NICgqIE4gSU5DKSkg b3IgdXNlIGEgdmFyaWFibGUgd2hvc2UgdmFsdWUgd2FzCmNvbXB1dGVkIHdpdGggdGhpcyBleGFj dCBleHByZXNzaW9uLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiwKb2YgY291cnNlLCBhbHNvIHJl cGxhY2UgVE8gd2l0aCBhIHNsaWdodGx5IGxhcmdlciB2YWx1ZQoob3IgYSBzbGlnaHRseSBtb3Jl IG5lZ2F0aXZlIHZhbHVlIGlmIElOQyBpcyBuZWdhdGl2ZSkuCgooZm4gRlJPTSAmb3B0aW9uYWwg VE8gSU5DKR8KKGRlZmFsaWFzICdudW1iZXItc2VxdWVuY2UgI1s3NjkgIgFcMjAzXG4AAgJVXDIw Mw0AAkNcMjA3XDIxMVwyMDQUAFwzMDBcMjYyAVwyMTFcMzAxVVwyMDMeAFwzMDJcMzAzIVwyMTBc MzA0XDMwMQQDXDMwMVZcMjAzQABcMjExBVhcMjAzWQBcMjExA0JcMjYyAwFUXDI2MgIFAgVfXFxc MjYyAVwyMDInAFwyMTEFWVwyMDNZAFwyMTEDQlwyNjIDAVRcMjYyAgUCBV9cXFwyNjIBXDIwMkAA AlwyMzdcMjA3IiBbMSAwIGVycm9yICJUaGUgaW5jcmVtZW50IGNhbiBub3QgYmUgemVybyIgbmls XSA5ICgjJCAuIDI4NTcwKV0pI0AyNTIgTWFrZSBhIGNvcHkgb2YgVFJFRS4KSWYgVFJFRSBpcyBh IGNvbnMgY2VsbCwgdGhpcyByZWN1cnNpdmVseSBjb3BpZXMgYm90aCBpdHMgY2FyIGFuZCBpdHMg Y2RyLgpDb250cmFzdCB0byBgY29weS1zZXF1ZW5jZScsIHdoaWNoIGNvcGllcyBvbmx5IGFsb25n IHRoZSBjZHJzLiAgV2l0aCBzZWNvbmQKYXJndW1lbnQgVkVDUCwgdGhpcyBjb3BpZXMgdmVjdG9y cyBhcyB3ZWxsIGFzIGNvbnNlcy4KCihmbiBUUkVFICZvcHRpb25hbCBWRUNQKR8KKGRlZmFsaWFz ICdjb3B5LXRyZWUgI1s1MTMgIgE6XDIwM0cAXDMwMAI6XDIwMzEAAkADQDpcMjA0HgACXDIwMyUA XDMwMQRAIVwyMDMlAFwzMDIEQARcIlwyNjIBXDIxMQJCXDI2NlwyMDICQVwyNjIDXDIwMgYAXDIx MVwyMzcCXDIwM0QAXDMwMQQhXDIwM0QAXDMwMgQEXCJcMjAyRQADXDI0NFwyMDdcMjExXDIwM3EA XDMwMQIhXDIwM3EAXDMwMwIhXDIxMVwyNjIDR1wyMTFTXDIxMVwyNjICXDMwNFlcMjAzbwACAVwz MDIFBEgFXCJJXDIxMFwyMDJYAAJcMjA3AVwyMDciIFtuaWwgdmVjdG9ycCBjb3B5LXRyZWUgY29w eS1zZXF1ZW5jZSAwXSA4ICgjJCAuIDMwMTc3KV0pI0A1MTEgRmluZCBvYmplY3QgS0VZIGluIGEg cHNldWRvLWFsaXN0IEFMSVNULgpBTElTVCBpcyBhIGxpc3Qgb2YgY29uc2VzIG9yIG9iamVjdHMu ICBFYWNoIGVsZW1lbnQKIChvciB0aGUgZWxlbWVudCdzIGNhciwgaWYgaXQgaXMgYSBjb25zKSBp cyBjb21wYXJlZCB3aXRoIEtFWSBieQogY2FsbGluZyBURVNULCB3aXRoIHR3byBhcmd1bWVudHM6 IChpKSB0aGUgZWxlbWVudCBvciBpdHMgY2FyLAogYW5kIChpaSkgS0VZLgpJZiB0aGF0IGlzIG5v bi1uaWwsIHRoZSBlbGVtZW50IG1hdGNoZXM7IHRoZW4gYGFzc29jLWRlZmF1bHQnCiByZXR1cm5z IHRoZSBlbGVtZW50J3MgY2RyLCBpZiBpdCBpcyBhIGNvbnMsIG9yIERFRkFVTFQgaWYgdGhlCiBl bGVtZW50IGlzIG5vdCBhIGNvbnMuCgpJZiBubyBlbGVtZW50IG1hdGNoZXMsIHRoZSB2YWx1ZSBp cyBuaWwuCklmIFRFU1QgaXMgb21pdHRlZCBvciBuaWwsIGBlcXVhbCcgaXMgdXNlZC4KCihmbiBL RVkgQUxJU1QgJm9wdGlvbmFsIFRFU1QgREVGQVVMVCkfCihkZWZhbGlhcyAnYXNzb2MtZGVmYXVs dCAjWzEwMjYgIlwzMDADXDMwMAFcMjAzOwACXDIwNDsAAUAFXDIwNhIAXDMwMQE6XDIwMxwAAUBc MjAyHQABBglcIlwyMDMzAFwzMDJcMjYyBFwyMTE6XDIwMzAAXDIxMUFcMjAyMQAEXDI2MgJcMjEw AUFcMjYyAlwyMDIDAFwyMDciIFtuaWwgZXF1YWwgdF0gMTEgKCMkIC4gMzA3NTkpXSkjQDI1OCBM aWtlIGBtZW1iZXInLCBidXQgaWdub3JlIGRpZmZlcmVuY2VzIGluIGNhc2UgYW5kIHRleHQgcmVw cmVzZW50YXRpb24uCkVMVCBtdXN0IGJlIGEgc3RyaW5nLiAgVXBwZXItY2FzZSBhbmQgbG93ZXIt Y2FzZSBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGVxdWFsLgpVbmlieXRlIHN0cmluZ3MgYXJlIGNv bnZlcnRlZCB0byBtdWx0aWJ5dGUgZm9yIGNvbXBhcmlzb24uCk5vbi1zdHJpbmdzIGluIExJU1Qg YXJlIGlnbm9yZWQuCgooZm4gRUxUIExJU1QpHwooZGVmYWxpYXMgJ21lbWJlci1pZ25vcmUtY2Fz ZSAjWzUxNCAiXDIxMVwyMDMlAFwyMTFAO1wyMDMeAAEBQFwzMDACXDMwMVwzMDIEXDMwMVwzMDJc MzAzJgdcMzAzPVwyNjZcMjAyXDIwNCUAXDIxMUFcMjYyAVwyMDIAAFwyMDciIFtjb21wYXJlLXN0 cmluZ3MgMCBuaWwgdF0gMTIgKCMkIC4gMzE0NjMpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAy XDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBtZW1iZXItaWdub3JlLWNhc2Ugc2lkZS1lZmZl Y3QtZnJlZSB0XSA0KSNAMjA1IERlbGV0ZSBmcm9tIEFMSVNUIGFsbCBlbGVtZW50cyB3aG9zZSBj YXIgaXMgS0VZLgpDb21wYXJlIGtleXMgd2l0aCBURVNULiAgRGVmYXVsdHMgdG8gYGVxdWFsJy4K UmV0dXJuIHRoZSBtb2RpZmllZCBhbGlzdC4KRWxlbWVudHMgb2YgQUxJU1QgdGhhdCBhcmUgbm90 IGNvbnNlcyBhcmUgaWdub3JlZC4KCihmbiBLRVkgQUxJU1QgJm9wdGlvbmFsIFRFU1QpHwooZGVm YWxpYXMgJ2Fzc29jLWRlbGV0ZS1hbGwgI1s3NzAgIlwyMTFcMjA0BwBcMzAwXDI2MgEBQDpcMjAz HQBcMjExAkBABFwiXDIwMx0AAUFcMjYyAlwyMDIHAAFcMzAxAUFcMjExXDI2MgJcMjAzRQBcMjEx QDpcMjAzPwACAUBABgZcIlwyMDM/AAEBQVwyNDFcMjEwXDIwMh8AXDIxMVwyNjICXDIwMh8AXDI2 NgIBXDIwNyIgW2VxdWFsIG5pbF0gOCAoIyQgLiAzMTk5NildKSNAMTUyIERlbGV0ZSBmcm9tIEFM SVNUIGFsbCBlbGVtZW50cyB3aG9zZSBjYXIgaXMgYGVxJyB0byBLRVkuClJldHVybiB0aGUgbW9k aWZpZWQgYWxpc3QuCkVsZW1lbnRzIG9mIEFMSVNUIHRoYXQgYXJlIG5vdCBjb25zZXMgYXJlIGln bm9yZWQuCgooZm4gS0VZIEFMSVNUKR8KKGRlZmFsaWFzICdhc3NxLWRlbGV0ZS1hbGwgI1s1MTQg IlwzMDACAlwzMDEjXDIwNyIgW2Fzc29jLWRlbGV0ZS1hbGwgZXFdIDYgKCMkIC4gMzI0MTkpXSkj QDE1NiBEZWxldGUgZnJvbSBBTElTVCBhbGwgZWxlbWVudHMgd2hvc2UgY2RyIGlzIGBlcScgdG8g VkFMVUUuClJldHVybiB0aGUgbW9kaWZpZWQgYWxpc3QuCkVsZW1lbnRzIG9mIEFMSVNUIHRoYXQg YXJlIG5vdCBjb25zZXMgYXJlIGlnbm9yZWQuCgooZm4gVkFMVUUgQUxJU1QpHwooZGVmYWxpYXMg J3Jhc3NxLWRlbGV0ZS1hbGwgI1s1MTQgIlwyMTFAOlwyMDMVAFwyMTFAQQI9XDIwMxUAXDIxMUFc MjYyAVwyMDIAAFwyMTFcMzAwAUFcMjExXDI2MgJcMjAzOwBcMjExQDpcMjAzNQBcMjExQEEEPVwy MDM1AAEBQVwyNDFcMjEwXDIwMhcAXDIxMVwyNjICXDIwMhcAXDI2NgJcMjA3IiBbbmlsXSA2ICgj JCAuIDMyNjY2KV0pI0A5NjUgRmluZCB0aGUgZmlyc3QgZWxlbWVudCBvZiBBTElTVCB3aG9zZSBg Y2FyJyBlcXVhbHMgS0VZIGFuZCByZXR1cm4gaXRzIGBjZHInLgpJZiBLRVkgaXMgbm90IGZvdW5k IGluIEFMSVNULCByZXR1cm4gREVGQVVMVC4KRXF1YWxpdHkgd2l0aCBLRVkgaXMgdGVzdGVkIGJ5 IFRFU1RGTiwgZGVmYXVsdGluZyB0byBgZXEnLgoKWW91IGNhbiB1c2UgYGFsaXN0LWdldCcgaW4g InBsYWNlIGV4cHJlc3Npb25zIjsgaS5lLiwgYXMgYQpnZW5lcmFsaXplZCB2YXJpYWJsZS4gIERv aW5nIHRoaXMgd2lsbCBtb2RpZnkgYW4gZXhpc3RpbmcKYXNzb2NpYXRpb24gKG1vcmUgcHJlY2lz ZWx5LCB0aGUgZmlyc3Qgb25lIGlmIG11bHRpcGxlIGV4aXN0KSwgb3IKYWRkIGEgbmV3IGVsZW1l bnQgdG8gdGhlIGJlZ2lubmluZyBvZiBBTElTVCwgZGVzdHJ1Y3RpdmVseQptb2RpZnlpbmcgdGhl IGxpc3Qgc3RvcmVkIGluIEFMSVNULgoKRXhhbXBsZToKCiAgIChzZXRxIGZvbyBcPScoKGEgLiAw KSkpCiAgIChzZXRmIChhbGlzdC1nZXQgXD0nYSBmb28pIDEKICAgICAgICAgKGFsaXN0LWdldCBc PSdiIGZvbykgMikKCiAgIGZvbyA9PiAoKGIgLiAyKSAoYSAuIDEpKQoKCldoZW4gdXNpbmcgaXQg dG8gc2V0IGEgdmFsdWUsIG9wdGlvbmFsIGFyZ3VtZW50IFJFTU9WRSBub24tbmlsCm1lYW5zIHRv IHJlbW92ZSBLRVkgZnJvbSBBTElTVCBpZiB0aGUgbmV3IHZhbHVlIGlzIGBlcWwnIHRvCkRFRkFV TFQgKG1vcmUgcHJlY2lzZWx5IHRoZSBmaXJzdCBmb3VuZCBhc3NvY2lhdGlvbiB3aWxsIGJlCmRl bGV0ZWQgZnJvbSB0aGUgYWxpc3QpLgoKRXhhbXBsZToKCiAgKHNldHEgZm9vIFw9JygoYSAuIDEp IChiIC4gMikpKQogIChzZXRmIChhbGlzdC1nZXQgXD0nYiBmb28gbmlsIFw9J3JlbW92ZSkgbmls KQoKICBmb28gPT4gKChhIC4gMSkpCgooZm4gS0VZIEFMSVNUICZvcHRpb25hbCBERUZBVUxUIFJF TU9WRSBURVNURk4pHwooZGVmYWxpYXMgJ2FsaXN0LWdldCAjWzEyODIgIlwyMTFcMjA0XG4ABARc MjM2XDIwMg8AXDMwMAUFAyNcMjExXDIwMxYAXDIxMUFcMjA3A1wyMDciIFthc3NvY10gOSAoIyQg LiAzMzAyMSldKSNAMjQyIFJldHVybiBhIGNvcHkgb2YgU0VRIHdpdGggYWxsIG9jY3VycmVuY2Vz IG9mIEVMVCByZW1vdmVkLgpTRVEgbXVzdCBiZSBhIGxpc3QsIHZlY3Rvciwgb3Igc3RyaW5nLiAg VGhlIGNvbXBhcmlzb24gaXMgZG9uZSB3aXRoIGBlcXVhbCcuCkNvbnRyYXJ5IHRvIGBkZWxldGUn LCB0aGlzIGRvZXMgbm90IHVzZSBzaWRlLWVmZmVjdHMsIGFuZCB0aGUgYXJndW1lbnQKU0VRIGlz IG5vdCBtb2RpZmllZC4KCihmbiBFTFQgU0VRKR8KKGRlZmFsaWFzICdyZW1vdmUgI1s1MTQgIlwy MTE8XDIwNFxuAFwzMDACAlwiXDIwN1wzMDACXDMwMQMhXCJcMjA3IiBbZGVsZXRlIGNvcHktc2Vx dWVuY2VdIDYgKCMkIC4gMzQxMDIpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAw XDIwNyIgW2Z1bmN0aW9uLXB1dCByZW1vdmUgc2lkZS1lZmZlY3QtZnJlZSB0XSA0KSNAMTkxIFJl dHVybiBMSVNUIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIEVMVCByZW1vdmVkLgpUaGUgY29tcGFy aXNvbiBpcyBkb25lIHdpdGggYGVxJy4gIENvbnRyYXJ5IHRvIGBkZWxxJywgdGhpcyBkb2VzIG5v dCB1c2UKc2lkZS1lZmZlY3RzLCBhbmQgdGhlIGFyZ3VtZW50IExJU1QgaXMgbm90IG1vZGlmaWVk LgoKKGZuIEVMVCBMSVNUKR8KKGRlZmFsaWFzICdyZW1xICNbNTE0ICIBAUA9XDIwMw8AXDIxMUFc MjExXDI2MgJcMjA0AAABAT5cMjAzHABcMzAwAlwzMDEDIVwiXDIwN1wyMDciIFtkZWxxIGNvcHkt c2VxdWVuY2VdIDYgKCMkIC4gMzQ1NDApXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNc MzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCByZW1xIHNpZGUtZWZmZWN0LWZyZWUgdF0gNCkjQDQxMiBD b252ZXJ0IEtFWVMgdG8gdGhlIGludGVybmFsIEVtYWNzIGtleSByZXByZXNlbnRhdGlvbi4KS0VZ UyBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBjb21tYW5kcyBz dWNoCmFzIFxbZGVzY3JpYmUta2V5XSAoYGRlc2NyaWJlLWtleScpLgoKVGhpcyBpcyB0aGUgc2Ft ZSBmb3JtYXQgdXNlZCBmb3Igc2F2aW5nIGtleWJvYXJkIG1hY3JvcyAoc2VlCmBlZG1hY3JvLW1v ZGUnKS4KCkhlcmUncyBzb21lIGV4YW1wbGUga2V5IHNlcXVlbmNlczoKCiAgICAiZiIKICAgICJD LWMgQy1jIgogICAgIkgtPGxlZnQ+IgogICAgIk0tUkVUIgogICAgIkMtTS08cmV0dXJuPiIKCkZv ciBhbiBhcHByb3hpbWF0ZSBpbnZlcnNlIG9mIHRoaXMsIHNlZSBga2V5LWRlc2NyaXB0aW9uJy4K CihmbiBLRVlTKR8KKGRlZmFsaWFzICdrYmQgI1syNTcgIlwzMDABIVwyMTFHXDMwMVlcMjAzSgBc MjExXDMwMkhcMzAzPVwyMDNKAFwyMTFcMzA0SFwzMDU9XDIwM0oAXDIxMQFHXDMwNlpIXDMwMz1c MjAzSgBcMjExAUdTSFwzMDc9XDIwM0oAXDMxMFwzMTFcMzEyA1wzMTNcIlwyMTFBQVwyNjIBXDIx MVwyMzdcMjYyAVwyMTFBQVwyNjIBXDIxMVwyMzdcMjYyAVwiXDI2MgFcMzEzXDMxNFwzMTUDXCI+ XDIwNFoAXDMxNFwzMTYCXCJcMjYwAVwyMDdcMjA3IiBba2V5LXBhcnNlIDQgMCAyNCAxIDQwIDIg NDEgYXBwbHkgdmVjdG9yIGFwcGVuZCBuaWwgbWFwY2FyICNbMjU3ICJcMjExXDI0N1wyMDUOAFwz MDABWFwyMDUOAFwyMTFcMzAxWFwyMDciIFswIDEyN10gMyAiXG5cbihmbiBDSCkiXSBpZGVudGl0 eV0gNyAoIyQgLiAzNDk0MCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMzAx XDMwNFwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQga2JkIHB1cmUgdCBzaWRlLWVmZmVjdC1m cmVlXSA1KSNANTAgQmVlcCB0byB0ZWxsIHRoZSB1c2VyIHRoaXMgYmluZGluZyBpcyB1bmRlZmlu ZWQuHwooZGVmYWxpYXMgJ3VuZGVmaW5lZCAjWzAgIlwzMDQgXDIxMAhcMjAzEgBcMzA1XDMwNlwz MDdcMzEwICFcIlwyMTBcMjAyGgBcMzExXDMwNlwzMDdcMzEwICFcIlwyMTBcMzEyIFwyMTBcMzEz XDMxNAkhPlwyMDUmAFxuXDIxMRNcMjA3IiBbZGVmaW5pbmcta2JkLW1hY3JvIGxhc3QtY29tbWFu ZC1ldmVudCBjdXJyZW50LXByZWZpeC1hcmcgcHJlZml4LWFyZyBkaW5nIGVycm9yICIlcyBpcyB1 bmRlZmluZWQiIGtleS1kZXNjcmlwdGlvbiB0aGlzLXNpbmdsZS1jb21tYW5kLWtleXMgbWVzc2Fn ZSBmb3JjZS1tb2RlLWxpbmUtdXBkYXRlIGRvd24gZXZlbnQtbW9kaWZpZXJzXSA0ICgjJCAuIDM1 ODY1KSBuaWxdKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB1bmRlZmluZWQgY29tcGxldGlvbi1wcmVkaWNhdGUgaWdub3Jl IHB1dCBzdXBwcmVzcy1rZXltYXAgdF0gNSkjQDI0NyBNYWtlIE1BUCBvdmVycmlkZSBhbGwgbm9y bWFsbHkgc2VsZi1pbnNlcnRpbmcga2V5cyB0byBiZSB1bmRlZmluZWQuCk5vcm1hbGx5LCBhcyBh biBleGNlcHRpb24sIGRpZ2l0cyBhbmQgbWludXMtc2lnbiBhcmUgc2V0IHRvIG1ha2UgcHJlZml4 IGFyZ3MsCmJ1dCBvcHRpb25hbCBzZWNvbmQgYXJnIE5PRElHSVRTIG5vbi1uaWwgdHJlYXRzIHRo ZW0gbGlrZSBvdGhlciBjaGFycy4KCihmbiBNQVAgJm9wdGlvbmFsIE5PRElHSVRTKR8KKGRlZmFs aWFzICdzdXBwcmVzcy1rZXltYXAgI1s1MTMgIlwzMDACXDMwMVwzMDIjXDIxMFwyMTFcMjA2KwBc MzAzXDMwMANcMzA0XDMwNSNcMjEwXDMwNlwyNjIBXDIxMVwzMDdYXDIwNSkAXDMwMANcMzEwAyFc MzExI1wyMTBcMjExVFwyNjIBXDIwMhQAXDI2MgFcMjA3IiBbZGVmaW5lLWtleSBbcmVtYXAgc2Vs Zi1pbnNlcnQtY29tbWFuZF0gdW5kZWZpbmVkIG5pbCAiLSIgbmVnYXRpdmUtYXJndW1lbnQgNDgg NTcgY2hhci10by1zdHJpbmcgZGlnaXQtYXJndW1lbnRdIDcgKCMkIC4gMzYzOTgpXSkjQDU1NyBD b25zdHJ1Y3QgYSBuZXcga2V5bWFwIGNvbXBvc2VkIG9mIE1BUFMgYW5kIGluaGVyaXRpbmcgZnJv bSBQQVJFTlQuCldoZW4gbG9va2luZyB1cCBhIGtleSBpbiB0aGUgcmV0dXJuZWQgbWFwLCB0aGUg a2V5IGlzIGxvb2tlZCBpbiBlYWNoCmtleW1hcCBvZiBNQVBTIGluIHR1cm4gdW50aWwgYSBiaW5k aW5nIGlzIGZvdW5kLgpJZiBubyBiaW5kaW5nIGlzIGZvdW5kIGluIE1BUFMsIHRoZSBsb29rdXAg Y29udGludWVzIGluIFBBUkVOVCwgaWYgbm9uLW5pbC4KQXMgYWx3YXlzIHdpdGgga2V5bWFwIGlu aGVyaXRhbmNlLCBhIG5pbCBiaW5kaW5nIGluIE1BUFMgb3ZlcnJpZGVzCmFueSBjb3JyZXNwb25k aW5nIGJpbmRpbmcgaW4gUEFSRU5ULCBidXQgaXQgZG9lcyBub3Qgb3ZlcnJpZGUgY29ycmVzcG9u ZGluZwpiaW5kaW5ncyBpbiBvdGhlciBrZXltYXBzIG9mIE1BUFMuCk1BUFMgY2FuIGJlIGEgbGlz dCBvZiBrZXltYXBzIG9yIGEgc2luZ2xlIGtleW1hcC4KUEFSRU5UIGlmIG5vbi1uaWwgc2hvdWxk IGJlIGEga2V5bWFwLgoKKGZuIE1BUFMgJm9wdGlvbmFsIFBBUkVOVCkfCihkZWZhbGlhcyAnbWFr ZS1jb21wb3NlZC1rZXltYXAgI1s1MTMgIlwzMDBcMzAxXDMwMgQhXDIwMw0AA0NcMjAyDgADA1wi QlwyMDciIFtrZXltYXAgYXBwZW5kIGtleW1hcHBdIDYgKCMkIC4gMzY5MzUpXSkjQDc4NCBBZGQg YmluZGluZyBpbiBLRVlNQVAgZm9yIEtFWSA9PiBERUZJTklUSU9OLCByaWdodCBhZnRlciBBRlRF UidzIGJpbmRpbmcuClRoaXMgaXMgYSBsZWdhY3kgZnVuY3Rpb247IHNlZSBga2V5bWFwLXNldC1h ZnRlcicgZm9yIHRoZQpyZWNvbW1lbmRlZCBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZC4KClRoaXMg aXMgbGlrZSBgZGVmaW5lLWtleScgZXhjZXB0IHRoYXQgdGhlIGJpbmRpbmcgZm9yIEtFWSBpcyBw bGFjZWQKanVzdCBhZnRlciB0aGUgYmluZGluZyBmb3IgdGhlIGV2ZW50IEFGVEVSLCBpbnN0ZWFk IG9mIGF0IHRoZSBiZWdpbm5pbmcKb2YgdGhlIG1hcC4gIE5vdGUgdGhhdCBBRlRFUiBtdXN0IGJl IGFuIGV2ZW50IHR5cGUgKGxpa2UgS0VZKSwgTk9UIGEgY29tbWFuZAoobGlrZSBERUZJTklUSU9O KS4KCklmIEFGVEVSIGlzIHQgb3Igb21pdHRlZCwgdGhlIG5ldyBiaW5kaW5nIGdvZXMgYXQgdGhl IGVuZCBvZiB0aGUga2V5bWFwLgpBRlRFUiBzaG91bGQgYmUgYSBzaW5nbGUgZXZlbnQgdHlwZS0t YSBzeW1ib2wgb3IgYSBjaGFyYWN0ZXIsIG5vdCBhIHNlcXVlbmNlLgoKQmluZGluZ3MgYXJlIGFs d2F5cyBhZGRlZCBiZWZvcmUgYW55IGluaGVyaXRlZCBtYXAuCgpUaGUgb3JkZXIgb2YgYmluZGlu Z3MgaW4gYSBrZXltYXAgbWF0dGVycyBvbmx5IHdoZW4gaXQgaXMgdXNlZCBhcwphIG1lbnUsIHNv IHRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWZ1bCBmb3Igbm9uLW1lbnUga2V5bWFwcy4KCihmbiBL RVlNQVAgS0VZIERFRklOSVRJT04gJm9wdGlvbmFsIEFGVEVSKR8KKGRlZmFsaWFzICdkZWZpbmUt a2V5LWFmdGVyICNbMTAyNyAiXDIxMVwyMDQHAFwzMDBcMjYyAVwzMDEEIVwyMDQVAFwzMDJcMzAz XDMwMQYGRFwiXDIxMAJHXDMwNFhcMjAzXCIAAlwzMDVIXDIwMjYAXDMwNgRcMzA3XDMxMFwzMTFc MzEyXDMxMwYJXCIhXCJcIlwyNjIEAlwyMTFHU0hcMjYyAwNcMzE0XDIxMQE/XDIwNVwyMzYAAlwy MDVcMjM2AAJBQFwyNDIGBj1cMjAzVAACXDIxMUFBXDI0MVwyMTBcMzAxA0AhXDIwM18AAkBcMjYy AwJAXDI0MgQ9XDIwM20AA1wzMDA9XDIwM3oAAkFAXDMxNT1cMjA0egACQVwyMDRcMjI3AAJBQFwz MTU9XDIwM1wyMDUAXDMwMFwyNjICXDIxMVwyMDRcMjI0AAIGBgYGQgRBQlwyNDFcMjEwXDMwMFwy NjIBAkFcMjYyA1wyMDI7AFwyMDciIFt0IGtleW1hcHAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1l bnQgMSAwIGxvb2t1cC1rZXkgYXBwbHkgdmVjdG9yIGJ1dGxhc3QgbWFwY2FyIGlkZW50aXR5IG5p bCBrZXltYXBdIDEyICgjJCAuIDM3NjE2KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMj XDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgZGVmaW5lLWtleS1hZnRlciBsaXNwLWluZGVudC1mdW5j dGlvbiBkZWZ1bl0gNCkjQDU4NiBEZWZpbmUgQ09NTUFORCBhcyBhIHByZWZpeCBjb21tYW5kLiAg Q09NTUFORCBzaG91bGQgYmUgYSBzeW1ib2wuCkEgbmV3IHNwYXJzZSBrZXltYXAgaXMgc3RvcmVk IGFzIENPTU1BTkQncyBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBpdHMKdmFsdWUuClRoaXMgcHJl cGFyZXMgQ09NTUFORCBmb3IgdXNlIGFzIGEgcHJlZml4IGtleSdzIGJpbmRpbmcuCklmIGEgc2Vj b25kIG9wdGlvbmFsIGFyZ3VtZW50IE1BUFZBUiBpcyBnaXZlbiwgaXQgc2hvdWxkIGJlIGEgc3lt Ym9sLgpUaGUgbWFwIGlzIHRoZW4gc3RvcmVkIGFzIE1BUFZBUidzIHZhbHVlIGluc3RlYWQgb2Yg YXMgQ09NTUFORCdzCnZhbHVlOyBidXQgQ09NTUFORCBpcyBzdGlsbCBkZWZpbmVkIGFzIGEgZnVu Y3Rpb24uClRoZSB0aGlyZCBvcHRpb25hbCBhcmd1bWVudCBOQU1FLCBpZiBnaXZlbiwgc3VwcGxp ZXMgYSBtZW51IG5hbWUKc3RyaW5nIGZvciB0aGUgbWFwLiAgVGhpcyBpcyByZXF1aXJlZCB0byB1 c2UgdGhlIGtleW1hcCBhcyBhIG1lbnUuClRoaXMgZnVuY3Rpb24gcmV0dXJucyBDT01NQU5ELgoK KGZuIENPTU1BTkQgJm9wdGlvbmFsIE1BUFZBUiBOQU1FKR8KKGRlZmFsaWFzICdkZWZpbmUtcHJl Zml4LWNvbW1hbmQgI1s3NjkgIlwzMDABIQMBTVwyMTACXDIwNlxmAAMBTFwyMTADXDIwNyIgW21h a2Utc3BhcnNlLWtleW1hcF0gNiAoIyQgLiAzOTAwOCldKSNAMTE1IEltcGxlbWVudCBgbWFwLWtl eW1hcCcgd2l0aCBzb3J0aW5nLgpEb24ndCBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IGlzIGZvciBp bnRlcm5hbCB1c2Ugb25seS4KCihmbiBGVU5DVElPTiBLRVlNQVApHwooZGVmYWxpYXMgJ21hcC1r ZXltYXAtc29ydGVkICNbNTE0ICJcMzAwQ1wzMDFcMzAyXDMwMwNcIgNcIlwyMTBcMjExXDMwNAJc MjQyXDMwNVwiXDI0MFwyMTBcMjExXDI0MlwyMTFcMjA1KABcMjExQAQBQAJBXCJcMjEwAUFcMjY2 XDIwMlwyMDIUAFwyMDciIFtuaWwgbWFwLWtleW1hcCBtYWtlLWNsb3N1cmUgI1s1MTQgIlwzMDAC AkJcMzAwXDI0MkJcMjQwXDIwNyIgW1YwXSA1ICJcblxuKGZuIEEgQikiXSBzb3J0ICNbNTE0ICIB QFwyNjICXDIxMUBcMjYyAQFcMjUwXDIwMxgAXDIxMVwyNTBcMjAzFgABAVdcMjA3XDMwMFwyMDdc MjExXDI1MFwyMDMfAFwzMDBcMjA3AQFcMjMxXDIwNyIgW3RdIDQgIlxuXG4oZm4gQSBCKSJdXSA4 ICgjJCAuIDM5NzEyKV0pI0A1MSBSZXR1cm4gdGhlIGJpbmRpbmcgcGFydCBvZiBhIG1lbnUtaXRl bS4KCihmbiBWQUwpHwooZGVmYWxpYXMgJ2tleW1hcC0tbWVudS1pdGVtLWJpbmRpbmcgI1syNTcg IlwyMTE6XDIwNAYAXDIwN1wyMTFAXDMwMD1cMjAzIQBcMzAxAThcMzAyAlwyMzNcMzAzAVwzMDRc IlwyMTFcMjAzHwBcMjExAyFcMjA3AlwyMDdcMjExQTpcMjAzMgBcMjExQUA7XDIwMzIAXDIxMUFB XDIwN1wyMTFAO1wyMDM7AFwyMTFBXDIwN1wyMDciIFttZW51LWl0ZW0gMiAzIHBsaXN0LWdldCA6 ZmlsdGVyXSA2ICgjJCAuIDQwMjA1KV0pI0A4OSBCdWlsZCBhIG1lbnUtaXRlbSBsaWtlIElURU0g YnV0IHdpdGggaXRzIGJpbmRpbmcgY2hhbmdlZCB0byBCSU5ESU5HLgoKKGZuIElURU0gQklORElO RykfCihkZWZhbGlhcyAna2V5bWFwLS1tZW51LWl0ZW0td2l0aC1iaW5kaW5nICNbNTE0ICIBOlwy MDQGAFwyMDcBQFwzMDA9XDIwMy0AXDMwMQIhXDI2MgIBQUFcMjExAlwyNDBcMjEwXDMwMgFBXDMw M1wiXDIwMyoAXDIxMVwzMDQCQVwzMDNcMzA1I1wyNDFcMjEwXDIxMAFcMjA3AUE6XDIwM0MAAUFA O1wyMDNDAAFAAkFAAkJCXDIwNwFAAUJcMjA3IiBbbWVudS1pdGVtIGNvcHktc2VxdWVuY2UgcGxp c3QtZ2V0IDpmaWx0ZXIgcGxpc3QtcHV0IG5pbF0gOCAoIyQgLiA0MDQ5OSldKSNANDcgTWVyZ2Ug YmluZGluZ3MgVkFMMSBhbmQgVkFMMi4KCihmbiBWQUwxIFZBTDIpHwooZGVmYWxpYXMgJ2tleW1h cC0tbWVyZ2UtYmluZGluZ3MgI1s1MTQgIlwzMDACIVwzMDACIVwzMDECIVwyMDMSAFwzMDEBIVwy MDQUAANcMjA3XDMwMgICRVwzMDEFIVwyMDMpAFwzMDEEIT9cMjA1KgADXDIwMioABFwzMDMBA1wi XDIwNyIgW2tleW1hcC0tbWVudS1pdGVtLWJpbmRpbmcga2V5bWFwcCBrZXltYXAga2V5bWFwLS1t ZW51LWl0ZW0td2l0aC1iaW5kaW5nXSA5ICgjJCAuIDQwODYzKV0pI0AyNjkgUmV0dXJuIGEgc2lt cGxlciBlcXVpdmFsZW50IGtleW1hcC4KVGhpcyByZXNvbHZlcyBpbmhlcml0YW5jZSBhbmQgcmVk ZWZpbml0aW9ucy4gIFRoZSByZXR1cm5lZCBrZXltYXAKc2hvdWxkIGJlaGF2ZSBpZGVudGljYWxs eSB0byBhIGNvcHkgb2YgS0VZTUFQIHcuci50IGBsb29rdXAta2V5JwphbmQgdXNlIGluIGFjdGl2 ZSBrZXltYXBzIGFuZCBtZW51cy4KU3Via2V5bWFwcyBtYXkgYmUgbW9kaWZpZWQgYnV0IGFyZSBu b3QgY2Fub25pY2FsaXplZC4KCihmbiBNQVApHwooZGVmYWxpYXMgJ2tleW1hcC1jYW5vbmljYWxp emUgI1syNTcgIlwzMDBDXDMwMENcMzAxAyFcMzAyBCFcMjAzGwBcMzAzXDMwNFwzMDUEBgYjBVwi XDI2MgRcMjAyBwABXDI0MlwyMDMkAFwzMDZcMjAyJQBcMzA3ASFcMjYyBAFcMjQyXDIxMVwyMDND AFwyMTFAXDMxMAYGXDMxMQNAIQNBI1wyMTABQVwyNjZcMjAyXDIwMisAXDIxMAJcMjQyA1wzMDBc MjQwXDIxMFwyMTFcMjAzXDIwMQBcMjExQFwyMTFAXDIxMQYGXDI0MlwyMzYGBgFcMjA0YQADXDIw MnMABgdcMzEyAwZcblwyNDJcIlwyNDBcMjEwAlwzMTMFQQRBXCJCBghcMjQyQlwyNDBcMjY2AwFB XDI2NlwyMDJcMjAySgBcMjEwAwNcMjQyXDI0NFwyMDciIFtuaWwga2V5bWFwLXByb21wdCBrZXlt YXBwIG1hcC1rZXltYXAgbWFrZS1jbG9zdXJlICNbNTE0ICIBOlwyMDMrAAFAAkFTVVwyMDNcIgBc MzAxAkACQlwzMDFcMjQyQlwyNDBcMjEwXDMwMQJBAkJcMzAxXDI0MkJcMjQwXDIwN1wzMDACAkJc MzAwXDI0MkJcMjQwXDIwN1wzMDECAkJcMzAxXDI0MkJcMjQwXDIwNyIgW1YwIFYxXSA1ICJcblxu KGZuIEtFWSBJVEVNKSJdIG1ha2Uta2V5bWFwIG1ha2Utc3BhcnNlLWtleW1hcCBkZWZpbmUta2V5 IHZlY3RvciBkZWxxIGtleW1hcC0tbWVyZ2UtYmluZGluZ3NdIDEzICgjJCAuIDQxMTQyKV0pCihw dXQgJ2tleWJvYXJkLXRyYW5zbGF0ZS10YWJsZSAnY2hhci10YWJsZS1leHRyYS1zbG90cyAwKSNA MjYzIFRyYW5zbGF0ZSBjaGFyYWN0ZXIgRlJPTSB0byBUTyBvbiB0aGUgY3VycmVudCB0ZXJtaW5h bC4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXktdHJhbnNsYXRlJyBmb3IgdGhl CnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKVGhpcyBmdW5jdGlvbiBjcmVh dGVzIGEgYGtleWJvYXJkLXRyYW5zbGF0ZS10YWJsZScgaWYgbmVjZXNzYXJ5CmFuZCB0aGVuIG1v ZGlmaWVzIG9uZSBlbnRyeSBpbiBpdC4KCihmbiBGUk9NIFRPKR8KKGRlZmFsaWFzICdrZXlib2Fy ZC10cmFuc2xhdGUgI1s1MTQgIlwzMDEIIVwyMDQLAFwzMDJcMzAwXDMwM1wiEAgCAklcMjA3IiBb a2V5Ym9hcmQtdHJhbnNsYXRlLXRhYmxlIGNoYXItdGFibGUtcCBtYWtlLWNoYXItdGFibGUgbmls XSA1ICgjJCAuIDQyMTI3KV0pI0A2MjAgR2l2ZSBLRVkgYSBnbG9iYWwgYmluZGluZyBhcyBDT01N QU5ELgpUaGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1nbG9iYWwtc2V0JyBm b3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKQ09NTUFORCBpcyB0 aGUgY29tbWFuZCBkZWZpbml0aW9uIHRvIHVzZTsgdXN1YWxseSBpdCBpcwphIHN5bWJvbCBuYW1p bmcgYW4gaW50ZXJhY3RpdmVseS1jYWxsYWJsZSBmdW5jdGlvbi4KS0VZIGlzIGEga2V5IHNlcXVl bmNlOyBub25pbnRlcmFjdGl2ZWx5LCBpdCBpcyBhIHN0cmluZyBvciB2ZWN0b3IKb2YgY2hhcmFj dGVycyBvciBldmVudCB0eXBlcywgYW5kIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHdpdGggY29kZXMK YWJvdmUgMTI3IChzdWNoIGFzIElTTyBMYXRpbi0xKSBjYW4gYmUgaW5jbHVkZWQgaWYgeW91IHVz ZSBhIHZlY3Rvci4KCk5vdGUgdGhhdCBpZiBLRVkgaGFzIGEgbG9jYWwgYmluZGluZyBpbiB0aGUg Y3VycmVudCBidWZmZXIsCnRoYXQgbG9jYWwgYmluZGluZyB3aWxsIGNvbnRpbnVlIHRvIHNoYWRv dyBhbnkgZ2xvYmFsIGJpbmRpbmcKdGhhdCB5b3UgbWFrZSB3aXRoIHRoaXMgZnVuY3Rpb24uCgoo Zm4gS0VZIENPTU1BTkQpHwooZGVmYWxpYXMgJ2dsb2JhbC1zZXQta2V5ICNbNTE0ICJcMzAwAiFc MjA0EgABO1wyMDQSAFwzMDFcMzAyXDMwMwREXCJcMjEwXDMwNFwzMDUgAwMjXDIwNyIgW3ZlY3Rv cnAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1lbnQgYXJyYXlwIGRlZmluZS1rZXkgY3VycmVudC1n bG9iYWwtbWFwXSA2ICgjJCAuIDQyNTQ2KSAoYnl0ZS1jb2RlICJcMzAxGFwzMDJcMzAzXDMwMVwz MDQjXDIxMVwzMDVcMzA2XDMwN1wzMTAFIVwiISlEXDIwNyIgW21lbnUtcHJvbXB0aW5nIG5pbCBy ZWFkLWtleS1zZXF1ZW5jZSAiU2V0IGtleSBnbG9iYWxseTogIiB0IHJlYWQtY29tbWFuZCBmb3Jt YXQgIlNldCBrZXkgJXMgdG8gY29tbWFuZDogIiBrZXktZGVzY3JpcHRpb25dIDcpXSkjQDU5MSBH aXZlIEtFWSBhIGxvY2FsIGJpbmRpbmcgYXMgQ09NTUFORC4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5j dGlvbjsgc2VlIGBrZXltYXAtbG9jYWwtc2V0JyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9u IHRvIHVzZSBpbnN0ZWFkLgoKQ09NTUFORCBpcyB0aGUgY29tbWFuZCBkZWZpbml0aW9uIHRvIHVz ZTsgdXN1YWxseSBpdCBpcwphIHN5bWJvbCBuYW1pbmcgYW4gaW50ZXJhY3RpdmVseS1jYWxsYWJs ZSBmdW5jdGlvbi4KS0VZIGlzIGEga2V5IHNlcXVlbmNlOyBub25pbnRlcmFjdGl2ZWx5LCBpdCBp cyBhIHN0cmluZyBvciB2ZWN0b3IKb2YgY2hhcmFjdGVycyBvciBldmVudCB0eXBlcywgYW5kIG5v bi1BU0NJSSBjaGFyYWN0ZXJzIHdpdGggY29kZXMKYWJvdmUgMTI3IChzdWNoIGFzIElTTyBMYXRp bi0xKSBjYW4gYmUgaW5jbHVkZWQgaWYgeW91IHVzZSBhIHZlY3Rvci4KClRoZSBiaW5kaW5nIGdv ZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyJ3MgbG9jYWwgbWFwLCB3aGljaCBpbiBtb3N0CmNhc2Vz IGlzIHNoYXJlZCB3aXRoIGFsbCBvdGhlciBidWZmZXJzIGluIHRoZSBzYW1lIG1ham9yIG1vZGUu CgooZm4gS0VZIENPTU1BTkQpHwooZGVmYWxpYXMgJ2xvY2FsLXNldC1rZXkgI1s1MTQgIlwzMDAg XDIxMVwyMDQOAFwzMDFcMzAyIFwyMTFcMjYyAyFcMjEwXDMwMwMhXDIwNCAAAjtcMjA0IABcMzA0 XDMwNVwzMDYFRFwiXDIxMFwzMDcBBAQjXDIwNyIgW2N1cnJlbnQtbG9jYWwtbWFwIHVzZS1sb2Nh bC1tYXAgbWFrZS1zcGFyc2Uta2V5bWFwIHZlY3RvcnAgc2lnbmFsIHdyb25nLXR5cGUtYXJndW1l bnQgYXJyYXlwIGRlZmluZS1rZXldIDcgKCMkIC4gNDM1NDcpICJLU2V0IGtleSBsb2NhbGx5OiBc bkNTZXQga2V5ICVzIGxvY2FsbHkgdG8gY29tbWFuZDogIl0pI0AyMDUgUmVtb3ZlIGdsb2JhbCBi aW5kaW5nIG9mIEtFWS4KVGhpcyBpcyBhIGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXltYXAtZ2xv YmFsLXVuc2V0JyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoK S0VZIGlzIGEgc3RyaW5nIG9yIHZlY3RvciByZXByZXNlbnRpbmcgYSBzZXF1ZW5jZSBvZiBrZXlz dHJva2VzLgoKKGZuIEtFWSkfCihkZWZhbGlhcyAnZ2xvYmFsLXVuc2V0LWtleSAjWzI1NyAiXDMw MAFcMzAxXCJcMjA3IiBbZ2xvYmFsLXNldC1rZXkgbmlsXSA0ICgjJCAuIDQ0NDQ1KSAia1Vuc2V0 IGtleSBnbG9iYWxseTogIl0pI0AyMDMgUmVtb3ZlIGxvY2FsIGJpbmRpbmcgb2YgS0VZLgpUaGlz IGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1sb2NhbC11bnNldCcgZm9yIHRoZQpy ZWNvbW1lbmRlZCBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZC4KCktFWSBpcyBhIHN0cmluZyBvciB2 ZWN0b3IgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KCihmbiBLRVkpHwoo ZGVmYWxpYXMgJ2xvY2FsLXVuc2V0LWtleSAjWzI1NyAiXDMwMCBcMjAzXG4AXDMwMQFcMzAyXCJc MjEwXDMwMlwyMDciIFtjdXJyZW50LWxvY2FsLW1hcCBsb2NhbC1zZXQta2V5IG5pbF0gNCAoIyQg LiA0NDc2OSkgImtVbnNldCBrZXkgbG9jYWxseTogIl0pI0A0NTkgUmV0dXJuIHRoZSBiaW5kaW5n IGZvciBjb21tYW5kIEtFWVMgaW4gY3VycmVudCBsb2NhbCBrZXltYXAgb25seS4KVGhpcyBpcyBh IGxlZ2FjeSBmdW5jdGlvbjsgc2VlIGBrZXltYXAtbG9jYWwtbG9va3VwJyBmb3IgdGhlCnJlY29t bWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKS0VZUyBpcyBhIHN0cmluZyBvciB2ZWN0 b3IsIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KVGhlIGJpbmRpbmcgaXMgcHJvYmFibHkgYSBz eW1ib2wgd2l0aCBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpJZiBvcHRpb25hbCBhcmd1bWVudCBB Q0NFUFQtREVGQVVMVCBpcyBub24tbmlsLCByZWNvZ25pemUgZGVmYXVsdApiaW5kaW5nczsgc2Vl IHRoZSBkZXNjcmlwdGlvbiBvZiBgbG9va3VwLWtleScgZm9yIG1vcmUgZGV0YWlscwphYm91dCB0 aGlzLgoKKGZuIEtFWVMgJm9wdGlvbmFsIEFDQ0VQVC1ERUZBVUxUKR8KKGRlZmFsaWFzICdsb2Nh bC1rZXktYmluZGluZyAjWzUxMyAiXDMwMCBcMjExXDIwNQsAXDMwMQEEBCNcMjA3IiBbY3VycmVu dC1sb2NhbC1tYXAgbG9va3VwLWtleV0gNyAoIyQgLiA0NTEyNildKSNANTQyIFJldHVybiB0aGUg YmluZGluZyBmb3IgY29tbWFuZCBLRVlTIGluIGN1cnJlbnQgZ2xvYmFsIGtleW1hcCBvbmx5LgpU aGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtleW1hcC1nbG9iYWwtbG9va3VwJyBmb3Ig dGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkLgoKS0VZUyBpcyBhIHN0cmlu ZyBvciB2ZWN0b3IsIGEgc2VxdWVuY2Ugb2Yga2V5c3Ryb2tlcy4KVGhlIGJpbmRpbmcgaXMgcHJv YmFibHkgYSBzeW1ib2wgd2l0aCBhIGZ1bmN0aW9uIGRlZmluaXRpb24uClRoaXMgZnVuY3Rpb24n cyByZXR1cm4gdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBgbG9va3VwLWtleScKKHdo aWNoIHNlZSkuCgpJZiBvcHRpb25hbCBhcmd1bWVudCBBQ0NFUFQtREVGQVVMVCBpcyBub24tbmls LCByZWNvZ25pemUgZGVmYXVsdApiaW5kaW5nczsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBgbG9v a3VwLWtleScgZm9yIG1vcmUgZGV0YWlscwphYm91dCB0aGlzLgoKKGZuIEtFWVMgJm9wdGlvbmFs IEFDQ0VQVC1ERUZBVUxUKR8KKGRlZmFsaWFzICdnbG9iYWwta2V5LWJpbmRpbmcgI1s1MTMgIlwz MDBcMzAxIAMDI1wyMDciIFtsb29rdXAta2V5IGN1cnJlbnQtZ2xvYmFsLW1hcF0gNiAoIyQgLiA0 NTcwMyldKSNANDkgVXNlZCBpbnRlcm5hbGx5IGJ5IGBzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9u Jy4fCihkZWZ2YXIga2V5LXN1YnN0aXR1dGlvbi1pbi1wcm9ncmVzcyBuaWwgKCMkIC4gNDYzNTMp KSNANTkxIFJlcGxhY2UgT0xEREVGIHdpdGggTkVXREVGIGZvciBhbnkga2V5cyBpbiBLRVlNQVAg bm93IGRlZmluZWQgYXMgT0xEREVGLgpUaGlzIGlzIGEgbGVnYWN5IGZ1bmN0aW9uOyBzZWUgYGtl eW1hcC1zdWJzdGl0dXRlJyBmb3IgdGhlCnJlY29tbWVuZGVkIGZ1bmN0aW9uIHRvIHVzZSBpbnN0 ZWFkLgoKSW4gb3RoZXIgd29yZHMsIE9MRERFRiBpcyByZXBsYWNlZCB3aXRoIE5FV0RFRiB3aGVy ZXZlciBpdCBhcHBlYXJzLgpBbHRlcm5hdGl2ZWx5LCBpZiBvcHRpb25hbCBmb3VydGggYXJndW1l bnQgT0xETUFQIGlzIHNwZWNpZmllZCwgd2UgcmVkZWZpbmUKaW4gS0VZTUFQIGFzIE5FV0RFRiB0 aG9zZSBrZXlzIHRoYXQgYXJlIGRlZmluZWQgYXMgT0xEREVGIGluIE9MRE1BUC4KCklmIHlvdSBk b24ndCBzcGVjaWZ5IE9MRE1BUCwgeW91IGNhbiB1c3VhbGx5IGdldCB0aGUgc2FtZSByZXN1bHRz CmluIGEgY2xlYW5lciB3YXkgd2l0aCBjb21tYW5kIHJlbWFwcGluZywgbGlrZSB0aGlzOgogIChk ZWZpbmUta2V5IEtFWU1BUCBbcmVtYXAgT0xEREVGXSBORVdERUYpCgooZm4gT0xEREVGIE5FV0RF RiBLRVlNQVAgJm9wdGlvbmFsIE9MRE1BUCkfCihkZWZhbGlhcyAnc3Vic3RpdHV0ZS1rZXktZGVm aW5pdGlvbiAjWzEyODMgIlwyMTFDXDIxMVwyNDJcMjA0CwBcMjExXDMwMVwyNDBcMjEwAlwyMDYQ AANcMzAyAlwyNDJcMzAzXCIBCEIYXDMwNFwzMDVcMzA2AwYGBlxuBlxmBg4mBgNcIilcMjA3IiBb a2V5LXN1YnN0aXR1dGlvbi1pbi1wcm9ncmVzcyAiIiB2Y29uY2F0IFtuaWxdIG1hcC1rZXltYXAg bWFrZS1jbG9zdXJlICNbNTE0ICJcMzAwXDMwMVwyNDJHA0lcMjEwXDMwNQFcMzA0XDMwM1wzMDBc MzAyJVwyMDciIFtWMCBWMSBWMiBWMyBWNCBzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uLWtleV0g OCAiXG5cbihmbiBDSEFSIERFRk4pIl1dIDE2ICgjJCAuIDQ2NDYyKV0pI0A0MSAKCihmbiBERUZO IE9MRERFRiBORVdERUYgUFJFRklYIEtFWU1BUCkfCihkZWZhbGlhcyAnc3Vic3RpdHV0ZS1rZXkt ZGVmaW5pdGlvbi1rZXkgI1sxMjg1ICJcMzAxXDIxMVwyMTEGB1wyNDJcMzAyPVwyMDMYAAYHXDI2 MgFcMzAzBgg4XDI2MghcMjAyOQAGB1wyNDI7XDIwMy0ABgdcMjExQVwyNjIJXDI0MgJCXDI2MgJc MjAyGAAGB1wyNDI6XDIwMzkABgdBXDI2MggGBwYHPVwyMDRWAAYHO1wyMDROAFwzMDQGCCFcMjAz dQAGBwYHXDIzMlwyMDN1AFwzMDUEBgYDXDIwM24AXDMwNgQhXDIxMUFBBlxuXDI0MFwyMTBcMjEx XDI2MgFcMjAycwAEXDIzNwYJXDI0NCNcMjA3XDMwNwYIIVwyMDZ+AAYHXDI2MgNcMzEwAyFcMjA1 XDI2MQBcMzExBAYGXCJcMjExP1wyMDZcMjMxAFwzMTIBIVwyMDZcMjMxAFwzMTABIVwyNjIBXDIw NVwyNjEAAgg+P1wyMDVcMjYxAFwzMTMGBwYHBgYGBgYJJVwyMDciIFtrZXktc3Vic3RpdHV0aW9u LWluLXByb2dyZXNzIG5pbCBtZW51LWl0ZW0gMiB2ZWN0b3JwIGRlZmluZS1rZXkgY29weS1zZXF1 ZW5jZSBpbmRpcmVjdC1mdW5jdGlvbiBrZXltYXBwIGxvb2t1cC1rZXkgbmF0bnVtcCBzdWJzdGl0 dXRlLWtleS1kZWZpbml0aW9uXSAxNCAoIyQgLiA0NzQxNCldKSNAMTE3IERlZmF1bHQga2V5bWFw IGZvciBFU0MgKG1ldGEpIGNvbW1hbmRzLgpUaGUgbm9ybWFsIGdsb2JhbCBkZWZpbml0aW9uIG9m IHRoZSBjaGFyYWN0ZXIgRVNDIGluZGlyZWN0cyB0byB0aGlzIGtleW1hcC4fCihkZWZ2YXIgZXNj LW1hcCAoYnl0ZS1jb2RlICJcMzAwIFwzMDEBXDMwMlwzMDMjXDIxMFwzMDEBXDMwNFwzMDUjXDIx MFwzMDEBXDMwNlwzMDcjXDIxMFwzMDEBXDMxMFwzMTEjXDIxMFwzMDEBXDMxMlwzMTMjXDIxMFwy MDciIFttYWtlLWtleW1hcCBkZWZpbmUta2V5ICJ1IiB1cGNhc2Utd29yZCAibCIgZG93bmNhc2Ut d29yZCAiYyIgY2FwaXRhbGl6ZS13b3JkICJ4IiBleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQgIlgi IGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZC1mb3ItYnVmZmVyXSA1KSAoIyQgLiA0ODAzNykpCihi eXRlLWNvZGUgIlwzMDEITVwyMTBcMzAyXDMwMVwzMDBcMzAzI1wyMDciIFtlc2MtbWFwIEVTQy1w cmVmaXggbWFrZS1vYnNvbGV0ZSAiMjguMSJdIDQpI0AzNCBLZXltYXAgZm9yIHN1YmNvbW1hbmRz IG9mIEMteCA0Lh8KKGRlZnZhciBjdGwteC00LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSAoIyQg LiA0ODU0MikpCihkZWZhbGlhcyAnY3RsLXgtNC1wcmVmaXggY3RsLXgtNC1tYXApI0AyOCBLZXlt YXAgZm9yIGZyYW1lIGNvbW1hbmRzLh8KKGRlZnZhciBjdGwteC01LW1hcCAobWFrZS1zcGFyc2Ut a2V5bWFwKSAoIyQgLiA0ODY3NCkpCihkZWZhbGlhcyAnY3RsLXgtNS1wcmVmaXggY3RsLXgtNS1t YXApI0AzOCBLZXltYXAgZm9yIHRhYi1iYXIgcmVsYXRlZCBjb21tYW5kcy4fCihkZWZ2YXIgdGFi LXByZWZpeC1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkgKCMkIC4gNDg4MDApKSNAMTEwIERlZmF1 bHQga2V5bWFwIGZvciBDLXggY29tbWFuZHMuClRoZSBub3JtYWwgZ2xvYmFsIGRlZmluaXRpb24g b2YgdGhlIGNoYXJhY3RlciBDLXggaW5kaXJlY3RzIHRvIHRoaXMga2V5bWFwLh8KKGRlZnZhciBj dGwteC1tYXAgKGJ5dGUtY29kZSAiXDMwMSBcMzAyAVwzMDNcMzA0I1wyMTBcMzAyAVwzMDVcMzA2 I1wyMTBcMzAyAVwzMDcII1wyMTBcMzAyAVwzMTBcMzExI1wyMTBcMzAyAVwzMTJcMzEzI1wyMTBc MzAyAVwzMTRcMzE1I1wyMTBcMzE2XDMxNVwzMTdcMzIwI1wyMTBcMzAyAVwzMjFcMzIyI1wyMTBc MzE2XDMyMlwzMTdcMzIwI1wyMTBcMzAyAVwzMjNcMzI0I1wyMTBcMzAyAVwzMjVcMzI2I1wyMTBc MjA3IiBbdGFiLXByZWZpeC1tYXAgbWFrZS1rZXltYXAgZGVmaW5lLWtleSAiNCIgY3RsLXgtNC1w cmVmaXggIjUiIGN0bC14LTUtcHJlZml4ICJ0IiAiYiIgc3dpdGNoLXRvLWJ1ZmZlciAiayIga2ls bC1idWZmZXIgIhUiIHVwY2FzZS1yZWdpb24gcHV0IGRpc2FibGVkIHQgIlxmIiBkb3duY2FzZS1y ZWdpb24gIjwiIHNjcm9sbC1sZWZ0ICI+IiBzY3JvbGwtcmlnaHRdIDUpICgjJCAuIDQ4OTAxKSkK KGJ5dGUtY29kZSAiXDMwMQhNXDIxMFwzMDJcMzAxXDMwMFwzMDMjXDIwNyIgW2N0bC14LW1hcCBD b250cm9sLVgtcHJlZml4IG1ha2Utb2Jzb2xldGUgIjI4LjEiXSA0KSNAMTc5IERlZmF1bHQgZ2xv YmFsIGtleW1hcCBtYXBwaW5nIEVtYWNzIGtleWJvYXJkIGlucHV0IGludG8gY29tbWFuZHMuClRo ZSB2YWx1ZSBpcyBhIGtleW1hcCB0aGF0IGlzIHVzdWFsbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkp IEVtYWNzJ3MKZ2xvYmFsIG1hcC4KClNlZSBhbHNvIGBjdXJyZW50LWdsb2JhbC1tYXAnLh8KKGRl ZnZhciBnbG9iYWwtbWFwIChieXRlLWNvZGUgIlwzMDEgXDMwMgFcMzAzXDMwNCNcMjEwXDMwMgFc MzA1XDMwNiNcMjEwXDMwMgFcMzA3XDMxMCNcMjEwXDMxMVwzMTJcMzEzXCJcMzE0XDIxMQMDXDMx NVwzMTYkXDIxMAhcMzE3PVwyMDMtAFwyMTEDA1wzMjBcMzIxJFwyMTBcMjExAwNcMzIxXDMyMiRc MjY2A1wzMDIBXDMyM1wzMjQjXDIxMFwzMDIBXDMyNVwzMjYjXDIxMFwzMDIBXDMyN1wzMzAjXDIx MFwzMDIBXDMzMVwzMzIjXDIxMFwzMDIBXDMzM1wzMzQjXDIxMFwzMDIBXDMzNVwzMzQjXDIxMFwz MDIBXDMzNlwzMzcjXDIxMFwzMDIBXDM0MFwzNDEjXDIxMFwzMDIBXDM0MlwzNDMjXDIxMFwzMDIB XDM0NFwzNDUjXDIxMFwzMDIBXDM0NlwzNDcjXDIxMFwyMDciIFtzeXN0ZW0tdHlwZSBtYWtlLWtl eW1hcCBkZWZpbmUta2V5ICIbIiBFU0MtcHJlZml4ICIYIiBDb250cm9sLVgtcHJlZml4ICIJIiBz ZWxmLWluc2VydC1jb21tYW5kIG1ha2UtdmVjdG9yIDEgbmlsICNbMTAyOCAiAQFXXDIwNRgAAlwz MDADSVwyMTBcMzAxBARcMzAyI1wyMTABVFwyNjICXDIwMgAAXDIwNyIgWzAgZGVmaW5lLWtleSBz ZWxmLWluc2VydC1jb21tYW5kXSA4ICJcblxuKGZuIE1BUCBWRUMxIEZST00gVE8pIl0gMzIgMTI3 IG1zLWRvcyAxMjggMTYwIDI1NiAiASIgYmVnaW5uaW5nLW9mLWxpbmUgIgIiIGJhY2t3YXJkLWNo YXIgIgUiIGVuZC1vZi1saW5lICIGIiBmb3J3YXJkLWNoYXIgIhoiIHN1c3BlbmQtZW1hY3MgIhga IiAiFiIgc2Nyb2xsLXVwLWNvbW1hbmQgIlwzNjYiIHNjcm9sbC1kb3duLWNvbW1hbmQgIlwyMjYi IHNjcm9sbC1vdGhlci13aW5kb3cgIlwyMDMiIGV4aXQtcmVjdXJzaXZlLWVkaXQgIh0iIGFib3J0 LXJlY3Vyc2l2ZS1lZGl0XSA4KSAoIyQgLiA0OTU3OSkpCih1c2UtZ2xvYmFsLW1hcCBnbG9iYWwt bWFwKQooZGVmY29uc3QgbGlzdGlmeS1rZXktc2VxdWVuY2UtMSAxMzQyMTc4NTYpI0A1NSBDb252 ZXJ0IGEga2V5IHNlcXVlbmNlIHRvIGEgbGlzdCBvZiBldmVudHMuCgooZm4gS0VZKR8KKGRlZmFs aWFzICdsaXN0aWZ5LWtleS1zZXF1ZW5jZSAjWzI1NyAiXDMwMAEhXDIwMwsAXDMwMQFcMzAyXCJc MjA3XDMwM1wzMDQCXCJcMjA3IiBbdmVjdG9ycCBhcHBlbmQgbmlsIG1hcGNhciAjWzI1NyAiXDIx MVwzMDFWXDIwMwsAXDMwMgEIXCJcMjA3XDIwNyIgW2xpc3RpZnkta2V5LXNlcXVlbmNlLTEgMTI3 IGxvZ3hvcl0gNCAiXG5cbihmbiBDKSJdXSA0ICgjJCAuIDUwNzI2KV0pI0A3NCBSZXR1cm4gbm9u LW5pbCBpZiBPQkpFQ1QgaXMgYW4gaW5wdXQgZXZlbnQgb3IgZXZlbnQgb2JqZWN0LgoKKGZuIE9C SkVDVCkfCihkZWZhbGlhcyAnZXZlbnRwICNbMjU3ICJcMjExXDI1MFwyMDYfAFwyMTE6XDIwMxIA XDIxMUBcMjExXDI2MgJcMjAyEwBcMjExXDIwNR8AXDIxMTlcMjA1HwBcMzAwASE/XDIwNyIgW2tl eXdvcmRwXSAzICgjJCAuIDUxMDA1KV0pI0A0NDIgUmV0dXJuIGEgbGlzdCBvZiBzeW1ib2xzIHJl cHJlc2VudGluZyB0aGUgbW9kaWZpZXIga2V5cyBpbiBldmVudCBFVkVOVC4KVGhlIGVsZW1lbnRz IG9mIHRoZSBsaXN0IG1heSBpbmNsdWRlIGBtZXRhJywgYGNvbnRyb2wnLApgc2hpZnQnLCBgaHlw ZXInLCBgc3VwZXInLCBgYWx0JywgYGNsaWNrJywgYGRvdWJsZScsIGB0cmlwbGUnLCBgZHJhZycs CmFuZCBgZG93bicuCkVWRU5UIG1heSBiZSBhbiBldmVudCBvciBhbiBldmVudCB0eXBlLiAgSWYg RVZFTlQgaXMgYSBzeW1ib2wKdGhhdCBoYXMgbmV2ZXIgYmVlbiB1c2VkIGluIGFuIGV2ZW50IHRo YXQgaGFzIGJlZW4gcmVhZCBhcyBpbnB1dAppbiB0aGUgY3VycmVudCBFbWFjcyBzZXNzaW9uLCB0 aGVuIHRoaXMgZnVuY3Rpb24gbWF5IGZhaWwgdG8gaW5jbHVkZQp0aGUgYGNsaWNrJyBtb2RpZmll ci4KCihmbiBFVkVOVCkfCihkZWZhbGlhcyAnZXZlbnQtbW9kaWZpZXJzICNbMjU3ICJcMjExATxc MjAzXG4AAUBcMjYyAVwyMTE5XDIwMxQAXDMwMAEhQVwyMDdcMzAxXDMwMgJcMzAzXCJcMzAyA1wz MDRcIlwzMDVVXDIwNCYAXDMwNkNcMjYyAlwzMDIDXDMwN1wiXDMwNVVcMjAzNQBcMjExXDMxMFdc MjAzOgBcMzExAkJcMjYyAlwzMDIDXDMxMlwiXDMwNVVcMjAzSgBcMjExAVwyMjdVXDIwNE8AXDMx MwJCXDI2MgJcMzAyA1wzMTRcIlwzMDVVXDIwNF0AXDMxNQJCXDI2MgJcMzAyA1wzMTZcIlwzMDVV XDIwNGsAXDMxNwJCXDI2MgJcMzAyA1wzMjBcIlwzMDVVXDIwNHkAXDMyMQJCXDI2MgIBXDIwNyIg W2ludGVybmFsLWV2ZW50LXN5bWJvbC1wYXJzZS1tb2RpZmllcnMgbmlsIGxvZ2FuZCAtMjY0MjQx MTUzIDEzNDIxNzcyOCAwIG1ldGEgNjcxMDg4NjQgMzIgY29udHJvbCAzMzU1NDQzMiBzaGlmdCAx Njc3NzIxNiBoeXBlciA4Mzg4NjA4IHN1cGVyIDQxOTQzMDQgYWx0XSA3ICgjJCAuIDUxMjE2KV0p I0AzMzUgUmV0dXJuIHRoZSBiYXNpYyB0eXBlIG9mIHRoZSBnaXZlbiBldmVudCAoYWxsIG1vZGlm aWVycyByZW1vdmVkKS4KVGhlIHZhbHVlIGlzIGEgcHJpbnRpbmcgY2hhcmFjdGVyIChub3QgdXBw ZXIgY2FzZSkgb3IgYSBzeW1ib2wuCkVWRU5UIG1heSBiZSBhbiBldmVudCBvciBhbiBldmVudCB0 eXBlLiAgSWYgRVZFTlQgaXMgYSBzeW1ib2wKdGhhdCBoYXMgbmV2ZXIgYmVlbiB1c2VkIGluIGFu IGV2ZW50IHRoYXQgaGFzIGJlZW4gcmVhZCBhcyBpbnB1dAppbiB0aGUgY3VycmVudCBFbWFjcyBz ZXNzaW9uLCB0aGVuIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBuaWwuCgooZm4gRVZFTlQpHwoo ZGVmYWxpYXMgJ2V2ZW50LWJhc2ljLXR5cGUgI1syNTcgIlwyMTE6XDIwMwkAXDIxMUBcMjYyAVwy MTE5XDIwMxMAXDIxMVwzMDBOQFwyMDdcMzAxAVwzMDJcIlwyMTFcMzAzV1wyMDMkAFwzMDQBXDMw NVwiXDIwMiUAXDIxMVwzMDYxLQBcMjExXDIyNzBcMjA3XDIxMFwyMDciIFtldmVudC1zeW1ib2wt ZWxlbWVudHMgbG9nYW5kIDQxOTQzMDMgMzIgbG9naW9yIDY0IChlcnJvcildIDUgKCMkIC4gNTIx NjEpXSkjQDY2IFJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBhIG1vdXNlIG1vdmVtZW50IGV2 ZW50LgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnbW91c2UtbW92ZW1lbnQtcCAjWzI1NyAiXDIx MVwyNDJcMzAwPVwyMDciIFttb3VzZS1tb3ZlbWVudF0gMyAoIyQgLiA1MjczNSldKQooYnl0ZS1j b2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1 dCBtb3VzZS1tb3ZlbWVudC1wIHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBp bGUtaW5saW5lLWV4cGFuZF0gNSkjQDYzIFJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBhIG1v dXNlIGNsaWNrIGV2ZW50LgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnbW91c2UtZXZlbnQtcCAj WzI1NyAiXDMwMAEhXDMwMT5cMjA3IiBbZXZlbnQtYmFzaWMtdHlwZSAobW91c2UtMSBtb3VzZS0y IG1vdXNlLTMgbW91c2UtbW92ZW1lbnQpXSAzICgjJCAuIDUzMDM1KV0pCihkZWZhbGlhcyAnZXZl bnQtLXBvc24tYXQtcG9pbnQgI1swICJcMzAwIFwzMDEBIVwyMTFcMjA0EABcMzAyIAJcMzAzXDMw NEZcMjA3XDMwNQFcMjMzXDIxMQNcMjQwXDI2NgJcMjA3IiBbd2luZG93LXBvaW50IHBvc24tYXQt cG9pbnQgc2VsZWN0ZWQtd2luZG93ICgwIC4gMCkgMCA1XSA2XSkjQDEwODkgUmV0dXJuIHRoZSBz dGFydGluZyBwb3NpdGlvbiBvZiBFVkVOVC4KRVZFTlQgc2hvdWxkIGJlIGEgbW91c2UgY2xpY2ss IGRyYWcsIG9yIGtleSBwcmVzcyBldmVudC4gIElmCkVWRU5UIGlzIG5pbCwgdGhlIHZhbHVlIG9m IGBwb3NuLWF0LXBvaW50JyBpcyB1c2VkIGluc3RlYWQuCgpUaGUgZm9sbG93aW5nIGFjY2Vzc29y IGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBhY2Nlc3MgdGhlIGVsZW1lbnRzCm9mIHRoZSBwb3NpdGlv bjoKCmBwb3NuLXdpbmRvdyc6IFRoZSB3aW5kb3cgb2YgdGhlIGV2ZW50IGVuZCwgb3IgaXRzIGZy YW1lIGlmIHRoZQpldmVudCBlbmQgcG9pbnQgYmVsb25ncyB0byBubyB3aW5kb3cuCmBwb3NuLWFy ZWEnOiBBIHN5bWJvbCBpZGVudGlmeWluZyB0aGUgYXJlYSB0aGUgZXZlbnQgb2NjdXJyZWQgaW4s Cm9yIG5pbCBpZiB0aGUgZXZlbnQgb2NjdXJyZWQgaW4gdGhlIHRleHQgYXJlYS4KYHBvc24tcG9p bnQnOiBUaGUgYnVmZmVyIHBvc2l0aW9uIG9mIHRoZSBldmVudC4KYHBvc24teC15JzogVGhlIHBp eGVsLWJhc2VkIGNvb3JkaW5hdGVzIG9mIHRoZSBldmVudC4KYHBvc24tY29sLXJvdyc6IFRoZSBl c3RpbWF0ZWQgY29sdW1uIGFuZCByb3cgY29ycmVzcG9uZGluZyB0byB0aGUKcG9zaXRpb24gb2Yg dGhlIGV2ZW50LgpgcG9zbi1hY3R1YWwtY29sLXJvdyc6IFRoZSBhY3R1YWwgY29sdW1uIGFuZCBy b3cgY29ycmVzcG9uZGluZyB0byB0aGUKcG9zaXRpb24gb2YgdGhlIGV2ZW50LgpgcG9zbi1zdHJp bmcnOiBUaGUgc3RyaW5nIG9iamVjdCBvZiB0aGUgZXZlbnQsIHdoaWNoIGlzIGVpdGhlcgpuaWwg b3IgKFNUUklORyAuIFBPU0lUSU9OKScuCmBwb3NuLWltYWdlJzogVGhlIGltYWdlIG9iamVjdCBv ZiB0aGUgZXZlbnQsIGlmIGFueS4KYHBvc24tb2JqZWN0JzogVGhlIGltYWdlIG9yIHN0cmluZyBv YmplY3Qgb2YgdGhlIGV2ZW50LCBpZiBhbnkuCmBwb3NuLXRpbWVzdGFtcCc6IFRoZSB0aW1lIHRo ZSBldmVudCBvY2N1cnJlZCwgaW4gbWlsbGlzZWNvbmRzLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24s IHNlZSBJbmZvIG5vZGUgYChlbGlzcClDbGljayBFdmVudHMnLgoKKGZuIEVWRU5UKR8KKGRlZmFs aWFzICdldmVudC1zdGFydCAjWzI1NyAiXDIxMTpcMjAzCwBcMjExQUBcMjA2DQBcMzAwIFwyMDci IFtldmVudC0tcG9zbi1hdC1wb2ludF0gMiAoIyQgLiA1MzM5NyldKSNAMTYxIFJldHVybiB0aGUg ZW5kaW5nIHBvc2l0aW9uIG9mIEVWRU5ULgpFVkVOVCBzaG91bGQgYmUgYSBjbGljaywgZHJhZywg b3Iga2V5IHByZXNzIGV2ZW50LgoKU2VlIGBldmVudC1zdGFydCcgZm9yIGEgZGVzY3JpcHRpb24g b2YgdGhlIHZhbHVlIHJldHVybmVkLgoKKGZuIEVWRU5UKR8KKGRlZmFsaWFzICdldmVudC1lbmQg I1syNTcgIlwyMTE6XDIwMxYAXDMwMAE4OlwyMDMQAFwzMDBcMjAyEQBcMzAxAThcMjA2GABcMzAy IFwyMDciIFsyIDEgZXZlbnQtLXBvc24tYXQtcG9pbnRdIDMgKCMkIC4gNTQ1OTUpXSkjQDExNSBS ZXR1cm4gdGhlIG11bHRpLWNsaWNrIGNvdW50IG9mIEVWRU5ULCBhIGNsaWNrIG9yIGRyYWcgZXZl bnQuClRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLgoKKGZuIEVWRU5UKR8K KGRlZmFsaWFzICdldmVudC1jbGljay1jb3VudCAjWzI1NyAiXDIxMTpcMjAzEABcMzAwAThcMjUw XDIwMxAAXDMwMAE4XDIwN1wzMDFcMjA3IiBbMiAxXSAzICgjJCAuIDU0ODkwKV0pCihieXRlLWNv ZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0 IGV2ZW50LWNsaWNrLWNvdW50IHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBp bGUtaW5saW5lLWV4cGFuZF0gNSkjQDEwNSBSZXR1cm4gdGhlIGxpbmUgY291bnQgb2YgRVZFTlQs IGEgbW91c2V3aGVlbCBldmVudC4KVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvc2l0aXZlIGludGVn ZXIuCgooZm4gRVZFTlQpHwooZGVmYWxpYXMgJ2V2ZW50LWxpbmUtY291bnQgI1syNTcgIlwyMTE6 XDIwMxAAXDMwMAE4XDI1MFwyMDMQAFwzMDABOFwyMDdcMzAxXDIwNyIgWzMgMV0gMyAoIyQgLiA1 NTI1OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIw NyIgW2Z1bmN0aW9uLXB1dCBldmVudC1saW5lLWNvdW50IHNwZWVkIC0xIHB1dCBieXRlLW9wdGlt aXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDI0NSBSZXR1cm4gbm9uLW5pbCBp ZiBPQkogYXBwZWFycyB0byBiZSBhIHZhbGlkIGBwb3NuJyBvYmplY3Qgc3BlY2lmeWluZyBhIHdp bmRvdy4KQSBgcG9zbicgb2JqZWN0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHN1Y2ggYXMg YGV2ZW50LXN0YXJ0Jy4KSWYgT0JKIGlzIGEgdmFsaWQgYHBvc24nIG9iamVjdCwgYnV0IHNwZWNp ZmllcyBhIGZyYW1lIHJhdGhlcgp0aGFuIGEgd2luZG93LCByZXR1cm4gbmlsLgoKKGZuIE9CSikf CihkZWZhbGlhcyAncG9zbnAgI1syNTcgIlwzMDABXDI0MiFcMjA1IQBcMjExQVwyMTFcMjYyAlwy NDI6P1wyMDUhAFwyMTFBXDIxMVwyNjICXDI0MlwyNDJcMjUwXDIwNSEAXDIxMUFcMjQyXDI1MFwy MDciIFt3aW5kb3dwXSAzICgjJCAuIDU1NjE2KV0pI0AyMzQgUmV0dXJuIHRoZSB3aW5kb3cgaW4g UE9TSVRJT04uCklmIFBPU0lUSU9OIGlzIG91dHNpZGUgdGhlIGZyYW1lIHdoZXJlIHRoZSBldmVu dCB3YXMgaW5pdGlhdGVkLApyZXR1cm4gdGhhdCBmcmFtZSBpbnN0ZWFkLiAgUE9TSVRJT04gc2hv dWxkIGJlIGEgbGlzdCBvZiB0aGUgZm9ybQpyZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JyBh bmQgYGV2ZW50LWVuZCcgZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3Nu LXdpbmRvdyAjWzI1NyAiXDIxMUBcMjA3IiBbXSAyICgjJCAuIDU2MDEwKV0pCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBv c24td2luZG93IHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5l LWV4cGFuZF0gNSkjQDE4MiBSZXR1cm4gdGhlIHdpbmRvdyBhcmVhIHJlY29yZGVkIGluIFBPU0lU SU9OLCBvciBuaWwgZm9yIHRoZSB0ZXh0IGFyZWEuClBPU0lUSU9OIHNob3VsZCBiZSBhIGxpc3Qg b2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVudC1lbmQn IGZ1bmN0aW9ucy4KCihmbiBQT1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1hcmVhICNbMjU3ICJc MjExQUA6XDIwMw4AXDIxMUFAQFwyMDIRAFwyMTFBQFwyMTE5XDIwNRcAXDIxMVwyMDciIFtdIDMg KCMkIC4gNTY0NDcpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVc MzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgcG9zbi1hcmVhIHNwZWVkIC0xIHB1dCBieXRlLW9wdGlt aXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDI1MCBSZXR1cm4gdGhlIGJ1ZmZl ciBsb2NhdGlvbiBpbiBQT1NJVElPTi4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUg Zm9ybSByZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcgZnVuY3Rp b25zLgpSZXR1cm5zIG5pbCBpZiBQT1NJVElPTiBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBi dWZmZXIgbG9jYXRpb24gKGUuZy4KYSBjbGljayBvbiBhIHNjcm9sbCBiYXIpLgoKKGZuIFBPU0lU SU9OKR8KKGRlZmFsaWFzICdwb3NuLXBvaW50ICNbMjU3ICJcMzAwAThcMjA2FgBcMjExQUBcMjEx XDI0MlwyMDYUAFwyMTFcMjUwXDIwNRQAXDIxMVwyNjIBXDIwNyIgWzVdIDMgKCMkIC4gNTY4NzAp XSkjQDgxIE1vdmUgcG9pbnQgdG8gUE9TSVRJT04uClNlbGVjdCB0aGUgY29ycmVzcG9uZGluZyB3 aW5kb3cgYXMgd2VsbC4KCihmbiBQT1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1zZXQtcG9pbnQg I1syNTcgIlwzMDABXDIxMUBcMjYyASFcMjAzJwBcMzAxXDMwMgJcMjExQFwyNjIBISFcMjA0GgBc MzAzXDMwNCFcMjEwXDMwNVwzMDICXDIxMUBcMjYyASEhXDIxMFwyMDI9AFwzMDEBXDIxMUBcMjYy ASFcMjA0NQBcMzAzXDMwNCFcMjEwXDMwNQFcMjExQFwyNjIBIVwyMTBcMzA2ASFcMjQ3XDIwNUgA XDMwNgEhYlwyMDciIFtmcmFtZXAgd2luZG93cCBmcmFtZS1zZWxlY3RlZC13aW5kb3cgZXJyb3Ig IlBvc2l0aW9uIG5vdCBpbiB0ZXh0IGFyZWEgb2Ygd2luZG93IiBzZWxlY3Qtd2luZG93IHBvc24t cG9pbnRdIDUgKCMkIC4gNTcyMzUpXSkjQDIxNiBSZXR1cm4gdGhlIHggYW5kIHkgY29vcmRpbmF0 ZXMgaW4gUE9TSVRJT04uClRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBmb3JtIChYIC4gWSksIHdo ZXJlIFggYW5kIFkgYXJlIGdpdmVuIGluCnBpeGVscy4gIFBPU0lUSU9OIHNob3VsZCBiZSBhIGxp c3Qgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkKYGV2ZW50LXN0YXJ0JyBhbmQgYGV2ZW50LWVuZCcu CgooZm4gUE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24teC15ICNbMjU3ICJcMzAwAThcMjA3IiBb Ml0gMyAoIyQgLiA1NzY1NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAx XDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBwb3NuLXgteSBzcGVlZCAtMSBwdXQgYnl0ZS1v cHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0A2OTQgUmV0dXJuIHRoZSBu b21pbmFsIGNvbHVtbiBhbmQgcm93IGluIFBPU0lUSU9OLCBtZWFzdXJlZCBpbiBjaGFyYWN0ZXJz LgpUaGUgY29sdW1uIGFuZCByb3cgdmFsdWVzIGFyZSBhcHByb3hpbWF0aW9ucyBjYWxjdWxhdGVk IGZyb20gdGhlIHgKYW5kIHkgY29vcmRpbmF0ZXMgaW4gUE9TSVRJT04gYW5kIHRoZSBmcmFtZSdz IGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoCmFuZCBkZWZhdWx0IGxpbmUgaGVpZ2h0LCBpbmNsdWRp bmcgc3BhY2luZy4KCklmIFVTRS1XSU5ET1cgaXMgbm9uLW5pbCwgdXNlIHRoZSB0eXBpY2FsIHdp ZHRoIG9mIGEgY2hhcmFjdGVyIGluCnRoZSB3aW5kb3cgaW5kaWNhdGVkIGJ5IFBPU0lUSU9OIGlu c3RlYWQgb2YgdGhlIGZyYW1lLiAgKFRoaXMKbWFrZXMgYSBkaWZmZXJlbmNlIGlzIGEgd2luZG93 IGhhcyBhIHpvb20gbGV2ZWwuKQoKRm9yIGEgc2Nyb2xsLWJhciBldmVudCwgdGhlIHJlc3VsdCBj b2x1bW4gaXMgMCwgYW5kIHRoZSByb3cKY29ycmVzcG9uZHMgdG8gdGhlIHZlcnRpY2FsIHBvc2l0 aW9uIG9mIHRoZSBjbGljayBpbiB0aGUgc2Nyb2xsIGJhci4KClBPU0lUSU9OIHNob3VsZCBiZSBh IGxpc3Qgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVu dC1lbmQnIGZ1bmN0aW9ucy4KCihmbiBQT1NJVElPTiAmb3B0aW9uYWwgVVNFLVdJTkRPVykfCihk ZWZhbGlhcyAncG9zbi1jb2wtcm93ICNbNTEzICIBXDMwMQE4XDI2MgECXDIxMUBcMjYyAVwzMDIB IVwyMDMVAFwyMTFcMjAyGABcMzAzASFcMzA0AiFcMjA1HwABBVwyMTFBQDpcMjAzLgBcMjExQUBA XDIwMjEAXDIxMUFAXDIxMTlcMjA1NwBcMjExXDI2NlwyMDIDXDIwND8AXDMwNVwyMDdcMjExXDMw NlwyNjdcMjAyWQBcMzA3XDMxMAYGXDMxMQUhU1wiQlwyMDdcMzEwBVwzMTIEIVwiXDMwN0JcMjA3 BVwyMDNrAARAXDMxMwMhXDI0NQVBXDMxNAQhXDI0NUJcMjA3XDMxNQMhXDIwNVwyMDIAclwzMTZc MzE3BCEhcVwyMTAIKVwyMDZcMjAyAFwzMjADXDMwMFwiXDMyMQEhXDIwM1wyMjUAXDMyMgFcMzIz BgYhXyFcMjYyAVwyMDJcMjM0AFwyMTFcMjA0XDIzNABcMzA3XDI2MgEFQFwzMjQFIVwyNDUGBkFc MzIzBgYhA1xcXDI0NUJcMjA3IiBbbGluZS1zcGFjaW5nIDIgZnJhbWVwIHdpbmRvdy1mcmFtZSB3 aW5kb3dwICgwIC4gMCkgI3MoaGFzaC10YWJsZSBzaXplIDIgdGVzdCBlcSByZWhhc2gtc2l6ZSAx LjUgcmVoYXNoLXRocmVzaG9sZCAwLjgxMjUgcHVyZWNvcHkgdCBkYXRhICh2ZXJ0aWNhbC1zY3Jv bGwtYmFyIDY5IGhvcml6b250YWwtc2Nyb2xsLWJhciA4MCkpIDAgc2Nyb2xsLWJhci1zY2FsZSB3 aW5kb3ctaGVpZ2h0IHdpbmRvdy13aWR0aCB3aW5kb3ctZm9udC13aWR0aCB3aW5kb3ctZm9udC1o ZWlnaHQgZGlzcGxheS1ncmFwaGljLXAgd2luZG93LWJ1ZmZlciBmcmFtZS1zZWxlY3RlZC13aW5k b3cgZnJhbWUtcGFyYW1ldGVyIGZsb2F0cCB0cnVuY2F0ZSBmcmFtZS1jaGFyLWhlaWdodCBmcmFt ZS1jaGFyLXdpZHRoXSAxMiAoIyQgLiA1ODA3MSldKSNANTQzIFJldHVybiB0aGUgd2luZG93IHJv dyBudW1iZXIgaW4gUE9TSVRJT04gYW5kIGNoYXJhY3RlciBudW1iZXIgaW4gdGhhdCByb3cuCgpS ZXR1cm4gbmlsIGlmIFBPU0lUSU9OIGRvZXMgbm90IGNvbnRhaW4gdGhlIGFjdHVhbCBwb3NpdGlv bjsgaW4gdGhhdCBjYXNlCmBwb3NuLWNvbC1yb3cnIGNhbiBiZSB1c2VkIHRvIGdldCBhcHByb3hp bWF0ZSB2YWx1ZXMuClBPU0lUSU9OIHNob3VsZCBiZSBhIGxpc3Qgb2YgdGhlIGZvcm0gcmV0dXJu ZWQgYnkgdGhlIGBldmVudC1zdGFydCcKYW5kIGBldmVudC1lbmQnIGZ1bmN0aW9ucy4KClRoaXMg ZnVuY3Rpb24gZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIHdpZHRoIG9uIGRpc3BsYXksIGxpa2Ug dGhlCm51bWJlciBvZiB2aXN1YWwgY29sdW1ucyB0YWtlbiBieSBhIFRBQiBvciBpbWFnZS4gIElm IHlvdSBuZWVkCnRoZSBjb29yZGluYXRlcyBvZiBQT1NJVElPTiBpbiBjaGFyYWN0ZXIgdW5pdHMs IHlvdSBzaG91bGQgdXNlCmBwb3NuLWNvbC1yb3cnLCBub3QgdGhpcyBmdW5jdGlvbi4KCihmbiBQ T1NJVElPTikfCihkZWZhbGlhcyAncG9zbi1hY3R1YWwtY29sLXJvdyAjWzI1NyAiXDMwMAE4XDIw NyIgWzZdIDMgKCMkIC4gNTk2MDIpXSkjQDE0NSBSZXR1cm4gdGhlIHRpbWVzdGFtcCBvZiBQT1NJ VElPTi4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSB0 aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcgZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9O KR8KKGRlZmFsaWFzICdwb3NuLXRpbWVzdGFtcCAjWzI1NyAiXDMwMAE4XDIwNyIgWzNdIDMgKCMk IC4gNjAyMjEpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2 I1wyMDciIFtmdW5jdGlvbi1wdXQgcG9zbi10aW1lc3RhbXAgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0 aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMjEyIFJldHVybiB0aGUgc3Ry aW5nIG9iamVjdCBvZiBQT1NJVElPTi4KVmFsdWUgaXMgYSBjb25zIChTVFJJTkcgLiBTVFJJTkct UE9TKSwgb3IgbmlsIGlmIG5vdCBhIHN0cmluZy4KUE9TSVRJT04gc2hvdWxkIGJlIGEgbGlzdCBv ZiB0aGUgZm9ybSByZXR1cm5lZCBieSB0aGUgYGV2ZW50LXN0YXJ0JwphbmQgYGV2ZW50LWVuZCcg ZnVuY3Rpb25zLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3NuLXN0cmluZyAjWzI1NyAi XDMwMAE4XDIxMTpcMjA1CQBcMjExXDIwNyIgWzRdIDMgKCMkIC4gNjA1NzcpXSkjQDIwMSBSZXR1 cm4gdGhlIGltYWdlIG9iamVjdCBvZiBQT1NJVElPTi4KVmFsdWUgaXMgYSBsaXN0IChpbWFnZSAu Li4pLCBvciBuaWwgaWYgbm90IGFuIGltYWdlLgpQT1NJVElPTiBzaG91bGQgYmUgYSBsaXN0IG9m IHRoZSBmb3JtIHJldHVybmVkIGJ5IHRoZSBgZXZlbnQtc3RhcnQnCmFuZCBgZXZlbnQtZW5kJyBm dW5jdGlvbnMuCgooZm4gUE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24taW1hZ2UgI1syNTcgIlwz MDABOFwyMDciIFs3XSAzICgjJCAuIDYwODcyKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBvc24taW1hZ2Ugc3BlZWQg LTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMjk1 IFJldHVybiB0aGUgb2JqZWN0IChpbWFnZSBvciBzdHJpbmcpIG9mIFBPU0lUSU9OLgpWYWx1ZSBp cyBhIGxpc3QgKGltYWdlIC4uLikgZm9yIGFuIGltYWdlIG9iamVjdCwgYSBjb25zIGNlbGwKKFNU UklORyAuIFNUUklORy1QT1MpIGZvciBhIHN0cmluZyBvYmplY3QsIGFuZCBuaWwgZm9yIGEgYnVm ZmVyIHBvc2l0aW9uLgpQT1NJVElPTiBzaG91bGQgYmUgYSBsaXN0IG9mIHRoZSBmb3JtIHJldHVy bmVkIGJ5IHRoZSBgZXZlbnQtc3RhcnQnCmFuZCBgZXZlbnQtZW5kJyBmdW5jdGlvbnMuCgooZm4g UE9TSVRJT04pHwooZGVmYWxpYXMgJ3Bvc24tb2JqZWN0ICNbMjU3ICJcMjExXDMwMAE4XDI2MgFc MjA2XGYAXDMwMQEhXDIwNyIgWzcgcG9zbi1zdHJpbmddIDQgKCMkIC4gNjEyNzYpXSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1w dXQgcG9zbi1vYmplY3Qgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1p bmxpbmUtZXhwYW5kXSA1KSNAMzQxIFJldHVybiB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyByZWxh dGl2ZSB0byB0aGUgZ2x5cGggb2Ygb2JqZWN0IG9mIFBPU0lUSU9OLgpUaGUgcmV0dXJuIHZhbHVl IGhhcyB0aGUgZm9ybSAoRFggLiBEWSksIHdoZXJlIERYIGFuZCBEWSBhcmUKZ2l2ZW4gaW4gcGl4 ZWxzLCBhbmQgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZgp0aGUg Y2xpY2tlZCBnbHlwaCBvZiBvYmplY3QgYXQgUE9TSVRJT04uICBQT1NJVElPTiBzaG91bGQgYmUg YQpsaXN0IG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBldmVudC1zdGFydCcgYW5kIGBldmVudC1l bmQnLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3NuLW9iamVjdC14LXkgI1syNTcgIlwz MDABOFwyMDciIFs4XSAzICgjJCAuIDYxODEwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwz MDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHBvc24tb2JqZWN0LXgteSBz cGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUp I0AyMDcgUmV0dXJuIHRoZSBwaXhlbCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBvYmplY3Qgb2Yg UE9TSVRJT04uClRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBmb3JtIChXSURUSCAuIEhFSUdIVCku ICBQT1NJVElPTiBzaG91bGQKYmUgYSBsaXN0IG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBldmVu dC1zdGFydCcgYW5kIGBldmVudC1lbmQnLgoKKGZuIFBPU0lUSU9OKR8KKGRlZmFsaWFzICdwb3Nu LW9iamVjdC13aWR0aC1oZWlnaHQgI1syNTcgIlwzMDABOFwyMDciIFs5XSAzICgjJCAuIDYyMzY0 KV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBb ZnVuY3Rpb24tcHV0IHBvc24tb2JqZWN0LXdpZHRoLWhlaWdodCBzcGVlZCAtMSBwdXQgYnl0ZS1v cHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0A2MCBTdG9yZSBWQUxVRSBp biB0aGUgb2Jzb2xldGUgYHZhbHVlcycgdmFyaWFibGUuCgooZm4gVkFMVUUpHwooZGVmYWxpYXMg J3ZhbHVlcy0tc3RvcmUtdmFsdWUgI1syNTcgIlwyMTEIQhBcMjA3IiBbdmFsdWVzXSAzICgjJCAu IDYyODAxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDBcMzA0XDMwMlwz MDMjXDIxMFwzMDBcMzA1XDMwNlwzMDcjXDIxMFwzMDBcMzEwXDMwNlwzMDcjXDIxMFwzMDBcMzEx XDMxMlwzMDcjXDIxMFwzMDBcMzEzXDMxMlwzMDcjXDIwNyIgW21ha2Utb2Jzb2xldGUgaW52b2Nh dGlvbi1kaXJlY3RvcnkgInVzZSB0aGUgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4iICIyNy4x IiBpbnZvY2F0aW9uLW5hbWUgc3RyaW5nLWFzLXVuaWJ5dGUgInVzZSBgZW5jb2RlLWNvZGluZy1z dHJpbmcnLiIgIjI2LjEiIHN0cmluZy1tYWtlLXVuaWJ5dGUgc3RyaW5nLWFzLW11bHRpYnl0ZSAi dXNlIGBkZWNvZGUtY29kaW5nLXN0cmluZycuIiBzdHJpbmctbWFrZS1tdWx0aWJ5dGVdIDQpI0A1 MCBSZXR1cm4gKGxvZyBYIDEwKSwgdGhlIGxvZyBiYXNlIDEwIG9mIFguCgooZm4gWCkfCihkZWZh bGlhcyAnbG9nMTAgI1syNTcgIlwzMDABXDMwMVwiXDIwNyIgW2xvZyAxMF0gNCAoIyQgLiA2MzMy OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwNVwzMDZcMzA3I1wy MTBcMzA0XDMxMFwzMTFcMzEyI1wyMTBcMzA0XDMxM1wzMTRcMzE1I1wyMTBcMzA0XDMxNlwzMTdc MzIwI1wyMTBcMzA0XDMyMVwzMjJcMzIzI1wyMTBcMzA0XDMyNFwzMjVcMzIzI1wyMTBcMzA0XDMy NlwzMjdcMzMwI1wyMTBcMzMxXDMzMlwzMzNcMzE1I1wyMTBcMzMxXDMzNFwzMzVcMzM2I1wyMTBc MzMxXDMzN1wzMzVcMzQwI1wyMTBcMzMxXDM0MVwzNDJcMzMwI1wyMTBcMzAwXDM0M1wzMzVcMzIz I1wyMTBcMzMxXDM0NFwzNDVcMzQ2I1wyMTBcMzMxXDM0N1wzMzVcMzA3I1wyMTBcMzMxXDM1MFwz MzVcMzUxI1wyMTBcMzUyXDM1M1wzNTRcIlwyMTBcMzUyXDM1NVwzNTZcMzM1I1wyMTBcMzU3XDIx MVwyMDNcMjE1AFwyMTFAXDM1NQFOXDIwM1wyMDYAXDM1NgFOXDIwNFwyMDYAXDM2MFwzNTYCXDM1 NQROI1wyMTABQVwyNjZcMjAyXDIwMmwAXDIxMFwzMzFcMzU1XDM1NlwzNDAjXDIxMFwzMzFcMzYx XDM2MlwzMjMjXDIxMFwzNjNcMzY0XDM2NVwzMzUjXDIxMFwzMDBcMzY0XDM2NVwzMzAjXDIwNyIg W21ha2Utb2Jzb2xldGUgbG9nMTAgbG9nICIyNC40IiBzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNv bnZlbnRpb24gYWxsLWNvbXBsZXRpb25zIChzdHJpbmcgY29sbGVjdGlvbiAmb3B0aW9uYWwgcHJl ZGljYXRlKSAiMjMuMSIgdW5pbnRlcm4gKG5hbWUgb2JhcnJheSkgIjIzLjMiIGluZGlyZWN0LWZ1 bmN0aW9uIChvYmplY3QpICIyNS4xIiByZWRpcmVjdC1mcmFtZS1mb2N1cyAoZnJhbWUgZm9jdXMt ZnJhbWUpICIyNC4zIiBsaWJ4bWwtcGFyc2UteG1sLXJlZ2lvbiAoc3RhcnQgZW5kICZvcHRpb25h bCBiYXNlLXVybCkgIjI3LjEiIGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAoc3RhcnQgZW5kICZv cHRpb25hbCBiYXNlLXVybCkgdGltZS1jb252ZXJ0ICh0aW1lIGZvcm0pICIyOS4xIiBtYWtlLW9i c29sZXRlLXZhcmlhYmxlIGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzICJ1c2UgYGN1cnNvci1p bnRhbmdpYmxlLW1vZGUnIG9yIGBjdXJzb3Itc2Vuc29yLW1vZGUnIGluc3RlYWQiIHJlZGlzcGxh eS1kb250LXBhdXNlIG5pbCAiMjQuNSIgb3BlcmF0aW5nLXN5c3RlbS1yZWxlYXNlICIyOC4xIiBp bmhpYml0LWNoYW5naW5nLW1hdGNoLWRhdGEgc2F2ZS1tYXRjaC1kYXRhIHJ1bi13aW5kb3ctY29u ZmlndXJhdGlvbi1jaGFuZ2UtaG9vayBjb21tYW5kLWRlYnVnLXN0YXR1cyAiZXhwZWN0IGl0IHRv IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4iICIyNS4yIiB0cmFuc2xhdGlvbi10YWJs ZS1mb3ItaW5wdXQgeC1ndGstdXNlLXdpbmRvdy1tb3ZlICIyNi4xIiBkZWZ2YXJhbGlhcyBtZXNz YWdlcy1idWZmZXItbWF4LWxpbmVzIG1lc3NhZ2UtbG9nLW1heCBpbmhpYml0LW51bC1ieXRlLWRl dGVjdGlvbiBpbmhpYml0LW51bGwtYnl0ZS1kZXRlY3Rpb24gKHNhdmVkLXZhbHVlIHNhdmVkLXZh cmlhYmxlLWNvbW1lbnQpIHB1dCBsb2FkLWRhbmdlcm91cy1saWJyYXJpZXMgIm5vIGxvbmdlciB1 c2VkLiIgZGVmYWxpYXMgY29tcGFyZS13aW5kb3ctY29uZmlndXJhdGlvbnMgd2luZG93LWNvbmZp Z3VyYXRpb24tZXF1YWwtcF0gNykjQDMyNSBGb3JtZXIgbGltaXQgb24gc3BlY2JpbmRpbmdzLCBu b3cgd2l0aG91dCBlZmZlY3QuClRoaXMgdmFyaWFibGUgdXNlZCB0byBsaW1pdCB0aGUgc2l6ZSBv ZiB0aGUgc3BlY3BkbCBzdGFjayB3aGljaCwKYW1vbmcgb3RoZXIgdGhpbmdzLCBob2xkcyBkeW5h bWljIHZhcmlhYmxlIGJpbmRpbmdzIGFuZCBgdW53aW5kLXByb3RlY3QnCmFjdGl2YXRpb25zLiAg VG8gcHJldmVudCBydW5hd2F5IHJlY3Vyc2lvbiwgdXNlIGBtYXgtbGlzcC1ldmFsLWRlcHRoJwpp bnN0ZWFkOyBpdCB3aWxsIGluZGlyZWN0bHkgbGltaXQgdGhlIHNwZWNwZGwgc3RhY2sgc2l6ZSBh cyB3ZWxsLh8KKGRlZnZhciBtYXgtc3BlY3BkbC1zaXplIDI1MDAgKCMkIC4gNjUwNjMpKQooYnl0 ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzAwXDMwNFwzMDVcMzAzI1wyMTBcMzA2XDMw N1wzMTBcIlwyMTBcMzA2XDMxMVwzMTJcIlwyMTBcMzA2XDMxM1wzMTRcIlwyMTBcMzA2XDMxNVwz MTZcIlwyMTBcMzA2XDMxN1wzMjBcIlwyMTBcMzA2XDMyMVwzMjJcIlwyMTBcMzA2XDMyM1wzMjRc IlwyMTBcMzA2XDMyNVwzMjZcIlwyMTBcMzA2XDMyN1wzMzBcIlwyMTBcMzA2XDMzMVwzMzJcIlwy MTBcMzA2XDMzM1wzMzRcIlwyMTBcMzA2XDMzNVwzMzZLXCJcMjEwXDMwNlwzMzdcMzQwS1wiXDIx MFwzMDZcMzQxXDM0MlwiXDIxMFwzMDZcMzQzXDM0NFwiXDIxMFwzMDZcMzQ1XDM0NlwiXDIxMFwz MDZcMzQ3XDM1MFwiXDIxMFwzMDZcMzUxXDM1MlwiXDIxMFwzNTNcMzUxXDM1NFwzMDMjXDIxMFwz MDZcMzU1XDM1NlwiXDIxMFwzNTNcMzU1XDM1N1wzMDMjXDIxMFwzMDZcMzYwXDM2MVwzMDIjXDIx MFwzNTNcMzYwXDM2MVwzNjIjXDIxMFwzNjNcMzY0XDM2NVwzMDJcMzY2JFwyMTBcMzYzXDM2N1wz NjVcMzAyXDM2NiRcMjA3IiBbbWFrZS1vYnNvbGV0ZS12YXJpYWJsZSBtYXgtc3BlY3BkbC1zaXpl IG5pbCAiMjkuMSIgbmF0aXZlLWNvbXAtZGVmZXJyZWQtY29tcGlsYXRpb24gaW5oaWJpdC1hdXRv bWF0aWMtbmF0aXZlLWNvbXBpbGF0aW9uIGRlZmFsaWFzIHNlbmQtc3RyaW5nIHByb2Nlc3Mtc2Vu ZC1zdHJpbmcgc2VuZC1yZWdpb24gcHJvY2Vzcy1zZW5kLXJlZ2lvbiBzdHJpbmc9IHN0cmluZy1l cXVhbCBzdHJpbmc8IHN0cmluZy1sZXNzcCBzdHJpbmc+IHN0cmluZy1ncmVhdGVycCBtb3ZlLW1h cmtlciBzZXQtbWFya2VyIHJwbGFjYSBzZXRjYXIgcnBsYWNkIHNldGNkciBiZWVwIGRpbmcgaW5k ZW50LXRvLWNvbHVtbiBpbmRlbnQtdG8gYmFja3dhcmQtZGVsZXRlLWNoYXIgZGVsZXRlLWJhY2t3 YXJkLWNoYXIgc2VhcmNoLWZvcndhcmQtcmVnZXhwIHJlLXNlYXJjaC1mb3J3YXJkIHNlYXJjaC1i YWNrd2FyZC1yZWdleHAgcmUtc2VhcmNoLWJhY2t3YXJkIGludC10by1zdHJpbmcgbnVtYmVyLXRv LXN0cmluZyBzdG9yZS1tYXRjaC1kYXRhIHNldC1tYXRjaC1kYXRhIGNobW9kIHNldC1maWxlLW1v ZGVzIG1rZGlyIG1ha2UtZGlyZWN0b3J5IHBvaW50LWF0LWVvbCBsaW5lLWVuZC1wb3NpdGlvbiBt YWtlLW9ic29sZXRlICJ1c2UgYGxpbmUtZW5kLXBvc2l0aW9uJyBvciBgcG9zLWVvbCcgaW5zdGVh ZC4iIHBvaW50LWF0LWJvbCBsaW5lLWJlZ2lubmluZy1wb3NpdGlvbiAidXNlIGBsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbicgb3IgYHBvcy1ib2wnIGluc3RlYWQuIiB1c2VyLW9yaWdpbmFsLWxvZ2lu LW5hbWUgdXNlci1sb2dpbi1uYW1lICIyOC4xIiBhdXRvbG9hZCBtYWtlLWRpcmVjdG9yeS1hdXRv bG9hZHMgImF1dG9sb2FkIiB0IHVwZGF0ZS1kaXJlY3RvcnktYXV0b2xvYWRzXSA1KSNAMTQ2MiBB ZGQgdG8gdGhlIHZhbHVlIG9mIEhPT0sgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OLgpGVU5DVElPTiBp cyBub3QgYWRkZWQgaWYgYWxyZWFkeSBwcmVzZW50LgoKVGhlIHBsYWNlIHdoZXJlIHRoZSBmdW5j dGlvbiBpcyBhZGRlZCBkZXBlbmRzIG9uIHRoZSBERVBUSApwYXJhbWV0ZXIuICBERVBUSCBkZWZh dWx0cyB0byAwLiAgQnkgY29udmVudGlvbiwgaXQgc2hvdWxkIGJlCmEgbnVtYmVyIGJldHdlZW4g LTEwMCBhbmQgMTAwIHdoZXJlIDEwMCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbgpzaG91bGQgYmUg YXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBsaXN0LCB3aGVyZWFzIC0xMDAgbWVhbnMgdGhhdAp0aGUg ZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBjb21lIGZpcnN0LgpTaW5jZSBub3RoaW5nIGlzICJhbHdh eXMiIHRydWUsIGRvbid0IHVzZSAxMDAgbm9yIC0xMDAuCldoZW4gdHdvIGZ1bmN0aW9ucyBoYXZl IHRoZSBzYW1lIGRlcHRoLCB0aGUgbmV3IG9uZSBnZXRzIGFkZGVkIGFmdGVyIHRoZQpvbGQgb25l IGlmIGRlcHRoIGlzIHN0cmljdGx5IHBvc2l0aXZlIGFuZCBiZWZvcmUgb3RoZXJ3aXNlLgoKRm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYSBzeW1ib2wgb3RoZXIgdGhhbiBuaWwg aXMKaW50ZXJwcmV0ZWQgYXMgYSBERVBUSCBvZiA5MC4KClRoZSBvcHRpb25hbCBmb3VydGggYXJn dW1lbnQsIExPQ0FMLCBpZiBub24tbmlsLCBzYXlzIHRvIG1vZGlmeQp0aGUgaG9vaydzIGJ1ZmZl ci1sb2NhbCB2YWx1ZSByYXRoZXIgdGhhbiBpdHMgZ2xvYmFsIHZhbHVlLgpUaGlzIG1ha2VzIHRo ZSBob29rIGJ1ZmZlci1sb2NhbCwgYW5kIGl0IG1ha2VzIHQgYSBtZW1iZXIgb2YgdGhlCmJ1ZmZl ci1sb2NhbCB2YWx1ZS4gIFRoYXQgYWN0cyBhcyBhIGZsYWcgdG8gcnVuIHRoZSBob29rCmZ1bmN0 aW9ucyBvZiB0aGUgZ2xvYmFsIHZhbHVlIGFzIHdlbGwgYXMgaW4gdGhlIGxvY2FsIHZhbHVlLgoK SE9PSyBzaG91bGQgYmUgYSBzeW1ib2wuICBJZiBIT09LIGlzIHZvaWQsIGl0IGlzIGZpcnN0IHNl dCB0bwpuaWwuICBJZiBIT09LJ3MgdmFsdWUgaXMgYSBzaW5nbGUgZnVuY3Rpb24sIGl0IGlzIGNo YW5nZWQgdG8gYQpsaXN0IG9mIGZ1bmN0aW9ucy4KCkZVTkNUSU9OIG1heSBiZSBhbnkgdmFsaWQg ZnVuY3Rpb24sIGJ1dCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBhCmZ1bmN0aW9uIHN5bWJvbCBh bmQgbm90IGEgbGFtYmRhIGZvcm0uICBVc2luZyBhIHN5bWJvbCB3aWxsCmVuc3VyZSB0aGF0IHRo ZSBmdW5jdGlvbiBpcyBub3QgcmUtYWRkZWQgaWYgdGhlIGZ1bmN0aW9uIGlzCmVkaXRlZCwgYW5k IHVzaW5nIGxhbWJkYSBmb3JtcyBtYXkgYWxzbyBoYXZlIGEgbmVnYXRpdmUKcGVyZm9ybWFuY2Ug aW1wYWN0IHdoZW4gcnVubmluZyBgYWRkLWhvb2snIGFuZCBgcmVtb3ZlLWhvb2snLgoKKGZuIEhP T0sgRlVOQ1RJT04gJm9wdGlvbmFsIERFUFRIIExPQ0FMKR8KKGRlZmFsaWFzICdhZGQtaG9vayAj WzEwMjYgIlwzMDAEIVwyMDRcbgADXDMwMUxcMjEwXDMwMgQhXDIwNBUAXDMwMwRcMzAxXCJcMjEw AVwyNDdcMjA0JQABXDIwM1wiAFwzMDRcMjAyIwBcMzA1XDI2MgJcMjExXDIwMzkAXDMwNgQhXDIw NE8AXDMwNwQhXDMxMENMXDIxMFwyMDJPAFwzMDYEIVwyMDNPAANKOlwyMDNMAFwzMTAESj5cMjA0 TwBcMzEwXDI2MgFcMjExXDIwM1gAA0pcMjAyWwBcMzExBCFcMjExPFwyMDNmAFwzMTIBIVwyMDNq AFwyMTFDXDI2MgEDAVwyMzVcMjA0FwEEXDMxM04DXDMwNVVcMjA0XDMyNwBcMjExXDIwNFwyMTUA XDMxNFwzMTUhXDI2MgFcMjExXDMwMUxcMjEwXDMxNgYGXDMxMwMjXDIxMAJcMjAzXDIyNQBcMzA3 ASFcMjEwAlwyMDNcMjUwAFwyMTFcMzE3XDMyMAJcIlwzMTdcMzIxA1wiQlwyNjIBXDIwMlwyNjQA XDIxMVwzMTdcMzIyAlwiXDMxN1wzMjMDXCJCXDI2MgEFAUAgXDIzNlwyMTFcMjAzXDMwNgBcMjEx BgZcMjQxXDI2NgNcMjAyXDMyNwABQQYHBgdCXDIxMVwyNjIDA0AgQiFcMjY2A1wzMDUEV1wyMDNc MzQ2AFwzMjQCBgZDXCJcMjAyXDM1MQAEAkJcMjYyAlwyMTFcMjAzFgECXDIwM1wzNzAAXDIxMUpc MjAyXDM3MwBcMzExASFcMjExXDIwMxUBXDMyNVwzMDUGBldcMjAzCwEDXDIwMg4BXDMyNgQhXDMx N1wzMjcEXCJcIlwyNjIDXDIxMFwyMTABXDIwMzYBAzlcMjAzMgEDXDMzME5cMjAzMgEEXDMzMU5c MjA0MgFcMzE2BVwzMzFcMzMwI1wyMTAEAUxcMjA3XDMwMwUCXCJcMjA3IiBbYm91bmRwIG5pbCBk ZWZhdWx0LWJvdW5kcCBzZXQtZGVmYXVsdCA5MCAwIGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIG1h a2UtbG9jYWwtdmFyaWFibGUgdCBkZWZhdWx0LXZhbHVlIGZ1bmN0aW9ucCBob29rLS1kZXB0aC1h bGlzdCBtYWtlLXN5bWJvbCAiZGVwdGgtYWxpc3QiIHB1dCBtYWtlLWNsb3N1cmUgI1swICJcMzAw SlwyMDciIFtWMF0gMV0gI1syNTcgIlwzMDABTFwyMDciIFtWMF0gMyAiXG5cbihmbiBWNjY2KSJd ICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGRlZmF1bHQtdmFsdWVdIDJdICNbMjU3ICJcMzAxXDMw MAJcIlwyMDciIFtWMCBzZXQtZGVmYXVsdF0gNCAiXG5cbihmbiBWNjY2KSJdIGFwcGVuZCBzb3J0 IGNvcHktc2VxdWVuY2UgI1s1MTQgIlwzMDECXDMwMFwzMDJcMzAzXDMwNCVcMzAxAlwzMDBcMzAy XDMwM1wzMDQlV1wyMDciIFtWMCBhbGlzdC1nZXQgMCBuaWwgZXFdIDkgIlxuXG4oZm4gRjEgRjIp Il0gcGVybWFuZW50LWxvY2FsLWhvb2sgcGVybWFuZW50LWxvY2FsXSAxMiAoIyQgLiA2Njg2MCld KSNANjM4IFJlbW92ZSBmcm9tIHRoZSB2YWx1ZSBvZiBIT09LIHRoZSBmdW5jdGlvbiBGVU5DVElP Ti4KSE9PSyBzaG91bGQgYmUgYSBzeW1ib2wsIGFuZCBGVU5DVElPTiBtYXkgYmUgYW55IHZhbGlk IGZ1bmN0aW9uLiAgSWYKRlVOQ1RJT04gaXNuJ3QgdGhlIHZhbHVlIG9mIEhPT0ssIG9yLCBpZiBG VU5DVElPTiBkb2Vzbid0IGFwcGVhciBpbiB0aGUKbGlzdCBvZiBob29rcyB0byBydW4gaW4gSE9P SywgdGhlbiBub3RoaW5nIGlzIGRvbmUuICBTZWUgYGFkZC1ob29rJy4KClRoZSBvcHRpb25hbCB0 aGlyZCBhcmd1bWVudCwgTE9DQUwsIGlmIG5vbi1uaWwsIHNheXMgdG8gbW9kaWZ5CnRoZSBob29r J3MgYnVmZmVyLWxvY2FsIHZhbHVlIHJhdGhlciB0aGFuIGl0cyBkZWZhdWx0IHZhbHVlLgoKSW50 ZXJhY3RpdmVseSwgcHJvbXB0IGZvciB0aGUgdmFyaW91cyBhcmd1bWVudHMgKHNraXBwaW5nIGxv Y2FsCnVubGVzcyBIT09LIGhhcyBib3RoIGxvY2FsIGFuZCBnbG9iYWwgZnVuY3Rpb25zKS4gIElm IG11bHRpcGxlCmZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIHVuZGVyIGBw cmluYycsIHRoZSBmaXJzdApvbmUgd2lsbCBiZSByZW1vdmVkLgoKKGZuIEhPT0sgRlVOQ1RJT04g Jm9wdGlvbmFsIExPQ0FMKR8KKGRlZmFsaWFzICdyZW1vdmUtaG9vayAjWzc3MCAiXDMwMAMhXDIw NFxuAAJcMzAxTFwyMTBcMzAyAyFcMjA0FQBcMzAzA1wzMDFcIlwyMTBcMjExXDIwNR0AXDMwNAMh Pz9cMjA1XDI3NgBcMzA0AyFcMjAzNwACSjpcMjAzNABcMzA1A0o+XDIwNDcAXDMwNVwyNjIBXDIx MVwyMDNAAAJKXDIwMkMAXDMwNgMhXDMwMQE8XDIwM1AAAUBcMzA3PVwyMDNfAAEEXDIzMlwyMDNv AAFcMjYyAVwzMDFcMjYyAlwyMDJvAAMCXDIzNUBcMjExXDI2MgJcMjAzbwBcMzEwAQNcIlwyNjIC XDIxMVwyMDNcMjQ2AARcMzExTlwyMTFcMjA1XDIwNgADXDIwM1wyMDMAXDIxMUpcMjAyXDIwNgBc MzA2ASECAVwyMzZcMjExXDIwM1wyNDQABVwyMDNcMjM0AAJcMzEwAgRcIkxcMjY2BFwyMDJcMjQ2 AFwzMDMDXDMxMAMFXCJcIlwyMTBcMjY2AwJcMjA0XDI1NwBcMzAzBQNcIlwyMDcBXDMxMlwyMzJc MjAzXDI3MQBcMzEzBSFcMjA3BAJMXDI2NlwyMDJcMjA3IiBbYm91bmRwIG5pbCBkZWZhdWx0LWJv dW5kcCBzZXQtZGVmYXVsdCBsb2NhbC12YXJpYWJsZS1wIHQgZGVmYXVsdC12YWx1ZSBsYW1iZGEg cmVtcSBob29rLS1kZXB0aC1hbGlzdCAodCkga2lsbC1sb2NhbC12YXJpYWJsZV0gMTMgKCMkIC4g Njk2MDQpIChieXRlLWNvZGUgIlwzMDEgOVwyMDVcbgBcMzAyXDMwMSAhXDMwM1wzMDRcMzA1XDMw NgRcIghcMzA3XDMxMFwzMTFcMjExBggmByFcMzEyASFcMjA1MgBcMjExSlwyMDUyAFwzMTMBIT9c MjA2MgBcMzE0XDMxNVwzMTYDXCIhXDMxN1wzMjACXDIwMz0AA0pcMjAyQABcMzEzBCFcIlwzMjFc MzA0XDMxNVwzMjIFXDIwM00AXDMyM1wyMDJOAFwzMjRcIgNcMzExXDMxMFwzMTFcMzI1JgYCXDMx MVwyMTFcMzI2JQMBBEVcMjA3IiBbb2JhcnJheSB2YXJpYWJsZS1hdC1wb2ludCBzeW1ib2wtbmFt ZSBpbnRlcm4gY29tcGxldGluZy1yZWFkIGZvcm1hdC1wcm9tcHQgIkhvb2sgdmFyaWFibGUiIGJv dW5kcCB0IG5pbCBsb2NhbC12YXJpYWJsZS1wIGRlZmF1bHQtdmFsdWUgeS1vci1uLXAgZm9ybWF0 ICIlcyBoYXMgYSBidWZmZXItbG9jYWwgYmluZGluZywgdXNlIHRoYXQ/ICIgbWFwY2FyICNbMjU3 ICJcMzAxXDMwMlwzMDNcIhhcMzA0XDIxNggYXDMwNQEhKVwyMTByCHFcMjEwXDMwNiArAUJcMjA3 IiBbc3RhbmRhcmQtb3V0cHV0IGdlbmVyYXRlLW5ldy1idWZmZXIgIiAqc3RyaW5nLW91dHB1dCoi IHQgI1swICJcMzAxCCFcMjA3IiBbc3RhbmRhcmQtb3V0cHV0IGtpbGwtYnVmZmVyXSAyXSBwcmlu MSBidWZmZXItc3RyaW5nXSA0ICJcblxuKGZuIFgpIl0gYWxpc3QtZ2V0ICIlcyBob29rIHRvIHJl bW92ZTogIiAiQnVmZmVyLWxvY2FsIiAiR2xvYmFsIiBzZXQtdmFyaWFibGUtdmFsdWUtaGlzdG9y eSBzdHJpbmc9XSAxMildKSNAMzUzIEJpbmQgdmFyaWFibGVzIGFjY29yZGluZyB0byBCSU5ERVJT IHRoZW4gZXZhbCBCT0RZLgpUaGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZIGlzIHJl dHVybmVkLgpFYWNoIGVsZW1lbnQgb2YgQklOREVSUyBpcyBhIGxpc3QgKFNZTUJPTCBWQUxVRUZP Uk0pIHRoYXQgYmluZHMKU1lNQk9MIHRvIHRoZSB2YWx1ZSBvZiBWQUxVRUZPUk0uCgpUaGUgbWFp biBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtYWNybyBhbmQgYGxldCcvYGxldConIGlzIHRoYXQK YWxsIHN5bWJvbHMgYXJlIGJvdW5kIGJlZm9yZSBhbnkgb2YgdGhlIFZBTFVFRk9STXMgYXJlIGV2 YWxsZWQuCgooZm4gQklOREVSUyAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdsZXRyZWMgJyhtYWNy byAuICNbMzg1ICJcMzAxXDMwMgMIXCJcMjA0IwACXDIwMyMAXDMwMgNcMjExQEFAXCJcMjA0IwAC XDIxMUFcMjYyBFwyNDIBQlwyNjIBXDIwMggAAlwyMDQtAFwzMDMCIVwyMDI8AFwzMDRcMzA1XDMw NgVcIlwzMDdcMzA1XDMxMAYHXCIFXCJCQgFcMjA0QQBcMjA3XDIxMTlcMjAzWAABQVwyMDRYAFwy MTECQEA9XDIwM1gAAUBBQFwyMDdcMzExAlwyMzcCRVwyMDciIFttYWNyb2V4cGFuZC1hbGwtZW52 aXJvbm1lbnQgbmlsIG1hY3JvZXhwLS1mZ3JlcCBtYWNyb2V4cC1wcm9nbiBsZXQgbWFwY2FyIGNh ciBhcHBlbmQgI1syNTcgIlwzMDABQlwyMDciIFtzZXRxXSAzICJcblxuKGZuIEJJTkRFUikiXSBs ZXQqXSA5ICgjJCAuIDcxNjE0KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBc MzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IGxldHJlYyBlZGVidWctZm9ybS1zcGVjIGxl dCBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMV0gNCkjQDY0IExpa2UgYGxldCcg YnV0IHVzaW5nIGR5bmFtaWMgc2NvcGluZy4KCihmbiBCSU5ERVJTICZyZXN0IEJPRFkpHwooZGVm YWxpYXMgJ2RsZXQgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMVwzMDJcMzAzXDMwNAYGXCJcMzAw BgYGBkJCQ1wiQkJcMjA3IiBbbGV0IChfKSBhcHBlbmQgbWFwY2FyICNbMjU3ICJcMzAwATpcMjAz CwABQFwyMDJcZgABRFwyMDciIFtkZWZ2YXJdIDMgIlxuXG4oZm4gQklOREVSKSJdXSA5ICgjJCAu IDcyNDkzKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCBkbGV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1 Zy1mb3JtLXNwZWMgbGV0XSA1KSNAMTE2MSBSdW4gQk9EWSwgdXNpbmcgd3JhcHBlciBmdW5jdGlv bnMgZnJvbSBIT09LIHdpdGggYWRkaXRpb25hbCBBUkdTLgpIT09LIGlzIGFuIGFibm9ybWFsIGhv b2suICBFYWNoIGhvb2sgZnVuY3Rpb24gaW4gSE9PSyAid3JhcHMiCmFyb3VuZCB0aGUgcHJlY2Vk aW5nIG9uZXMsIGxpa2UgYSBzZXQgb2YgbmVzdGVkIGBhcm91bmQnIGFkdmljZXMuCgpFYWNoIGhv b2sgZnVuY3Rpb24gc2hvdWxkIGFjY2VwdCBhbiBhcmd1bWVudCBsaXN0IGNvbnNpc3Rpbmcgb2Yg YQpmdW5jdGlvbiBGVU4sIGZvbGxvd2VkIGJ5IHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBpbiBB UkdTLgoKVGhlIGZpcnN0IGhvb2sgZnVuY3Rpb24gaW4gSE9PSyBpcyBwYXNzZWQgYSBGVU4gdGhh dCwgaWYgaXQgaXMgY2FsbGVkCndpdGggYXJndW1lbnRzIEFSR1MsIHBlcmZvcm1zIEJPRFkgKGku ZS4sIHRoZSBkZWZhdWx0IG9wZXJhdGlvbikuClRoZSBGVU4gcGFzc2VkIHRvIGVhY2ggc3VjY2Vz c2l2ZSBob29rIGZ1bmN0aW9uIGlzIGRlZmluZWQgYmFzZWQKb24gdGhlIHByZWNlZGluZyBob29r IGZ1bmN0aW9uczsgaWYgY2FsbGVkIHdpdGggYXJndW1lbnRzIEFSR1MsCml0IGRvZXMgd2hhdCB0 aGUgYHdpdGgtd3JhcHBlci1ob29rJyBjYWxsIHdvdWxkIGRvIGlmIHRoZQpwcmVjZWRpbmcgaG9v ayBmdW5jdGlvbnMgd2VyZSB0aGUgb25seSBvbmVzIHByZXNlbnQgaW4gSE9PSy4KCkVhY2ggaG9v ayBmdW5jdGlvbiBtYXkgY2FsbCBpdHMgRlVOIGFyZ3VtZW50IGFzIG1hbnkgdGltZXMgYXMgaXQg d2lzaGVzLAppbmNsdWRpbmcgbmV2ZXIuICBJbiB0aGF0IGNhc2UsIHN1Y2ggYSBob29rIGZ1bmN0 aW9uIGFjdHMgdG8gcmVwbGFjZQp0aGUgZGVmYXVsdCBkZWZpbml0aW9uIGFsdG9nZXRoZXIsIGFu ZCBhbnkgcHJlY2VkaW5nIGhvb2sgZnVuY3Rpb25zLgpPZiBjb3Vyc2UsIGEgc3Vic2VxdWVudCBo b29rIGZ1bmN0aW9uIG1heSBkbyB0aGUgc2FtZSB0aGluZy4KCkVhY2ggaG9vayBmdW5jdGlvbiBk ZWZpbml0aW9uIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBGVU4gcGFzc2VkCnRvIHRoZSBuZXh0 IGhvb2sgZnVuY3Rpb24sIGlmIGFueS4gIFRoZSBsYXN0IChvciAib3V0ZXJtb3N0IikKRlVOIGlz IHRoZW4gY2FsbGVkIG9uY2UuCgooZm4gSE9PSyBBUkdTICZyZXN0IEJPRFkpHwooZGVmYWxpYXMg J3dpdGgtd3JhcHBlci1ob29rICcobWFjcm8gLiAjWzY0MiAiXDMwMAMDA0JCQlwyMDciIFtzdWJy LS13aXRoLXdyYXBwZXItaG9vay1uby13YXJuaW5nc10gNyAoIyQgLiA3Mjg3MildKSkKKGJ5dGUt Y29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMTBcMzA3XDMwMVwzMTBc MzExI1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC13cmFwcGVyLWhvb2sgbGlzcC1pbmRlbnQtZnVu Y3Rpb24gMiBwdXQgZWRlYnVnLWZvcm0tc3BlYyAoZm9ybSBzZXhwIGJvZHkpIG1ha2Utb2Jzb2xl dGUgInVzZSBhIDxmb28+LWZ1bmN0aW9uIHZhcmlhYmxlIG1vZGlmaWVkIGJ5IGBhZGQtZnVuY3Rp b24nLiIgIjI0LjQiXSA1KSNAOTEgTGlrZSAod2l0aC13cmFwcGVyLWhvb2sgSE9PSyBBUkdTIEJP RFkpLCBidXQgd2l0aG91dCB3YXJuaW5ncy4KCihmbiBIT09LIEFSR1MgJnJlc3QgQk9EWSkfCihk ZWZhbGlhcyAnc3Vici0td2l0aC13cmFwcGVyLWhvb2stbm8td2FybmluZ3MgJyhtYWNybyAuICNb NjQyICJcMzAwXDMwMSFcMzAwXDMwMiFcMzAwXDMwMyFcMzAwXDMwNCFcMzA1AVwzMDYGBgYGBgZF XDMwN1wzMTAGCURcMzA3XDMxMVwzMTJcMzEzBg1ERVwzMTQGCVwzMTUGDVwzMTYGEERFXDMxNwYN XDI1NwVcMzIwXDMxMwYORFwzMjFcMzA2BhAGEFwzMjIGEUZcMzE0Bg8GEwYTBhNcMjU3BUVcMzE2 BhFEBhBGBg1GRlwzMjBcMzA2Bg4GDkJCBlxuRUZFRENcMzE0AwZcblwyMTE5XDIwNX8AXDMwN1wz MjNcMzI0Bg5ERFwzMjVcMzI0Bg9EREVcMzI2BlxmQlwyNTcFRVwyMDciIFttYWtlLXN5bWJvbCAi ZnVucyIgImdsb2JhbCIgImFyZ3MiICJydW5yZXN0b2Zob29rIiBsZXRyZWMgbGFtYmRhIGlmIGNv bnNwIGVxIHQgY2FyIGZ1bmNhbGwgYXBwZW5kIGNkciBuaWwgYXBwbHkgYXBwbHktcGFydGlhbGx5 ICZyZXN0IGxvY2FsLXZhcmlhYmxlLXAgcXVvdGUgZGVmYXVsdC12YWx1ZSBsaXN0XSAyNiAoIyQg LiA3NDQwNildKSkKKHB1dCAnc3Vici0td2l0aC13cmFwcGVyLWhvb2stbm8td2FybmluZ3MgJ2Vk ZWJ1Zy1mb3JtLXNwZWMgJyhmb3JtIHNleHAgZGVmLWJvZHkpKSNAOTU3IEFkZCBFTEVNRU5UIHRv IHRoZSB2YWx1ZSBvZiBMSVNULVZBUiBpZiBpdCBpc24ndCB0aGVyZSB5ZXQuClRoZSB0ZXN0IGZv ciBwcmVzZW5jZSBvZiBFTEVNRU5UIGlzIGRvbmUgd2l0aCBgZXF1YWwnLCBvciB3aXRoCkNPTVBB UkUtRk4gaWYgdGhhdCdzIG5vbi1uaWwuCklmIEVMRU1FTlQgaXMgYWRkZWQsIGl0IGlzIGFkZGVk IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QsCnVubGVzcyB0aGUgb3B0aW9uYWwgYXJndW1l bnQgQVBQRU5EIGlzIG5vbi1uaWwsIGluIHdoaWNoIGNhc2UKRUxFTUVOVCBpcyBhZGRlZCBhdCB0 aGUgZW5kLgpMSVNULVZBUiBzaG91bGQgbm90IHJlZmVyIHRvIGEgbGV4aWNhbCB2YXJpYWJsZS4K ClRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG5ldyB2YWx1ZSBvZiBMSVNULVZBUi4KClRoaXMgaXMg aGFuZHkgdG8gYWRkIHNvbWUgZWxlbWVudHMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsCmJ1 dCBwbGVhc2UgZG8gbm90IGFidXNlIGl0IGluIEVsaXNwIGNvZGUsIHdoZXJlIHlvdSBhcmUgdXN1 YWxseQpiZXR0ZXIgb2ZmIHVzaW5nIGBwdXNoJyBvciBgY2wtcHVzaG5ldycuCgpJZiB5b3Ugd2Fu dCB0byB1c2UgYGFkZC10by1saXN0JyBvbiBhIHZhcmlhYmxlIHRoYXQgaXMgbm90CmRlZmluZWQg dW50aWwgYSBjZXJ0YWluIHBhY2thZ2UgaXMgbG9hZGVkLCB5b3Ugc2hvdWxkIHB1dCB0aGUKY2Fs bCB0byBgYWRkLXRvLWxpc3QnIGludG8gYSBob29rIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBydW4g b25seQphZnRlciBsb2FkaW5nIHRoZSBwYWNrYWdlLiAgYGV2YWwtYWZ0ZXItbG9hZCcgcHJvdmlk ZXMgb25lIHdheSB0bwpkbyB0aGlzLiAgSW4gc29tZSBjYXNlcyBvdGhlciBob29rcywgc3VjaCBh cyBtYWpvciBtb2RlIGhvb2tzLApjYW4gZG8gdGhlIGpvYi4KCihmbiBMSVNULVZBUiBFTEVNRU5U ICZvcHRpb25hbCBBUFBFTkQgQ09NUEFSRS1GTikfCihkZWZhbGlhcyAnYWRkLXRvLWxpc3QgI1sx MDI2ICJcMjExXDMwMFwyNjdcMjAyHAACBEpcMjM1XDIwMjQAAgRKPlwyMDI0AFwzMDEDBUpcIlwy MDI0AANKXDIxMVwyMDMxAAEEAkBcIlwyMDQxAFwyMTFBXDI2MgFcMjAyHgBcMjExXDI2MgFcMjAz OgADSlwyMDcDAlwyMDNIAFwzMDIFSgVDXCJcMjAyTAADBUpCTFwyMDciIFsjcyhoYXNoLXRhYmxl IHNpemUgMyB0ZXN0IGVxIHJlaGFzaC1zaXplIDEuNSByZWhhc2gtdGhyZXNob2xkIDAuODEyNSBw dXJlY29weSB0IGRhdGEgKG5pbCA2IGVxIDEzIGVxbCAyMCkpIG1lbXFsIGFwcGVuZF0gOCAoIyQg LiA3NTExMildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rp b24tcHV0IGFkZC10by1saXN0IGNvbXBpbGVyLW1hY3JvIGFkZC10by1saXN0LS1hbm9uLWNtYWNy b10gNCkjQDU3IAoKKGZuIEVYUCBMSVNULVZBUiBFTEVNRU5UICZvcHRpb25hbCBBUFBFTkQgQ09N UEFSRS1GTikfCihkZWZhbGlhcyAnYWRkLXRvLWxpc3QtLWFub24tY21hY3JvICNbMTI4MyAiA1wy NDJcMzAxPVwyMDMVAFwzMDIEQUAhXDIwNBUAXDMwMwIhXDIwNBcABFwyMDcDQUBcMzA0AwhcIlwz MDVcMzA2A1wiXDMwN1wzMTACBSNcMzExBgchXDIwMzMABgZcMjAyNgBcMzEyXDMxMyFcMzE0BgZc MjAzTABcMzE1XDMxNiFcMjEwXDMxNwIGB1wzMjAGXG5cMjU3BVwyMDJRAFwzMjECBgdFBgYGBlwy MDNnAFwzMjIGCFwzMjMGXG5cMzI0BghERUVcMjAybABcMzI1BAYJRUYBBgk9XDIwM3oAXDIxMVwy NjZcMjAyXDIwMlwyMDQAXDMyNgIGXG5EQwJcIlwyNjZcMjAyXDMyNyBcMjA0XDIxMgBcMjA3XDMz MFwzMzFcMzAxBEREAkVcMjA3IiBbbGV4aWNhbC1iaW5kaW5nIHF1b3RlIHNwZWNpYWwtdmFyaWFi bGUtcCBtYWNyb2V4cC1jb25zdC1wIGV2YWwgZm9ybWF0LW1lc3NhZ2UgImBhZGQtdG8tbGlzdCcg Y2FuJ3QgdXNlIGxleGljYWwgdmFyIGAlcyc7IHVzZSBgcHVzaCcgb3IgYGNsLXB1c2huZXcnIiBt YWtlLWNsb3N1cmUgI1swICJcMzAxXG5cMjM2XDIwNVxuAFwzMDNcMzAwXDMwNFwiXDIwNyIgW1Yw IFYxIGJ5dGUtY29tcGlsZS0tbGV4aWNhbC1lbnZpcm9ubWVudCBieXRlLWNvbXBpbGUtcmVwb3J0 LWVycm9yIDpmaWxsXSAzXSBtYWNyb2V4cC1jb3B5YWJsZS1wIG1ha2Utc3ltYm9sICJ4IiBpZiBy ZXF1aXJlIGNsLWxpYiBjbC1tZW1iZXIgOnRlc3QgbWVtYmVyIHNldHEgYXBwZW5kIGxpc3QgcHVz aCBtYWNyb2V4cC1sZXQqIG1hY3JvZXhwLWNvbXBpbGluZy1wIHByb2duIG1hY3JvZXhwLS1mdW5j YWxsLWlmLWNvbXBpbGVkXSAxOSAoIyQgLiA3NjUwNCldKSNANjY4IEFkZCBFTEVNRU5UIHRvIHRo ZSB2YWx1ZSBvZiBMSVNULVZBUiBpZiBpdCBpc24ndCB0aGVyZSB5ZXQuClRoZSB0ZXN0IGZvciBw cmVzZW5jZSBvZiBFTEVNRU5UIGlzIGRvbmUgd2l0aCBgZXEnLgoKVGhlIHZhbHVlIG9mIExJU1Qt VkFSIGlzIGtlcHQgb3JkZXJlZCBiYXNlZCBvbiB0aGUgT1JERVIKcGFyYW1ldGVyLgoKSWYgdGhl IHRoaXJkIG9wdGlvbmFsIGFyZ3VtZW50IE9SREVSIGlzIGEgbnVtYmVyIChpbnRlZ2VyIG9yCmZs b2F0KSwgc2V0IHRoZSBlbGVtZW50J3MgbGlzdCBvcmRlciB0byB0aGUgZ2l2ZW4gdmFsdWUuICBJ ZgpPUkRFUiBpcyBuaWwgb3Igb21pdHRlZCwgZG8gbm90IGNoYW5nZSB0aGUgbnVtZXJpYyBvcmRl ciBvZgpFTEVNRU5ULiAgSWYgT1JERVIgaGFzIGFueSBvdGhlciB2YWx1ZSwgcmVtb3ZlIHRoZSBu dW1lcmljIG9yZGVyCm9mIEVMRU1FTlQgaWYgaXQgaGFzIG9uZS4KClRoZSBsaXN0IG9yZGVyIGZv ciBlYWNoIGVsZW1lbnQgaXMgc3RvcmVkIGluIExJU1QtVkFSJ3MKYGxpc3Qtb3JkZXInIHByb3Bl cnR5LgpMSVNULVZBUiBjYW5ub3QgcmVmZXIgdG8gYSBsZXhpY2FsIHZhcmlhYmxlLgoKVGhlIHJl dHVybiB2YWx1ZSBpcyB0aGUgbmV3IHZhbHVlIG9mIExJU1QtVkFSLgoKKGZuIExJU1QtVkFSIEVM RU1FTlQgJm9wdGlvbmFsIE9SREVSKR8KKGRlZmFsaWFzICdhZGQtdG8tb3JkZXJlZC1saXN0ICNb NzcwICICXDMwME5DXDIxMVwyNDJcMjA0FgBcMzAxBFwzMDADXDMwMlwzMDNcMzA0XDMwNVwzMDYk XDI0MCNcMjEwAVwyMDMmAFwzMDcDA1wyNDdcMjA1XCIAAwNcMjQyI1wyMTACBEo+XDIwNDQAAwMF SkJMXDIxMANcMzEwBUpcMzExXDMxMgVcIlwiTFwyMDciIFtsaXN0LW9yZGVyIHB1dCBtYWtlLWhh c2gtdGFibGUgOndlYWtuZXNzIGtleSA6dGVzdCBlcSBwdXRoYXNoIHNvcnQgbWFrZS1jbG9zdXJl ICNbNTE0ICJcMzAxAlwzMDBcMjQyXCJcMzAxAlwzMDBcMjQyXCIBXDIwMxYAXDIxMVwyMDMWAAEB V1wyMDcBXDIwNyIgW1YwIGdldGhhc2hdIDYgIlxuXG4oZm4gQSBCKSJdXSAxMyAoIyQgLiA3NzM4 OSldKSNANzMzIEFkZCBORVdFTFQgdG8gdGhlIGhpc3RvcnkgbGlzdCBzdG9yZWQgaW4gdGhlIHZh cmlhYmxlIEhJU1RPUlktVkFSLgpSZXR1cm4gdGhlIG5ldyBoaXN0b3J5IGxpc3QuCklmIE1BWEVM VCBpcyBub24tbmlsLCBpdCBzcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBoaXN0 b3J5LgpPdGhlcndpc2UsIHRoZSBtYXhpbXVtIGhpc3RvcnkgbGVuZ3RoIGlzIHRoZSB2YWx1ZSBv ZiB0aGUgYGhpc3RvcnktbGVuZ3RoJwpwcm9wZXJ0eSBvbiBzeW1ib2wgSElTVE9SWS1WQVIsIGlm IHNldCwgb3IgdGhlIHZhbHVlIG9mIHRoZSBgaGlzdG9yeS1sZW5ndGgnCnZhcmlhYmxlLiAgVGhl IHBvc3NpYmxlIHZhbHVlcyBvZiBtYXhpbXVtIGxlbmd0aCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcg YXMKdGhlIHZhbHVlcyBvZiBgaGlzdG9yeS1sZW5ndGgnLgpSZW1vdmUgZHVwbGljYXRlcyBvZiBO RVdFTFQgaWYgYGhpc3RvcnktZGVsZXRlLWR1cGxpY2F0ZXMnIGlzIG5vbi1uaWwuCklmIG9wdGlv bmFsIGZvdXJ0aCBhcmcgS0VFUC1BTEwgaXMgbm9uLW5pbCwgYWRkIE5FV0VMVCB0byBoaXN0b3J5 IGV2ZW4KaWYgaXQgaXMgZW1wdHkgb3IgZHVwbGljYXRlcyB0aGUgbW9zdCByZWNlbnQgZW50cnkg aW4gdGhlIGhpc3RvcnkuCkhJU1RPUlktVkFSIGNhbm5vdCByZWZlciB0byBhIGxleGljYWwgdmFy aWFibGUuCgooZm4gSElTVE9SWS1WQVIgTkVXRUxUICZvcHRpb25hbCBNQVhFTFQgS0VFUC1BTEwp HwooZGVmYWxpYXMgJ2FkZC10by1oaXN0b3J5ICNbMTAyNiAiAVwyMDQNAANcMzAwTlwyMDYLAAhc MjYyAgNKXDMwMgE8XDIwNWMAAlwyMDQlAAQ7XDIwMyUABEdcMzAzVlwyMDVjAAJcMjA0MQABQAVc MjMyP1wyMDVjAAlcMjAzOwBcMzA0BQNcIlwyNjICBAJCXDI2MgIDXDI1MFwyMDNgAFwzMDMEWVwy MDNRAFwzMDJcMjYyAlwyMDJgAANTAlwyMzNcMjYyAVwyMTE6XDIwM2AAXDIxMVwzMDJcMjQxXDIx MAUCTFwyMDciIFtoaXN0b3J5LWxlbmd0aCBoaXN0b3J5LWRlbGV0ZS1kdXBsaWNhdGVzIG5pbCAw IGRlbGV0ZV0gOSAoIyQgLiA3ODQ0MildKSNANjIgSWYgbm9uLW5pbCwgYHJ1bi1tb2RlLWhvb2tz JyBzaG91bGQgZGVsYXkgcnVubmluZyB0aGUgaG9va3MuHwooZGVmdmFyIGRlbGF5LW1vZGUtaG9v a3MgbmlsICgjJCAuIDc5NDg4KSkjQDQ3IExpc3Qgb2YgZGVsYXllZCBtb2RlIGhvb2tzIHdhaXRp bmcgdG8gYmUgcnVuLh8KKGRlZnZhciBkZWxheWVkLW1vZGUtaG9va3MgbmlsICgjJCAuIDc5NTk3 KSkKKGJ5dGUtY29kZSAiXDMwMFwzMDEhXDIxMFwzMDJcMzAzXDMwNFwzMDUjXDIwNyIgW21ha2Ut dmFyaWFibGUtYnVmZmVyLWxvY2FsIGRlbGF5ZWQtbW9kZS1ob29rcyBwdXQgZGVsYXktbW9kZS1o b29rcyBwZXJtYW5lbnQtbG9jYWwgdF0gNCkjQDk5IExpc3Qgb2YgZGVsYXllZCA6YWZ0ZXItaG9v ayBmb3JtcyB3YWl0aW5nIHRvIGJlIHJ1bi4KVGhlc2UgZm9ybXMgY29tZSBmcm9tIGBkZWZpbmUt ZGVyaXZlZC1tb2RlJy4fCihkZWZ2YXIgZGVsYXllZC1hZnRlci1ob29rLWZ1bmN0aW9ucyBuaWwg KCMkIC4gNzk4MzEpKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2RlbGF5ZWQtYWZ0ZXIt aG9vay1mdW5jdGlvbnMpI0A2NSBOb3JtYWwgaG9vayBydW4gaW4gbWFqb3IgbW9kZSBmdW5jdGlv bnMsIGJlZm9yZSB0aGUgbW9kZSBob29rcy4fCihkZWZ2YXIgY2hhbmdlLW1ham9yLW1vZGUtYWZ0 ZXItYm9keS1ob29rIG5pbCAoIyQgLiA4MDA0OCkpI0A1OCBOb3JtYWwgaG9vayBydW4gYXQgdGhl IHZlcnkgZW5kIG9mIG1ham9yIG1vZGUgZnVuY3Rpb25zLh8KKGRlZnZhciBhZnRlci1jaGFuZ2Ut bWFqb3ItbW9kZS1ob29rIG5pbCAoIyQgLiA4MDE3NykpI0A2ODQgUnVuIG1vZGUgaG9va3MgYGRl bGF5ZWQtbW9kZS1ob29rcycgYW5kIEhPT0tTLCBvciBkZWxheSBIT09LUy4KQ2FsbCBgaGFjay1s b2NhbC12YXJpYWJsZXMnIHRvIHNldCB1cCBmaWxlIGxvY2FsIGFuZCBkaXJlY3RvcnkgbG9jYWwK dmFyaWFibGVzLgoKSWYgdGhlIHZhcmlhYmxlIGBkZWxheS1tb2RlLWhvb2tzJyBpcyBub24tbmls LCBkb2VzIG5vdCBkbyBhbnl0aGluZywKanVzdCBhZGRzIHRoZSBIT09LUyB0byB0aGUgbGlzdCBg ZGVsYXllZC1tb2RlLWhvb2tzJy4KT3RoZXJ3aXNlLCBydW5zIGhvb2tzIGluIHRoZSBzZXF1ZW5j ZTogYGNoYW5nZS1tYWpvci1tb2RlLWFmdGVyLWJvZHktaG9vaycsCmBkZWxheWVkLW1vZGUtaG9v a3MnIChpbiByZXZlcnNlIG9yZGVyKSwgSE9PS1MsIHRoZW4gcnVucwpgaGFjay1sb2NhbC12YXJp YWJsZXMnLCBydW5zIHRoZSBob29rIGBhZnRlci1jaGFuZ2UtbWFqb3ItbW9kZS1ob29rJywgYW5k CmZpbmFsbHkgZXZhbHVhdGVzIHRoZSBmdW5jdGlvbnMgaW4gYGRlbGF5ZWQtYWZ0ZXItaG9vay1m dW5jdGlvbnMnIChzZWUKYGRlZmluZS1kZXJpdmVkLW1vZGUnKS4KCk1ham9yIG1vZGUgZnVuY3Rp b25zIHNob3VsZCB1c2UgdGhpcyBpbnN0ZWFkIG9mIGBydW4taG9va3MnIHdoZW4KcnVubmluZyB0 aGVpciBGT08tbW9kZS1ob29rLgoKKGZuICZyZXN0IEhPT0tTKR8KKGRlZmFsaWFzICdydW4tbW9k ZS1ob29rcyAjWzEyOCAiCFwyMDMXAFwyMTFcMjExXDIwNRYAXDIxMUBcMjExCUIRAUFcMjY2XDIw MlwyMDIFAFwyMDcJXDIzNwFcMjQ0XDI2MgFcMzA1XDMwMiFcMjAzMwBcblwyMDMzAFwzMDZcMzAz IVwyMDQzAFwzMDdcMzAzIVwyMTBcMzEwE1wzMTERXDMxMlwzMTNcMzE0A0JcIlwyMTBcMzE1IFwy MDNTAFwzMTYxTQBcMzE3XDMyMCEwXDIxMFwyMDJTAFwzMjFcMzIyAlwiXDI2NgJcMzEzXDMyMyFc MjEwXGZcMjM3XDMxMRRcMjExXDIwNWsAXDIxMUBcMjExIFwyMTABQVwyNjZcMjAyXDIwMlsAXDIw NyIgW2RlbGF5LW1vZGUtaG9va3MgZGVsYXllZC1tb2RlLWhvb2tzIHN5bnRheC1wcm9wZXJ0aXpl LWZ1bmN0aW9uIHBhcnNlLXNleHAtbG9va3VwLXByb3BlcnRpZXMgZGVsYXllZC1hZnRlci1ob29r LWZ1bmN0aW9ucyBib3VuZHAgbG9jYWwtdmFyaWFibGUtcCBtYWtlLWxvY2FsLXZhcmlhYmxlIHQg bmlsIGFwcGx5IHJ1bi1ob29rcyBjaGFuZ2UtbWFqb3ItbW9kZS1hZnRlci1ib2R5LWhvb2sgYnVm ZmVyLWZpbGUtbmFtZSAoZGVidWcgZXJyb3IpIGhhY2stbG9jYWwtdmFyaWFibGVzIG5vLW1vZGUg bWVzc2FnZSAiRmlsZSBsb2NhbC12YXJpYWJsZXMgZXJyb3I6ICVzIiBhZnRlci1jaGFuZ2UtbWFq b3ItbW9kZS1ob29rXSA1ICgjJCAuIDgwMjk1KV0pI0AyMzYgRXhlY3V0ZSBCT0RZLCBidXQgZGVs YXkgYW55IGBydW4tbW9kZS1ob29rcycuClRoZXNlIGhvb2tzIHdpbGwgYmUgZXhlY3V0ZWQgYnkg dGhlIGZpcnN0IGZvbGxvd2luZyBjYWxsIHRvCmBydW4tbW9kZS1ob29rcycgdGhhdCBvY2N1cnMg b3V0c2lkZSBhbnkgYGRlbGF5LW1vZGUtaG9va3MnIGZvcm0uCkFmZmVjdHMgb25seSBob29rcyBy dW4gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ2Rl bGF5LW1vZGUtaG9va3MgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDJcMzAzBEJCRVwyMDci IFtwcm9nbiAobWFrZS1sb2NhbC12YXJpYWJsZSAnZGVsYXktbW9kZS1ob29rcykgbGV0ICgoZGVs YXktbW9kZS1ob29rcyB0KSldIDYgKCMkIC4gODE2NjApXSkpCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDIxMFwzMDRcMzAxXDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgZGVsYXktbW9kZS1o b29rcyBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9u IDBdIDQpI0A3MiBDaGVjayBhbmQgYnVpbGQgYSBzaW5nbGUgQklORElORyB3aXRoIFBSRVYtVkFS LgoKKGZuIEJJTkRJTkcgUFJFVi1WQVIpHwooZGVmYWxpYXMgJ2ludGVybmFsLS1idWlsZC1iaW5k aW5nICNbNTE0ICIBOVwyMDMLAAFcMjExRFwyMDIaAAFBXDIwNBkAXDMwMFwzMDEhAkBEXDIwMhoA AVwyNjICAUdcMzAyVlwyMDMqAFwzMDNcMzA0XDMwNQRCXCJcMjEwAUBcMjExXDMwNgMFQUBFRFwy MDciIFttYWtlLXN5bWJvbCAicyIgMiBzaWduYWwgZXJyb3IgImBsZXQnIGJpbmRpbmdzIGNhbiBo YXZlIG9ubHkgb25lIHZhbHVlLWZvcm0iIGFuZF0gNyAoIyQgLiA4MjIwNSldKSNANzAgQ2hlY2sg YW5kIGJ1aWxkIGNvbmRpdGlvbmFsIHZhbHVlIGZvcm1zIGZvciBCSU5ESU5HUy4KCihmbiBCSU5E SU5HUykfCihkZWZhbGlhcyAnaW50ZXJuYWwtLWJ1aWxkLWJpbmRpbmdzICNbMjU3ICJcMzAwQ1wz MDFcMzAyXDMwMwNcIgNcIlwyMDciIFt0IG1hcGNhciBtYWtlLWNsb3N1cmUgI1syNTcgIlwzMDEB XDMwMFwyNDJcIlwzMDABQFwyNDBcMjEwXDIwNyIgW1YwIGludGVybmFsLS1idWlsZC1iaW5kaW5n XSA0ICJcblxuKGZuIEJJTkRJTkcpIl1dIDYgKCMkIC4gODI1MzApXSkjQDE4NyBCaW5kIHZhcmlh YmxlcyBhY2NvcmRpbmcgdG8gVkFSTElTVCBhbmQgZXZhbHVhdGUgVEhFTiBvciBFTFNFLgpUaGlz IGlzIGxpa2UgYGlmLWxldCcgYnV0IGRvZXNuJ3QgaGFuZGxlIGEgVkFSTElTVCBvZiB0aGUgZm9y bQooU1lNQk9MIFNPTUVUSElORykgc3BlY2lhbGx5LgoKKGZuIFZBUkxJU1QgVEhFTiAmcmVzdCBF TFNFKR8KKGRlZmFsaWFzICdpZi1sZXQqICcobWFjcm8gLiAjWzY0MiAiAlwyMDMZAFwzMDBcMzAx BCFcMjExXDI2MgVcMzAyXDMwMwYGIUBABQVCQkJFXDIwN1wzMDBcMzA0A0VcMjA3IiBbbGV0KiBp bnRlcm5hbC0tYnVpbGQtYmluZGluZ3MgaWYgbGFzdCBuaWxdIDkgKCMkIC4gODI4MTEpXSkpCihi eXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rp b24tcHV0IGlmLWxldCogbGlzcC1pbmRlbnQtZnVuY3Rpb24gMiBwdXQgZWRlYnVnLWZvcm0tc3Bl YyAoKCZyZXN0IFsmb3Igc3ltYm9scCAoc3ltYm9scCBmb3JtKSAoZm9ybSldKSBib2R5KV0gNSkj QDE5MCBCaW5kIHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gVkFSTElTVCBhbmQgY29uZGl0aW9uYWxs eSBldmFsdWF0ZSBCT0RZLgpUaGlzIGlzIGxpa2UgYHdoZW4tbGV0JyBidXQgZG9lc24ndCBoYW5k bGUgYSBWQVJMSVNUIG9mIHRoZSBmb3JtCihTWU1CT0wgU09NRVRISU5HKSBzcGVjaWFsbHkuCgoo Zm4gVkFSTElTVCAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aGVuLWxldCogJyhtYWNybyAuICNb Mzg1ICJcMzAwAlwzMDEDIUVcMjA3IiBbaWYtbGV0KiBtYWNyb2V4cC1wcm9nbl0gNiAoIyQgLiA4 MzMzOSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wy MDciIFtmdW5jdGlvbi1wdXQgd2hlbi1sZXQqIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVk ZWJ1Zy1mb3JtLXNwZWMgaWYtbGV0Kl0gNSkjQDE5OSBCaW5kIHZhcmlhYmxlcyBhY2NvcmRpbmcg dG8gVkFSTElTVCBhbmQgY29uZGl0aW9uYWxseSBldmFsdWF0ZSBCT0RZLgpMaWtlIGB3aGVuLWxl dConLCBleGNlcHQgaWYgQk9EWSBpcyBlbXB0eSBhbmQgYWxsIHRoZSBiaW5kaW5ncwphcmUgbm9u LW5pbCwgdGhlbiB0aGUgcmVzdWx0IGlzIG5vbi1uaWwuCgooZm4gVkFSTElTVCAmcmVzdCBCT0RZ KR8KKGRlZmFsaWFzICdhbmQtbGV0KiAnKG1hY3JvIC4gI1szODUgIlwzMDACXDIwMyAAXDMwMVwz MDIEIVwyMTFcMjYyBVwzMDNcMzA0BgYhQEBcMjExXDI2MgUFXDIwNhwABENCQkVcMjA3XDMwMVwz MDADXDIwNicAXDMwNUJCXDIwNyIgW25pbCBsZXQqIGludGVybmFsLS1idWlsZC1iaW5kaW5ncyB3 aGVuIGxhc3QgKHQpXSA4ICgjJCAuIDgzNzY1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJc MzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBhbmQtbGV0KiBsaXNwLWlu ZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIGlmLWxldCpdIDUpI0A3NzggQmlu ZCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIFNQRUMgYW5kIGV2YWx1YXRlIFRIRU4gb3IgRUxTRS4K RXZhbHVhdGUgZWFjaCBiaW5kaW5nIGluIHR1cm4sIGFzIGluIGBsZXQqJywgc3RvcHBpbmcgaWYg YQpiaW5kaW5nIHZhbHVlIGlzIG5pbC4gIElmIGFsbCBhcmUgbm9uLW5pbCByZXR1cm4gdGhlIHZh bHVlIG9mClRIRU4sIG90aGVyd2lzZSB0aGUgbGFzdCBmb3JtIGluIEVMU0UuCgpFYWNoIGVsZW1l bnQgb2YgU1BFQyBpcyBhIGxpc3QgKFNZTUJPTCBWQUxVRUZPUk0pIHRoYXQgYmluZHMKU1lNQk9M IHRvIHRoZSB2YWx1ZSBvZiBWQUxVRUZPUk0uICBBbiBlbGVtZW50IGNhbiBhZGRpdGlvbmFsbHkg YmUKb2YgdGhlIGZvcm0gKFZBTFVFRk9STSksIHdoaWNoIGlzIGV2YWx1YXRlZCBhbmQgY2hlY2tl ZCBmb3IgbmlsOwppLmUuIFNZTUJPTCBjYW4gYmUgb21pdHRlZCBpZiBvbmx5IHRoZSB0ZXN0IHJl c3VsdCBpcyBvZgppbnRlcmVzdC4gIEl0IGNhbiBhbHNvIGJlIG9mIHRoZSBmb3JtIFNZTUJPTCwg dGhlbiB0aGUgYmluZGluZyBvZgpTWU1CT0wgaXMgY2hlY2tlZCBmb3IgbmlsLgoKQXMgYSBzcGVj aWFsIGNhc2UsIGludGVycHJldHMgYSBTUEVDIG9mIHRoZSBmb3JtIChTWU1CT0wgU09NRVRISU5H KQpsaWtlICgoU1lNQk9MIFNPTUVUSElORykpLiAgVGhpcyBleGlzdHMgZm9yIGJhY2t3YXJkIGNv bXBhdGliaWxpdHkKd2l0aCBhbiBvbGQgc3ludGF4IHRoYXQgYWNjZXB0ZWQgb25seSBvbmUgYmlu ZGluZy4KCihmbiBTUEVDIFRIRU4gJnJlc3QgRUxTRSkfCihkZWZhbGlhcyAnaWYtbGV0ICcobWFj cm8gLiAjWzY0MiAiAkdcMzAwWFwyMDMRAAJAPFwyMDQRAAJDXDI2MgNcMzAxAwNcMzAyBCFGXDIw NyIgWzIgaWYtbGV0KiBtYWNyb2V4cC1wcm9nbl0gOCAoIyQgLiA4NDMwMCldKSkKKGJ5dGUtY29k ZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQg aWYtbGV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDIgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgKFsmb3Ig KHN5bWJvbHAgZm9ybSkgKCZyZXN0IFsmb3Igc3ltYm9scCAoc3ltYm9scCBmb3JtKSAoZm9ybSld KV0gYm9keSldIDUpI0AyNzEgQmluZCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIFNQRUMgYW5kIGNv bmRpdGlvbmFsbHkgZXZhbHVhdGUgQk9EWS4KRXZhbHVhdGUgZWFjaCBiaW5kaW5nIGluIHR1cm4s IHN0b3BwaW5nIGlmIGEgYmluZGluZyB2YWx1ZSBpcyBuaWwuCklmIGFsbCBhcmUgbm9uLW5pbCwg cmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBmb3JtIGluIEJPRFkuCgpUaGUgdmFyaWFibGUg bGlzdCBTUEVDIGlzIHRoZSBzYW1lIGFzIGluIGBpZi1sZXQnLgoKKGZuIFNQRUMgJnJlc3QgQk9E WSkfCihkZWZhbGlhcyAnd2hlbi1sZXQgJyhtYWNybyAuICNbMzg1ICJcMzAwAlwzMDEDIUVcMjA3 IiBbaWYtbGV0IG1hY3JvZXhwLXByb2duXSA2ICgjJCAuIDg1NDA0KV0pKQooYnl0ZS1jb2RlICJc MzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3aGVu LWxldCBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIGlmLWxldF0g NSkjQDI1OSBCaW5kIHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gU1BFQyBhbmQgY29uZGl0aW9uYWxs eSBldmFsdWF0ZSBCT0RZLgpFdmFsdWF0ZSBlYWNoIGJpbmRpbmcgaW4gdHVybiwgc3RvcHBpbmcg aWYgYSBiaW5kaW5nIHZhbHVlIGlzIG5pbC4KSWYgYWxsIGJpbmRpbmdzIGFyZSBub24tbmlsLCBl dmFsIEJPRFkgYW5kIHJlcGVhdC4KClRoZSB2YXJpYWJsZSBsaXN0IFNQRUMgaXMgdGhlIHNhbWUg YXMgaW4gYGlmLWxldCcuCgooZm4gU1BFQyAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aGlsZS1s ZXQgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMSFcMzAyXDMwMwJEXDMwNFwzMDVcMzA2BgdcMzA3 BghCXDMxMFwzMDMGCURcMzExQkJGRUVcMjA3IiBbZ2Vuc3ltICJkb25lIiBjYXRjaCBxdW90ZSB3 aGlsZSB0IGlmLWxldCogcHJvZ24gdGhyb3cgKG5pbCldIDEzICgjJCAuIDg1OTA3KV0pKQooYnl0 ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9u LXB1dCB3aGlsZS1sZXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3Bl YyBpZi1sZXRdIDUpI0AyMDYgTm9uLW5pbCBpZiBNT0RFIGlzIGRlcml2ZWQgZnJvbSBvbmUgb2Yg TU9ERVMuClVzZXMgdGhlIGBkZXJpdmVkLW1vZGUtcGFyZW50JyBwcm9wZXJ0eSBvZiB0aGUgc3lt Ym9sIHRvIHRyYWNlIGJhY2t3YXJkcy4KSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBgbWFqb3It bW9kZScsIHVzZSBgZGVyaXZlZC1tb2RlLXAnLgoKKGZuIE1PREUgJnJlc3QgTU9ERVMpHwooZGVm YWxpYXMgJ3Byb3ZpZGVkLW1vZGUtZGVyaXZlZC1wICNbMzg1ICIBS1wyMTFcMjAzDgBcMjExOVwy MDMOAFwyMTFcMjYyA1wyMTABAT5cMjA0MAABXDMwME5cMjExS1wyMTFcMjAzJwBcMjExOVwyMDMn AFwyMTFcMjAyKAABXDIxMVwyNjIFXDI2NlwyMDJcMjA0DwABXDIwNyIgW2Rlcml2ZWQtbW9kZS1w YXJlbnRdIDYgKCMkIC4gODY0ODcpXSkjQDE1NyBOb24tbmlsIGlmIHRoZSBjdXJyZW50IG1ham9y IG1vZGUgaXMgZGVyaXZlZCBmcm9tIG9uZSBvZiBNT0RFUy4KVXNlcyB0aGUgYGRlcml2ZWQtbW9k ZS1wYXJlbnQnIHByb3BlcnR5IG9mIHRoZSBzeW1ib2wgdG8gdHJhY2UgYmFja3dhcmRzLgoKKGZu ICZyZXN0IE1PREVTKR8KKGRlZmFsaWFzICdkZXJpdmVkLW1vZGUtcCAjWzEyOCAiXDMwMVwzMDII AyNcMjA3IiBbbWFqb3ItbW9kZSBhcHBseSBwcm92aWRlZC1tb2RlLWRlcml2ZWQtcF0gNSAoIyQg LiA4Njg5NyldKQooZGVmdmFyIG1ham9yLW1vZGUtLXN1c3BlbmRlZCBuaWwgbmlsKQooYnl0ZS1j b2RlICJcMzAwXDMwMSFcMjEwXDMwMlwzMDFcMzAzXDMwNCNcMjA3IiBbbWFrZS12YXJpYWJsZS1i dWZmZXItbG9jYWwgbWFqb3ItbW9kZS0tc3VzcGVuZGVkIHB1dCBwZXJtYW5lbnQtbG9jYWwgdF0g NCkjQDQyIEV4aXQgY3VycmVudCBtYWpvciBtb2RlLCByZW1lbWJlcmluZyBpdC4fCihkZWZhbGlh cyAnbWFqb3ItbW9kZS1zdXNwZW5kICNbMCAiCFwyMDZcZgAJXDMwMj0/XDIwNVxmAAlcMzAzIFwy MTBcMzA0XDMwMCFcMjEwXDIxMVwyMTEQXDIwNyIgW21ham9yLW1vZGUtLXN1c3BlbmRlZCBtYWpv ci1tb2RlIGZ1bmRhbWVudGFsLW1vZGUga2lsbC1hbGwtbG9jYWwtdmFyaWFibGVzIG1ha2UtbG9j YWwtdmFyaWFibGVdIDMgKCMkIC4gODczMzEpXSkjQDIxMSBSZXN0b3JlIG1ham9yIG1vZGUgZWFy bGllciBzdXNwZW5kZWQgd2l0aCBgbWFqb3ItbW9kZS1zdXNwZW5kJy4KSWYgdGhlcmUgd2FzIG5v IGVhcmxpZXIgc3VzcGVuZGVkIG1ham9yIG1vZGUsIHRoZW4gZmFsbGJhY2sgdG8gYG5vcm1hbC1t b2RlJywKdGhvdWdoIHRyeWluZyB0byBhdm9pZCBBVk9JREVELU1PREVTLgoKKGZuICZvcHRpb25h bCBBVk9JREVELU1PREVTKR8KKGRlZmFsaWFzICdtYWpvci1tb2RlLXJlc3RvcmUgI1syNTYgIghc MjAzCwAIXDMwM1wzMDAhXDIxMCBcMjA3XDMwNAkhAVwyMTFcMjAzXCIAXDIxMUBcMzA1AQRcIlwy NjIDAUFcMjY2XDIwMlwyMDIPAFwyMTBcMjExXDI2MgFcMzA0XG4hAlwyMTFcMjAzPQBcMjExQFwz MDUBBFwiXDI2MgMBQVwyNjZcMjAyXDIwMioAXDIxMFwyMTFcMjYyARoZXDMwNiAqXDIwNyIgW21h am9yLW1vZGUtLXN1c3BlbmRlZCBhdXRvLW1vZGUtYWxpc3QgbWFnaWMtZmFsbGJhY2stbW9kZS1h bGlzdCBraWxsLWxvY2FsLXZhcmlhYmxlIGNvcHktc2VxdWVuY2UgcmFzc3EtZGVsZXRlLWFsbCBu b3JtYWwtbW9kZV0gOCAoIyQgLiA4NzU4NyldKSNAMzUgTGlzdCBvZiBhbGwgbWlub3IgbW9kZSBm dW5jdGlvbnMuHwooZGVmdmFyIG1pbm9yLW1vZGUtbGlzdCAnKGF1dG8tc2F2ZS1tb2RlIGF1dG8t ZmlsbC1tb2RlIGFiYnJldi1tb2RlIG92ZXJ3cml0ZS1tb2RlIHZpZXctbW9kZSBocy1taW5vci1t b2RlKSAoIyQgLiA4ODE1NSkpI0AxMDAxIFJlZ2lzdGVyIGEgbmV3IG1pbm9yIG1vZGUuCgpUaGlz IGZ1bmN0aW9uIHNob3VsZG4ndCBiZSB1c2VkIGRpcmVjdGx5IC0tIHVzZSBgZGVmaW5lLW1pbm9y LW1vZGUnCmluc3RlYWQgKHdoaWNoIHdpbGwgdGhlbiBjYWxsIHRoaXMgZnVuY3Rpb24pLgoKVE9H R0xFIGlzIGEgc3ltYm9sIHRoYXQgaXMgdGhlIG5hbWUgb2YgYSBidWZmZXItbG9jYWwgdmFyaWFi bGUgdGhhdAppcyB0b2dnbGVkIG9uIG9yIG9mZiB0byBzYXkgd2hldGhlciB0aGUgbWlub3IgbW9k ZSBpcyBhY3RpdmUgb3Igbm90LgoKTkFNRSBzcGVjaWZpZXMgd2hhdCB3aWxsIGFwcGVhciBpbiB0 aGUgbW9kZSBsaW5lIHdoZW4gdGhlIG1pbm9yIG1vZGUKaXMgYWN0aXZlLiAgTkFNRSBzaG91bGQg YmUgZWl0aGVyIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSBzcGFjZSwgb3IgYQpzeW1ib2wgd2hv c2UgdmFsdWUgaXMgc3VjaCBhIHN0cmluZy4KCk9wdGlvbmFsIEtFWU1BUCBpcyB0aGUga2V5bWFw IGZvciB0aGUgbWlub3IgbW9kZSB0aGF0IHdpbGwgYmUgYWRkZWQKdG8gYG1pbm9yLW1vZGUtbWFw LWFsaXN0Jy4KCk9wdGlvbmFsIEFGVEVSIHNwZWNpZmllcyB0aGF0IFRPR0dMRSBzaG91bGQgYmUg YWRkZWQgYWZ0ZXIgQUZURVIKaW4gYG1pbm9yLW1vZGUtYWxpc3QnLgoKT3B0aW9uYWwgVE9HR0xF LUZVTiBpcyBhbiBpbnRlcmFjdGl2ZSBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIG1vZGUuCkl0IGRl ZmF1bHRzIHRvIChhbmQgc2hvdWxkIGJ5IGNvbnZlbnRpb24gYmUpIFRPR0dMRS4KCklmIFRPR0dM RSBoYXMgYSBub24tbmlsIGA6aW5jbHVkZWQnIHByb3BlcnR5LCBhbiBlbnRyeSBmb3IgdGhlIG1v ZGUgaXMKaW5jbHVkZWQgaW4gdGhlIG1vZGUtbGluZSBtaW5vciBtb2RlIG1lbnUuCklmIFRPR0dM RSBoYXMgYSBgOm1lbnUtdGFnJywgdGhhdCBpcyB1c2VkIGZvciB0aGUgbWVudSBpdGVtJ3MgbGFi ZWwuCgooZm4gVE9HR0xFIE5BTUUgJm9wdGlvbmFsIEtFWU1BUCBBRlRFUiBUT0dHTEUtRlVOKR8K KGRlZmFsaWFzICdhZGQtbWlub3ItbW9kZSAjWzEyODIgIgQIPlwyMDRcbgAECEIQXDIxMVwyMDQR AARcMjYyAVwyMTEFPVwyMDQdAFwzMDUFXDMwNgMjXDIxMANcMjAzcwAECVwyMzZcMjExXDIwMzEA XDIxMQVDXDI0MVwyNjYCXDIwMnMACVwzMDcBXDIwM1AAXDIxMVwyMDRQAAQCQEA9XDIwM0kAAVwy NjIBXDIwMjMAAUFcMjYyAlwyMDIzAFwyMTFcMjAzaQBcMjExQQFcMzA3XDI0MVwyMTABBgkGCURD XDI0NAFcMjQ0XDI2NgVcMjAycwAGBwYHRAlCEVwyNjYDBFwzMTBOXDIwM1wyNzcAXDMxMVxuXDMx MgYHIVwzMTMGCFwzMTROXDIwNlwyMjYABgc7XDIwM1wyMjIABgdcMjAyXDIyNgBcMzE1BgkhBgg5 XDIwNVwyMzcABghKXDIxMRs7XDIwNVwyNjMAXDMxNlwzMTcLXCJcMjA1XDI2MwBcMzIwXDMyMVwz MjILXCJcMzIzUSlQBVwzMjRcMzI1BlxmQlwyNTcFI1wyMTACXDIwNRcBBFxmXDIzNlwyMTFcMjAz XDMyMABcMjExBFwyNDFcMjAyFQFcZlwzMDcBXDIwM1wzNTcAXDIxMVwyMDRcMzU3AAQCQEA9XDIw M1wzNTAAAVwyNjIBXDIwMlwzMjIAAUFcMjYyAlwyMDJcMzIyAFwyMTFcMjAzXG4BXDIxMUEBXDMw N1wyNDFcMjEwAQYJBghCQ1wyNDQBXDI0NFwyNjIBXDI2NlwyMDJcMjAyFQEGBwYGQlxmQlwyMTEU XDI2NlwyMDJcMjYyAVwyMDciIFttaW5vci1tb2RlLWxpc3QgbWlub3ItbW9kZS1hbGlzdCBtb2Rl LWxpbmUtbW9kZS1tZW51IG1vZGUtbmFtZSBtaW5vci1tb2RlLW1hcC1hbGlzdCBwdXQgOm1pbm9y LW1vZGUtZnVuY3Rpb24gbmlsIDppbmNsdWRlZCBkZWZpbmUta2V5IHZlY3RvciBtZW51LWl0ZW0g Om1lbnUtdGFnIHN5bWJvbC1uYW1lIHN0cmluZy1tYXRjaCAiW14gXSsiICIgKCIgbWF0Y2gtc3Ry aW5nIDAgIikiIDpidXR0b24gOnRvZ2dsZV0gMTUgKCMkIC4gODgzMTgpXSkjQDQ4IE5vbi1uaWwg aWYgT0JKRUNUIGlzIGFuIGF1dG9sb2FkLgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnYXV0b2xv YWRwICNbMjU3ICJcMjExXDI0MlwzMDA9XDIwNyIgW2F1dG9sb2FkXSAzICgjJCAuIDkwMjIzKV0p CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVu Y3Rpb24tcHV0IGF1dG9sb2FkcCBzcGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21w aWxlLWlubGluZS1leHBhbmRdIDUpI0AxMTYgRGVmaW5lIHRoZSBwcm9wZXJ0eSBQUk9QIG9mIFNZ TUJPTCB0byBiZSBWQUwuClRoaXMgaXMgdG8gYHB1dCcgd2hhdCBgZGVmYWxpYXMnIGlzIHRvIGBm c2V0Jy4KCihmbiBTWU1CT0wgUFJPUCBWQUwpHwooZGVmYWxpYXMgJ2RlZmluZS1zeW1ib2wtcHJv cCAjWzc3MSAiXDMwMQhcMjM2XDIxMVwyMDQPAFwzMDFDXDI2MgFcMjExCEIQAgFcMjM2XDIxMVwy MDQhAANDXDI2MgEBAQNBQlwyNDFcMjEwBAFBXDIzNVwyMDQvAFwyMTEFAkFCXDI0MVwyMTBcMjY2 AlwzMDIDAwMjXDIwNyIgW2N1cnJlbnQtbG9hZC1saXN0IGRlZmluZS1zeW1ib2wtcHJvcHMgcHV0 XSA4ICgjJCAuIDkwNDg2KV0pI0AxNTMgTG9jYXRlIGEgbmF0aXZlbHktY29tcGlsZWQgRUxOLUZJ TEUgYnkgc2VhcmNoaW5nIGl0cyBsb2FkIHBhdGguClRoaXMgZnVuY3Rpb24gbG9va3MgaW4gZGly ZWN0b3JpZXMgbmFtZWQgYnkgYG5hdGl2ZS1jb21wLWVsbi1sb2FkLXBhdGgnLgoKKGZuIEVMTi1G SUxFKR8KKGRlZmFsaWFzICdsb2NhdGUtZWxuLWZpbGUgI1syNTcgIlwzMDIIXDMwMwNRCVwiXDIw NhMAXDMwMghcMzA0A1FcMzA1CSFcIlwyMDciIFtjb21wLW5hdGl2ZS12ZXJzaW9uLWRpciBuYXRp dmUtY29tcC1lbG4tbG9hZC1wYXRoIGxvY2F0ZS1maWxlLWludGVybmFsICIvIiAiL3ByZWxvYWRl ZC8iIGxhc3RdIDUgKCMkIC4gOTA4MjUpXSkjQDEwOTQgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBm aWxlIHRoYXQgZGVmaW5lZCBTWU1CT0wuClRoZSB2YWx1ZSBpcyBub3JtYWxseSBhbiBhYnNvbHV0 ZSBmaWxlIG5hbWUuICBJdCBjYW4gYWxzbyBiZSBuaWwsCmlmIHRoZSBkZWZpbml0aW9uIGlzIG5v dCBhc3NvY2lhdGVkIHdpdGggYW55IGZpbGUuICBJZiBTWU1CT0wKc3BlY2lmaWVzIGFuIGF1dG9s b2FkZWQgZnVuY3Rpb24sIHRoZSB2YWx1ZSBjYW4gYmUgYSByZWxhdGl2ZQpmaWxlIG5hbWUgd2l0 aG91dCBleHRlbnNpb24uCgpJZiBUWVBFIGlzIG5pbCwgdGhlbiBhbnkga2luZCBvZiBTWU1CT0wn cyBkZWZpbml0aW9uIGlzIGFjY2VwdGFibGUuCklmIFRZUEUgaXMgYGRlZnVuJywgYGRlZnZhcics IG9yIGBkZWZmYWNlJywgdGhhdCBzcGVjaWZpZXMgZnVuY3Rpb24KZGVmaW5pdGlvbiwgdmFyaWFi bGUgZGVmaW5pdGlvbiwgb3IgZmFjZSBkZWZpbml0aW9uIG9ubHkuCk90aGVyd2lzZSBUWVBFIGlz IGFzc3VtZWQgdG8gYmUgYSBzeW1ib2wgcHJvcGVydHkuCgpJZiBOQVRJVkUtUCBpcyBub24tbmls LCBhbmQgU1lNQk9MIHdhcyBsb2FkZWQgZnJvbSBhIC5lbG4gZmlsZSwKdGhpcyBmdW5jdGlvbiB3 aWxsIHJldHVybiB0aGUgYWJzb2x1dGUgZmlsZSBuYW1lIG9mIHRoYXQgLmVsbiBmaWxlLAppZiBm b3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgLmVsbiBmaWxlIGlzIG9sZGVyIHRoYW4gaXRzIHNvdXJj ZSAuZWwKZmlsZSwgRW1hY3Mgd29uJ3QgbG9hZCBzdWNoIGFuIG91dGRhdGVkIC5lbG4gZmlsZSwg YW5kIHRoaXMgZnVuY3Rpb24Kd2lsbCBub3QgcmV0dXJuIGl0LiAgSWYgdGhlIC5lbG4gZmlsZSBj b3VsZG4ndCBiZSBmb3VuZCwgb3IgaXMKb3V0ZGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRo ZSBjb3JyZXNwb25kaW5nIC5lbGMgb3IgLmVsIGZpbGUKaW5zdGVhZC4KClRoaXMgZnVuY3Rpb24g b25seSB3b3JrcyBmb3Igc3ltYm9scyBkZWZpbmVkIGluIExpc3AgZmlsZXMuICBGb3IKc3ltYm9s cyB0aGF0IGFyZSBkZWZpbmVkIGluIEMgZmlsZXMsIHVzZSBgaGVscC1DLWZpbGUtbmFtZScKaW5z dGVhZC4KCihmbiBTWU1CT0wgJm9wdGlvbmFsIFRZUEUgTkFUSVZFLVApHwooZGVmYWxpYXMgJ3N5 bWJvbC1maWxlICNbNzY5ICIBXDIwM1xuAAFcMzAxPVwyMDMfAAI5XDIwMx8AAktcMjExXDI0Mlwz MDI9XDI2MgFcMjAzHwACS0FAXDIwN1wyMTFcMjAzRwABXDIwMy0AAVwzMDE9XDIwM0cAAjlcMjAz RwBcMzAzIFwyMDNHAFwzMDQDSyFcMjAzRwBcMzA1XDMwNlwzMDcFSyEhIVwyMDdcMzEwMlwyNTEA CFwyMTFcMjA1XDI0NgBcMjExQFwyMTFcMjQyAVwyNDMFXDIwM34ABVwzMTE9XDIwM2cABgYBXDIz NVwyMDJcMjI1AAUGB0IBXDIzNVwyMDRcMjMwAAYGXDMxMgYHXDMxMlwzMTMFXCJcIj5cMjAyXDIy NQAGBgFcMjM1XDIwNFwyMzAAXDMxNAYHAlwiXDIxMVwyMDVcMjIzAFwyMTFAXDMxNT0/XDI2MgFc MjAzXDIzNQBcMzE2XDMxMANcIlwyMTBcMjY2AgFBXDI2NlwyMDJcMjAyTABcMjYyATBcMjExXDIw M1wzNzUAAVwyMDNcMzc1AFwzMDMgXDIwM1wzNzUAXDMxNwEhXDMyMFwzMjEhXDIwNVwzMDcAXDMy MSBcMjA1XDMwNwBcMjExXDMyMlABXDMyM1ABXDIwM1wzMjQAXDMyNAIhXDIwNFwzNDQAXDMyNAEh XDIwM1wzNDEAXDIxMVwyMTFcMjYyA1wyMDRcMzQ0AFwzMjVcMjYyAgE7XDIwNVwzNzAAXDMyNlwz MjcDISFcMzMwAQRcIlwyMDVcMzY2AFwyMTFcMjYyAVwyNjZcMjAzXDIwNlwzNzYAXDIxMVwyMDci IFtsb2FkLWhpc3RvcnkgZGVmdW4gYXV0b2xvYWQgbmF0aXZlLWNvbXAtYXZhaWxhYmxlLXAgc3Vi ci1uYXRpdmUtZWxpc3AtcCBleHBhbmQtZmlsZS1uYW1lIG5hdGl2ZS1jb21wLXVuaXQtZmlsZSBz dWJyLW5hdGl2ZS1jb21wLXVuaXQgZm91bmQgZGVmdmFyIGFsaXN0LWdldCBkZWZpbmUtc3ltYm9s LXByb3BzIHJhc3NxIHJlcXVpcmUgdGhyb3cgZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uIGZib3Vu ZHAgemxpYi1hdmFpbGFibGUtcCAiLmVsLmd6IiAiLmVsIiBmaWxlLWV4aXN0cy1wIG5pbCBsb2Nh dGUtZWxuLWZpbGUgY29tcC1lbC10by1lbG4tcmVsLWZpbGVuYW1lIGZpbGUtbmV3ZXItdGhhbi1m aWxlLXBdIDEzICgjJCAuIDkxMTc2KV0pI0A4MjMgU2hvdyB0aGUgcHJlY2lzZSBmaWxlIG5hbWUg b2YgRW1hY3MgbGlicmFyeSBMSUJSQVJZLgpMSUJSQVJZIHNob3VsZCBiZSBhIHJlbGF0aXZlIGZp bGUgbmFtZSBvZiB0aGUgbGlicmFyeSwgYSBzdHJpbmcuCkl0IGNhbiBvbWl0IHRoZSBzdWZmaXgg KGEuay5hLiBmaWxlLW5hbWUgZXh0ZW5zaW9uKSBpZiBOT1NVRkZJWCBpcwpuaWwgKHdoaWNoIGlz IHRoZSBkZWZhdWx0LCBzZWUgYmVsb3cpLgpUaGlzIGNvbW1hbmQgc2VhcmNoZXMgdGhlIGRpcmVj dG9yaWVzIGluIGBsb2FkLXBhdGgnIGxpa2UgYFxbbG9hZC1saWJyYXJ5XScKdG8gZmluZCB0aGUg ZmlsZSB0aGF0IGBcW2xvYWQtbGlicmFyeV0gUkVUIExJQlJBUlkgUkVUJyB3b3VsZCBsb2FkLgpP cHRpb25hbCBzZWNvbmQgYXJnIE5PU1VGRklYIG5vbi1uaWwgbWVhbnMgZG9uJ3QgYWRkIHN1ZmZp eGVzIGBsb2FkLXN1ZmZpeGVzJwp0byB0aGUgc3BlY2lmaWVkIG5hbWUgTElCUkFSWS4KCklmIHRo ZSBvcHRpb25hbCB0aGlyZCBhcmcgUEFUSCBpcyBzcGVjaWZpZWQsIHRoYXQgbGlzdCBvZiBkaXJl Y3RvcmllcwppcyB1c2VkIGluc3RlYWQgb2YgYGxvYWQtcGF0aCcuCgpXaGVuIGNhbGxlZCBmcm9t IGEgcHJvZ3JhbSwgdGhlIGZpbGUgbmFtZSBpcyBub3JtYWxseSByZXR1cm5lZCBhcyBhCnN0cmlu Zy4gIFdoZW4gcnVuIGludGVyYWN0aXZlbHksIHRoZSBhcmd1bWVudCBJTlRFUkFDVElWRS1DQUxM IGlzIHQsCmFuZCB0aGUgZmlsZSBuYW1lIGlzIGRpc3BsYXllZCBpbiB0aGUgZWNobyBhcmVhLgoK KGZuIExJQlJBUlkgJm9wdGlvbmFsIE5PU1VGRklYIFBBVEggSU5URVJBQ1RJVkUtQ0FMTCkfCihk ZWZhbGlhcyAnbG9jYXRlLWxpYnJhcnkgI1sxMDI1ICJcMzAyBANcMjA2BwAIXDMwMwYGP1wyMDUQ AFwzMDQgCVwiIwFcMjAzKQBcMjExXDIwMyMAXDMwNVwzMDZcMzA3AyFcIlwyMTBcMjA3XDMwNVwz MTAGBlwiXDIxMFwyMDciIFtsb2FkLXBhdGggbG9hZC1maWxlLXJlcC1zdWZmaXhlcyBsb2NhdGUt ZmlsZSBhcHBlbmQgZ2V0LWxvYWQtc3VmZml4ZXMgbWVzc2FnZSAiTGlicmFyeSBpcyBmaWxlICVz IiBhYmJyZXZpYXRlLWZpbGUtbmFtZSAiTm8gbGlicmFyeSAlcyBpbiBzZWFyY2ggcGF0aCJdIDEw ICgjJCAuIDkzMjgyKSAoYnl0ZS1jb2RlICJcMzAwIFwzMDFcMjExXDMwMkZcMjA3IiBbcmVhZC1s aWJyYXJ5LW5hbWUgbmlsIHRdIDQpXSkjQDEwNzEgU3RhcnQgYSBwcm9ncmFtIGluIGEgc3VicHJv Y2Vzcy4gIFJldHVybiB0aGUgcHJvY2VzcyBvYmplY3QgZm9yIGl0LgpOQU1FIGlzIG5hbWUgZm9y IHByb2Nlc3MuICBJdCBpcyBtb2RpZmllZCBpZiBuZWNlc3NhcnkgdG8gbWFrZSBpdCB1bmlxdWUu CkJVRkZFUiBpcyB0aGUgYnVmZmVyIChvciBidWZmZXIgbmFtZSkgdG8gYXNzb2NpYXRlIHdpdGgg dGhlIHByb2Nlc3MuCgpQcm9jZXNzIG91dHB1dCAoYm90aCBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0 YW5kYXJkIGVycm9yIHN0cmVhbXMpCmdvZXMgYXQgZW5kIG9mIEJVRkZFUiwgdW5sZXNzIHlvdSBz cGVjaWZ5IGEgZmlsdGVyIGZ1bmN0aW9uIHRvCmhhbmRsZSB0aGUgb3V0cHV0LiAgQlVGRkVSIG1h eSBhbHNvIGJlIG5pbCwgbWVhbmluZyB0aGF0IHRoaXMKcHJvY2VzcyBpcyBub3QgYXNzb2NpYXRl ZCB3aXRoIGFueSBidWZmZXIuCgpQUk9HUkFNIGlzIHRoZSBwcm9ncmFtIGZpbGUgbmFtZS4gIEl0 IGlzIHNlYXJjaGVkIGZvciBpbiBgZXhlYy1wYXRoJwood2hpY2ggc2VlKS4gIElmIG5pbCwganVz dCBhc3NvY2lhdGUgYSBwdHkgd2l0aCB0aGUgYnVmZmVyLiAgUmVtYWluaW5nCmFyZ3VtZW50cyBQ Uk9HUkFNLUFSR1MgYXJlIHN0cmluZ3MgdG8gZ2l2ZSBwcm9ncmFtIGFzIGFyZ3VtZW50cy4KCklm IHlvdSB3YW50IHRvIHNlcGFyYXRlIHN0YW5kYXJkIG91dHB1dCBmcm9tIHN0YW5kYXJkIGVycm9y LCB1c2UKYG1ha2UtcHJvY2Vzcycgb3IgaW52b2tlIHRoZSBjb21tYW5kIHRocm91Z2ggYSBzaGVs bCBhbmQgcmVkaXJlY3QKb25lIG9mIHRoZW0gdXNpbmcgdGhlIHNoZWxsIHN5bnRheC4KClRoZSBw cm9jZXNzIHJ1bnMgaW4gYGRlZmF1bHQtZGlyZWN0b3J5JyBpZiB0aGF0IGlzIGxvY2FsIChhcwpk ZXRlcm1pbmVkIGJ5IGB1bmhhbmRsZWQtZmlsZS1uYW1lLWRpcmVjdG9yeScpLCBvciAifiIKb3Ro ZXJ3aXNlLiAgSWYgeW91IHdhbnQgdG8gcnVuIGEgcHJvY2VzcyBpbiBhIHJlbW90ZSBkaXJlY3Rv cnkKdXNlIGBzdGFydC1maWxlLXByb2Nlc3MnLgoKKGZuIE5BTUUgQlVGRkVSIFBST0dSQU0gJnJl c3QgUFJPR1JBTS1BUkdTKR8KKGRlZmFsaWFzICdzdGFydC1wcm9jZXNzICNbODk5ICJcMzAwXDMw MSFcMjA0XG4AXDMwMlwzMDMhXDIxMFwzMDRcMzAxXDMwNVwzMDYGB1wzMDcGCEYFXDIwNR8AXDMx MAYGBgZCRFwiXCJcMjA3IiBbZmJvdW5kcCBtYWtlLXByb2Nlc3MgZXJyb3IgIkVtYWNzIHdhcyBj b21waWxlZCB3aXRob3V0IHN1YnByb2Nlc3Mgc3VwcG9ydCIgYXBwbHkgYXBwZW5kIDpuYW1lIDpi dWZmZXIgOmNvbW1hbmRdIDExICgjJCAuIDk0NDc5KV0pI0AzNjkgRXhlY3V0ZSBQUk9HUkFNIHdp dGggQVJHUywgcmV0dXJuaW5nIGl0cyBvdXRwdXQgYXMgYSBsaXN0IG9mIGxpbmVzLgpJZiBTVEFU VVMtSEFORExFUiBpcyBub24tbmlsLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gd2l0aCBvbmUKYXJn dW1lbnQsIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGV4aXQgc3RhdHVzIG9mIHRoZQpw cm9ncmFtIGJlZm9yZSB0aGUgb3V0cHV0IGlzIGNvbGxlY3RlZC4gIElmIFNUQVRVUy1IQU5ETEVS IGlzCm5pbCwgYW4gZXJyb3IgaXMgc2lnbmFsZWQgaWYgdGhlIHByb2dyYW0gcmV0dXJucyB3aXRo IGEgbm9uLXplcm8KZXhpdCBzdGF0dXMuCgooZm4gUFJPR1JBTSBTVEFUVVMtSEFORExFUiAmcmVz dCBBUkdTKR8KKGRlZmFsaWFzICdwcm9jZXNzLWxpbmVzLWhhbmRsaW5nLXN0YXR1cyAjWzY0MiAi XDMwMFwzMDFcMzAyXCJyXDIxMXFcMjEwXDMwM1wzMDQCXCJcMjE2XDMwNVwzMDYFXDMwN3BcMzA3 BgcmBgNcMjAzXCIAAwEhXDIxMFwyMDIvAFwyMTFcMzEwPVwyMDQvAFwzMTFcMzEyBgYDI1wyMTBl YlwyMTBcMzA3bVwyMDRHAFwzMTNcMzE0IFwzMTUgXCIBQlwyNjIBXDMxNnlcMjEwXDIwMjMAXDIx MVwyMzcqXDIwNyIgW2dlbmVyYXRlLW5ldy1idWZmZXIgIiAqdGVtcCoiIHQgbWFrZS1jbG9zdXJl ICNbMCAiXDMwMVwzMDAhXDIwNQkAXDMwMlwzMDAhXDIwNyIgW1YwIGJ1ZmZlci1uYW1lIGtpbGwt YnVmZmVyXSAyXSBhcHBseSBjYWxsLXByb2Nlc3MgbmlsIDAgZXJyb3IgIiVzIGV4aXRlZCB3aXRo IHN0YXR1cyAlcyIgYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGxpbmUtYmVnaW5uaW5n LXBvc2l0aW9uIGxpbmUtZW5kLXBvc2l0aW9uIDFdIDExICgjJCAuIDk1Nzk5KV0pI0AyMDIgRXhl Y3V0ZSBQUk9HUkFNIHdpdGggQVJHUywgcmV0dXJuaW5nIGl0cyBvdXRwdXQgYXMgYSBsaXN0IG9m IGxpbmVzLgpTaWduYWwgYW4gZXJyb3IgaWYgdGhlIHByb2dyYW0gcmV0dXJucyB3aXRoIGEgbm9u LXplcm8gZXhpdCBzdGF0dXMuCkFsc28gc2VlIGBwcm9jZXNzLWxpbmVzLWlnbm9yZS1zdGF0dXMn LgoKKGZuIFBST0dSQU0gJnJlc3QgQVJHUykfCihkZWZhbGlhcyAncHJvY2Vzcy1saW5lcyAjWzM4 NSAiXDMwMFwzMDEDXDMwMgQkXDIwNyIgW2FwcGx5IHByb2Nlc3MtbGluZXMtaGFuZGxpbmctc3Rh dHVzIG5pbF0gNyAoIyQgLiA5NjY2OSldKSNAMTYzIEV4ZWN1dGUgUFJPR1JBTSB3aXRoIEFSR1Ms IHJldHVybmluZyBpdHMgb3V0cHV0IGFzIGEgbGlzdCBvZiBsaW5lcy4KVGhlIGV4aXQgc3RhdHVz IG9mIHRoZSBwcm9ncmFtIGlzIGlnbm9yZWQuCkFsc28gc2VlIGBwcm9jZXNzLWxpbmVzJy4KCihm biBQUk9HUkFNICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ3Byb2Nlc3MtbGluZXMtaWdub3JlLXN0 YXR1cyAjWzM4NSAiXDMwMFwzMDEDXDMwMgQkXDIwNyIgW2FwcGx5IHByb2Nlc3MtbGluZXMtaGFu ZGxpbmctc3RhdHVzIGlnbm9yZV0gNyAoIyQgLiA5Njk4OCldKSNAMTg3IFJldHVybiBub24tbmls IGlmIFBST0NFU1MgaXMgYWxpdmUuCkEgcHJvY2VzcyBpcyBjb25zaWRlcmVkIGFsaXZlIGlmIGl0 cyBzdGF0dXMgaXMgYHJ1bicsIGBvcGVuJywKYGxpc3RlbicsIGBjb25uZWN0JyBvciBgc3RvcCcu ICBWYWx1ZSBpcyBuaWwgaWYgUFJPQ0VTUyBpcyBub3QgYQpwcm9jZXNzLgoKKGZuIFBST0NFU1Mp HwooZGVmYWxpYXMgJ3Byb2Nlc3MtbGl2ZS1wICNbMjU3ICJcMzAwASFcMjA1CwBcMzAxASFcMzAy PlwyMDciIFtwcm9jZXNzcCBwcm9jZXNzLXN0YXR1cyAocnVuIG9wZW4gbGlzdGVuIGNvbm5lY3Qg c3RvcCldIDMgKCMkIC4gOTcyODUpXSkjQDU3IEFzayBiZWZvcmUga2lsbGluZyBhIGJ1ZmZlciB0 aGF0IGhhcyBhIHJ1bm5pbmcgcHJvY2Vzcy4fCihkZWZhbGlhcyAncHJvY2Vzcy1raWxsLWJ1ZmZl ci1xdWVyeS1mdW5jdGlvbiAjWzAgIlwzMDBwIVwyMTE/XDIwNiAAXDMwMQEhXDMwMj4/XDIwNiAA XDMwMwEhP1wyMDYgAFwzMDRcMzA1XDMwNlwzMDdwIVwiIVwyMDciIFtnZXQtYnVmZmVyLXByb2Nl c3MgcHJvY2Vzcy1zdGF0dXMgKHJ1biBzdG9wIG9wZW4gbGlzdGVuKSBwcm9jZXNzLXF1ZXJ5LW9u LWV4aXQtZmxhZyB5ZXMtb3Itbm8tcCBmb3JtYXQgIkJ1ZmZlciAlUyBoYXMgYSBydW5uaW5nIHBy b2Nlc3M7IGtpbGwgaXQ/ICIgYnVmZmVyLW5hbWVdIDYgKCMkIC4gOTc2MTIpXSkKKGFkZC1ob29r ICdraWxsLWJ1ZmZlci1xdWVyeS1mdW5jdGlvbnMgJ3Byb2Nlc3Mta2lsbC1idWZmZXItcXVlcnkt ZnVuY3Rpb24pI0AxNDcgUmV0dXJuIHRoZSB2YWx1ZSBvZiBQUk9DRVNTJyBQUk9QTkFNRSBwcm9w ZXJ0eS4KVGhpcyBpcyB0aGUgbGFzdCB2YWx1ZSBzdG9yZWQgd2l0aCBgKHByb2Nlc3MtcHV0IFBS T0NFU1MgUFJPUE5BTUUgVkFMVUUpJy4KCihmbiBQUk9DRVNTIFBST1BOQU1FKR8KKGRlZmFsaWFz ICdwcm9jZXNzLWdldCAjWzUxNCAiXDMwMFwzMDEDIQJcIlwyMDciIFtwbGlzdC1nZXQgcHJvY2Vz cy1wbGlzdF0gNSAoIyQgLiA5ODA1NSldKSNAMTMzIENoYW5nZSBQUk9DRVNTJyBQUk9QTkFNRSBw cm9wZXJ0eSB0byBWQUxVRS4KSXQgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGAocHJvY2Vzcy1nZXQg UFJPQ0VTUyBQUk9QTkFNRSknLgoKKGZuIFBST0NFU1MgUFJPUE5BTUUgVkFMVUUpHwooZGVmYWxp YXMgJ3Byb2Nlc3MtcHV0ICNbNzcxICJcMzAwA1wzMDFcMzAyBgYhBQUjXCJcMjA3IiBbc2V0LXBy b2Nlc3MtcGxpc3QgcGxpc3QtcHV0IHByb2Nlc3MtcGxpc3RdIDkgKCMkIC4gOTgyOTkpXSkjQDY4 IFJldHVybiBhbiBlc3RpbWF0ZSBvZiBFbWFjcyB2aXJ0dWFsIG1lbW9yeSB1c2FnZSwgZGl2aWRl ZCBieSAxMDI0Lh8KKGRlZmFsaWFzICdtZW1vcnktbGltaXQgI1swICIIGVwzMDJcMzAzXDMwNCAh XDIzNkFcMjA2DQBcMzA1KVwyMDciIFt0ZW1wb3JhcnktZmlsZS1kaXJlY3RvcnkgZGVmYXVsdC1k aXJlY3RvcnkgdnNpemUgcHJvY2Vzcy1hdHRyaWJ1dGVzIGVtYWNzLXBpZCAwXSAzICgjJCAuIDk4 NTU0KV0pI0AzMiBVc2VkIGludGVybmFsbHkgYnkgYHJlYWQta2V5Jy4fCihkZWZjb25zdCByZWFk LWtleS1lbXB0eS1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkgKCMkIC4gOTg3OTIpKSNAMzIgVXNl ZCBpbnRlcm5hbGx5IGJ5IGByZWFkLWtleScuHwooZGVmY29uc3QgcmVhZC1rZXktZnVsbC1tYXAg KGJ5dGUtY29kZSAiXDMwMCBcMzAxAVwzMDJcMzAzI1wyMTBcMzAxAVwzMDRcMzA1I1wyMTBcMjA3 IiBbbWFrZS1zcGFyc2Uta2V5bWFwIGRlZmluZS1rZXkgW3RdIGlnbm9yZSBbMjddIG5pbF0gNSkg KCMkIC4gOTg4OTIpKQooZGVmdmFyIHJlYWQta2V5LWRlbGF5IDAuMDEpI0A4NzkgUmVhZCBhIGtl eSBmcm9tIHRoZSBrZXlib2FyZC4KQ29udHJhcnkgdG8gYHJlYWQtZXZlbnQnIHRoaXMgd2lsbCBu b3QgcmV0dXJuIGEgcmF3IGV2ZW50IGJ1dCBpbnN0ZWFkIHdpbGwKb2JleSB0aGUgaW5wdXQgZGVj b2RpbmcgYW5kIHRyYW5zbGF0aW9ucyB1c3VhbGx5IGRvbmUgYnkgYHJlYWQta2V5LXNlcXVlbmNl Jy4KU28gZXNjYXBlIHNlcXVlbmNlcyBhbmQga2V5Ym9hcmQgZW5jb2RpbmcgYXJlIHRha2VuIGlu dG8gYWNjb3VudC4KV2hlbiB0aGVyZSdzIGFuIGFtYmlndWl0eSBiZWNhdXNlIHRoZSBrZXkgbG9v a3MgbGlrZSB0aGUgcHJlZml4IG9mCnNvbWUgc29ydCBvZiBlc2NhcGUgc2VxdWVuY2UsIHRoZSBh bWJpZ3VpdHkgaXMgcmVzb2x2ZWQgdmlhIGByZWFkLWtleS1kZWxheScuCgpJZiB0aGUgb3B0aW9u YWwgYXJndW1lbnQgUFJPTVBUIGlzIG5vbi1uaWwsIGRpc3BsYXkgdGhhdCBhcyBhCnByb21wdC4K CklmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBESVNBQkxFLUZBTExCQUNLUyBpcyBub24tbmlsLCBh bGwKdW5ib3VuZCBmYWxsYmFja3MgdXN1YWxseSBkb25lIGJ5IGByZWFkLWtleS1zZXF1ZW5jZScg YXJlCmRpc2FibGVkIHN1Y2ggYXMgZGlzY2FyZGluZyBtb3VzZSBkb3duIGV2ZW50cy4gIFRoaXMg aXMgZ2VuZXJhbGx5CndoYXQgeW91IHdhbnQgYXMgYHJlYWQta2V5JyB0ZW1wb3JhcmlseSByZW1v dmVzIGFsbCBiaW5kaW5ncwp3aGlsZSBjYWxsaW5nIGByZWFkLWtleS1zZXF1ZW5jZScuICBJZiBu aWwgb3IgdW5zcGVjaWZpZWQsIHRoZQpvbmx5IHVuYm91bmQgZmFsbGJhY2sgZGlzYWJsZWQgaXMg ZG93bmNhc2luZyBvZiB0aGUgbGFzdCBldmVudC4KCihmbiAmb3B0aW9uYWwgUFJPTVBUIERJU0FC TEUtRkFMTEJBQ0tTKR8KKGRlZmFsaWFzICdyZWFkLWtleSAjWzUxMiAiXDMwNgFcMjAzCQAIXDIw MlxuAAlcMzA3XDMxMCBcMzExXG5cMzEyXDMxMyMCGwMcBB1cMzE0XDMxNQIEI1wyMTZcMzE2XDMx NyBcMzIwAVwzMjFcMzIyDh5cMzIzXCIjXDIxMFwzMjABXDMyNFwzMjUOHlwyMzZBXDIwNjsAXDMy Mg4eXDMyNlwiI1wyMTBcMzIwAVwzMjdcMzMwDh5cMjM2QVwyMDZNAFwzMjIOHlwzMzFcIiNcMjEw XDIxMVwyNjIBIVwyMTBcMzMyMl8AXDMzMwYHXDMwNlwzMTIjMFwyMTFcMzA3SAFHXDMzNFZcMjAz dwBcMjExXDMzNT5cMjAzdwABXDMzNEhcMjY2XDIwMlwyMDJ6AFwyMTFcMjY2XDIwMixcMjA3IiBb cmVhZC1rZXktZnVsbC1tYXAgcmVhZC1rZXktZW1wdHktbWFwIHJlYWQta2V5LWRlbGF5IGVjaG8t a2V5c3Ryb2tlcyBvdmVycmlkaW5nLWxvY2FsLW1hcCBvdmVycmlkaW5nLXRlcm1pbmFsLWxvY2Fs LW1hcCBuaWwgMCBjdXJyZW50LWdsb2JhbC1tYXAgcnVuLXdpdGgtaWRsZS10aW1lciB0ICNbMCAi XDMwMCBcMjExR1wzMDFVP1wyMDUOAFwzMDJcMzAzAlwiXDIwNyIgW3RoaXMtY29tbWFuZC1rZXlz LXZlY3RvciAwIHRocm93IHJlYWQta2V5XSA0XSBtYWtlLWNsb3N1cmUgI1swICJcMzAyXDMwMCFc MjEwXDMwM1wzMDQhXDIxMFwzMDVcMzAxIVwyMDciIFtWMCBWMSBjYW5jZWwtdGltZXIgbWVzc2Fn ZSBuaWwgdXNlLWdsb2JhbC1tYXBdIDJdIHVzZS1nbG9iYWwtbWFwIG1ha2Utc3BhcnNlLWtleW1h cCBkZWZpbmUta2V5IFttZW51LWJhcl0gbG9va3VwLWtleSBbbWVudS1iYXJdIFt0YWItYmFyXSB0 YWItYmFyIFt0YWItYmFyXSBbdG9vbC1iYXJdIHRvb2wtYmFyIFt0b29sLWJhcl0gcmVhZC1rZXkg cmVhZC1rZXktc2VxdWVuY2UtdmVjdG9yIDEgKG1vZGUtbGluZSBoZWFkZXItbGluZSBsZWZ0LWZy aW5nZSByaWdodC1mcmluZ2UpIGdsb2JhbC1tYXBdIDE1ICgjJCAuIDk5MTE0KV0pI0AxNjkgUmVh ZCBhbiBldmVudCB0aGF0IG1pZ2h0IGJlIGEgbW91c2UgZXZlbnQuCgpUaGlzIGZ1bmN0aW9uIGV4 aXN0cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjb2RlIHBhY2thZ2VkCndpdGggRW1h Y3MuICBEbyBub3QgY2FsbCBpdCBkaXJlY3RseSBpbiB5b3VyIG93biBwYWNrYWdlcy4fCihkZWZh bGlhcyAncmVhZC0tcG90ZW50aWFsLW1vdXNlLWV2ZW50ICNbMCAiCFwyMDMJAFwzMDFcMzAyXDMw M1wiXDIwN1wzMDQgXDIwNyIgW3h0ZXJtLW1vdXNlLW1vZGUgcmVhZC1rZXkgbmlsIHQgcmVhZC1l dmVudF0gMyAoIyQgLiAxMDA5NDQpXSkjQDM4IEtleW1hcCB1c2VkIHdoaWxlIHJlYWRpbmcgcGFz c3dvcmRzLh8KKGRlZnZhciByZWFkLXBhc3N3ZC1tYXAgKGJ5dGUtY29kZSAiXDMwMSBcMzAyAQhc IlwyMTBcMzAzAVwzMDRcMzA1I1wyMTBcMjA3IiBbbWluaWJ1ZmZlci1sb2NhbC1tYXAgbWFrZS1z cGFyc2Uta2V5bWFwIHNldC1rZXltYXAtcGFyZW50IGRlZmluZS1rZXkgIhUiIGRlbGV0ZS1taW5p YnVmZmVyLWNvbnRlbnRzXSA1KSAoIyQgLiAxMDEyNjApKQooZGVmYWxpYXMgJ3JlYWQtcGFzc3dv cmQtLWhpZGUtcGFzc3dvcmQgI1swICJcMzAxIFwzMDIgAVpUXDMwM1wyMTECV1wyMDUnAFwzMDQB BFxcAlQFXFxcMzA1XDMwNghcMjA2HQBcMzA3ISRcMjEwXDIxMVRcMjYyAVwyMDIIAFwyMDciIFty ZWFkLWhpZGUtY2hhciBtaW5pYnVmZmVyLXByb21wdC1lbmQgYnVmZmVyLXNpemUgMCBwdXQtdGV4 dC1wcm9wZXJ0eSBkaXNwbGF5IHN0cmluZyA0Ml0gOV0pI0A0NjggUmVhZCBhIHBhc3N3b3JkLCBw cm9tcHRpbmcgd2l0aCBQUk9NUFQsIGFuZCByZXR1cm4gaXQuCklmIG9wdGlvbmFsIENPTkZJUk0g aXMgbm9uLW5pbCwgcmVhZCB0aGUgcGFzc3dvcmQgdHdpY2UgdG8gbWFrZSBzdXJlLgpPcHRpb25h bCBERUZBVUxUIGlzIGEgZGVmYXVsdCBwYXNzd29yZCB0byB1c2UgaW5zdGVhZCBvZiBlbXB0eSBp bnB1dC4KClRoaXMgZnVuY3Rpb24gZWNob2VzIGAqJyBmb3IgZWFjaCBjaGFyYWN0ZXIgdGhhdCB0 aGUgdXNlciB0eXBlcy4KWW91IGNvdWxkIGxldC1iaW5kIGByZWFkLWhpZGUtY2hhcicgdG8gYW5v dGhlciBoaWRpbmcgY2hhcmFjdGVyLCB0aG91Z2guCgpPbmNlIHRoZSBjYWxsZXIgdXNlcyB0aGUg cGFzc3dvcmQsIGl0IGNhbiBlcmFzZSB0aGUgcGFzc3dvcmQKYnkgZG9pbmcgKGNsZWFyLXN0cmlu ZyBTVFJJTkcpLgoKKGZuIFBST01QVCAmb3B0aW9uYWwgQ09ORklSTSBERUZBVUxUKR8KKGRlZmFs aWFzICdyZWFkLXBhc3N3ZCAjWzc2OSAiAVwyMDNQAFwzMDJcMjExXDIwNE8AXDMwMwRcMzAyBCNc MzAzXDMwNFwzMDIFIwEBXDIzMlwyMDMvAFwzMDUBIVwyMDMpAAEBPVwyMDQpAFwzMDYBIVwyMTAB XDI2NlwyMDNcMjAyBQBcMzA1AiFcMjAzOQBcMzA2AiFcMjEwXDMwNQEhXDIwM0MAXDMwNgEhXDIx MFwzMDdcMzEwIVwyMTBcMzExXDMxMiFcMjY2A1wyMDIFAFwyMDdcMzAyQ1wzMTNcMzE0AlwiXDMx NVwzMTYhXDIxMVwzMTNcMzE3AwUjTVwyMTBcMzEzXDMyMAJcIlwyMTZcMzIxXDMyMgJcIlwyMTBc MzEzXDMyMwRcIlwyMTZcMzI0CFwyMDZ2AFwzMjUYGVwzMjYGBlwzMDJcMzI0BgckLFwyMDciIFty ZWFkLWhpZGUtY2hhciBlbmFibGUtcmVjdXJzaXZlLW1pbmlidWZmZXJzIG5pbCByZWFkLXBhc3N3 ZCAiQ29uZmlybSBwYXNzd29yZDogIiBhcnJheXAgY2xlYXItc3RyaW5nIG1lc3NhZ2UgIlBhc3N3 b3JkIG5vdCByZXBlYXRlZCBhY2N1cmF0ZWx5OyBwbGVhc2Ugc3RhcnQgb3ZlciIgc2l0LWZvciAx IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDBwXDI0MFwyMTBcMzA2XDMwMSFcMjEwXDMwNxFcMzA2XDMw MiFcMjEwXDMxMBJcMzA2XDMwMyFcMjEwXDMwNxNcMzExXGYhXDIxMFwzMDZcMzA1IVwyMTBcMzA3 FVwzMDZcMzEyIVwyMTBcMzA3FlxuXDMwNlwzMTMhXDIxMFwzMTAWC1wzMTRcMzE1XDMxNlwzMDdc MzEwJFwyMDciIFtWMCBwb3N0LXNlbGYtaW5zZXJ0LWhvb2sgYnVmZmVyLXVuZG8tbGlzdCBzZWxl Y3QtYWN0aXZlLXJlZ2lvbnMgcmVhZC1wYXNzd2QtbWFwIGluaGliaXQtbW9kaWZpY2F0aW9uLWhv b2tzIG1ha2UtbG9jYWwtdmFyaWFibGUgbmlsIHQgdXNlLWxvY2FsLW1hcCBzaG93LXBhcmVuLW1v ZGUgaW5oaWJpdC0tcmVjb3JkLWNoYXIgYWRkLWhvb2sgcG9zdC1jb21tYW5kLWhvb2sgcmVhZC1w YXNzd29yZC0taGlkZS1wYXNzd29yZF0gNV0gbWFrZS1zeW1ib2wgIm1pbmlidWZmZXItc2V0dXAi ICNbMCAiXDMwMlwzMDNcMzAwXCJcMjEwXDMwMSBcMjA3IiBbVjAgVjEgcmVtb3ZlLWhvb2sgbWlu aWJ1ZmZlci1zZXR1cC1ob29rXSAzXSAjWzAgIlwzMDFcMzAyXDMwMFwiXDIwNyIgW1YwIHJlbW92 ZS1ob29rIG1pbmlidWZmZXItc2V0dXAtaG9va10gM10gYWRkLWhvb2sgbWluaWJ1ZmZlci1zZXR1 cC1ob29rICNbMCAiXDMwMVwzMDBcMjQyIVwyMDUZAHJcMzAwXDI0MnFcMjEwXDMwMlwzMDNcMzA0 XDMwNSNcMjEwXDMwNlwzMDchXDIxMFwzMTAgKVwyMDciIFtWMCBidWZmZXItbGl2ZS1wIHJlbW92 ZS1ob29rIGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMgcmVhZC1wYXNzd29yZC0taGlkZS1wYXNzd29y ZCBsb2NhbCBraWxsLWxvY2FsLXZhcmlhYmxlIHBvc3Qtc2VsZi1pbnNlcnQtaG9vayBlcmFzZS1i dWZmZXJdIDRdIHQgNDIgcmVhZC1zdHJpbmddIDExICgjJCAuIDEwMTcyNyldKSNANTMgVGhlIGRl ZmF1bHQgaGlzdG9yeSBmb3IgdGhlIGByZWFkLW51bWJlcicgZnVuY3Rpb24uHwooZGVmdmFyIHJl YWQtbnVtYmVyLWhpc3RvcnkgbmlsICgjJCAuIDEwMzYyMCkpI0AzODEgUmVhZCBhIG51bWVyaWMg dmFsdWUgaW4gdGhlIG1pbmlidWZmZXIsIHByb21wdGluZyB3aXRoIFBST01QVC4KREVGQVVMVCBz cGVjaWZpZXMgYSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgdXNlciBqdXN0IHR5cGVz IFJFVC4KVGhlIHZhbHVlIG9mIERFRkFVTFQgaXMgaW5zZXJ0ZWQgaW50byBQUk9NUFQuCkhJU1Qg c3BlY2lmaWVzIGEgaGlzdG9yeSBsaXN0IHZhcmlhYmxlLiAgU2VlIGByZWFkLWZyb20tbWluaWJ1 ZmZlcicKZm9yIGRldGFpbHMgb2YgdGhlIEhJU1QgYXJndW1lbnQuCgpUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgYnkgdGhlIGBpbnRlcmFjdGl2ZScgY29kZSBsZXR0ZXIgIm4iLgoKKGZuIFBST01QVCAm b3B0aW9uYWwgREVGQVVMVCBISVNUKR8KKGRlZmFsaWFzICdyZWFkLW51bWJlciAjWzc2OSAiXDMw MQI6XDIwMwsAAkBcMjAyXGYAAlwyMTFcMjAzMwBcMzAyXDMwMwYGXCJcMjAzJgBcMzA0XDMwNQgD XCJcMzA2XDIxMQYIXDMwNyVcMjAyMQBcMzEwXDMxMVwzMDUIBFwiBgdcMzA2XDIxMSVcMjYyBVwz MTIFXDMwMVwyMTFcMjExBgdcMjA2PgBcMzEzBglcMjA1WAAGCTpcMjAzVABcMzE0XDMxNVwzMTZc MzAxBg1cIlwiXDIwMlgAXDMxNQZcbiEmBlwzMTcxegBcMjExR1wzMjBVXDIwM2kAAVwyMDJxAFwy MTE7XDIwNXEAXDMyMQEhXDIxMVwyNjIEMFwyNjYCXDIwMnwAXDI2NgIBXDI0N1wyMDRcMjE0AFwz MjJcMzIzIVwyMTBcMzI0XDMwNyFcMjEwXDIwMjMAAVwyMDciIFttaW5pYnVmZmVyLWRlZmF1bHQt cHJvbXB0LWZvcm1hdCBuaWwgc3RyaW5nLW1hdGNoICJcXChcXCk6WyAJXSpcXCciIHJlcGxhY2Ut bWF0Y2ggZm9ybWF0IHQgMSByZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIlsgCV0qXFwnIiByZWFk LWZyb20tbWluaWJ1ZmZlciByZWFkLW51bWJlci1oaXN0b3J5IG1hcGNhciBudW1iZXItdG8tc3Ry aW5nIGRlbHEgKGVycm9yKSAwIHJlYWQgbWVzc2FnZSAiUGxlYXNlIGVudGVyIGEgbnVtYmVyLiIg c2l0LWZvcl0gMTYgKCMkIC4gMTAzNzI1KV0pI0A0NjIgUHJlZmVyIGByZWFkLWtleScgd2hlbiBy ZWFkaW5nIGEgY2hhcmFjdGVyIGJ5IGByZWFkLWNoYXItY2hvaWNlJy4KT3RoZXJ3aXNlLCB1c2Ug dGhlIG1pbmlidWZmZXIuCgpXaGVuIHVzaW5nIHRoZSBtaW5pYnVmZmVyLCB0aGUgdXNlciBpcyBs ZXNzIGNvbnN0cmFpbmVkLCBhbmQgY2FuCnVzZSB0aGUgbm9ybWFsIGNvbW1hbmRzIGF2YWlsYWJs ZSBpbiB0aGUgbWluaWJ1ZmZlciwgYW5kIGNhbiwgZm9yCmluc3RhbmNlLCBzd2l0Y2ggdG8gYW5v dGhlciBidWZmZXIsIGRvIHRoaW5ncyB0aGVyZSwgYW5kIHRoZW4Kc3dpdGNoIGJhY2sgYWdhaW4g dG8gdGhlIG1pbmlidWZmZXIgYmVmb3JlIGVudGVyaW5nIHRoZQpjaGFyYWN0ZXIuICBUaGlzIGlz IG5vdCBwb3NzaWJsZSB3aGVuIHVzaW5nIGByZWFkLWtleScsIGJ1dCB1c2luZwpgcmVhZC1rZXkn IG1heSBiZSBsZXNzIGNvbmZ1c2luZyB0byBzb21lIHVzZXJzLh8KKGRlZnZhciByZWFkLWNoYXIt Y2hvaWNlLXVzZS1yZWFkLWtleSBuaWwgKCMkIC4gMTA0NzQyKSkjQDM4NCBSZWFkIGFuZCByZXR1 cm4gb25lIG9mIENIQVJTLCBwcm9tcHRpbmcgZm9yIFBST01QVC4KQW55IGlucHV0IHRoYXQgaXMg bm90IG9uZSBvZiBDSEFSUyBpcyBpZ25vcmVkLgoKQnkgZGVmYXVsdCwgdGhlIG1pbmlidWZmZXIg aXMgdXNlZCB0byByZWFkIHRoZSBrZXkKbm9uLW1vZGFsbHkgKHNlZSBgcmVhZC1jaGFyLWZyb20t bWluaWJ1ZmZlcicpLiAgSWYKYHJlYWQtY2hhci1jaG9pY2UtdXNlLXJlYWQta2V5JyBpcyBub24t bmlsLCB0aGUgbW9kYWwgYHJlYWQta2V5JwpmdW5jdGlvbiBpcyB1c2VkIGluc3RlYWQgKHNlZSBg cmVhZC1jaGFyLWNob2ljZS13aXRoLXJlYWQta2V5JykuCgooZm4gUFJPTVBUIENIQVJTICZvcHRp b25hbCBJTkhJQklULUtFWUJPQVJELVFVSVQpHwooZGVmYWxpYXMgJ3JlYWQtY2hhci1jaG9pY2Ug I1s3NzAgIghcMjA0CQBcMzAxAwNcIlwyMDdcMzAyAwMDI1wyMDciIFtyZWFkLWNoYXItY2hvaWNl LXVzZS1yZWFkLWtleSByZWFkLWNoYXItZnJvbS1taW5pYnVmZmVyIHJlYWQtY2hhci1jaG9pY2Ut d2l0aC1yZWFkLWtleV0gNyAoIyQgLiAxMDUyNjYpXSkjQDQ0MCBSZWFkIGFuZCByZXR1cm4gb25l IG9mIENIQVJTLCBwcm9tcHRpbmcgZm9yIFBST01QVC4KQW55IGlucHV0IHRoYXQgaXMgbm90IG9u ZSBvZiBDSEFSUyBpcyBpZ25vcmVkLgoKSWYgb3B0aW9uYWwgYXJndW1lbnQgSU5ISUJJVC1LRVlC T0FSRC1RVUlUIGlzIG5vbi1uaWwsIGlnbm9yZQpga2V5Ym9hcmQtcXVpdCcgZXZlbnRzIHdoaWxl IHdhaXRpbmcgZm9yIGEgdmFsaWQgaW5wdXQuCgpJZiB5b3UgYmluZCB0aGUgdmFyaWFibGUgYGhl bHAtZm9ybScgdG8gYSBub24tbmlsIHZhbHVlCndoaWxlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwg dGhlbiBwcmVzc2luZyBgaGVscC1jaGFyJwpjYXVzZXMgaXQgdG8gZXZhbHVhdGUgYGhlbHAtZm9y bScgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdC4KCihmbiBQUk9NUFQgQ0hBUlMgJm9wdGlvbmFsIElO SElCSVQtS0VZQk9BUkQtUVVJVCkfCihkZWZhbGlhcyAncmVhZC1jaGFyLWNob2ljZS13aXRoLXJl YWQta2V5ICNbNzcwICIBOlwyMDQJAFwzMDVcMzA2IVwyMTBcMzA3XDIxMVwyMTFcMzEwCFwzMDcB GAIZXDMxMSBcMzEyXDMxMwJcIlwyMTYFXDIwNFwyNDMAXDMxNFwzMTVcMzE2BlxmI1wyMDQvAFwz MTcGXG5cMzE2XDMyMCNcMjYyXG4GBxpcMzIxBlxuISlcMjYyBwRcMjAzSQBcMzIyXDMyM1wzMjQh IVwyMDNJAFwzMjVcMzI0IVwyMTAGBlwyNDdcMjAzGgALXDIwM2IABgZcZj1cMjAzYgBcMzEwXDI2 MgVcMzI2IFwyMDQaAAYGBgk+XDIwM3AAXDMxMFwyNjIGXDIwMhoACFwyMDNcMjAwAAYGXDMyN1Vc MjAzXDIwMABcMzA3EFwyMDIaAAYHXDIwNBoAAVwyMDRcMjI2AAYGXDMzMD1cMjAzXDIyNgBcMzEw XDI2MgJcMjAyGgAGBlwzMzE+XDIwMxoAXDMzMiBcMjEwXDIwMhoAK1wyNjYEXDMzM1wzMzQGB1wz MzUGBiEjXDIxMAJcMjA3IiBbZXhlY3V0aW5nLWtiZC1tYWNybyBjdXJzb3ItaW4tZWNoby1hcmVh IGluaGliaXQtcXVpdCBoZWxwLWZvcm0gaGVscC1jaGFyIGVycm9yICJDYWxsZWQgYHJlYWQtY2hh ci1jaG9pY2UnIHdpdGhvdXQgdmFsaWQgY2hhciBjaG9pY2VzIiBuaWwgdCBjdXJyZW50LXdpbmRv dy1jb25maWd1cmF0aW9uIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBzZXQt d2luZG93LWNvbmZpZ3VyYXRpb25dIDJdIGdldC10ZXh0LXByb3BlcnR5IDAgZmFjZSBwcm9wZXJ0 aXplIG1pbmlidWZmZXItcHJvbXB0IHJlYWQta2V5IGJ1ZmZlci1saXZlLXAgZ2V0LWJ1ZmZlciAi ICpDaGFyIEhlbHAqIiBraWxsLWJ1ZmZlciBoZWxwLWZvcm0tc2hvdyAtMSAyNyAoNyAyNykga2V5 Ym9hcmQtcXVpdCBtZXNzYWdlICIlcyVzIiBjaGFyLXRvLXN0cmluZ10gMTQgKCMkIC4gMTA1ODMw KV0pI0A3NTYgUmVkaXNwbGF5LCB0aGVuIHdhaXQgZm9yIFNFQ09ORFMgc2Vjb25kcy4gIFN0b3Ag d2hlbiBpbnB1dCBpcyBhdmFpbGFibGUuClNFQ09ORFMgbWF5IGJlIGEgZmxvYXRpbmctcG9pbnQg dmFsdWUuCihPbiBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdhaXRpbmcg Zm9yIGZyYWN0aW9ucyBvZiBhCnNlY29uZCwgZmxvYXRpbmctcG9pbnQgdmFsdWVzIGFyZSByb3Vu ZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4pCgpJZiBvcHRpb25hbCBhcmcgTk9ESVNQ IGlzIHQsIGRvbid0IHJlZGlzcGxheSwganVzdCB3YWl0IGZvciBpbnB1dC4KUmVkaXNwbGF5IGRv ZXMgbm90IGhhcHBlbiBpZiBpbnB1dCBpcyBhdmFpbGFibGUgYmVmb3JlIGl0IHN0YXJ0cy4KClZh bHVlIGlzIHQgaWYgd2FpdGVkIHRoZSBmdWxsIHRpbWUgd2l0aCBubyBpbnB1dCBhcnJpdmluZywg YW5kIG5pbCBvdGhlcndpc2UuCgpBbiBvYnNvbGV0ZSwgYnV0IHN0aWxsIHN1cHBvcnRlZCBmb3Jt IGlzCihzaXQtZm9yIFNFQ09ORFMgJm9wdGlvbmFsIE1JTExJU0VDT05EUyBOT0RJU1ApCndoZXJl IHRoZSBvcHRpb25hbCBhcmcgTUlMTElTRUNPTkRTIHNwZWNpZmllcyBhbiBhZGRpdGlvbmFsIHdh aXQgcGVyaW9kLAppbiBtaWxsaXNlY29uZHM7IHRoaXMgd2FzIHVzZWZ1bCB3aGVuIEVtYWNzIHdh cyBidWlsdCB3aXRob3V0CmZsb2F0aW5nIHBvaW50IHN1cHBvcnQuCgooZm4gU0VDT05EUyAmb3B0 aW9uYWwgTk9ESVNQIE9CU09MRVRFKR8KKGRlZmFsaWFzICdzaXQtZm9yICNbNzY5ICIBXDI0N1wy MDMSAAJcMzA0A19cXFwyNjIDXDIxMVwyNjICXDIwMhkAXDIxMVwyMDMZAFwyMTFcMjYyAghcMjAz IwBcMzA1AyFcMjEwXDMwNlwyMDdcMzA3XDMwNiFcMjAzKwBcMzEwXDIwNwJcMzExWFwyMDQ1AAlc MjAzPAABXDIwNlkAXDMxMiBcMjA3AVwyMDRDAFwzMTIgXDIxMFwzMTAaXDMxM1wzMTBcMzA2BSMp XDIxMT9cMjA2VwBcMzA2AUILQhNcMzEwXDI2MgFcMjA3IiBbbm9uaW50ZXJhY3RpdmUgZGVmaW5p bmcta2JkLW1hY3JvIGlucHV0LW1ldGhvZC1mdW5jdGlvbiB1bnJlYWQtY29tbWFuZC1ldmVudHMg MC4wMDEgc2xlZXAtZm9yIHQgaW5wdXQtcGVuZGluZy1wIG5pbCAwIHJlZGlzcGxheSByZWFkLWV2 ZW50XSA3ICgjJCAuIDEwNzE2OSldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBc MzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbc2V0LWFkdmVydGlzZWQtY2FsbGluZy1jb252ZW50 aW9uIHNpdC1mb3IgKHNlY29uZHMgJm9wdGlvbmFsIG5vZGlzcCkgIjIyLjEiIGZ1bmN0aW9uLXB1 dCBjb21waWxlci1tYWNybyBzaXQtZm9yLS1hbm9uLWNtYWNyb10gNCkjQDQ3IAoKKGZuIEZPUk0g U0VDT05EUyAmb3B0aW9uYWwgTk9ESVNQIE9CU09MRVRFKR8KKGRlZmFsaWFzICdzaXQtZm9yLS1h bm9uLWNtYWNybyAjWzEwMjYgIgFcMjQ3XDIwNAsAXDIxMVwyMDQLAANcMjA3XDMwMFwzMDEFQFwz MDIGBlwzMDNcMzA0BghcMzA1QkJcMzA2QkJFBEVcMzA3I1wyMDciIFttYWNyb2V4cC13YXJuLWFu ZC1yZXR1cm4gIk9ic29sZXRlIGNhbGxpbmcgY29udmVudGlvbiBmb3IgJ3NpdC1mb3InIiArIC8g b3IgKDApICgxMDAwLjApIChvYnNvbGV0ZSBzaXQtZm9yKV0gMTMgKCMkIC4gMTA4NTE3KV0pI0Ax MzcgR2V0IGEgbmF0dXJhbCBudW1iZXIgYXJndW1lbnQsIG9wdGlvbmFsbHkgcHJvbXB0aW5nIHdp dGggUFJPTVBULgpJZiB0aGVyZSBpcyBhIG5hdHVyYWwgbnVtYmVyIGF0IHBvaW50LCB1c2UgaXQg YXMgZGVmYXVsdC4KCihmbiBQUk9NUFQpHwooZGVmYWxpYXMgJ2dvdG8tY2hhci0tcmVhZC1uYXRu dW0taW50ZXJhY3RpdmUgI1syNTcgIghcMjAzDgAIOlwyMDQOAFwzMDEIIUNcMjA3XDMwMiBcMzAz ASFcMjA1FwBcMjExXDMwNAMCYERcIkNcMjA3IiBbY3VycmVudC1wcmVmaXgtYXJnIHByZWZpeC1u dW1lcmljLXZhbHVlIG51bWJlci1hdC1wb2ludCBuYXRudW1wIHJlYWQtbnVtYmVyXSA3ICgjJCAu IDEwODgxNildKSNANjcgVGhlIGRlZmF1bHQgaGlzdG9yeSBmb3IgdGhlIGByZWFkLWNoYXItZnJv bS1taW5pYnVmZmVyJyBmdW5jdGlvbi4fCihkZWZ2YXIgcmVhZC1jaGFyLWhpc3RvcnkgbmlsICgj JCAuIDEwOTE3MCkpI0A1NCBLZXltYXAgZm9yIHRoZSBgcmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZl cicgZnVuY3Rpb24uHwooZGVmdmFyIHJlYWQtY2hhci1mcm9tLW1pbmlidWZmZXItbWFwIChieXRl LWNvZGUgIlwzMDEgXDMwMgEIXCJcMjEwXDMwMwFcMzA0XDMwNSNcMjEwXDMwMwFcMzA2XDMwNyNc MjEwXDMwMwFcMzEwXDMxMSNcMjEwXDMwMwFcMzEyXDMxMyNcMjEwXDMwMwFcMzE0XDMxNSNcMjEw XDMwMwFcMzE2XDMxNyNcMjEwXDMwMwFcMzIwXDMyMSNcMjEwXDIwNyIgW21pbmlidWZmZXItbG9j YWwtbWFwIG1ha2Utc3BhcnNlLWtleW1hcCBzZXQta2V5bWFwLXBhcmVudCBkZWZpbmUta2V5IFty ZW1hcCBzZWxmLWluc2VydC1jb21tYW5kXSByZWFkLWNoYXItZnJvbS1taW5pYnVmZmVyLWluc2Vy dC1jaGFyIFtyZW1hcCBleGl0LW1pbmlidWZmZXJdIHJlYWQtY2hhci1mcm9tLW1pbmlidWZmZXIt aW5zZXJ0LW90aGVyIFtyZW1hcCByZWNlbnRlci10b3AtYm90dG9tXSBtaW5pYnVmZmVyLXJlY2Vu dGVyLXRvcC1ib3R0b20gW3JlbWFwIHNjcm9sbC11cC1jb21tYW5kXSBtaW5pYnVmZmVyLXNjcm9s bC11cC1jb21tYW5kIFtyZW1hcCBzY3JvbGwtZG93bi1jb21tYW5kXSBtaW5pYnVmZmVyLXNjcm9s bC1kb3duLWNvbW1hbmQgW3JlbWFwIHNjcm9sbC1vdGhlci13aW5kb3ddIG1pbmlidWZmZXItc2Ny b2xsLW90aGVyLXdpbmRvdyBbcmVtYXAgc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duXSBtaW5pYnVm ZmVyLXNjcm9sbC1vdGhlci13aW5kb3ctZG93bl0gNSkgKCMkIC4gMTA5Mjg2KSkKKGRlZmNvbnN0 IHJlYWQtY2hhci1mcm9tLW1pbmlidWZmZXItbWFwLWhhc2ggKG1ha2UtaGFzaC10YWJsZSA6dGVz dCAnZXF1YWwpKSNAMTQ0IEluc2VydCB0aGUgY2hhcmFjdGVyIHlvdSB0eXBlIGludG8gdGhlIG1p bmlidWZmZXIgYW5kIGV4aXQgbWluaWJ1ZmZlci4KRGlzY2FyZCBhbGwgcHJldmlvdXMgaW5wdXQg YmVmb3JlIGluc2VydGluZyBhbmQgZXhpdGluZyB0aGUgbWluaWJ1ZmZlci4fCihkZWZhbGlhcyAn cmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZlci1pbnNlcnQtY2hhciAjWzAgIlwzMDEgXDIwNQ0AXDMw MiBcMjEwCGNcMjEwXDMwMyBcMjA3IiBbbGFzdC1jb21tYW5kLWV2ZW50IG1pbmlidWZmZXJwIGRl bGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRzIGV4aXQtbWluaWJ1ZmZlcl0gMSAoIyQgLiAxMTAxNDAp IG5pbF0pI0AyNjcgUmVqZWN0IGEgZGlzYWxsb3dlZCBjaGFyYWN0ZXIgdHlwZWQgaW50byB0aGUg bWluaWJ1ZmZlci4KVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIHRvIGJlIGJvdW5kIHRvIGtleXMg dGhhdCB1c2VycyBhcmUgbm90CmFsbG93ZWQgdG8gdHlwZSBpbnRvIHRoZSBtaW5pYnVmZmVyLiAg V2hlbiB0aGUgdXNlciB0eXBlcyBhbnkKc3VjaCBrZXksIHRoaXMgY29tbWFuZCBkaXNjYXJkIGFs bCBtaW5pYnVmZmVyIGlucHV0IGFuZCBkaXNwbGF5cwphbiBlcnJvciBtZXNzYWdlLh8KKGRlZmFs aWFzICdyZWFkLWNoYXItZnJvbS1taW5pYnVmZmVyLWluc2VydC1vdGhlciAjWzAgIlwzMDAgXDIw NRUAXDMwMSBcMjEwXDMwMiBcMjEwXDMwMyBcMjEwXDMwNFwzMDUhXDIxMFwzMDZcMzA3IVwyMDci IFttaW5pYnVmZmVycCBkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cyBkaW5nIGRpc2NhcmQtaW5w dXQgbWluaWJ1ZmZlci1tZXNzYWdlICJXcm9uZyBhbnN3ZXIiIHNpdC1mb3IgMl0gMiAoIyQgLiAx MTA0NzgpIG5pbF0pI0A4MDMgUmVhZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBtaW5pYnVmZmVyLCBw cm9tcHRpbmcgZm9yIGl0IHdpdGggUFJPTVBULgpMaWtlIGByZWFkLWNoYXInLCBidXQgdXNlcyB0 aGUgbWluaWJ1ZmZlciB0byByZWFkIGFuZCByZXR1cm4gYSBjaGFyYWN0ZXIuCk9wdGlvbmFsIGFy Z3VtZW50IENIQVJTLCBpZiBub24tbmlsLCBzaG91bGQgYmUgYSBsaXN0IG9mIGNoYXJhY3RlcnM7 CnRoZSBmdW5jdGlvbiB3aWxsIGlnbm9yZSBhbnkgaW5wdXQgdGhhdCBpcyBub3Qgb25lIG9mIENI QVJTLgpPcHRpb25hbCBhcmd1bWVudCBISVNUT1JZLCBpZiBub24tbmlsLCBzaG91bGQgYmUgYSBz eW1ib2wgdGhhdApzcGVjaWZpZXMgdGhlIGhpc3RvcnkgbGlzdCB2YXJpYWJsZSB0byB1c2UgZm9y IG5hdmlnYXRpbmcgaW4gaW5wdXQKaGlzdG9yeSB1c2luZyBcYE0tcCcgYW5kIFxgTS1uJywgd2l0 aCBcYFJFVCcgdG8gc2VsZWN0IGEgY2hhcmFjdGVyIGZyb20KaGlzdG9yeS4KSWYgeW91IGJpbmQg dGhlIHZhcmlhYmxlIGBoZWxwLWZvcm0nIHRvIGEgbm9uLW5pbCB2YWx1ZQp3aGlsZSBjYWxsaW5n IHRoaXMgZnVuY3Rpb24sIHRoZW4gcHJlc3NpbmcgYGhlbHAtY2hhcicKY2F1c2VzIGl0IHRvIGV2 YWx1YXRlIGBoZWxwLWZvcm0nIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQuClRoZXJlIGlzIG5vIG5l ZWQgdG8gZXhwbGljaXRseSBhZGQgYGhlbHAtY2hhcicgdG8gQ0hBUlM7CmBoZWxwLWNoYXInIGlz IGJvdW5kIGF1dG9tYXRpY2FsbHkgdG8gYGhlbHAtZm9ybS1zaG93Jy4KCihmbiBQUk9NUFQgJm9w dGlvbmFsIENIQVJTIEhJU1RPUlkpHwooZGVmYWxpYXMgJ3JlYWQtY2hhci1mcm9tLW1pbmlidWZm ZXIgI1s3NjkgIgE6XDIwM1UAXDMwNQgJBEJEXG5cIlwyMDZWAFwzMDYgCFwzMDcCC1wiXDIxMAhc MjAzJwBcMzEwAlwzMTEJIVwzMTJcMzEzBVwiI1wyMTADXDIxMVwyMDM9AFwyMTFAXDMxMARcMzEx AyFcMzE0I1wyMTABQVwyNjZcMjAyXDIwMigAXDIxMFwzMTACXDMxNVwzMTYjXDIxMFwzMTcICQYG QkQDXG4jXDIxMAFcMjY2XDIwMlwyMDJWAAtcZhxcMzIwBFwzMjEDXDMyMQYGXDIwNmMAXDMyMiVc MjExR1wzMjNWXDIwM3EAXDIxMVwzMjNcMjM0XDIwMn0AAlwyMDN8AAJcMzI0BEpCTFwyMTBcMzI1 XDMyNlwzMjcGB1wzMzAEISMpXDIxMFwyMDciIFtoZWxwLWZvcm0gaGVscC1jaGFyIHJlYWQtY2hh ci1mcm9tLW1pbmlidWZmZXItbWFwLWhhc2ggcmVhZC1jaGFyLWZyb20tbWluaWJ1ZmZlci1tYXAg dGhpcy1jb21tYW5kIGdldGhhc2ggbWFrZS1zcGFyc2Uta2V5bWFwIHNldC1rZXltYXAtcGFyZW50 IGRlZmluZS1rZXkgdmVjdG9yIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDAZXDMwMiApXDIwNyIgW1Yw IGhlbHAtZm9ybSBoZWxwLWZvcm0tc2hvd10gMSBuaWwgbmlsXSByZWFkLWNoYXItZnJvbS1taW5p YnVmZmVyLWluc2VydC1jaGFyIFtyZW1hcCBzZWxmLWluc2VydC1jb21tYW5kXSByZWFkLWNoYXIt ZnJvbS1taW5pYnVmZmVyLWluc2VydC1vdGhlciBwdXRoYXNoIHJlYWQtZnJvbS1taW5pYnVmZmVy IG5pbCB0IDAgIg0iIDEzIG1lc3NhZ2UgIiVzJXMiIGNoYXItdG8tc3RyaW5nXSAxMSAoIyQgLiAx MTA5OTcpXSkjQDUxIEhpc3RvcnkgbGlzdCBzeW1ib2wgdG8gYWRkIGB5LW9yLW4tcCcgYW5zd2Vy cyB0by4fCihkZWZ2YXIgeS1vci1uLXAtaGlzdG9yeS12YXJpYWJsZSBuaWwgKCMkIC4gMTEyNTg4 KSkjQDY1IEtleW1hcCB0aGF0IGRlZmluZXMgYWRkaXRpb25hbCBiaW5kaW5ncyBmb3IgYHktb3It bi1wJyBhbnN3ZXJzLh8KKGRlZnZhciB5LW9yLW4tcC1tYXAgKGJ5dGUtY29kZSAiXDMwMSBcMzAy AQhcIlwyMTBcMzAzXDIxMVwyMDMeAFwyMTFAXDMwNANcMzA1XDMwNgRcIlwzMDcjXDIxMAFBXDI2 NlwyMDJcMjAyCABcMjEwXDMwNAFcMzEwXDMxMSNcMjEwXDMxMlwyMTFcMjAzPABcMjExQFwzMDQD XDMwNVwzMDYEXCJcMzEzI1wyMTABQVwyNjZcMjAyXDIwMiYAXDIxMFwzMDQBXDMxNFwzMTUjXDIx MFwzMDQBXDMxNlwzMTcjXDIxMFwzMDQBXDMyMFwzMjEjXDIxMFwzMDQBXDMyMlwzMjMjXDIxMFwz MDQBXDMyNFwzMjUjXDIxMFwzMDQBXDMyNlwzMTMjXDIxMFwzMjdcMjExXDIwM3gAXDIxMUBcMzA0 A1wzMDVcMzA2BFwiXDMzMCNcMjEwAUFcMjY2XDIwMlwyMDJiAFwyMTBcMzA0AVwzMzFcMzMwI1wy MTBcMjA3IiBbbWluaWJ1ZmZlci1sb2NhbC1tYXAgbWFrZS1zcGFyc2Uta2V5bWFwIHNldC1rZXlt YXAtcGFyZW50IChhY3QgYWN0LWFuZC1zaG93IGFjdC1hbmQtZXhpdCBhdXRvbWF0aWMpIGRlZmlu ZS1rZXkgdmVjdG9yIHJlbWFwIHktb3Itbi1wLWluc2VydC15IFtyZW1hcCBza2lwXSB5LW9yLW4t cC1pbnNlcnQtbiAoYmFja3VwIHVuZG8gdW5kby1hbGwgZWRpdCBlZGl0LXJlcGxhY2VtZW50IGRl bGV0ZS1hbmQtZWRpdCBpZ25vcmUgc2VsZi1pbnNlcnQtY29tbWFuZCkgeS1vci1uLXAtaW5zZXJ0 LW90aGVyIFtyZW1hcCByZWNlbnRlcl0gbWluaWJ1ZmZlci1yZWNlbnRlci10b3AtYm90dG9tIFty ZW1hcCBzY3JvbGwtdXBdIG1pbmlidWZmZXItc2Nyb2xsLXVwLWNvbW1hbmQgW3JlbWFwIHNjcm9s bC1kb3duXSBtaW5pYnVmZmVyLXNjcm9sbC1kb3duLWNvbW1hbmQgW3JlbWFwIHNjcm9sbC1vdGhl ci13aW5kb3ddIG1pbmlidWZmZXItc2Nyb2xsLW90aGVyLXdpbmRvdyBbcmVtYXAgc2Nyb2xsLW90 aGVyLXdpbmRvdy1kb3duXSBtaW5pYnVmZmVyLXNjcm9sbC1vdGhlci13aW5kb3ctZG93biBbcmVt YXAgZXhpdF0gKGV4aXQtcHJlZml4IHF1aXQpIGFib3J0LXJlY3Vyc2l2ZS1lZGl0IFtlc2NhcGVd XSA4KSAoIyQgLiAxMTI2OTYpKSNAMTM0IEluc2VydCB0aGUgYW5zd2VyICJ5IiBhbmQgZXhpdCB0 aGUgbWluaWJ1ZmZlciBvZiBgeS1vci1uLXAnLgpEaXNjYXJkIGFsbCBwcmV2aW91cyBpbnB1dCBi ZWZvcmUgaW5zZXJ0aW5nIGFuZCBleGl0aW5nIHRoZSBtaW5pYnVmZmVyLh8KKGRlZmFsaWFzICd5 LW9yLW4tcC1pbnNlcnQteSAjWzAgIlwzMDAgXDIwNQ0AXDMwMSBcMjEwXDMwMmNcMjEwXDMwMyBc MjA3IiBbbWluaWJ1ZmZlcnAgZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMgInkiIGV4aXQtbWlu aWJ1ZmZlcl0gMSAoIyQgLiAxMTM3OTcpIG5pbF0pI0AxMzQgSW5zZXJ0IHRoZSBhbnN3ZXIgIm4i IGFuZCBleGl0IHRoZSBtaW5pYnVmZmVyIG9mIGB5LW9yLW4tcCcuCkRpc2NhcmQgYWxsIHByZXZp b3VzIGlucHV0IGJlZm9yZSBpbnNlcnRpbmcgYW5kIGV4aXRpbmcgdGhlIG1pbmlidWZmZXIuHwoo ZGVmYWxpYXMgJ3ktb3Itbi1wLWluc2VydC1uICNbMCAiXDMwMCBcMjA1DQBcMzAxIFwyMTBcMzAy Y1wyMTBcMzAzIFwyMDciIFttaW5pYnVmZmVycCBkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cyAi biIgZXhpdC1taW5pYnVmZmVyXSAxICgjJCAuIDExNDA5MykgbmlsXSkjQDE4MCBIYW5kbGUgaW5z ZXJ0aW5nIG9mIG90aGVyIGFuc3dlcnMgaW4gdGhlIG1pbmlidWZmZXIgb2YgYHktb3Itbi1wJy4K RGlzcGxheSBhbiBlcnJvciBvbiB0cnlpbmcgdG8gaW5zZXJ0IGEgZGlzYWxsb3dlZCBjaGFyYWN0 ZXIuCkFsc28gZGlzY2FyZCBhbGwgcHJldmlvdXMgaW5wdXQgaW4gdGhlIG1pbmlidWZmZXIuHwoo ZGVmYWxpYXMgJ3ktb3Itbi1wLWluc2VydC1vdGhlciAjWzAgIlwzMDAgXDIwNRUAXDMwMSBcMjEw XDMwMiBcMjEwXDMwMyBcMjEwXDMwNFwzMDUhXDIxMFwzMDZcMzA3IVwyMDciIFttaW5pYnVmZmVy cCBkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cyBkaW5nIGRpc2NhcmQtaW5wdXQgbWluaWJ1ZmZl ci1tZXNzYWdlICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIgc2l0LWZvciAyXSAyICgjJCAuIDExNDM4 OSkgbmlsXSkjQDQ2NCBQcmVmZXIgYHJlYWQta2V5JyB3aGVuIGFuc3dlcmluZyBhICJ5IG9yIG4i IHF1ZXN0aW9uIGJ5IGB5LW9yLW4tcCcuCk90aGVyd2lzZSwgdXNlIHRoZSBtaW5pYnVmZmVyLgoK V2hlbiB1c2luZyB0aGUgbWluaWJ1ZmZlciwgdGhlIHVzZXIgaXMgbGVzcyBjb25zdHJhaW5lZCwg YW5kIGNhbgp1c2UgdGhlIG5vcm1hbCBjb21tYW5kcyBhdmFpbGFibGUgaW4gdGhlIG1pbmlidWZm ZXIsIGFuZCBjYW4sIGZvcgppbnN0YW5jZSwgc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyLCBkbyB0 aGluZ3MgdGhlcmUsIGFuZCB0aGVuCnN3aXRjaCBiYWNrIGFnYWluIHRvIHRoZSBtaW5pYnVmZmVy IGJlZm9yZSBlbnRlcmluZyB0aGUKY2hhcmFjdGVyLiAgVGhpcyBpcyBub3QgcG9zc2libGUgd2hl biB1c2luZyBgcmVhZC1rZXknLCBidXQgdXNpbmcKYHJlYWQta2V5JyBtYXkgYmUgbGVzcyBjb25m dXNpbmcgdG8gc29tZSB1c2Vycy4fCihkZWZ2YXIgeS1vci1uLXAtdXNlLXJlYWQta2V5IG5pbCAo IyQgLiAxMTQ4MTIpKSNANjQgTm9uLW5pbCBtZWFucyB0aGUgY3VycmVudCBjb21tYW5kIHdhcyBp bnZva2VkIGZyb20gYSBUVFkgbWVudS4fCihkZWZ2YXIgZnJvbS0tdHR5LW1lbnUtcCBuaWwgKCMk IC4gMTE1MzI5KSkjQDc0IFNheSB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbW1hbmQgc2hvdWxkIHBy b21wdCB0aGUgdXNlciB2aWEgYSBkaWFsb2cgYm94Lh8KKGRlZmFsaWFzICd1c2UtZGlhbG9nLWJv eC1wICNbMCAiCFwyMDUOAAk8XDIwNA0AXG5cMjA1DgALXDIwNyIgW2xhc3QtaW5wdXQtZXZlbnQg bGFzdC1ub25tZW51LWV2ZW50IGZyb20tLXR0eS1tZW51LXAgdXNlLWRpYWxvZy1ib3hdIDEgKCMk IC4gMTE1NDQxKV0pI0AxNTYxIEFzayB1c2VyIGEgInkgb3IgbiIgcXVlc3Rpb24uClJldHVybiB0 IGlmIGFuc3dlciBpcyAieSIgYW5kIG5pbCBpZiBpdCBpcyAibiIuCgpQUk9NUFQgaXMgdGhlIHN0 cmluZyB0byBkaXNwbGF5IHRvIGFzayB0aGUgcXVlc3Rpb247IGB5LW9yLW4tcCcKYWRkcyAiICh5 IG9yIG4pICIgdG8gaXQuICBJdCBkb2VzIG5vdCBuZWVkIHRvIGVuZCBpbiBzcGFjZSwgYnV0Cmlm IGl0IGRvZXMgdXAgdG8gb25lIHNwYWNlIHdpbGwgYmUgcmVtb3ZlZC4KCklmIHlvdSBiaW5kIHRo ZSB2YXJpYWJsZSBgaGVscC1mb3JtJyB0byBhIG5vbi1uaWwgdmFsdWUKd2hpbGUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLCB0aGVuIHByZXNzaW5nIGBoZWxwLWNoYXInCmNhdXNlcyBpdCB0byBldmFs dWF0ZSBgaGVscC1mb3JtJyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0LgpQUk9NUFQgaXMgYWxzbyB1 cGRhdGVkIHRvIHNob3cgYGhlbHAtY2hhcicgbGlrZSAiKHksIG4gb3IgQy1oKSAiLAp3aGVyZSBg aGVscC1jaGFyJyBpcyBhdXRvbWF0aWNhbGx5IGJvdW5kIHRvIGBoZWxwLWZvcm0tc2hvdycuCgpO byBjb25maXJtYXRpb24gb2YgdGhlIGFuc3dlciBpcyByZXF1ZXN0ZWQ7IGEgc2luZ2xlIGNoYXJh Y3RlciBpcwplbm91Z2guICBTUEMgYWxzbyBtZWFucyB5ZXMsIGFuZCBERUwgbWVhbnMgbm8uCgpU byBiZSBwcmVjaXNlLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdXNlciBpbnB1dCBpbnRvIHJl c3BvbnNlcwpieSBjb25zdWx0aW5nIHRoZSBiaW5kaW5ncyBpbiBgcXVlcnktcmVwbGFjZS1tYXAn OyBzZWUgdGhlCmRvY3VtZW50YXRpb24gb2YgdGhhdCB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1h dGlvbi4gIEluIHRoaXMKY2FzZSwgdGhlIHVzZWZ1bCBiaW5kaW5ncyBhcmUgYGFjdCcsIGBza2lw JywgYHJlY2VudGVyJywKYHNjcm9sbC11cCcsIGBzY3JvbGwtZG93bicsIGFuZCBgcXVpdCcuCkFu IGBhY3QnIHJlc3BvbnNlIG1lYW5zIHllcywgYW5kIGEgYHNraXAnIHJlc3BvbnNlIG1lYW5zIG5v LgpBIGBxdWl0JyByZXNwb25zZSBtZWFucyB0byBpbnZva2UgYGFib3J0LXJlY3Vyc2l2ZS1lZGl0 Jy4KSWYgdGhlIHVzZXIgZW50ZXJzIGByZWNlbnRlcicsIGBzY3JvbGwtdXAnLCBvciBgc2Nyb2xs LWRvd24nCnJlc3BvbnNlcywgcGVyZm9ybSB0aGUgcmVxdWVzdGVkIHdpbmRvdyByZWNlbnRlcmlu ZyBvciBzY3JvbGxpbmcKYW5kIGFzayBhZ2Fpbi4KClVuZGVyIGEgd2luZG93aW5nIHN5c3RlbSBh IGRpYWxvZyBib3ggd2lsbCBiZSB1c2VkIGlmIGBsYXN0LW5vbm1lbnUtZXZlbnQnCmlzIG5pbCBh bmQgYHVzZS1kaWFsb2ctYm94JyBpcyBub24tbmlsLgoKQnkgZGVmYXVsdCwgdGhpcyBmdW5jdGlv biB1c2VzIHRoZSBtaW5pYnVmZmVyIHRvIHJlYWQgdGhlIGtleS4KSWYgYHktb3Itbi1wLXVzZS1y ZWFkLWtleScgaXMgbm9uLW5pbCwgYHJlYWQta2V5JyBpcyB1c2VkCmluc3RlYWQgKHdoaWNoIG1l YW5zIHRoYXQgdGhlIHVzZXIgY2FuJ3QgY2hhbmdlIGJ1ZmZlcnMgKGFuZCB0aGUKbGlrZSkgd2hp bGUgYHktb3Itbi1wJyBpcyBydW5uaW5nKS4KCihmbiBQUk9NUFQpHwooZGVmYWxpYXMgJ3ktb3It bi1wICNbMjU3ICJcMzA2XDMwNwgYCVwyMDNJAFwyMTEDIVwyNjIDAgJcMzEwPlwyMDRFAFwzMTEB IVwyMTFcMzEyXDI2N1wyMDIrAFwzMTNcMjYyBFwyMTBcMjAyDgBcMzE0XDI2MgRcMjEwXDIwMg4A XDIxMVwzMTVcMjM1XDIwMz0AXG5cMjAzPQBcMzE2XG4hXDI2NgJcMjAyDgBcMzE3BVBcMjY2XDIw MlwyMDIOAFwyMTBcMjAyagFcMzIwIFwyMDNfAFwyMTEDXDMyMVwiXDI2MgNcMzIyXDMyMQRcMzIz QlwiXDI2MgJcMjAyagELXDIwM1wiAVwyMTEDIVwyNjIDXDMyNFwzMjEcDVwyMDN2AFwzMjVcMzI2 XDMyNyAhIVwyMTBcMzMwXDMzMQQDPlwyMDNcMjAyAAVcMjAyXDIwNgBcMzE3BgZQXDMzMlwzMzMj ISlcMzM0DjlcMzM1AyFcMzIxI1wyNjIEA1wzMzZcMjY3XDIwMlwzNzcAXDI2NgJcMjAyagFcMzA2 IFwyNjYDXDIwMhYBXDMzNzFcMjYzAFwzNDAgMFwyNjYDXDIwMhYBXDI2NgNcMjAyFgFcMjY2A1wy MDIWAVwzNDExXDMxMQBcMzQyIDBcMjY2A1wyMDIWAVwyNjYDXDIwMhYBXDI2NgNcMjAyFgFcMzQz MVwzMzcAXDM0NCAwXDI2NgNcMjAyFgFcMjY2A1wyMDIWAVwyNjYDXDIwMhYBXDM0NTFcMzY1AFwz NDYgMFwyNjYDXDIwMhYBXDI2NgNcMjAyFgFcMjY2A1wyMDIWAQNcMzQ3PlwyMDQLAVwyMTFcMzUw PVwyMDMUAVwzNTFcMzUyXDM1M1wiXDI2NgNcMjAyFgFcMjY2AlwzNTQgXDIxMFwzNTUgXDIxMFwy MDJoAFwyMDJqAVwyMTEDIVwyNjIDXDMyMR46XG5cMzU2DjsOOVwiXG5cMjAzRwFcMzU3ASFcMjYy AVwzNjABXDMzNQ48IVwzNjFcMzYyBgZcIiNcMjEwXDIxMVwyNjIBDj0ePVwzNjMFXDM1MwNcMzUz Dj5cMjA2WQFcMzIxJVwyMTFcMzY0XDIzNVwyMDNkAVwzMTNcMjAyZQFcMzE0KlwyNjIFXDI2NgMB XDMxMz0JXDIwNH8BXDM2NVwzNjYFA1wyMDN8AVwzNjdcMjAyfQFcMzcwI1wyMTApXDIwNyIgW3Jl YWwtdGhpcy1jb21tYW5kIG5vbmludGVyYWN0aXZlIGhlbHAtZm9ybSB5LW9yLW4tcC11c2UtcmVh ZC1rZXkgY3Vyc29yLWluLWVjaG8tYXJlYSBtaW5pYnVmZmVyLWF1dG8tcmFpc2UgcmVjZW50ZXIg I1s1MTMgIgFHAgFcMzAyVVwyMDQSAAMCU0hcMzAzPVwyMDMWAFwzMDRcMjAyFwBcMzA1A1wyMDMf AFwzMDRcMjAyMQBcMzA2CFwyMDMvAFwzMDdcMzEwXDMxMVwzMTIJISFcIlwyMDIwAFwzMTMhUVwy MDciIFtoZWxwLWZvcm0gaGVscC1jaGFyIDAgMzIgIiIgIiAiIHN1YnN0aXR1dGUtY29tbWFuZC1r ZXlzIGZvcm1hdCAiKFxcYHknLCBcXGBuJyBvciBcXGAlcycpICIga2V5LWRlc2NyaXB0aW9uIHZl Y3RvciAiKFxcYHknIG9yIFxcYG4nKSAiXSAxMSAiXG5cbihmbiBQUk9NUFQgJm9wdGlvbmFsIERJ QUxPRykiXSAoYWN0IHNraXApIHJlYWQtc3RyaW5nICNzKGhhc2gtdGFibGUgc2l6ZSA0IHRlc3Qg ZXF1YWwgcmVoYXNoLXNpemUgMS41IHJlaGFzaC10aHJlc2hvbGQgMC44MTI1IHB1cmVjb3B5IHQg ZGF0YSAoInkiIDI5ICJZIiAyOSAibiIgMzYgIk4iIDM2KSkgYWN0IHNraXAgKCJoIiAiSCIpIHBy aW50ICJQbGVhc2UgYW5zd2VyIHkgb3Igbi4gICIgdXNlLWRpYWxvZy1ib3gtcCB0IHgtcG9wdXAt ZGlhbG9nICgoIlllcyIgLiBhY3QpICgiTm8iIC4gc2tpcCkpIChyZWNlbnRlciBzY3JvbGwtdXAg c2Nyb2xsLWRvd24gc2Nyb2xsLW90aGVyLXdpbmRvdyBzY3JvbGwtb3RoZXItd2luZG93LWRvd24p IHJhaXNlLWZyYW1lIHdpbmRvdy1mcmFtZSBtaW5pYnVmZmVyLXdpbmRvdyByZWFkLWtleSBwcm9w ZXJ0aXplIGZhY2UgbWluaWJ1ZmZlci1wcm9tcHQgbG9va3VwLWtleSB2ZWN0b3IgI3MoaGFzaC10 YWJsZSBzaXplIDcgdGVzdCBlcSByZWhhc2gtc2l6ZSAxLjUgcmVoYXNoLXRocmVzaG9sZCAwLjgx MjUgcHVyZWNvcHkgdCBkYXRhIChza2lwIDE1NSBhY3QgMTU1IHJlY2VudGVyIDE2MCBzY3JvbGwt dXAgMTY3IHNjcm9sbC1kb3duIDE4OSBzY3JvbGwtb3RoZXItd2luZG93IDIxMSBzY3JvbGwtb3Ro ZXItd2luZG93LWRvd24gMjMzKSkgKGVycm9yKSBzY3JvbGwtdXAtY29tbWFuZCAoZXJyb3IpIHNj cm9sbC1kb3duLWNvbW1hbmQgKGVycm9yKSBzY3JvbGwtb3RoZXItd2luZG93IChlcnJvcikgc2Ny b2xsLW90aGVyLXdpbmRvdy1kb3duIChleGl0LXByZWZpeCBxdWl0KSAyNyBzaWduYWwgcXVpdCBu aWwgZGluZyBkaXNjYXJkLWlucHV0IG1ha2UtY29tcG9zZWQta2V5bWFwIGNvcHkta2V5bWFwIGRl ZmluZS1rZXkgbWFrZS1jbG9zdXJlICNbMCAiXDMwMBlcMzAyIClcMjA3IiBbVjAgaGVscC1mb3Jt IGhlbHAtZm9ybS1zaG93XSAxIG5pbCBuaWxdIHJlYWQtZnJvbS1taW5pYnVmZmVyICgieSIgIlki KSBtZXNzYWdlICIlcyVjIiAxMjEgMTEwIHF1ZXJ5LXJlcGxhY2UtbWFwIGVuYWJsZS1yZWN1cnNp dmUtbWluaWJ1ZmZlcnMgeS1vci1uLXAtbWFwIGhlbHAtY2hhciB0aGlzLWNvbW1hbmQgeS1vci1u LXAtaGlzdG9yeS12YXJpYWJsZV0gMTEgKCMkIC4gMTE1NjcyKV0pI0AzODEgTGlrZSBgcHJvZ24n IGJ1dCBwZXJmb3JtIEJPRFkgYXMgYW4gYXRvbWljIGNoYW5nZSBncm91cC4KVGhpcyBtZWFucyB0 aGF0IGlmIEJPRFkgZXhpdHMgYWJub3JtYWxseSwKYWxsIG9mIGl0cyBjaGFuZ2VzIHRvIHRoZSBj dXJyZW50IGJ1ZmZlciBhcmUgdW5kb25lLgpUaGlzIHdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhl ciB1bmRvIGlzIGVuYWJsZWQgaW4gdGhlIGJ1ZmZlci4KClRoaXMgbWVjaGFuaXNtIGlzIHRyYW5z cGFyZW50IHRvIG9yZGluYXJ5IHVzZSBvZiB1bmRvOwppZiB1bmRvIGlzIGVuYWJsZWQgaW4gdGhl IGJ1ZmZlciBhbmQgQk9EWSBzdWNjZWVkcywgdGhlCnVzZXIgY2FuIHVuZG8gdGhlIGNoYW5nZSBu b3JtYWxseS4KCihmbiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdhdG9taWMtY2hhbmdlLWdyb3Vw ICcobWFjcm8gLiAjWzEyOCAiXDMwMFwzMDEhXDMwMFwzMDIhXDMwMwJcMzA0QlwzMDVcMzA2XDMw NwVcMzEwQlwyNTcFXDMxMVwzMTJcMzEzBgZEXDMxNFwzMTUGCSFcMzE2BghcMzE3QkJFRVwzMjAF XDMyMQYIRFwzMjIGCURGRUVcMjA3IiBbbWFrZS1zeW1ib2wgIi0tY2hhbmdlLWdyb3VwLWhhbmRs ZS0tIiAiLS1jaGFuZ2UtZ3JvdXAtc3VjY2Vzcy0tIiBsZXQgKChwcmVwYXJlLWNoYW5nZS1ncm91 cCkpICh1bmRvLW91dGVyLWxpbWl0IG5pbCkgKHVuZG8tbGltaXQgbW9zdC1wb3NpdGl2ZS1maXhu dW0pICh1bmRvLXN0cm9uZy1saW1pdCBtb3N0LXBvc2l0aXZlLWZpeG51bSkgKG5pbCkgdW53aW5k LXByb3RlY3QgcHJvZ24gYWN0aXZhdGUtY2hhbmdlLWdyb3VwIHByb2cxIG1hY3JvZXhwLXByb2du IHNldHEgKHQpIGlmIGFjY2VwdC1jaGFuZ2UtZ3JvdXAgY2FuY2VsLWNoYW5nZS1ncm91cF0gMTMg KCMkIC4gMTE5Njg4KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMw NVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBhdG9taWMtY2hhbmdlLWdyb3VwIGxpc3AtaW5kZW50 LWZ1bmN0aW9uIDAgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDE5MyBMaWtlIGBwcm9nbicg YnV0IHBlcmZvcm0gQk9EWSB3aXRoIGFtYWxnYW1hdGVkIHVuZG8gYmFycmllcnMuCgpUaGlzIGFs bG93cyBtdWx0aXBsZSBvcGVyYXRpb25zIHRvIGJlIHVuZG9uZSBpbiBhIHNpbmdsZSBzdGVwLgpX aGVuIHVuZG8gaXMgZGlzYWJsZWQgdGhpcyBiZWhhdmVzIGxpa2UgYHByb2duJy4KCihmbiAmcmVz dCBCT0RZKR8KKGRlZmFsaWFzICd3aXRoLXVuZG8tYW1hbGdhbWF0ZSAnKG1hY3JvIC4gI1sxMjgg IlwzMDBcMzAxIVwzMDIBXDMwM0JcMzA0QlwzMDVcMzA2XDMwNwVEBgZCQlwzMDZcMzEwBgZEXDMx MQYHREVFRVwyMDciIFttYWtlLXN5bWJvbCAiLS1jaGFuZ2UtZ3JvdXAtaGFuZGxlLS0iIGxldCAo KHByZXBhcmUtY2hhbmdlLWdyb3VwKSkgKCh1bmRvLW91dGVyLWxpbWl0IG5pbCkgKHVuZG8tbGlt aXQgbW9zdC1wb3NpdGl2ZS1maXhudW0pICh1bmRvLXN0cm9uZy1saW1pdCBtb3N0LXBvc2l0aXZl LWZpeG51bSkpIHVud2luZC1wcm90ZWN0IHByb2duIGFjdGl2YXRlLWNoYW5nZS1ncm91cCBhY2Nl cHQtY2hhbmdlLWdyb3VwIHVuZG8tYW1hbGdhbWF0ZS1jaGFuZ2UtZ3JvdXBdIDEwICgjJCAuIDEy MDcxMyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wy MDciIFtmdW5jdGlvbi1wdXQgd2l0aC11bmRvLWFtYWxnYW1hdGUgbGlzcC1pbmRlbnQtZnVuY3Rp b24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAMTMwOSBSZXR1cm4gYSBoYW5kbGUgZm9y IHRoZSBjdXJyZW50IGJ1ZmZlcidzIHN0YXRlLCBmb3IgYSBjaGFuZ2UgZ3JvdXAuCklmIHlvdSBz cGVjaWZ5IEJVRkZFUiwgbWFrZSBhIGhhbmRsZSBmb3IgQlVGRkVSJ3Mgc3RhdGUgaW5zdGVhZC4K ClBhc3MgdGhlIGhhbmRsZSB0byBgYWN0aXZhdGUtY2hhbmdlLWdyb3VwJyBhZnRlcndhcmQgdG8g aW5pdGlhdGUKdGhlIGFjdHVhbCBjaGFuZ2VzIG9mIHRoZSBjaGFuZ2UgZ3JvdXAuCgpUbyBmaW5p c2ggdGhlIGNoYW5nZSBncm91cCwgY2FsbCBlaXRoZXIgYGFjY2VwdC1jaGFuZ2UtZ3JvdXAnIG9y CmBjYW5jZWwtY2hhbmdlLWdyb3VwJyBwYXNzaW5nIHRoZSBzYW1lIGhhbmRsZSBhcyBhcmd1bWVu dC4gIENhbGwKYGFjY2VwdC1jaGFuZ2UtZ3JvdXAnIHRvIGFjY2VwdCB0aGUgY2hhbmdlcyBpbiB0 aGUgZ3JvdXAgYXMgZmluYWw7CmNhbGwgYGNhbmNlbC1jaGFuZ2UtZ3JvdXAnIHRvIHVuZG8gdGhl bSBhbGwuICBZb3Ugc2hvdWxkIHVzZQpgdW53aW5kLXByb3RlY3QnIHRvIG1ha2Ugc3VyZSB0aGUg Z3JvdXAgaXMgYWx3YXlzIGZpbmlzaGVkLiAgVGhlIGNhbGwKdG8gYGFjdGl2YXRlLWNoYW5nZS1n cm91cCcgc2hvdWxkIGJlIGluc2lkZSB0aGUgYHVud2luZC1wcm90ZWN0Jy4KT25jZSB5b3UgZmlu aXNoIHRoZSBncm91cCwgZG9uJ3QgdXNlIHRoZSBoYW5kbGUgYWdhaW4tLWRvbid0IHRyeSB0bwpm aW5pc2ggdGhlIHNhbWUgZ3JvdXAgdHdpY2UuICBGb3IgYSBzaW1wbGUgZXhhbXBsZSBvZiBjb3Jy ZWN0IHVzZSwgc2VlCnRoZSBzb3VyY2UgY29kZSBvZiBgYXRvbWljLWNoYW5nZS1ncm91cCcuCgpU aGUgaGFuZGxlIHJlY29yZHMgb25seSB0aGUgc3BlY2lmaWVkIGJ1ZmZlci4gIFRvIG1ha2UgYSBt dWx0aWJ1ZmZlcgpjaGFuZ2UgZ3JvdXAsIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmNlIGZvciBlYWNo IGJ1ZmZlciB5b3Ugd2FudCB0bwpjb3ZlciwgdGhlbiB1c2UgYG5jb25jJyB0byBjb21iaW5lIHRo ZSByZXR1cm5lZCB2YWx1ZXMsIGxpa2UgdGhpczoKCiAgKG5jb25jIChwcmVwYXJlLWNoYW5nZS1n cm91cCBidWZmZXItMSkKICAgICAgICAgKHByZXBhcmUtY2hhbmdlLWdyb3VwIGJ1ZmZlci0yKSkK CllvdSBjYW4gdGhlbiBhY3RpdmF0ZSB0aGF0IG11bHRpYnVmZmVyIGNoYW5nZSBncm91cCB3aXRo IGEgc2luZ2xlCmNhbGwgdG8gYGFjdGl2YXRlLWNoYW5nZS1ncm91cCcgYW5kIGZpbmlzaCBpdCB3 aXRoIGEgc2luZ2xlIGNhbGwKdG8gYGFjY2VwdC1jaGFuZ2UtZ3JvdXAnIG9yIGBjYW5jZWwtY2hh bmdlLWdyb3VwJy4KCihmbiAmb3B0aW9uYWwgQlVGRkVSKR8KKGRlZmFsaWFzICdwcmVwYXJlLWNo YW5nZS1ncm91cCAjWzI1NiAiXDIxMVwyMDMOAFwyMTFyAXFcMjEwCClCQ1wyMDdwCEJDXDIwNyIg W2J1ZmZlci11bmRvLWxpc3RdIDMgKCMkIC4gMTIxNDQ4KV0pI0A4NCBBY3RpdmF0ZSBhIGNoYW5n ZSBncm91cCBtYWRlIHdpdGggYHByZXBhcmUtY2hhbmdlLWdyb3VwJyAod2hpY2ggc2VlKS4KCihm biBIQU5ETEUpHwooZGVmYWxpYXMgJ2FjdGl2YXRlLWNoYW5nZS1ncm91cCAjWzI1NyAiXDIxMVwy MTFcMjA1MABcMjExQHJcMjExQHFcMjEwCFwzMDE9XDIwMxcAXDMwMhBcMjAyKAAIQFwyNDJcMjQ3 XDIwMygACEBACEBAQghCECkBQVwyNjZcMjAyXDIwMgEAXDIwNyIgW2J1ZmZlci11bmRvLWxpc3Qg dCBuaWxdIDUgKCMkIC4gMTIyODc2KV0pI0AxNDggRmluaXNoIGEgY2hhbmdlIGdyb3VwIG1hZGUg d2l0aCBgcHJlcGFyZS1jaGFuZ2UtZ3JvdXAnICh3aGljaCBzZWUpLgpUaGlzIGZpbmlzaGVzIHRo ZSBjaGFuZ2UgZ3JvdXAgYnkgYWNjZXB0aW5nIGl0cyBjaGFuZ2VzIGFzIGZpbmFsLgoKKGZuIEhB TkRMRSkfCihkZWZhbGlhcyAnYWNjZXB0LWNoYW5nZS1ncm91cCAjWzI1NyAiXDIxMVwyMTFcMjA1 HQBcMjExQHJcMjExQHFcMjEwXDIxMUFcMzAxPVwyMDMVAFwzMDEQKQFBXDI2NlwyMDJcMjAyAQBc MjA3IiBbYnVmZmVyLXVuZG8tbGlzdCB0XSA1ICgjJCAuIDEyMzE1MCldKSNAMTQ2IEZpbmlzaCBh IGNoYW5nZSBncm91cCBtYWRlIHdpdGggYHByZXBhcmUtY2hhbmdlLWdyb3VwJyAod2hpY2ggc2Vl KS4KVGhpcyBmaW5pc2hlcyB0aGUgY2hhbmdlIGdyb3VwIGJ5IHJldmVydGluZyBhbGwgb2YgaXRz IGNoYW5nZXMuCgooZm4gSEFORExFKR8KKGRlZmFsaWFzICdjYW5jZWwtY2hhbmdlLWdyb3VwICNb MjU3ICJcMjExXDIxMVwyMDVlAFwyMTFAQ3JcMjExXDI0MkBxXDIxMFwyMTEBXDI0MkFcMjQwXDIx MFwyMTR+XDIxMFwyMTFcMjQyXDI0MgFcMjQyXDI0MwgZXDMwMlwzMDMCBAYGJFwyMTYCXDI0Mjpc MjAzNwACXDI0MlwzMDRcMjQwXDIxMAJcMjQyXDMwNFwyNDFcMjEwAlwyNDI6XDIwM0oAAlwyNDJc MzA1CSE9XDIwNEoAXDMwNlwzMDchXDIxMFwyMTIJPFwyMDNXAFwzMTBcMzExIVwyMTBcMjAySwAp AlwyNDIQLFwyNjYCAUFcMjY2XDIwMlwyMDIBAFwyMDciIFtidWZmZXItdW5kby1saXN0IHBlbmRp bmctdW5kby1saXN0IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDJcMjQyOlwyMDUPAFwzMDJcMjQyXDMw MVwyNDBcMjEwXDMwMlwyNDJcMzAwXDI0MVwyMDciIFtWMCBWMSBWMl0gMl0gbmlsIGxhc3QgZXJy b3IgIlVuZG9pbmcgdG8gc29tZSB1bnJlbGF0ZWQgc3RhdGUiIHVuZG8tbW9yZSAxXSAxMCAoIyQg LiAxMjM0NTQpXSkjQDU2MSBNb21lbnRhcmlseSBkaXNwbGF5IFNUUklORyBpbiB0aGUgYnVmZmVy IGF0IFBPUy4KRGlzcGxheSByZW1haW5zIHVudGlsIG5leHQgZXZlbnQgaXMgaW5wdXQuCklmIFBP UyBpcyBhIG1hcmtlciwgb25seSBpdHMgcG9zaXRpb24gaXMgdXNlZDsgaXRzIGJ1ZmZlciBpcyBp Z25vcmVkLgpPcHRpb25hbCB0aGlyZCBhcmcgRVhJVC1DSEFSIGNhbiBiZSBhIGNoYXJhY3Rlciwg ZXZlbnQgb3IgZXZlbnQKZGVzY3JpcHRpb24gbGlzdC4gIEVYSVQtQ0hBUiBkZWZhdWx0cyB0byBT UEMuICBJZiB0aGUgaW5wdXQgaXMKRVhJVC1DSEFSIGl0IGlzIHN3YWxsb3dlZDsgb3RoZXJ3aXNl IGl0IGlzIHRoZW4gYXZhaWxhYmxlIGFzCmlucHV0IChhcyBhIGNvbW1hbmQgaWYgbm90aGluZyBl bHNlKS4KRGlzcGxheSBNRVNTQUdFIChvcHRpb25hbCBmb3VydGggYXJnKSBpbiB0aGUgZWNobyBh cmVhLgpJZiBNRVNTQUdFIGlzIG5pbCwgaW5zdHJ1Y3Rpb25zIHRvIHR5cGUgRVhJVC1DSEFSIGFy ZSBkaXNwbGF5ZWQgdGhlcmUuCgooZm4gU1RSSU5HIFBPUyAmb3B0aW9uYWwgRVhJVC1DSEFSIE1F U1NBR0UpHwooZGVmYWxpYXMgJ21vbWVudGFyeS1zdHJpbmctZGlzcGxheSAjWzEwMjYgIgFcMjA0 BwBcMzAxXDI2MgJcMzAyA1wyMTFcIlwzMDMFIVwzMDRcMzA1A1wiXDIxNlwyMTJcMzA2AlwzMDcD I1wyMTAEYlwyMTBgXDI2MgVcMzEwXDMxMVwzMTJcIgVYXDIwMzAAXDMxM1wzMTQgXDMxNVwyNDUh XDIxMClcMzE2A1wyMDY3AFwzMTdcMzIwBgYhXCJcMjEwXDMyMSBcMjExBT1cMjA2VQBcMjExXDMy MgYGIT1cMjA2VQBcMzIzXDMyNCAIXCJcMjExEClcMjA3IiBbdW5yZWFkLWNvbW1hbmQtZXZlbnRz IDMyIG1ha2Utb3ZlcmxheSBjb3B5LXNlcXVlbmNlIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAw IVwyMDciIFtWMCBkZWxldGUtb3ZlcmxheV0gMl0gb3ZlcmxheS1wdXQgYWZ0ZXItc3RyaW5nIHdp bmRvdy1lbmQgbmlsIHQgcmVjZW50ZXIgd2luZG93LWhlaWdodCAyIG1lc3NhZ2UgIlR5cGUgJXMg dG8gY29udGludWUgZWRpdGluZy4iIHNpbmdsZS1rZXktZGVzY3JpcHRpb24gcmVhZC1rZXkgZXZl bnQtY29udmVydC1saXN0IGFwcGVuZCB0aGlzLXNpbmdsZS1jb21tYW5kLXJhdy1rZXlzXSAxMCAo IyQgLiAxMjQxMDYpXSkjQDM3IFJldHVybiBhIGNvcHkgb2Ygb3ZlcmxheSBPLgoKKGZuIE8pHwoo ZGVmYWxpYXMgJ2NvcHktb3ZlcmxheSAjWzI1NyAiXDMwMAEhXDIwMxQAXDMwMVwzMDICIVwzMDMD IVwzMDAEISNcMjAyHwBcMzAxZWVcIlwzMDQBIVwyMTBcMjExXDI2MgFcMzA1AiFcMjExXDIwMzkA XDMwNgICXDIxMUFcMjYyBFwyNDIDXDIxMUFcMjYyBVwyNDIjXDIxMFwyMDJcIgABXDIwNyIgW292 ZXJsYXktYnVmZmVyIG1ha2Utb3ZlcmxheSBvdmVybGF5LXN0YXJ0IG92ZXJsYXktZW5kIGRlbGV0 ZS1vdmVybGF5IG92ZXJsYXktcHJvcGVydGllcyBvdmVybGF5LXB1dF0gOCAoIyQgLiAxMjUyNDgp XSkjQDU5NyBSZW1vdmUgb3ZlcmxheXMgYmV0d2VlbiBCRUcgYW5kIEVORCB0aGF0IGhhdmUgcHJv cGVydHkgTkFNRSB3aXRoIHZhbHVlIFZBTC4KT3ZlcmxheXMgbWlnaHQgYmUgbW92ZWQgYW5kL29y IHNwbGl0LiAgSWYgYW55IHRhcmdldGVkIG92ZXJsYXlzCnN0YXJ0IGJlZm9yZSBCRUcsIHRoZSBv dmVybGF5cyB3aWxsIGJlIGFsdGVyZWQgc28gdGhhdCB0aGV5IGVuZAphdCBCRUcuICBMaWtld2lz ZSwgaWYgdGhlIHRhcmdldGVkIG92ZXJsYXlzIGVuZCBhZnRlciBFTkQsIHRoZXkKd2lsbCBiZSBh bHRlcmVkIHNvIHRoYXQgdGhleSBzdGFydCBhdCBFTkQuICBPdmVybGF5cyB0aGF0IHN0YXJ0CmF0 IG9yIGFmdGVyIEJFRyBhbmQgZW5kIGJlZm9yZSBFTkQgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRl bHkuCgpCRUcgYW5kIEVORCBkZWZhdWx0IHJlc3BlY3RpdmVseSB0byB0aGUgYmVnaW5uaW5nIGFu ZCBlbmQgb2YgdGhlCmJ1ZmZlci4KVmFsdWVzIGFyZSBjb21wYXJlZCB3aXRoIGBlcScuCklmIGVp dGhlciBOQU1FIG9yIFZBTCBhcmUgc3BlY2lmaWVkLCBib3RoIHNob3VsZCBiZSBzcGVjaWZpZWQu CgooZm4gJm9wdGlvbmFsIEJFRyBFTkQgTkFNRSBWQUwpHwooZGVmYWxpYXMgJ3JlbW92ZS1vdmVy bGF5cyAjWzEwMjQgIgNcMjA0BwBlXDI2MgQCXDIwNA4AZFwyNjIDXDMwMAMhXDIxMAIEV1wyMDMe AAIEXDI2MgRcMjYyBFwyMTJcMzAxBARcIlwyMTFcMjA1XDIwNQBcMjExQFwzMDIBBVwiAz1cMjAz fgBcMzAzASEGBldcMjAzZgBcMzA0ASEFVlwyMDNaAFwzMDVcMzA2AiFcMzAzAyEGCCNcMjEwXDMw NQEGBlwzMDQEISNcMjEwXDIwMn4AXDMwNQFcMzAzAyEGCCNcMjEwXDIwMn4AXDMwNAEhBVZcMjAz egBcMzA1AQYGXDMwNAQhI1wyMTBcMjAyfgBcMzA3ASFcMjEwAUFcMjY2XDIwMlwyMDIjAClcMjA3 IiBbb3ZlcmxheS1yZWNlbnRlciBvdmVybGF5cy1pbiBvdmVybGF5LWdldCBvdmVybGF5LXN0YXJ0 IG92ZXJsYXktZW5kIG1vdmUtb3ZlcmxheSBjb3B5LW92ZXJsYXkgZGVsZXRlLW92ZXJsYXldIDEx ICgjJCAuIDEyNTU3OSldKSNANTYgTm9ybWFsIGhvb2sgcnVuIGJ5IGBzdXNwZW5kLWVtYWNzJywg YmVmb3JlIHN1c3BlbmRpbmcuHwooZGVmdmFyIHN1c3BlbmQtaG9vayBuaWwgKCMkIC4gMTI2NjE4 KSkjQDYzIE5vcm1hbCBob29rIHJ1biBieSBgc3VzcGVuZC1lbWFjcycsIGFmdGVyIEVtYWNzIGlz IGNvbnRpbnVlZC4fCihkZWZ2YXIgc3VzcGVuZC1yZXN1bWUtaG9vayBuaWwgKCMkIC4gMTI2NzE4 KSkjQDQ3IE5vcm1hbCBob29rIHJ1biBhZnRlciBsb2FkaW5nIHRoZSAucGRtcCBmaWxlLh8KKGRl ZnZhciBhZnRlci1wZHVtcC1sb2FkLWhvb2sgbmlsICgjJCAuIDEyNjgzMikpI0AxNzkgTm9ybWFs IGhvb2sgcnVuIGJ5IGB3aXRoLW91dHB1dC10by10ZW1wLWJ1ZmZlcicgYWZ0ZXIgZGlzcGxheWlu ZyB0aGUgYnVmZmVyLgpXaGVuIHRoZSBob29rIHJ1bnMsIHRoZSB0ZW1wb3JhcnkgYnVmZmVyIGlz IGN1cnJlbnQsIGFuZCB0aGUgd2luZG93IGl0CndhcyBkaXNwbGF5ZWQgaW4gaXMgc2VsZWN0ZWQu HwooZGVmdmFyIHRlbXAtYnVmZmVyLXNob3ctaG9vayBuaWwgKCMkIC4gMTI2OTMzKSkjQDE5MyBO b3JtYWwgaG9vayBydW4gYnkgYHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyJyBhdCB0aGUgc3Rh cnQuCldoZW4gdGhlIGhvb2sgcnVucywgdGhlIHRlbXBvcmFyeSBidWZmZXIgaXMgY3VycmVudC4K VGhpcyBob29rIGlzIG5vcm1hbGx5IHNldCB1cCB3aXRoIGEgZnVuY3Rpb24gdG8gcHV0IHRoZSBi dWZmZXIgaW4gSGVscAptb2RlLh8KKGRlZnZhciB0ZW1wLWJ1ZmZlci1zZXR1cC1ob29rIG5pbCAo IyQgLiAxMjcxNjYpKSNAMjMwIERpcmVjdG9yeSBiZW5lYXRoIHdoaWNoIGFkZGl0aW9uYWwgcGVy LXVzZXIgRW1hY3Mtc3BlY2lmaWMgZmlsZXMgYXJlIHBsYWNlZC4KVmFyaW91cyBwcm9ncmFtcyBp biBFbWFjcyBzdG9yZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRpcmVjdG9yeS4KTm90ZSB0aGF0IHRo aXMgc2hvdWxkIGVuZCB3aXRoIGEgZGlyZWN0b3J5IHNlcGFyYXRvci4KU2VlIGFsc28gYGxvY2F0 ZS11c2VyLWVtYWNzLWZpbGUnLh8KKGRlZnZhciB1c2VyLWVtYWNzLWRpcmVjdG9yeSBuaWwgKCMk IC4gMTI3NDE0KSkjQDUxIFJldHVybiBub24tbmlsIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBu YXJyb3dlZC4fCihkZWZhbGlhcyAnYnVmZmVyLW5hcnJvd2VkLXAgI1swICJkZVpcMzAwIFU/XDIw NyIgW2J1ZmZlci1zaXplXSAyICgjJCAuIDEyNzY5NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwz MDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBidWZmZXItbmFycm93 ZWQtcCBzcGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0ZS1jb21waWxlLWlubGluZS1leHBh bmRdIDUpI0A0MTcgRXhlY3V0ZSBCT0RZIHdpdGggcmVzdHJpY3Rpb25zIHNldCB0byBTVEFSVCBh bmQgRU5ELgoKVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zLCBpZiBhbnksIGFyZSByZXN0b3JlZCB1 cG9uIHJldHVybi4KCldpdGggdGhlIG9wdGlvbmFsIDpsb2NrZWQgVEFHIGFyZ3VtZW50LCBpbnNp ZGUgQk9EWSwKYG5hcnJvdy10by1yZWdpb24nIGFuZCBgd2lkZW4nIGNhbiBiZSB1c2VkIG9ubHkg d2l0aGluIHRoZSBTVEFSVAphbmQgRU5EIGxpbWl0cywgdW5sZXNzIHRoZSByZXN0cmljdGlvbnMg YXJlIHVubG9ja2VkIGJ5IGNhbGxpbmcKYG5hcnJvd2luZy11bmxvY2snIHdpdGggVEFHLiAgU2Vl IGBuYXJyb3dpbmctbG9jaycgZm9yIGEgbW9yZQpkZXRhaWxlZCBkZXNjcmlwdGlvbi4KCihmbiBT VEFSVCBFTkQgWzpsb2NrZWQgVEFHXSBCT0RZKR8KKGRlZmFsaWFzICd3aXRoLW5hcnJvd2luZyAn KG1hY3JvIC4gI1s2NDIgIlwyMTFAXDMwMD1cMjAzFwBcMzAxAwNcMzAyXDMwMwVBQUJCBEFAXDI1 NwVcMjA3XDMwMQMDXDMwMlwzMDMFQkJGXDIwNyIgWzpsb2NrZWQgaW50ZXJuYWwtLXdpdGgtbmFy cm93aW5nIGxhbWJkYSBuaWxdIDkgKCMkIC4gMTI3OTc3KV0pKSNAODUgSGVscGVyIGZ1bmN0aW9u IGZvciBgd2l0aC1uYXJyb3dpbmcnLCB3aGljaCBzZWUuCgooZm4gU1RBUlQgRU5EIEJPRFkgJm9w dGlvbmFsIFRBRykfCihkZWZhbGlhcyAnaW50ZXJuYWwtLXdpdGgtbmFycm93aW5nICNbMTAyNyAi XDIxNAMDfVwyMTBcMjExXDIwMw0AXDMwMAEhXDIxMAEgKVwyMDciIFtuYXJyb3dpbmctbG9ja10g NiAoIyQgLiAxMjg1NzcpXSkjQDE4MCBEZXRlcm1pbmUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGRl ZmF1bHQgdGFnLCBiYXNlZCBvbiB0ZXh0IGF0IHBvaW50LgpSZXR1cm4gYSBjb25zIGNlbGwgd2l0 aCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGZvdW5kIHRhZy4KSWYgdGhlcmUgaXMgbm8g cGxhdXNpYmxlIGRlZmF1bHQsIHJldHVybiBuaWwuHwooZGVmYWxpYXMgJ2ZpbmQtdGFnLWRlZmF1 bHQtYm91bmRzICNbMCAiXDMwMFwzMDEhXDIwNyIgW2JvdW5kcy1vZi10aGluZy1hdC1wb2ludCBz eW1ib2xdIDIgKCMkIC4gMTI4Nzg2KV0pI0AxMDggRGV0ZXJtaW5lIGRlZmF1bHQgdGFnIHRvIHNl YXJjaCBmb3IsIGJhc2VkIG9uIHRleHQgYXQgcG9pbnQuCklmIHRoZXJlIGlzIG5vIHBsYXVzaWJs ZSBkZWZhdWx0LCByZXR1cm4gbmlsLh8KKGRlZmFsaWFzICdmaW5kLXRhZy1kZWZhdWx0ICNbMCAi XDMwMCBcMjExXDIwNVxmAFwzMDEBQAJBXCJcMjA3IiBbZmluZC10YWctZGVmYXVsdC1ib3VuZHMg YnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzXSA0ICgjJCAuIDEyOTA3OCldKSNAMjM0IFJl dHVybiByZWdleHAgdGhhdCBtYXRjaGVzIHRoZSBkZWZhdWx0IHRhZyBhdCBwb2ludC4KSWYgdGhl cmUgaXMgbm8gdGFnIGF0IHBvaW50LCByZXR1cm4gbmlsLgoKV2hlbiBpbiBhIG1ham9yIG1vZGUg dGhhdCBkb2VzIG5vdCBwcm92aWRlIGl0cyBvd24KYGZpbmQtdGFnLWRlZmF1bHQtZnVuY3Rpb24n LCByZXR1cm4gYSByZWdleHAgdGhhdCBtYXRjaGVzIHRoZQpzeW1ib2wgYXQgcG9pbnQgZXhhY3Rs eS4fCihkZWZhbGlhcyAnZmluZC10YWctZGVmYXVsdC1hcy1yZWdleHAgI1swICIIXDIwNgsACVwz MDBOXDIwNgsAXDMwMiBcMjExXDIwNRMAXDMwMwEhXDIwNyIgW2ZpbmQtdGFnLWRlZmF1bHQtZnVu Y3Rpb24gbWFqb3ItbW9kZSBmaW5kLXRhZy1kZWZhdWx0IHJlZ2V4cC1xdW90ZV0gMyAoIyQgLiAx MjkzMzEpXSkjQDI0NCBSZXR1cm4gcmVnZXhwIHRoYXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCB0YWcg YXQgcG9pbnQgYXMgc3ltYm9sLgpJZiB0aGVyZSBpcyBubyB0YWcgYXQgcG9pbnQsIHJldHVybiBu aWwuCgpXaGVuIGluIGEgbWFqb3IgbW9kZSB0aGF0IGRvZXMgbm90IHByb3ZpZGUgaXRzIG93bgpg ZmluZC10YWctZGVmYXVsdC1mdW5jdGlvbicsIHJldHVybiBhIHJlZ2V4cCB0aGF0IG1hdGNoZXMg dGhlCnN5bWJvbCBhdCBwb2ludCBleGFjdGx5Lh8KKGRlZmFsaWFzICdmaW5kLXRhZy1kZWZhdWx0 LWFzLXN5bWJvbC1yZWdleHAgI1swICJcMzAyIFwyMTFcMjAzGwAIXDIwNhEACVwzMDBOXDIwNhEA XDMwM1wzMDM9XDIwMxsAXDMwNFwzMDUCXCJcMjA3XDIwNyIgW2ZpbmQtdGFnLWRlZmF1bHQtZnVu Y3Rpb24gbWFqb3ItbW9kZSBmaW5kLXRhZy1kZWZhdWx0LWFzLXJlZ2V4cCBmaW5kLXRhZy1kZWZh dWx0IGZvcm1hdCAiXFxfPCVzXFxfPiJdIDQgKCMkIC4gMTI5NzQ2KV0pI0A2NzggU09VTkQgaXMg YSBsaXN0IG9mIHRoZSBmb3JtIGAoc291bmQgS0VZV09SRCBWQUxVRS4uLiknLgpUaGUgZm9sbG93 aW5nIGtleXdvcmRzIGFyZSByZWNvZ25pemVkOgoKICA6ZmlsZSBGSUxFIC0gcmVhZCBzb3VuZCBk YXRhIGZyb20gRklMRS4gIElmIEZJTEUgaXNuJ3QgYW4KYWJzb2x1dGUgZmlsZSBuYW1lLCBpdCBp cyBzZWFyY2hlZCBpbiBgZGF0YS1kaXJlY3RvcnknLgoKICA6ZGF0YSBEQVRBIC0gcmVhZCBzb3Vu ZCBkYXRhIGZyb20gc3RyaW5nIERBVEEuCgpFeGFjdGx5IG9uZSBvZiA6ZmlsZSBvciA6ZGF0YSBt dXN0IGJlIHByZXNlbnQuCgogIDp2b2x1bWUgVk9MIC0gc2V0IHZvbHVtZSB0byBWT0wuICBWT0wg bXVzdCBhbiBpbnRlZ2VyIGluIHRoZQpyYW5nZSAwLi4xMDAgb3IgYSBmbG9hdCBpbiB0aGUgcmFu Z2UgMC4uMS4wLiAgSWYgbm90IHNwZWNpZmllZCwKZG9uJ3QgY2hhbmdlIHRoZSB2b2x1bWUgc2V0 dGluZyBvZiB0aGUgc291bmQgZGV2aWNlLgoKICA6ZGV2aWNlIERFVklDRSAtIHBsYXkgc291bmQg b24gREVWSUNFLiAgSWYgbm90IHNwZWNpZmllZCwKYSBzeXN0ZW0tZGVwZW5kZW50IGRlZmF1bHQg ZGV2aWNlIG5hbWUgaXMgdXNlZC4KCk5vdGU6IDpkYXRhIGFuZCA6ZGV2aWNlIGFyZSBjdXJyZW50 bHkgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLgoKKGZuIFNPVU5EKR8KKGRlZmFsaWFzICdwbGF5 LXNvdW5kICNbMjU3ICJcMzAwXDMwMSFcMjAzXG4AXDMwMQEhXDIwN1wzMDJcMzAzIVwyMDciIFtm Ym91bmRwIHBsYXktc291bmQtaW50ZXJuYWwgZXJyb3IgIlRoaXMgRW1hY3MgYmluYXJ5IGxhY2tz IHNvdW5kIHN1cHBvcnQiXSAzICgjJCAuIDEzMDIzNildKSNANDE5IFF1b3RlIEFSR1VNRU5UIGZv ciBwYXNzaW5nIGFzIGFyZ3VtZW50IHRvIGFuIGluZmVyaW9yIHNoZWxsLgoKVGhpcyBmdW5jdGlv biBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIHN5bnRheCBvZiB5b3VyIHN5c3RlbSdzCnN0 YW5kYXJkIHNoZWxsLCBhbmQgbWlnaHQgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cyB3aXRoIHVu dXN1YWwgc2hlbGxzLgpTZWUgSW5mbyBub2RlIGAoZWxpc3ApU2VjdXJpdHkgQ29uc2lkZXJhdGlv bnMnLgoKSWYgdGhlIG9wdGlvbmFsIFBPU0lYIGFyZ3VtZW50IGlzIG5vbi1uaWwsIEFSR1VNRU5U IGlzIHF1b3RlZAphY2NvcmRpbmcgdG8gUE9TSVggc2hlbGwgcXVvdGluZyBydWxlcywgcmVnYXJk bGVzcyBvZiB0aGUKc3lzdGVtJ3Mgc2hlbGwuCgooZm4gQVJHVU1FTlQgJm9wdGlvbmFsIFBPU0lY KR8KKGRlZmFsaWFzICdzaGVsbC1xdW90ZS1hcmd1bWVudCAjWzUxMyAiXDIxMVwyMDRKAAhcMzAx PVwyMDNKAFwzMDJcMzAzXDMwNFwzMDVcMzA2BgZcIlwyMDMdAFwzMDNcMjI1BUdXXDIwM0AAXDMw NVwzMDcGBgQjXDIwM0AAXDMwM1wyMjRcMjYyAQIFAwNPXDMxMAYHBFwyMTFUT1JcMjYyA1wyMTFU XDI2MgJcMjAyHQBcMzExAwYGBFwzMDRPXDMxMVJcMjA3XDIxMVwyMDR6AAhcMzEyPVwyMDN6AFwz MTMgXDIwM3oAXDMxNFwzMTVcMzE2XDMxNFwzMTdcMzIwBgcjI1wyNjICXDMwNVwzMjEDXCJcMjAz dQBcMzIyXDMxNFwzMjNcMzI0BSNcMzIyUVwyMDdcMzExAlwzMTFRXDIwNwFcMzAyXDIzMlwyMDNc MjAyAFwzMjVcMjA3XDMyNlwzMjdcMzMwXDMxNFwzMzFcMzMyBgcjI1wyMDciIFtzeXN0ZW0tdHlw ZSBtcy1kb3MgIiIgMCBuaWwgc3RyaW5nLW1hdGNoICJbXlwiXSIgIltcIl0iICJcXCIgIlwiIiB3 aW5kb3dzLW50IHczMi1zaGVsbC1kb3Mtc2VtYW50aWNzIHJlcGxhY2UtcmVnZXhwLWluLXN0cmlu ZyAiXFwoXFxcXCpcXCkkIiAiXFwxXFwxIiAiXFwoXFxcXCpcXClcIiIgIlxcMVxcMVxcXFxcIiIg IlslIVwiXSIgIl5cIiIgIlxcKFslISgpXCI8PiZ8Xl1cXCkiICJeXFwxIiAiJyciIHN0cmluZy1y ZXBsYWNlICJcbiIgIidcbiciICJbXi0wLTlhLXpBLVpfLi9cbl0iICJcXFxcXFwmIl0gMTEgKCMk IC4gMTMxMDgzKV0pI0A1MyBSZXR1cm4gYSBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gU1RSSU5HLgoK KGZuIFNUUklORykfCihkZWZhbGlhcyAnc3RyaW5nLXRvLWxpc3QgI1syNTcgIlwzMDABXDMwMVwi XDIwNyIgW2FwcGVuZCBuaWxdIDQgKCMkIC4gMTMyMjAwKV0pCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHN0cmluZy10by1s aXN0IHNwZWVkIC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFu ZF0gNSkjQDU1IFJldHVybiBhIHZlY3RvciBvZiBjaGFyYWN0ZXJzIGluIFNUUklORy4KCihmbiBT VFJJTkcpHwooZGVmYWxpYXMgJ3N0cmluZy10by12ZWN0b3IgI1syNTcgIlwzMDABIVwyMDciIFt2 Y29uY2F0XSAzICgjJCAuIDEzMjQ3OCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wz MDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBzdHJpbmctdG8tdmVjdG9yIHNwZWVk IC0xIHB1dCBieXRlLW9wdGltaXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDc2 IFJldHVybiB0IGlmIE9CSkVDVCBpcyBhIHN0cmluZyBvciBuaWwuCk90aGVyd2lzZSwgcmV0dXJu IG5pbC4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ3N0cmluZy1vci1udWxsLXAgI1syNTcgIlwy MTE7XDIwNgcAXDIxMT9cMjA3IiBbXSAyICgjJCAuIDEzMjc1NCldKSNANjIgUmV0dXJuIHQgaWYg T0JKRUNUIGlzIG5pbCBvciBhIGxpc3Qgb2Ygc3RyaW5ncy4KCihmbiBPQkpFQ1QpHwooZGVmYWxp YXMgJ2xpc3Qtb2Ytc3RyaW5ncy1wICNbMjU3ICJcMjExOlwyMDMSAFwyMTFAO1wyMDMSAFwyMTFB XDI2MgFcMjAyAABcMjExP1wyMDciIFtdIDIgKCMkIC4gMTMyOTEyKV0pCihieXRlLWNvZGUgIlwz MDBcMzAxXDMwMlwzMDMjXDMwMFwzMDFcMzA0XDMwNSNcMzAwXDIwNyIgW2Z1bmN0aW9uLXB1dCBs aXN0LW9mLXN0cmluZ3MtcCBwdXJlIHQgc2lkZS1lZmZlY3QtZnJlZSBlcnJvci1mcmVlXSA1KSNA MTEwIFJldHVybiB0IGlmIE9CSkVDVCBpcyBvbmUgb2YgdGhlIHR3byBjYW5vbmljYWwgYm9vbGVh biB2YWx1ZXM6IHQgb3IgbmlsLgpPdGhlcndpc2UsIHJldHVybiBuaWwuCgooZm4gT0JKRUNUKR8K KGRlZmFsaWFzICdib29sZWFucCAjWzI1NyAiXDIxMVwzMDA+XDIwNQcAXDMwMVwyMDciIFsobmls IHQpIHRdIDMgKCMkIC4gMTMzMjEzKV0pI0A2MyBOb24tbmlsIGlmIGFuZCBvbmx5IGlmIE9CSkVD VCBpcyBhIHNwZWNpYWwgZm9ybS4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ3NwZWNpYWwtZm9y bS1wICNbMjU3ICJcMjExOVwyMDMQAFwzMDABIVwyMDMQAFwzMDEBIVwyNjIBXDMwMgEhXDIwNRwA XDMwMwEhQVwzMDQ9XDIwNyIgW2Zib3VuZHAgaW5kaXJlY3QtZnVuY3Rpb24gc3VicnAgc3Vici1h cml0eSB1bmV2YWxsZWRdIDMgKCMkIC4gMTMzNDA5KV0pI0A2MiBOb24tbmlsIGlmIGFuZCBvbmx5 IGlmIE9CSkVDVCBpcyBhIHZhbGlkIHBsaXN0LgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAncGxp c3RwICNbMjU3ICJcMzAwASFcMjExXDIwNVxmAFwyMTFcMzAxXDI0NlwzMDJVXDIwNyIgW3Byb3Bl ci1saXN0LXAgMiAwXSA0ICgjJCAuIDEzMzY0NildKSNANTYgTm9uLW5pbCBpZiBhbmQgb25seSBp ZiBPQkpFQ1QgaXMgYSBtYWNyby4KCihmbiBPQkpFQ1QpHwooZGVmYWxpYXMgJ21hY3JvcCAjWzI1 NyAiXDMwMAEhXDIxMTpcMjA1HgBcMjExQFwzMDE9XDIwNh4AXDIxMVwyMTFcMjQyXDMwMj1cMjYy AVwyMDUeAFwzMDMBOFwzMDQ+XDIwNyIgW2luZGlyZWN0LWZ1bmN0aW9uIG1hY3JvIGF1dG9sb2Fk IDQgKG1hY3JvIHQpXSA1ICgjJCAuIDEzMzgxNSldKSNAMTU4IFJldHVybiBub24tbmlsIGlmIE9C SkVDVCBpcyBhIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gY29tcGlsZWQuCkRvZXMgbm90IGRpc3Rp bmd1aXNoIGJldHdlZW4gZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIG1hY2hpbmUgY29kZQpvciBi eXRlLWNvZGUuCgooZm4gT0JKRUNUKR8KKGRlZmFsaWFzICdjb21waWxlZC1mdW5jdGlvbi1wICNb MjU3ICJcMzAwASFcMjA2CQBcMzAxASFcMjA3IiBbc3VicnAgYnl0ZS1jb2RlLWZ1bmN0aW9uLXBd IDMgKCMkIC4gMTM0MDQ0KV0pI0A4MSBSZXR1cm4gdGhlIGZpZWxkIGF0IHBvc2l0aW9uIFBPUywg dGFraW5nIHN0aWNraW5lc3MgZXRjIGludG8gYWNjb3VudC4KCihmbiBQT1MpHwooZGVmYWxpYXMg J2ZpZWxkLWF0LXBvcyAjWzI1NyAiXDMwMFwzMDECIVwzMDJcIlwyMTFcMzAzPVwyMDMUAFwzMDBc MzA0AyFTXDMwMlwiXDIwN1wyMDciIFtnZXQtY2hhci1wcm9wZXJ0eSBmaWVsZC1iZWdpbm5pbmcg ZmllbGQgYm91bmRhcnkgZmllbGQtZW5kXSA1ICgjJCAuIDEzNDMxNSldKSNANDQyIFJldHVybiB0 aGUgU0hBLTEgKFNlY3VyZSBIYXNoIEFsZ29yaXRobSkgb2YgYW4gT0JKRUNULgpPQkpFQ1QgaXMg ZWl0aGVyIGEgc3RyaW5nIG9yIGEgYnVmZmVyLiAgT3B0aW9uYWwgYXJndW1lbnRzIFNUQVJUIGFu ZApFTkQgYXJlIGNoYXJhY3RlciBwb3NpdGlvbnMgc3BlY2lmeWluZyB3aGljaCBwb3J0aW9uIG9m IE9CSkVDVCBmb3IKY29tcHV0aW5nIHRoZSBoYXNoLiAgSWYgQklOQVJZIGlzIG5vbi1uaWwsIHJl dHVybiBhIHN0cmluZyBpbiBiaW5hcnkKZm9ybS4KCk5vdGUgdGhhdCBTSEEtMSBpcyBub3QgY29s bGlzaW9uIHJlc2lzdGFudCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCmZvciBhbnl0aGluZyBzZWN1 cml0eS1yZWxhdGVkLiAgU2VlIGBzZWN1cmUtaGFzaCcgZm9yCmFsdGVybmF0aXZlcy4KCihmbiBP QkpFQ1QgJm9wdGlvbmFsIFNUQVJUIEVORCBCSU5BUlkpHwooZGVmYWxpYXMgJ3NoYTEgI1sxMDI1 ICJcMzAwXDMwMQUFBQUlXDIwNyIgW3NlY3VyZS1oYXNoIHNoYTFdIDEwICgjJCAuIDEzNDU2OSld KSNAMjQxIFJldHVybiB0aGUgdmFsdWUgb2YgcHJvcGVydHkgUFJPUCBvZiBmdW5jdGlvbiBGLgpJ ZiBBVVRPTE9BRCBpcyBub24tbmlsIGFuZCBGIGlzIGF1dG9sb2FkZWQsIHRyeSB0byBsb2FkIGl0 CmluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBzZXQgUFJPUC4gIElmIEFVVE9MT0FEIGlzIGBtYWNy bycsIGRvIGl0IG9ubHkKaWYgaXQncyBhbiBhdXRvbG9hZGVkIG1hY3JvLgoKKGZuIEYgUFJPUCAm b3B0aW9uYWwgQVVUT0xPQUQpHwooZGVmYWxpYXMgJ2Z1bmN0aW9uLWdldCAjWzc3MCAiXDMwMAM5 XDIwMz4AAwNOXDIxMVwyNjICXDIwND4AXDMwMQQhXDIwMz4AA0sCXDIwMzcAXDIxMVwyMTFcMjQy XDMwMj1cMjYyAVwyMDM3AFwyMTFcMzAzAgYHBgZcMzA0PVwyMDUyAFwzMDQjXDIzMlwyMDM6AFwy MTFcMjYyBVwyMTBcMjAyAQBcMjA3IiBbbmlsIGZib3VuZHAgYXV0b2xvYWQgYXV0b2xvYWQtZG8t bG9hZCBtYWNyb10gMTEgKCMkIC4gMTM1MDk3KV0pI0AyMTIgUHJvY2VzcyB0ZXh0IHByb3BlcnRp ZXMgYmV0d2VlbiBTVEFSVCBhbmQgRU5ELCBpbnNlcnRlZCBmb3IgYSBgeWFuaycuClBlcmZvcm0g dGhlIGhhbmRsaW5nIHNwZWNpZmllZCBieSBgeWFuay1oYW5kbGVkLXByb3BlcnRpZXMnLCB0aGVu CnJlbW92ZSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBieSBgeWFuay1leGNsdWRlZC1wcm9wZXJ0aWVz Jy4KCihmbiBTVEFSVCBFTkQpHwooZGVmYWxpYXMgJ3JlbW92ZS15YW5rLWV4Y2x1ZGVkLXByb3Bl cnRpZXMgI1s1MTQgIlwzMDMYCVwyMTFcMjAzNABcMjExQFwyMTFAAUEFXDIxMQYGV1wyMDMrAFwz MDQBBFwiXDMwNQIFXDMwNgZcbiQDAgQDI1wyMTBcMjY2XDIwMlwyMDIOAFwyNjYDAUFcMjY2XDIw MlwyMDIDAFwyMTBcblwzMDM9XDIwM0MAXDMwNwICXDMwNiNcMjAySABcMzEwAgJcbiMpXDIwNyIg W2luaGliaXQtcmVhZC1vbmx5IHlhbmstaGFuZGxlZC1wcm9wZXJ0aWVzIHlhbmstZXhjbHVkZWQt cHJvcGVydGllcyB0IGdldC10ZXh0LXByb3BlcnR5IG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5n ZSBuaWwgc2V0LXRleHQtcHJvcGVydGllcyByZW1vdmUtbGlzdC1vZi10ZXh0LXByb3BlcnRpZXNd IDEzICgjJCAuIDEzNTU4MildKSNAMzExIEluc2VydCBTVFJJTkcgYXQgcG9pbnQgZm9yIHRoZSBg eWFuaycgY29tbWFuZC4KClRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgaW5zZXJ0JywgZXhjZXB0IGl0 IGhvbm9ycyB0aGUgdmFyaWFibGVzCmB5YW5rLWhhbmRsZWQtcHJvcGVydGllcycgYW5kIGB5YW5r LWV4Y2x1ZGVkLXByb3BlcnRpZXMnLCBhbmQgdGhlCmB5YW5rLWhhbmRsZXInIHRleHQgcHJvcGVy dHksIGluIHRoZSB3YXkgdGhhdCBgeWFuaycgZG9lcy4KCkl0IGFsc28gcnVucyB0aGUgc3RyaW5n IHRocm91Z2ggYHlhbmstdHJhbnNmb3JtLWZ1bmN0aW9ucycuCgooZm4gU1RSSU5HKR8KKGRlZmFs aWFzICdpbnNlcnQtZm9yLXlhbmsgI1syNTcgIlwyMTFDXDMwMFwzMDFcMzAyXDMwMwRcIlwiXDIx MFwzMDRcMzA1XDMwNlwzMDcEXDI0MiNcMjExXDI2MgJcMjAzKgBcMzEwAlwyNDJcMzA2A08hXDIx MAFcMjExXDI0MgJcMzA0T1wyNDBcMjEwXDIwMgsAXDIxMFwzMTABXDI0MiFcMjA3IiBbcnVuLWhv b2std3JhcHBlZCB5YW5rLXRyYW5zZm9ybS1mdW5jdGlvbnMgbWFrZS1jbG9zdXJlICNbMjU3ICJc MzAwAVwzMDBcMjQyIVwyNDBcMjEwXDMwMVwyMDciIFtWMCBuaWxdIDQgIlxuXG4oZm4gRikiXSBu aWwgbmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIDAgeWFuay1oYW5kbGVyIGluc2VydC1mb3It eWFuay0xXSA3ICgjJCAuIDEzNjE5OCldKSNANTUgSGVscGVyIGZvciBgaW5zZXJ0LWZvci15YW5r Jywgd2hpY2ggc2VlLgoKKGZuIFNUUklORykfCihkZWZhbGlhcyAnaW5zZXJ0LWZvci15YW5rLTEg I1syNTcgIlwyMTE7XDIwNVxuAFwzMDNcMzA0XDMwNQMjXDIxMUFAXDIwNhEAAWAIGFwzMDZcMzA3 EQNAXDIwMyQAA0ADIVwyMTBcMjAyJwACY1wyMTBgXDI2MgFcMzA3EFwzMTAEOFwyMDQ3AFwzMTEC AlwiXDIxMFwyMTECVlwyMDNMAFwzMTIBUyFcMjAzTABcMzEzAVMCXDMxNFwzMDckXDIxMAlcMzA3 PVwyMDNWAFwzMTUEOBFcMzE2BDhcMjA1YQBcMzE2BDhcMjExEilcMjA3IiBbaW5oaWJpdC1yZWFk LW9ubHkgeWFuay11bmRvLWZ1bmN0aW9uIHRoaXMtY29tbWFuZCBnZXQtdGV4dC1wcm9wZXJ0eSAw IHlhbmstaGFuZGxlciBuaWwgdCAyIHJlbW92ZS15YW5rLWV4Y2x1ZGVkLXByb3BlcnRpZXMgdGV4 dC1wcm9wZXJ0aWVzLWF0IHB1dC10ZXh0LXByb3BlcnR5IHJlYXItbm9uc3RpY2t5IDMgNF0gMTAg KCMkIC4gMTM2ODg3KV0pI0AyODYgSW5zZXJ0IGJlZm9yZSBwb2ludCBhIHN1YnN0cmluZyBvZiBC VUZGRVIsIHdpdGhvdXQgdGV4dCBwcm9wZXJ0aWVzLgpCVUZGRVIgbWF5IGJlIGEgYnVmZmVyIG9y IGEgYnVmZmVyIG5hbWUuCkFyZ3VtZW50cyBTVEFSVCBhbmQgRU5EIGFyZSBjaGFyYWN0ZXIgcG9z aXRpb25zIHNwZWNpZnlpbmcgdGhlIHN1YnN0cmluZy4KVGhleSBkZWZhdWx0IHRvIHRoZSB2YWx1 ZXMgb2YgKHBvaW50LW1pbikgYW5kIChwb2ludC1tYXgpIGluIEJVRkZFUi4KCihmbiBCVUZGRVIg Jm9wdGlvbmFsIFNUQVJUIEVORCkfCihkZWZhbGlhcyAnaW5zZXJ0LWJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcyAjWzc2OSAiYFwzMDEEBAQjXDIxMFwzMDIYXDMwMwFgXDMwNCMpXDIwNyIg W2luaGliaXQtcmVhZC1vbmx5IGluc2VydC1idWZmZXItc3Vic3RyaW5nIHQgc2V0LXRleHQtcHJv cGVydGllcyBuaWxdIDggKCMkIC4gMTM3MzkxKV0pI0A0MDEgSW5zZXJ0IGJlZm9yZSBwb2ludCBh IHBhcnQgb2YgQlVGRkVSLCBzdHJpcHBpbmcgc29tZSB0ZXh0IHByb3BlcnRpZXMuCkJVRkZFUiBt YXkgYmUgYSBidWZmZXIgb3IgYSBidWZmZXIgbmFtZS4KQXJndW1lbnRzIFNUQVJUIGFuZCBFTkQg YXJlIGNoYXJhY3RlciBwb3NpdGlvbnMgc3BlY2lmeWluZyB0aGUgc3Vic3RyaW5nLgpUaGV5IGRl ZmF1bHQgdG8gdGhlIHZhbHVlcyBvZiAocG9pbnQtbWluKSBhbmQgKHBvaW50LW1heCkgaW4gQlVG RkVSLgpCZWZvcmUgaW5zZXJ0aW9uLCBwcm9jZXNzIHRleHQgcHJvcGVydGllcyBhY2NvcmRpbmcg dG8KYHlhbmstaGFuZGxlZC1wcm9wZXJ0aWVzJyBhbmQgYHlhbmstZXhjbHVkZWQtcHJvcGVydGll cycuCgooZm4gQlVGRkVSICZvcHRpb25hbCBTVEFSVCBFTkQpHwooZGVmYWxpYXMgJ2luc2VydC1i dWZmZXItc3Vic3RyaW5nLWFzLXlhbmsgI1s3NjkgImBcMzAwBAQEI1wyMTBcMzAxAWBcIlwyMDci IFtpbnNlcnQtYnVmZmVyLXN1YnN0cmluZyByZW1vdmUteWFuay1leGNsdWRlZC1wcm9wZXJ0aWVz XSA4ICgjJCAuIDEzNzg2MildKSNAMjA4IEluc2VydCB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJl bnQgYnVmZmVyIGludG8gQlVGRkVSLgpJZiBTVEFSVC9FTkQsIG9ubHkgaW5zZXJ0IHRoYXQgcmVn aW9uIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLgpQb2ludCBpbiBCVUZGRVIgd2lsbCBiZSBwbGFj ZWQgYWZ0ZXIgdGhlIGluc2VydGVkIHRleHQuCgooZm4gQlVGRkVSICZvcHRpb25hbCBTVEFSVCBF TkQpHwooZGVmYWxpYXMgJ2luc2VydC1pbnRvLWJ1ZmZlciAjWzc2OSAicHIDcVwyMTBcMzAwAQQE IylcMjA3IiBbaW5zZXJ0LWJ1ZmZlci1zdWJzdHJpbmddIDggKCMkIC4gMTM4NDIxKV0pI0AzMzYg UmVwbGFjZSBTVFJJTkcgd2l0aCBSRVBMQUNFTUVOVCBpbiB0aGUgcmVnaW9uIGZyb20gU1RBUlQg dG8gRU5ELgpUaGUgbnVtYmVyIG9mIHJlcGxhY2VkIG9jY3VycmVuY2VzIGFyZSByZXR1cm5lZCwg b3IgbmlsIGlmIFNUUklORwpkb2Vzbid0IGV4aXN0IGluIHRoZSByZWdpb24uCgpJZiBTVEFSVCBp cyBuaWwsIHVzZSB0aGUgY3VycmVudCBwb2ludC4gIElmIEVORCBpcyBuaWwsIHVzZSBgcG9pbnQt bWF4Jy4KCkNvbXBhcmlzb25zIGFuZCByZXBsYWNlbWVudHMgYXJlIGRvbmUgd2l0aCBmaXhlZCBj YXNlLgoKKGZuIFNUUklORyBSRVBMQUNFTUVOVCAmb3B0aW9uYWwgU1RBUlQgRU5EKR8KKGRlZmFs aWFzICdyZXBsYWNlLXN0cmluZy1pbi1yZWdpb24gI1sxMDI2ICIBXDIwMxEAAWVXXDIwMxQAXDMw MVwzMDIhXDIxMFwyMDIUAGBcMjYyAlwyMTFcMjAzJQBcMjExZFZcMjAzKABcMzAxXDMwMyFcMjEw XDIwMigAZFwyNjIBXDIxMgFiXDIxMFwyMTQBAX1cMjEwXDMwNFwzMDUYXDMwNgVcMzA1XDMwNyNc MjAzTABcMzA0XDIyNFwzMDRcMjI1fFwyMTADY1wyMTBcMjExVFwyNjIBXDIwMjQAXDIxMVwzMDRV P1wyMDVUAFwyMTErXDIwNyIgW2Nhc2UtZm9sZC1zZWFyY2ggZXJyb3IgIlN0YXJ0IGJlZm9yZSBz dGFydCBvZiBidWZmZXIiICJFbmQgYWZ0ZXIgZW5kIG9mIGJ1ZmZlciIgMCBuaWwgc2VhcmNoLWZv cndhcmQgdF0gOSAoIyQgLiAxMzg3MzgpXSkjQDYxNyBSZXBsYWNlIFJFR0VYUCB3aXRoIFJFUExB Q0VNRU5UIGluIHRoZSByZWdpb24gZnJvbSBTVEFSVCB0byBFTkQuClRoZSBudW1iZXIgb2YgcmVw bGFjZWQgb2NjdXJyZW5jZXMgYXJlIHJldHVybmVkLCBvciBuaWwgaWYgUkVHRVhQCmRvZXNuJ3Qg ZXhpc3QgaW4gdGhlIHJlZ2lvbi4KCklmIFNUQVJUIGlzIG5pbCwgdXNlIHRoZSBjdXJyZW50IHBv aW50LiAgSWYgRU5EIGlzIG5pbCwgdXNlIGBwb2ludC1tYXgnLgoKQ29tcGFyaXNvbnMgYW5kIHJl cGxhY2VtZW50cyBhcmUgZG9uZSB3aXRoIGZpeGVkIGNhc2UuCgpSRVBMQUNFTUVOVCBjYW4gdXNl IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBlbGVtZW50czoKCiAgYFwmJyBpbiBORVdURVhUIG1lYW5z IHN1YnN0aXR1dGUgb3JpZ2luYWwgbWF0Y2hlZCB0ZXh0LgogIGBcTicgbWVhbnMgc3Vic3RpdHV0 ZSB3aGF0IG1hdGNoZWQgdGhlIE50aCBgXCguLi5cKScuCiAgICAgICBJZiBOdGggcGFyZW5zIGRp ZG4ndCBtYXRjaCwgc3Vic3RpdHV0ZSBub3RoaW5nLgogIGBcXCcgbWVhbnMgaW5zZXJ0IG9uZSBg XCcuCiAgYFw/JyBpcyB0cmVhdGVkIGxpdGVyYWxseS4KCihmbiBSRUdFWFAgUkVQTEFDRU1FTlQg Jm9wdGlvbmFsIFNUQVJUIEVORCkfCihkZWZhbGlhcyAncmVwbGFjZS1yZWdleHAtaW4tcmVnaW9u ICNbMTAyNiAiAVwyMDMRAAFlV1wyMDMUAFwzMDFcMzAyIVwyMTBcMjAyFABgXDI2MgJcMjExXDIw MyUAXDIxMWRWXDIwMygAXDMwMVwzMDMhXDIxMFwyMDIoAGRcMjYyAVwyMTIBYlwyMTBcMjE0AQF9 XDIxMFwzMDRcMzA1GFwzMDYFXDMwNVwzMDcjXDIwM0gAXDMxMARcMzA3XCJcMjEwXDIxMVRcMjYy AVwyMDI0AFwyMTFcMzA0VT9cMjA1UABcMjExK1wyMDciIFtjYXNlLWZvbGQtc2VhcmNoIGVycm9y ICJTdGFydCBiZWZvcmUgc3RhcnQgb2YgYnVmZmVyIiAiRW5kIGFmdGVyIGVuZCBvZiBidWZmZXIi IDAgbmlsIHJlLXNlYXJjaC1mb3J3YXJkIHQgcmVwbGFjZS1tYXRjaF0gOSAoIyQgLiAxMzk0NTQp XSkjQDE3NiBJZiBgZm9udC1sb2NrLWRlZmF1bHRzJyBpcyBuaWwsIGFwcGx5IEZBQ0UgYXMgYSBg ZmFjZScgcHJvcGVydHkuClNUQVJUIGFuZCBFTkQgZGVub3RlIHRoZSBzdGFydCBhbmQgZW5kIG9m IHRoZSB0ZXh0IHRvIGFjdCBvbi4KRG8gbm90aGluZyBpZiBGQUNFIGlzIG5pbC4KCihmbiBGQUNF IFNUQVJUIEVORCkfCihkZWZhbGlhcyAneWFuay1oYW5kbGUtZm9udC1sb2NrLWZhY2UtcHJvcGVy dHkgI1s3NzEgIgJcMjA1EAAIP1wyMDUQAFwzMDECAlwzMDIGBiRcMjA3IiBbZm9udC1sb2NrLWRl ZmF1bHRzIHB1dC10ZXh0LXByb3BlcnR5IGZhY2VdIDggKCMkIC4gMTQwNDU2KV0pI0A5NSBBcHBs eSBwcm9wZXJ0eSBjYXRlZ29yeSBDQVRFR09SWSdzIHByb3BlcnRpZXMgYmV0d2VlbiBTVEFSVCBh bmQgRU5ELgoKKGZuIENBVEVHT1JZIFNUQVJUIEVORCkfCihkZWZhbGlhcyAneWFuay1oYW5kbGUt Y2F0ZWdvcnktcHJvcGVydHkgI1s3NzEgIgJcMjA1KgABXDIxMQJXXDIwNSgAXDMwMAFcMzAxBCNc MzAyAiFcMzAzAwNcMzA0BgkhI1wyMTBcMzA1AwMDI1wyMTABXDI2NlwyMDNcMjAyBQBcMjYyAVwy MDciIFtuZXh0LXByb3BlcnR5LWNoYW5nZSBuaWwgdGV4dC1wcm9wZXJ0aWVzLWF0IHNldC10ZXh0 LXByb3BlcnRpZXMgc3ltYm9sLXBsaXN0IGFkZC10ZXh0LXByb3BlcnRpZXNdIDExICgjJCAuIDE0 MDc4NildKSNANDg0IFN0YXJ0IGEgcHJvZ3JhbSBpbiBhIHN1YnByb2Nlc3MuICBSZXR1cm4gdGhl IHByb2Nlc3Mgb2JqZWN0IGZvciBpdC4KTkFNRSBpcyBuYW1lIGZvciBwcm9jZXNzLiAgSXQgaXMg bW9kaWZpZWQgaWYgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdW5pcXVlLgpCVUZGRVIgaXMgdGhlIGJ1 ZmZlciAob3IgYnVmZmVyIG5hbWUpIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBwcm9jZXNzLgogUHJv Y2VzcyBvdXRwdXQgZ29lcyBhdCBlbmQgb2YgdGhhdCBidWZmZXIsIHVubGVzcyB5b3Ugc3BlY2lm eQogYW4gb3V0cHV0IHN0cmVhbSBvciBmaWx0ZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvdXRw dXQuCiBCVUZGRVIgbWF5IGJlIGFsc28gbmlsLCBtZWFuaW5nIHRoYXQgdGhpcyBwcm9jZXNzIGlz IG5vdCBhc3NvY2lhdGVkCiB3aXRoIGFueSBidWZmZXIuCkNPTU1BTkQgaXMgdGhlIHNoZWxsIGNv bW1hbmQgdG8gcnVuLgoKKGZuIE5BTUUgQlVGRkVSIENPTU1BTkQpHwooZGVmYWxpYXMgJ3N0YXJ0 LXByb2Nlc3Mtc2hlbGwtY29tbWFuZCAjWzc3MSAiXDMwMgMDCAkFJVwyMDciIFtzaGVsbC1maWxl LW5hbWUgc2hlbGwtY29tbWFuZC1zd2l0Y2ggc3RhcnQtcHJvY2Vzc10gOSAoIyQgLiAxNDExNDUp XSkjQDE2OSBTdGFydCBhIHByb2dyYW0gaW4gYSBzdWJwcm9jZXNzLiAgUmV0dXJuIHRoZSBwcm9j ZXNzIG9iamVjdCBmb3IgaXQuClNpbWlsYXIgdG8gYHN0YXJ0LXByb2Nlc3Mtc2hlbGwtY29tbWFu ZCcsIGJ1dCBjYWxscyBgc3RhcnQtZmlsZS1wcm9jZXNzJy4KCihmbiBOQU1FIEJVRkZFUiBDT01N QU5EKR8KKGRlZmFsaWFzICdzdGFydC1maWxlLXByb2Nlc3Mtc2hlbGwtY29tbWFuZCAjWzc3MSAi XDMwMFwzMDFcMzAyAwUGByQhXDIwNyIgW3dpdGgtY29ubmVjdGlvbi1sb2NhbC12YXJpYWJsZXMt MSBtYWtlLWNsb3N1cmUgI1swICJcMzA1XDMwMlwzMDELXGZcMzAwJVwyMDciIFtWMCBWMSBWMiBz aGVsbC1maWxlLW5hbWUgc2hlbGwtY29tbWFuZC1zd2l0Y2ggc3RhcnQtZmlsZS1wcm9jZXNzXSA2 XV0gOSAoIyQgLiAxNDE3NjcpXSkjQDEyNDQgRXhlY3V0ZSB0aGUgc2hlbGwgY29tbWFuZCBDT01N QU5EIHN5bmNocm9ub3VzbHkgaW4gc2VwYXJhdGUgcHJvY2Vzcy4KVGhlIHJlbWFpbmluZyBhcmd1 bWVudHMgYXJlIG9wdGlvbmFsLgpUaGUgcHJvZ3JhbSdzIGlucHV0IGNvbWVzIGZyb20gZmlsZSBJ TkZJTEUgKG5pbCBtZWFucyBgL2Rldi9udWxsJykuCkluc2VydCBvdXRwdXQgaW4gQlVGRkVSIGJl Zm9yZSBwb2ludDsgdCBtZWFucyBjdXJyZW50IGJ1ZmZlcjsKIG5pbCBmb3IgQlVGRkVSIG1lYW5z IGRpc2NhcmQgaXQ7IDAgbWVhbnMgZGlzY2FyZCBhbmQgZG9uJ3Qgd2FpdC4KQlVGRkVSIGNhbiBh bHNvIGhhdmUgdGhlIGZvcm0gKFJFQUwtQlVGRkVSIFNUREVSUi1GSUxFKTsgaW4gdGhhdCBjYXNl LApSRUFMLUJVRkZFUiBzYXlzIHdoYXQgdG8gZG8gd2l0aCBzdGFuZGFyZCBvdXRwdXQsIGFzIGFi b3ZlLAp3aGlsZSBTVERFUlItRklMRSBzYXlzIHdoYXQgdG8gZG8gd2l0aCBzdGFuZGFyZCBlcnJv ciBpbiB0aGUgY2hpbGQuClNUREVSUi1GSUxFIG1heSBiZSBuaWwgKGRpc2NhcmQgc3RhbmRhcmQg ZXJyb3Igb3V0cHV0KSwKdCAobWl4IGl0IHdpdGggb3JkaW5hcnkgb3V0cHV0KSwgb3IgYSBmaWxl IG5hbWUgc3RyaW5nLgoKRm91cnRoIGFyZyBESVNQTEFZIG5vbi1uaWwgbWVhbnMgcmVkaXNwbGF5 IGJ1ZmZlciBhcyBvdXRwdXQgaXMgaW5zZXJ0ZWQuCldpbGRjYXJkcyBhbmQgcmVkaXJlY3Rpb24g YXJlIGhhbmRsZWQgYXMgdXN1YWwgaW4gdGhlIHNoZWxsLgoKSWYgQlVGRkVSIGlzIDAsIGBjYWxs LXByb2Nlc3Mtc2hlbGwtY29tbWFuZCcgcmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIHZhbHVlIG5p bC4KT3RoZXJ3aXNlIGl0IHdhaXRzIGZvciBDT01NQU5EIHRvIHRlcm1pbmF0ZSBhbmQgcmV0dXJu cyBhIG51bWVyaWMgZXhpdApzdGF0dXMgb3IgYSBzaWduYWwgZGVzY3JpcHRpb24gc3RyaW5nLgpJ ZiB5b3UgcXVpdCwgdGhlIHByb2Nlc3MgaXMga2lsbGVkIHdpdGggU0lHSU5ULCBvciBTSUdLSUxM IGlmIHlvdSBxdWl0IGFnYWluLgoKQW4gb2xkIGNhbGxpbmcgY29udmVudGlvbiBhY2NlcHRlZCBh bnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhZnRlciBESVNQTEFZLAp3aGljaCB3ZXJlIGp1c3QgY29u Y2F0ZW5hdGVkIHRvIENPTU1BTkQuICBUaGlzIGlzIHN0aWxsIHN1cHBvcnRlZCBidXQgc3Ryb25n bHkKZGlzY291cmFnZWQuCgooZm4gQ09NTUFORCAmb3B0aW9uYWwgSU5GSUxFIEJVRkZFUiBESVNQ TEFZICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ2NhbGwtcHJvY2Vzcy1zaGVsbC1jb21tYW5kICNb MTE1MyAiXDMwMggFBQUJXDMwM1wzMDQGXGYGCUJcMzA1IyYGXDIwNyIgW3NoZWxsLWZpbGUtbmFt ZSBzaGVsbC1jb21tYW5kLXN3aXRjaCBjYWxsLXByb2Nlc3MgbWFwY29uY2F0IGlkZW50aXR5ICIg Il0gMTUgKCMkIC4gMTQyMTg1KV0pCihzZXQtYWR2ZXJ0aXNlZC1jYWxsaW5nLWNvbnZlbnRpb24g J2NhbGwtcHJvY2Vzcy1zaGVsbC1jb21tYW5kICcoY29tbWFuZCAmb3B0aW9uYWwgaW5maWxlIGJ1 ZmZlciBkaXNwbGF5KSAiMjQuNSIpI0AxNzYgUHJvY2VzcyBmaWxlcyBzeW5jaHJvbm91c2x5IGlu IGEgc2VwYXJhdGUgcHJvY2Vzcy4KU2ltaWxhciB0byBgY2FsbC1wcm9jZXNzLXNoZWxsLWNvbW1h bmQnLCBidXQgY2FsbHMgYHByb2Nlc3MtZmlsZScuCgooZm4gQ09NTUFORCAmb3B0aW9uYWwgSU5G SUxFIEJVRkZFUiBESVNQTEFZICZyZXN0IEFSR1MpHwooZGVmYWxpYXMgJ3Byb2Nlc3MtZmlsZS1z aGVsbC1jb21tYW5kICNbMTE1MyAiXDMwMFwzMDFcMzAyAwUGBwYJBgsmBiFcMjA3IiBbd2l0aC1j b25uZWN0aW9uLWxvY2FsLXZhcmlhYmxlcy0xIG1ha2UtY2xvc3VyZSAjWzAgIlwzMDYNXDMwM1wz MDJcMzAxDlxuXDMwN1wzMTBcMzA0XDMwMEJcMzExIyYGXDIwNyIgW1YwIFYxIFYyIFYzIFY0IHNo ZWxsLWZpbGUtbmFtZSBwcm9jZXNzLWZpbGUgbWFwY29uY2F0IGlkZW50aXR5ICIgIiBzaGVsbC1j b21tYW5kLXN3aXRjaF0gMTBdXSAxMyAoIyQgLiAxNDM3MjQpXSkKKHNldC1hZHZlcnRpc2VkLWNh bGxpbmctY29udmVudGlvbiAncHJvY2Vzcy1maWxlLXNoZWxsLWNvbW1hbmQgJyhjb21tYW5kICZv cHRpb25hbCBpbmZpbGUgYnVmZmVyIGRpc3BsYXkpICIyNC41IikjQDEwMjMgU2VuZCB0ZXh0IGZy b20gU1RBUlQgdG8gRU5EIGFzIGlucHV0IHRvIGFuIGluZmVyaW9yIHNoZWxsIHJ1bm5pbmcgQ09N TUFORC4KRGVsZXRlIHRoZSB0ZXh0IGlmIGZvdXJ0aCBhcmcgREVMRVRFIGlzIG5vbi1uaWwuCgpJ bnNlcnQgb3V0cHV0IGluIEJVRkZFUiBiZWZvcmUgcG9pbnQ7IHQgbWVhbnMgY3VycmVudCBidWZm ZXI7IG5pbCBmb3IKIEJVRkZFUiBtZWFucyBkaXNjYXJkIGl0OyAwIG1lYW5zIGRpc2NhcmQgYW5k IGRvbid0IHdhaXQ7IGFuZCBgKDpmaWxlCiBGSUxFKScsIHdoZXJlIEZJTEUgaXMgYSBmaWxlIG5h bWUgc3RyaW5nLCBtZWFucyB0aGF0IGl0IHNob3VsZCBiZQogd3JpdHRlbiB0byB0aGF0IGZpbGUg KGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGl0IGlzIG92ZXJ3cml0dGVuKS4KQlVGRkVSIGNh biBhbHNvIGhhdmUgdGhlIGZvcm0gKFJFQUwtQlVGRkVSIFNUREVSUi1GSUxFKTsgaW4gdGhhdCBj YXNlLApSRUFMLUJVRkZFUiBzYXlzIHdoYXQgdG8gZG8gd2l0aCBzdGFuZGFyZCBvdXRwdXQsIGFz IGFib3ZlLAp3aGlsZSBTVERFUlItRklMRSBzYXlzIHdoYXQgdG8gZG8gd2l0aCBzdGFuZGFyZCBl cnJvciBpbiB0aGUgY2hpbGQuClNUREVSUi1GSUxFIG1heSBiZSBuaWwgKGRpc2NhcmQgc3RhbmRh cmQgZXJyb3Igb3V0cHV0KSwKdCAobWl4IGl0IHdpdGggb3JkaW5hcnkgb3V0cHV0KSwgb3IgYSBm aWxlIG5hbWUgc3RyaW5nLgoKSWYgQlVGRkVSIGlzIDAsIGBjYWxsLXNoZWxsLXJlZ2lvbicgcmV0 dXJucyBpbW1lZGlhdGVseSB3aXRoIHZhbHVlIG5pbC4KT3RoZXJ3aXNlIGl0IHdhaXRzIGZvciBD T01NQU5EIHRvIHRlcm1pbmF0ZQphbmQgcmV0dXJucyBhIG51bWVyaWMgZXhpdCBzdGF0dXMgb3Ig YSBzaWduYWwgZGVzY3JpcHRpb24gc3RyaW5nLgpJZiB5b3UgcXVpdCwgdGhlIHByb2Nlc3MgaXMg a2lsbGVkIHdpdGggU0lHSU5ULCBvciBTSUdLSUxMIGlmIHlvdSBxdWl0IGFnYWluLgoKKGZuIFNU QVJUIEVORCBDT01NQU5EICZvcHRpb25hbCBERUxFVEUgQlVGRkVSKR8KKGRlZmFsaWFzICdjYWxs LXNoZWxsLXJlZ2lvbiAjWzEyODMgIlwzMDIFBQgFBVwzMDMJBlxuJghcMjA3IiBbc2hlbGwtZmls ZS1uYW1lIHNoZWxsLWNvbW1hbmQtc3dpdGNoIGNhbGwtcHJvY2Vzcy1yZWdpb24gbmlsXSAxNCAo IyQgLiAxNDQzMTIpXSkjQDIwNiBFdmFsdWF0ZSBCT0RZIHdpdGggbW91c2UgbW92ZW1lbnQgZXZl bnRzIGVuYWJsZWQuCldpdGhpbiBhIGB0cmFjay1tb3VzZScgZm9ybSwgbW91c2UgbW90aW9uIGdl bmVyYXRlcyBpbnB1dCBldmVudHMgdGhhdAogeW91IGNhbiByZWFkIHdpdGggYHJlYWQtZXZlbnQn LgpOb3JtYWxseSwgbW91c2UgbW90aW9uIGlzIGlnbm9yZWQuCgooZm4gJnJlc3QgQk9EWSkfCihk ZWZhbGlhcyAndHJhY2stbW91c2UgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMVwzMDIDQkJEXDIw NyIgW2ludGVybmFsLS10cmFjay1tb3VzZSBsYW1iZGEgbmlsXSA1ICgjJCAuIDE0NTQ4NCldKSkK KGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMjEwXDMwNFwzMDFcMzA1XDMwNiNcMzAwXDIw NyIgW3B1dCB0cmFjay1tb3VzZSBlZGVidWctZm9ybS1zcGVjIChkZWYtYm9keSkgZnVuY3Rpb24t cHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDBdIDQpI0AyNTUgRXhlY3V0ZSB0aGUgZm9ybXMgaW4g Qk9EWSB3aXRoIEJVRkZFUi1PUi1OQU1FIHRlbXBvcmFyaWx5IGN1cnJlbnQuCkJVRkZFUi1PUi1O QU1FIG11c3QgYmUgYSBidWZmZXIgb3IgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnVmZmVyLgpU aGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGZvcm0gaW4gQk9EWS4g IFNlZQphbHNvIGB3aXRoLXRlbXAtYnVmZmVyJy4KCihmbiBCVUZGRVItT1ItTkFNRSAmcmVzdCBC T0RZKR8KKGRlZmFsaWFzICd3aXRoLWN1cnJlbnQtYnVmZmVyICcobWFjcm8gLiAjWzM4NSAiXDMw MFwzMDEDRAJCQlwyMDciIFtzYXZlLWN1cnJlbnQtYnVmZmVyIHNldC1idWZmZXJdIDUgKCMkIC4g MTQ1OTU2KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLWN1cnJlbnQtYnVmZmVyIGxpc3AtaW5kZW50LWZ1bmN0 aW9uIDEgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDE1IAoKKGZuIFdJTkRPVykfCihkZWZh bGlhcyAnaW50ZXJuYWwtLWJlZm9yZS13aXRoLXNlbGVjdGVkLXdpbmRvdyAjWzI1NyAiXDMwMAEh AVwzMDEgXDMwMiADPT9cMjA1EQBcMzAzAyFcMzAyIAQ9P1wyMDUcAFwzMDQEIUZcMjA3IiBbd2lu ZG93LWZyYW1lIHNlbGVjdGVkLXdpbmRvdyBzZWxlY3RlZC1mcmFtZSBmcmFtZS1zZWxlY3RlZC13 aW5kb3cgdHR5LXRvcC1mcmFtZV0gNyAoIyQgLiAxNDY0NzApXSkjQDE0IAoKKGZuIFNUQVRFKR8K KGRlZmFsaWFzICdpbnRlcm5hbC0tYWZ0ZXItd2l0aC1zZWxlY3RlZC13aW5kb3cgI1syNTcgIlwz MDBcMzAxAjghXDIwMycAXDMwMlwzMDECOFwzMDNcIlwyMTBcMzA0XDMwNQI4IVwyMDMnAFwzMDYg XDMwNQI4PVwyMDQnAFwzMDdcMzA1AjhcMzAzXCJcMjEwXDMwMAFBQCFcMjA1NQBcMzAyAUFAXDMw M1wiXDIwNyIgW3dpbmRvdy1saXZlLXAgMiBzZWxlY3Qtd2luZG93IG5vcmVjb3JkIGZyYW1lLWxp dmUtcCAzIHR0eS10b3AtZnJhbWUgc2VsZWN0LWZyYW1lXSA0ICgjJCAuIDE0NjcwNCldKSNAMjIx IENyZWF0ZSBhbmQgcmV0dXJuIGEgYnVmZmVyIHdpdGggYSBuYW1lIGJhc2VkIG9uIE5BTUUuCkNo b29zZSB0aGUgYnVmZmVyJ3MgbmFtZSB1c2luZyBgZ2VuZXJhdGUtbmV3LWJ1ZmZlci1uYW1lJy4K U2VlIGBnZXQtYnVmZmVyLWNyZWF0ZScgZm9yIHRoZSBtZWFuaW5nIG9mIElOSElCSVQtQlVGRkVS LUhPT0tTLgoKKGZuIE5BTUUgJm9wdGlvbmFsIElOSElCSVQtQlVGRkVSLUhPT0tTKR8KKGRlZmFs aWFzICdnZW5lcmF0ZS1uZXctYnVmZmVyICNbNTEzICJcMzAwXDMwMQMhAlwiXDIwNyIgW2dldC1i dWZmZXItY3JlYXRlIGdlbmVyYXRlLW5ldy1idWZmZXItbmFtZV0gNSAoIyQgLiAxNDcwMDQpXSkj QDc1OSBFeGVjdXRlIHRoZSBmb3JtcyBpbiBCT0RZIHdpdGggV0lORE9XIGFzIHRoZSBzZWxlY3Rl ZCB3aW5kb3cuClRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9y bSBpbiBCT0RZLgoKVGhpcyBtYWNybyBzYXZlcyBhbmQgcmVzdG9yZXMgdGhlIHNlbGVjdGVkIHdp bmRvdywgYXMgd2VsbCBhcyB0aGUKc2VsZWN0ZWQgd2luZG93IG9mIGVhY2ggZnJhbWUuICBJdCBk b2VzIG5vdCBjaGFuZ2UgdGhlIG9yZGVyIG9mCnJlY2VudGx5IHNlbGVjdGVkIHdpbmRvd3MuICBJ ZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCB3aW5kb3cgb2YKc29tZSBmcmFtZSBpcyBubyBsb25n ZXIgbGl2ZSBhdCB0aGUgZW5kIG9mIEJPRFksIHRoYXQgZnJhbWUncwpzZWxlY3RlZCB3aW5kb3cg aXMgbGVmdCBhbG9uZS4gIElmIHRoZSBzZWxlY3RlZCB3aW5kb3cgaXMgbm8KbG9uZ2VyIGxpdmUs IHRoZW4gd2hhdGV2ZXIgd2luZG93IGlzIHNlbGVjdGVkIGF0IHRoZSBlbmQgb2YgQk9EWQpyZW1h aW5zIHNlbGVjdGVkLgoKVGhpcyBtYWNybyB1c2VzIGBzYXZlLWN1cnJlbnQtYnVmZmVyJyB0byBz YXZlIGFuZCByZXN0b3JlIHRoZQpjdXJyZW50IGJ1ZmZlciwgc2luY2Ugb3RoZXJ3aXNlIGl0cyBu b3JtYWwgb3BlcmF0aW9uIGNvdWxkCnBvdGVudGlhbGx5IG1ha2UgYSBkaWZmZXJlbnQgYnVmZmVy IGN1cnJlbnQuICBJdCBkb2VzIG5vdCBhbHRlcgp0aGUgYnVmZmVyIGxpc3Qgb3JkZXJpbmcuCgoo Zm4gV0lORE9XICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtc2VsZWN0ZWQtd2luZG93ICco bWFjcm8gLiAjWzM4NSAiXDMwMFwzMDFcMzAyBEREQ1wzMDNcMzA0XDMwNVwzMDYGBkJCXDMwN0JC REVcMjA3IiBbbGV0IHNhdmUtc2VsZWN0ZWQtd2luZG93LS1zdGF0ZSBpbnRlcm5hbC0tYmVmb3Jl LXdpdGgtc2VsZWN0ZWQtd2luZG93IHNhdmUtY3VycmVudC1idWZmZXIgdW53aW5kLXByb3RlY3Qg cHJvZ24gKHNlbGVjdC13aW5kb3cgKGNhciBzYXZlLXNlbGVjdGVkLXdpbmRvdy0tc3RhdGUpICdu b3JlY29yZCkgKChpbnRlcm5hbC0tYWZ0ZXItd2l0aC1zZWxlY3RlZC13aW5kb3cgc2F2ZS1zZWxl Y3RlZC13aW5kb3ctLXN0YXRlKSldIDkgKCMkIC4gMTQ3MzUwKV0pKQooYnl0ZS1jb2RlICJcMzAw XDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLXNl bGVjdGVkLXdpbmRvdyBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVj IHRdIDUpI0AyOTIgRXhlY3V0ZSB0aGUgZm9ybXMgaW4gQk9EWSB3aXRoIEZSQU1FIGFzIHRoZSBz ZWxlY3RlZCBmcmFtZS4KVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFz dCBmb3JtIGluIEJPRFkuCgpUaGlzIG1hY3JvIHNhdmVzIGFuZCByZXN0b3JlcyB0aGUgc2VsZWN0 ZWQgZnJhbWUsIGFuZCBjaGFuZ2VzIHRoZQpvcmRlciBvZiBuZWl0aGVyIHRoZSByZWNlbnRseSBz ZWxlY3RlZCB3aW5kb3dzIG5vciB0aGUgYnVmZmVycyBpbgp0aGUgYnVmZmVyIGxpc3QuCgooZm4g RlJBTUUgJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1zZWxlY3RlZC1mcmFtZSAnKG1hY3Jv IC4gI1szODUgIlwzMDBcMzAxIVwzMDBcMzAyIVwzMDMCXDMwNEICXDMwNUJEXDMwNlwzMDdcMzEw BghcMzExQkIGB0JCXDMxMlwzMTMGB0RcMzEwBghcMzE0QkJFXDMxMlwzMTUGB0RcMzE2BghERUZF XDIwNyIgW21ha2Utc3ltYm9sICJvbGQtZnJhbWUiICJvbGQtYnVmZmVyIiBsZXQgKChzZWxlY3Rl ZC1mcmFtZSkpICgoY3VycmVudC1idWZmZXIpKSB1bndpbmQtcHJvdGVjdCBwcm9nbiBzZWxlY3Qt ZnJhbWUgKCdub3JlY29yZCkgd2hlbiBmcmFtZS1saXZlLXAgKCdub3JlY29yZCkgYnVmZmVyLWxp dmUtcCBzZXQtYnVmZmVyXSAxMyAoIyQgLiAxNDg2MTEpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAx XDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtc2VsZWN0 ZWQtZnJhbWUgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1 KSNANTkwIEV4ZWN1dGUgQk9EWSwgdGhlbiByZXN0b3JlIHByZXZpb3VzIHdpbmRvdyBjb25maWd1 cmF0aW9uLgpUaGlzIG1hY3JvIHNhdmVzIHRoZSB3aW5kb3cgY29uZmlndXJhdGlvbiBvbiB0aGUg c2VsZWN0ZWQgZnJhbWUsCmV4ZWN1dGVzIEJPRFksIHRoZW4gY2FsbHMgYHNldC13aW5kb3ctY29u ZmlndXJhdGlvbicgdG8gcmVzdG9yZQp0aGUgc2F2ZWQgd2luZG93IGNvbmZpZ3VyYXRpb24uICBU aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsYXN0CmZvcm0gaW4gQk9EWS4gIFRoZSB3aW5kb3cgY29u ZmlndXJhdGlvbiBpcyBhbHNvIHJlc3RvcmVkIGlmIEJPRFkKZXhpdHMgbm9ubG9jYWxseS4KCkJF V0FSRTogTW9zdCB1c2VzIG9mIHRoaXMgbWFjcm8gaW50cm9kdWNlIGJ1Z3MuCkUuZy4gaXQgc2hv dWxkIG5vdCBiZSB1c2VkIHRvIHRyeSBhbmQgcHJldmVudCBzb21lIGNvZGUgZnJvbSBvcGVuaW5n CmEgbmV3IHdpbmRvdywgc2luY2UgdGhhdCB3aW5kb3cgbWF5IHNvbWV0aW1lcyBhcHBlYXIgaW4g YW5vdGhlciBmcmFtZSwKaW4gd2hpY2ggY2FzZSBgc2F2ZS13aW5kb3ctZXhjdXJzaW9uJyBjYW5u b3QgaGVscC4KCihmbiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICdzYXZlLXdpbmRvdy1leGN1cnNp b24gJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMSFcMzAyAVwzMDNCQ1wzMDRcMzA1BUJcMzA2BURF RVwyMDciIFttYWtlLXN5bWJvbCAid2NvbmZpZyIgbGV0ICgoY3VycmVudC13aW5kb3ctY29uZmln dXJhdGlvbikpIHVud2luZC1wcm90ZWN0IHByb2duIHNldC13aW5kb3ctY29uZmlndXJhdGlvbl0g OCAoIyQgLiAxNDk0MDQpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFc MzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHNhdmUtd2luZG93LWV4Y3Vyc2lvbiBsaXNwLWlu ZGVudC1mdW5jdGlvbiAwIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0A2NiBJbnRlcm5hbCBm dW5jdGlvbiBmb3IgYHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyJy4KCihmbiBCVUZGRVIpHwoo ZGVmYWxpYXMgJ2ludGVybmFsLXRlbXAtb3V0cHV0LWJ1ZmZlci1zaG93ICNbMjU3ICJyXDIxMXFc MjEwXDMwNFwzMDUhXDIxMGViKVwyMTAIXDIwMxcACAEhXDIxMFwyMDJ1AHJcMjExcVwyMTAJXDMw Nj1cMjA0KwAJXDMwNz1cMjAzLwBcblwyMDMvAFwzMTBcMjAyMAAJGVwzMTEBISlcMjExXDIwNTwA XDMxMgEhAVwyMDNyAFwyMTFcMzEzID1cMjA0SwBcMzE0ASFcMjEwARNcMzE1AlwzMTZcIlwyMTBc MzE3AmVcMzEwI1wyMTBcMzIwAmVcIlwyMTBcMzIxAiFyXDMyMlwzMjMCXCJcMjE2XDMyNAFAXDMy NVwiXDIxMFwzMjZcMzI3ISpcMjY2AilcMjY2AlwzMDVcMjA3IiBbdGVtcC1idWZmZXItc2hvdy1m dW5jdGlvbiB3aW5kb3ctY29tYmluYXRpb24tbGltaXQgdGVtcC1idWZmZXItcmVzaXplLW1vZGUg bWluaWJ1ZmZlci1zY3JvbGwtd2luZG93IHNldC1idWZmZXItbW9kaWZpZWQtcCBuaWwgdGVtcC1i dWZmZXIgdGVtcC1idWZmZXItcmVzaXplIHQgZGlzcGxheS1idWZmZXIgd2luZG93LWZyYW1lIHNl bGVjdGVkLWZyYW1lIG1ha2UtZnJhbWUtdmlzaWJsZSBzZXQtd2luZG93LWhzY3JvbGwgMCBzZXQt d2luZG93LXN0YXJ0IHNldC13aW5kb3ctcG9pbnQgaW50ZXJuYWwtLWJlZm9yZS13aXRoLXNlbGVj dGVkLXdpbmRvdyBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMCFcMjA3IiBbVjAgaW50ZXJuYWwt LWFmdGVyLXdpdGgtc2VsZWN0ZWQtd2luZG93XSAyXSBzZWxlY3Qtd2luZG93IG5vcmVjb3JkIHJ1 bi1ob29rcyB0ZW1wLWJ1ZmZlci1zaG93LWhvb2tdIDcgKCMkIC4gMTUwMzU2KV0pI0AxNjc1IEJp bmQgYHN0YW5kYXJkLW91dHB1dCcgdG8gYnVmZmVyIEJVRk5BTUUsIGV2YWwgQk9EWSwgdGhlbiBz aG93IHRoYXQgYnVmZmVyLgoKVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIG1lYW50IGZvciBk aXNwbGF5aW5nIGhlbHAgYnVmZmVycyBhbmQKdGhlIGxpa2UuICBJdCBlbXB0aWVzIHRoZSBCVUZO QU1FIGJ1ZmZlciBiZWZvcmUgZXZhbHVhdGluZyBCT0RZCmFuZCBkaXNhYmxlcyB1bmRvIGluIHRo YXQgYnVmZmVyLgoKSXQgZG9lcyBub3QgbWFrZSB0aGUgYnVmZmVyIGN1cnJlbnQgZm9yIEJPRFku ICBJbnN0ZWFkIGl0IGJpbmRzCmBzdGFuZGFyZC1vdXRwdXQnIHRvIHRoYXQgYnVmZmVyLCBzbyB0 aGF0IG91dHB1dCBnZW5lcmF0ZWQgd2l0aApgcHJpbjEnIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBp biBCT0RZIGdvZXMgaW50byB0aGUgYnVmZmVyLgoKQXQgdGhlIGVuZCBvZiBCT0RZLCB0aGlzIG1h cmtzIGJ1ZmZlciBCVUZOQU1FIHVubW9kaWZpZWQgYW5kIGRpc3BsYXlzCml0IGluIGEgd2luZG93 LCBidXQgZG9lcyBub3Qgc2VsZWN0IGl0LiAgVGhlIG5vcm1hbCB3YXkgdG8gZG8gdGhpcyBpcwpi eSBjYWxsaW5nIGBkaXNwbGF5LWJ1ZmZlcicsIHRoZW4gcnVubmluZyBgdGVtcC1idWZmZXItc2hv dy1ob29rJy4KSG93ZXZlciwgaWYgYHRlbXAtYnVmZmVyLXNob3ctZnVuY3Rpb24nIGlzIG5vbi1u aWwsIGl0IGNhbGxzIHRoYXQKZnVuY3Rpb24gaW5zdGVhZCAoYW5kIGRvZXMgbm90IHJ1biBgdGVt cC1idWZmZXItc2hvdy1ob29rJykuICBUaGUKZnVuY3Rpb24gZ2V0cyBvbmUgYXJndW1lbnQsIHRo ZSBidWZmZXIgdG8gZGlzcGxheS4KClRoZSByZXR1cm4gdmFsdWUgb2YgYHdpdGgtb3V0cHV0LXRv LXRlbXAtYnVmZmVyJyBpcyB0aGUgdmFsdWUgb2YgdGhlCmxhc3QgZm9ybSBpbiBCT0RZLiAgSWYg Qk9EWSBkb2VzIG5vdCBmaW5pc2ggbm9ybWFsbHksIHRoZSBidWZmZXIKQlVGTkFNRSBpcyBub3Qg ZGlzcGxheWVkLgoKVGhpcyBydW5zIHRoZSBob29rIGB0ZW1wLWJ1ZmZlci1zZXR1cC1ob29rJyBi ZWZvcmUgQk9EWSwKd2l0aCB0aGUgYnVmZmVyIEJVRk5BTUUgdGVtcG9yYXJpbHkgY3VycmVudC4g IEl0IHJ1bnMgdGhlIGhvb2sKYHRlbXAtYnVmZmVyLXNob3ctaG9vaycgYWZ0ZXIgZGlzcGxheWlu ZyBidWZmZXIgQlVGTkFNRSwgd2l0aCB0aGF0CmJ1ZmZlciB0ZW1wb3JhcmlseSBjdXJyZW50LCBh bmQgdGhlIHdpbmRvdyB0aGF0IHdhcyB1c2VkIHRvIGRpc3BsYXkgaXQKdGVtcG9yYXJpbHkgc2Vs ZWN0ZWQuICBCdXQgaXQgZG9lc24ndCBydW4gYHRlbXAtYnVmZmVyLXNob3ctaG9vaycKaWYgaXQg dXNlcyBgdGVtcC1idWZmZXItc2hvdy1mdW5jdGlvbicuCgpCeSBkZWZhdWx0LCB0aGUgc2V0dXAg aG9vayBwdXRzIHRoZSBidWZmZXIgaW50byBIZWxwIG1vZGUgYmVmb3JlIHJ1bm5pbmcgQk9EWS4K SWYgQk9EWSBkb2VzIG5vdCBjaGFuZ2UgdGhlIG1ham9yIG1vZGUsIHRoZSBzaG93IGhvb2sgbWFr ZXMgdGhlIGJ1ZmZlcgpyZWFkLW9ubHksIGFuZCBzY2FucyBpdCBmb3IgZnVuY3Rpb24gYW5kIHZh cmlhYmxlIG5hbWVzIHRvIG1ha2UgdGhlbSBpbnRvCmNsaWNrYWJsZSBjcm9zcy1yZWZlcmVuY2Vz LgoKU2VlIHRoZSByZWxhdGVkIGZvcm0gYHdpdGgtdGVtcC1idWZmZXItd2luZG93Jy4KCihmbiBC VUZOQU1FICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVy ICcobWFjcm8gLiAjWzM4NSAiXDMwMFwzMDEhXDMwMFwzMDIhXDMwMwJcMzA0QgJcMzA1XDMwNgYI RFwzMDdcMzEwXDMxMVwzMTJcMzEzBgtFXDMxNEJCQkJFRFwzMTUEREVcMzA3XDMxNgYGQlwzMTcF REVFXDIwNyIgW21ha2Utc3ltYm9sICJvbGQtZGlyIiAiYnVmIiBsZXQqIChkZWZhdWx0LWRpcmVj dG9yeSkgd2l0aC1jdXJyZW50LWJ1ZmZlciBnZXQtYnVmZmVyLWNyZWF0ZSBwcm9nMSAoY3VycmVu dC1idWZmZXIpIChraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpIHNldHEgZGVmYXVsdC1kaXJlY3Rv cnkgKChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSAoc2V0cSBidWZmZXItZmlsZS1uYW1lIG5p bCkgKHNldHEgYnVmZmVyLXVuZG8tbGlzdCB0KSAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkg KGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKSAoZXJhc2UtYnVmZmVyKSAocnVuLWhvb2tz ICd0ZW1wLWJ1ZmZlci1zZXR1cC1ob29rKSkpIHN0YW5kYXJkLW91dHB1dCBwcm9nbiBpbnRlcm5h bC10ZW1wLW91dHB1dC1idWZmZXItc2hvd10gMTUgKCMkIC4gMTUxMjE5KV0pKQoocHV0ICd3aXRo LW91dHB1dC10by10ZW1wLWJ1ZmZlciAnZWRlYnVnLWZvcm0tc3BlYyB0KSNAMjk4IENyZWF0ZSBh IG5ldyBidWZmZXIsIGV2YWx1YXRlIEJPRFkgdGhlcmUsIGFuZCB3cml0ZSB0aGUgYnVmZmVyIHRv IEZJTEUuClRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBp biBCT0RZLgpUaGUgYnVmZmVyIGRvZXMgbm90IHJ1biB0aGUgaG9va3MgYGtpbGwtYnVmZmVyLWhv b2snLApga2lsbC1idWZmZXItcXVlcnktZnVuY3Rpb25zJywgYW5kIGBidWZmZXItbGlzdC11cGRh dGUtaG9vaycuClNlZSBhbHNvIGB3aXRoLXRlbXAtYnVmZmVyJy4KCihmbiBGSUxFICZyZXN0IEJP RFkpHwooZGVmYWxpYXMgJ3dpdGgtdGVtcC1maWxlICcobWFjcm8gLiAjWzM4NSAiXDMwMFwzMDEh XDMwMFwzMDIhXDMwMwIFRAJcMzA0QkRcMzA1XDMwNlwzMDcFBghCQlwzMDcGBlwzMTBcMzExXDIx MQYLXDMxMkJCQkJFRVwzMTNcMzE0BgZEXDMxNQYHREVFRVwyMDciIFttYWtlLXN5bWJvbCAidGVt cC1maWxlIiAidGVtcC1idWZmZXIiIGxldCAoKGdlbmVyYXRlLW5ldy1idWZmZXIgIiAqdGVtcCBm aWxlKiIgdCkpIHVud2luZC1wcm90ZWN0IHByb2cxIHdpdGgtY3VycmVudC1idWZmZXIgd3JpdGUt cmVnaW9uIG5pbCAobmlsIDApIGFuZCBidWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMTYgKCMkIC4g MTUzNTUwKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYj XDIwNyIgW2Z1bmN0aW9uLXB1dCB3aXRoLXRlbXAtZmlsZSBsaXNwLWluZGVudC1mdW5jdGlvbiAx IHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0A0MjggRGlzcGxheSBNRVNTQUdFIHRlbXBvcmFy aWx5IGlmIG5vbi1uaWwgd2hpbGUgQk9EWSBpcyBldmFsdWF0ZWQuClRoZSBvcmlnaW5hbCBtZXNz YWdlIGlzIHJlc3RvcmVkIHRvIHRoZSBlY2hvIGFyZWEgYWZ0ZXIgQk9EWSBoYXMgZmluaXNoZWQu ClRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgZm9ybSBpbiBCT0RZ LgpNRVNTQUdFIGlzIHdyaXR0ZW4gdG8gdGhlIG1lc3NhZ2UgbG9nIGJ1ZmZlciBpZiBgbWVzc2Fn ZS1sb2ctbWF4JyBpcyBub24tbmlsLgpJZiBNRVNTQUdFIGlzIG5pbCwgdGhlIGVjaG8gYXJlYSBh bmQgbWVzc2FnZSBsb2cgYnVmZmVyIGFyZSB1bmNoYW5nZWQuClVzZSBhIE1FU1NBR0Ugb2YgIiIg dG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIGVjaG8gYXJlYS4KCihmbiBNRVNTQUdFICZyZXN0IEJP RFkpHwooZGVmYWxpYXMgJ3dpdGgtdGVtcC1tZXNzYWdlICcobWFjcm8gLiAjWzM4NSAiXDMwMFwz MDEhXDMwMFwzMDIhXDMwMwEFRANDRFwzMDRcMzA1XDMwNgVcMzA3BghcMzEwQkJcMzExXDMxMgYJ RUYGB0JCXDMxMwVcMzE0BghcMzExXDMxMgYLRVwzMTVCQkJFRUVcMjA3IiBbbWFrZS1zeW1ib2wg ImN1cnJlbnQtbWVzc2FnZSIgIndpdGgtdGVtcC1tZXNzYWdlIiBsZXQgdW53aW5kLXByb3RlY3Qg cHJvZ24gd2hlbiBzZXRxICgoY3VycmVudC1tZXNzYWdlKSkgbWVzc2FnZSAiJXMiIGFuZCBpZiAo KG1lc3NhZ2UgbmlsKSldIDE1ICgjJCAuIDE1NDMzMildKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMjEwXDMwNFwzMDFcMzA1XDMwNiNcMzAwXDIwNyIgW3B1dCB3aXRoLXRlbXAtbWVz c2FnZSBlZGVidWctZm9ybS1zcGVjIHQgZnVuY3Rpb24tcHV0IGxpc3AtaW5kZW50LWZ1bmN0aW9u IDFdIDQpI0AyNTQgQ3JlYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciwgYW5kIGV2YWx1YXRlIEJPRFkg dGhlcmUgbGlrZSBgcHJvZ24nLgpUaGUgYnVmZmVyIGRvZXMgbm90IHJ1biB0aGUgaG9va3MgYGtp bGwtYnVmZmVyLWhvb2snLApga2lsbC1idWZmZXItcXVlcnktZnVuY3Rpb25zJywgYW5kIGBidWZm ZXItbGlzdC11cGRhdGUtaG9vaycuClNlZSBhbHNvIGB3aXRoLXRlbXAtZmlsZScgYW5kIGB3aXRo LW91dHB1dC10by1zdHJpbmcnLgoKKGZuICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtdGVt cC1idWZmZXIgJyhtYWNybyAuICNbMTI4ICJcMzAwXDMwMSFcMzAyAVwzMDNCQ1wzMDQDXDMwNVwz MDYGB0JcMzA3XDMxMAYIRFwzMTEGCURFRUVFXDIwNyIgW21ha2Utc3ltYm9sICJ0ZW1wLWJ1ZmZl ciIgbGV0ICgoZ2VuZXJhdGUtbmV3LWJ1ZmZlciAiICp0ZW1wKiIgdCkpIHdpdGgtY3VycmVudC1i dWZmZXIgdW53aW5kLXByb3RlY3QgcHJvZ24gYW5kIGJ1ZmZlci1uYW1lIGtpbGwtYnVmZmVyXSAx MiAoIyQgLiAxNTUyMjMpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFc MzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtdGVtcC1idWZmZXIgbGlzcC1pbmRlbnQt ZnVuY3Rpb24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNANTg1IEV4ZWN1dGUgQk9EWSwg cHJldGVuZGluZyBpdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGJ1ZmZlci4KVGhpcyBtYWNybyBpcyB0 eXBpY2FsbHkgdXNlZCBhcm91bmQgbW9kaWZpY2F0aW9ucyBvZgp0ZXh0IHByb3BlcnRpZXMgdGhh dCBkbyBub3QgcmVhbGx5IGFmZmVjdCB0aGUgYnVmZmVyJ3MgY29udGVudC4KSWYgQk9EWSBwZXJm b3JtcyByZWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJ1ZmZlcidzIHRleHQsIG90aGVyCnRoYW4g Y29zbWV0aWMgb25lcywgdW5kbyBkYXRhIG1heSBiZWNvbWUgY29ycnVwdGVkLgoKVGhpcyBtYWNy byB3aWxsIHJ1biBCT0RZIG5vcm1hbGx5LCBidXQgZG9lc24ndCBjb3VudCBpdHMgYnVmZmVyCm1v ZGlmaWNhdGlvbnMgYXMgYmVpbmcgYnVmZmVyIG1vZGlmaWNhdGlvbnMuICBUaGlzIGFmZmVjdHMg dGhpbmdzCmxpa2UgYGJ1ZmZlci1tb2RpZmllZC1wJywgY2hlY2tpbmcgd2hldGhlciB0aGUgZmls ZSBpcyBsb2NrZWQgYnkKc29tZW9uZSBlbHNlLCBydW5uaW5nIGJ1ZmZlciBtb2RpZmljYXRpb24g aG9va3MsIGFuZCBvdGhlciB0aGluZ3MKb2YgdGhhdCBuYXR1cmUuCgooZm4gJnJlc3QgQk9EWSkf CihkZWZhbGlhcyAnd2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucyAnKG1hY3JvIC4gI1sxMjggIlwz MDBcMzAxIVwzMDIBXDMwM0JcMzA0QlwzMDVcMzA2BUJcMzA3XDMxMFwzMTEGB0RcMzEyBghcMzEz QkJFXDMxNAYHREVFRVwyMDciIFttYWtlLXN5bWJvbCAibW9kaWZpZWQiIGxldCogKChidWZmZXIt bW9kaWZpZWQtcCkpICgoYnVmZmVyLXVuZG8tbGlzdCB0KSAoaW5oaWJpdC1yZWFkLW9ubHkgdCkg KGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKSB1bndpbmQtcHJvdGVjdCBwcm9nbiB3aGVu IG9yIG5vdCBlcSAoJ2F1dG9zYXZlZCkgcmVzdG9yZS1idWZmZXItbW9kaWZpZWQtcF0gMTIgKCMk IC4gMTU1ODgxKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwz MDVcMzA2I1wzMDBcMjA3IiBbcHV0IHdpdGgtc2lsZW50LW1vZGlmaWNhdGlvbnMgZWRlYnVnLWZv cm0tc3BlYyB0IGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAwXSA0KSNAOTEgRXhl Y3V0ZSBCT0RZLCByZXR1cm4gdGhlIHRleHQgaXQgc2VudCB0byBgc3RhbmRhcmQtb3V0cHV0Jywg YXMgYSBzdHJpbmcuCgooZm4gJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2l0aC1vdXRwdXQtdG8t c3RyaW5nICcobWFjcm8gLiAjWzEyOCAiXDMwMFwzMDFcMzAyXDMwM1wzMDBcMzA0BgZCQlwzMDVC QlwzMDZCQkVcMjA3IiBbbGV0ICgoc3RhbmRhcmQtb3V0cHV0IChnZW5lcmF0ZS1uZXctYnVmZmVy ICIgKnN0cmluZy1vdXRwdXQqIiB0KSkpIHVud2luZC1wcm90ZWN0IHByb2duICgoc3RhbmRhcmQt b3V0cHV0IHN0YW5kYXJkLW91dHB1dCkpICgod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1v dXRwdXQgKGJ1ZmZlci1zdHJpbmcpKSkgKChraWxsLWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQpKV0g OCAoIyQgLiAxNTY5NzUpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFc MzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IHdpdGgtb3V0cHV0LXRvLXN0cmluZyBsaXNwLWlu ZGVudC1mdW5jdGlvbiAwIHB1dCBlZGVidWctZm9ybS1zcGVjIHRdIDUpI0AyODkgRXhlY3V0ZSBC T0RZLCBhbGxvd2luZyBxdWl0cyB0byB0ZXJtaW5hdGUgQk9EWSBidXQgbm90IGVzY2FwZSBmdXJ0 aGVyLgpXaGVuIGEgcXVpdCB0ZXJtaW5hdGVzIEJPRFksIGB3aXRoLWxvY2FsLXF1aXQnIHJldHVy bnMgbmlsIGJ1dApyZXF1ZXN0cyBhbm90aGVyIHF1aXQuICBUaGF0IHF1aXQgd2lsbCBiZSBwcm9j ZXNzZWQgYXMgc29vbiBhcyBxdWl0dGluZwppcyBhbGxvd2VkIG9uY2UgYWdhaW4uICAoSW1tZWRp YXRlbHksIGlmIGBpbmhpYml0LXF1aXQnIGlzIG5pbC4pCgooZm4gJnJlc3QgQk9EWSkfCihkZWZh bGlhcyAnd2l0aC1sb2NhbC1xdWl0ICcobWFjcm8gLiAjWzEyOCAiXDMwMFwzMDFcMzAyXDMwMwRC QlwzMDRCQkJcMjA3IiBbY29uZGl0aW9uLWNhc2UgbmlsIGxldCAoKGluaGliaXQtcXVpdCBuaWwp KSAoKHF1aXQgKHNldHEgcXVpdC1mbGFnIHQpIChldmFsICcoaWdub3JlIG5pbCkgdCkpKV0gNiAo IyQgLiAxNTc1MzkpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDIxMFwzMDRcMzAx XDMwNVwzMDYjXDMwMFwyMDciIFtwdXQgd2l0aC1sb2NhbC1xdWl0IGVkZWJ1Zy1mb3JtLXNwZWMg dCBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMF0gNCkjQDI2MCBFeGVjdXRlIEJP RFkgb25seSBhcyBsb25nIGFzIHRoZXJlJ3Mgbm8gcGVuZGluZyBpbnB1dC4KSWYgaW5wdXQgYXJy aXZlcywgdGhhdCBlbmRzIHRoZSBleGVjdXRpb24gb2YgQk9EWSwKYW5kIGB3aGlsZS1uby1pbnB1 dCcgcmV0dXJucyB0LiAgUXVpdHRpbmcgbWFrZXMgaXQgcmV0dXJuIG5pbC4KSWYgQk9EWSBmaW5p c2hlcywgYHdoaWxlLW5vLWlucHV0JyByZXR1cm5zIHdoYXRldmVyIHZhbHVlIEJPRFkgcHJvZHVj ZWQuCgooZm4gJnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnd2hpbGUtbm8taW5wdXQgJyhtYWNybyAu ICNbMTI4ICJcMzAwXDMwMSFcMzAyXDMwM1wzMDQDRFwzMDVcMzA2XDMwNAYGRERcMzA3QlwzMTBc MzExXDMxMlwzMTNcMzE0BgtCRUVcMzE1QkJCRURcMjA3IiBbbWFrZS1zeW1ib2wgImlucHV0IiB3 aXRoLWxvY2FsLXF1aXQgY2F0Y2ggcXVvdGUgbGV0IHRocm93LW9uLWlucHV0ICh2YWwpIHNldHEg dmFsIG9yIChpbnB1dC1wZW5kaW5nLXApIHByb2duICgoY29uZCAoKGVxIHF1aXQtZmxhZyB0aHJv dy1vbi1pbnB1dCkgKHNldHEgcXVpdC1mbGFnIG5pbCkgdCkgKHF1aXQtZmxhZyBuaWwpICh0IHZh bCkpKV0gMTMgKCMkIC4gMTU4MTY1KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wy MTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IHdoaWxlLW5vLWlucHV0IGVkZWJ1Zy1m b3JtLXNwZWMgdCBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMF0gNCkjQDIxMiBM aWtlIGBjb25kaXRpb24tY2FzZScgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcHJldmVudCBkZWJ1 Z2dpbmcuCk1vcmUgc3BlY2lmaWNhbGx5IGlmIGBkZWJ1Zy1vbi1lcnJvcicgaXMgc2V0IHRoZW4g dGhlIGRlYnVnZ2VyIHdpbGwgYmUgaW52b2tlZApldmVuIGlmIHRoaXMgY2F0Y2hlcyB0aGUgc2ln bmFsLgoKKGZuIFZBUiBCT0RZRk9STSAmcmVzdCBIQU5ETEVSUykfCihkZWZhbGlhcyAnY29uZGl0 aW9uLWNhc2UtdW5sZXNzLWRlYnVnICcobWFjcm8gLiAjWzY0MiAiXDMwMAMDXDMwMVwzMDIFXCJC QkJcMjA3IiBbY29uZGl0aW9uLWNhc2UgbWFwY2FyICNbMjU3ICJcMzAwAUA8XDIwM1xmAAFAXDIw Mg8AAUBDQgFBQlwyMDciIFtkZWJ1Z10gMyAiXG5cbihmbiBIQU5ETEVSKSJdXSA5ICgjJCAuIDE1 ODkxNSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMjEwXDMwNFwzMDFcMzA1XDMw NiNcMzAwXDIwNyIgW3B1dCBjb25kaXRpb24tY2FzZS11bmxlc3MtZGVidWcgZWRlYnVnLWZvcm0t c3BlYyBjb25kaXRpb24tY2FzZSBmdW5jdGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMl0g NCkjQDQyMCBSdW4gQk9EWSBhbmQgZGVtb3RlIGFueSBlcnJvcnMgdG8gc2ltcGxlIG1lc3NhZ2Vz LgpGT1JNQVQgaXMgYSBzdHJpbmcgcGFzc2VkIHRvIGBtZXNzYWdlJyB0byBmb3JtYXQgYW55IGVy cm9yIG1lc3NhZ2UuCkl0IHNob3VsZCBjb250YWluIGEgc2luZ2xlICUtc2VxdWVuY2U7IGUuZy4s ICJFcnJvcjogJVMiLgoKSWYgYGRlYnVnLW9uLWVycm9yJyBpcyBub24tbmlsLCBydW4gQk9EWSB3 aXRob3V0IGNhdGNoaW5nIGl0cyBlcnJvcnMuClRoaXMgaXMgdG8gYmUgdXNlZCBhcm91bmQgY29k ZSB0aGF0IGlzIG5vdCBleHBlY3RlZCB0byBzaWduYWwgYW4gZXJyb3IKYnV0IHRoYXQgc2hvdWxk IGJlIHJvYnVzdCBpbiB0aGUgdW5leHBlY3RlZCBjYXNlIHRoYXQgYW4gZXJyb3IgaXMgc2lnbmFs ZWQuCgooZm4gRk9STUFUICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgtZGVtb3RlZC1lcnJv cnMgJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMSEBAztcMjAzEQACXDIwMxEAA1wyMDIbAANcMjAz GgADA0JcMjYyA1wzMDJcMzAzA1wzMDQGBiFcMzA1XDMwNgUGCEVcMzA3QkJGAgU9XDIwMzIAXDIw N1wzMTBcMzExAlwzMTJcMjExBgYlXDIwNyIgW21ha2Utc3ltYm9sICJlcnIiICJFcnJvcjogJVMi IGNvbmRpdGlvbi1jYXNlLXVubGVzcy1kZWJ1ZyBtYWNyb2V4cC1wcm9nbiBlcnJvciBtZXNzYWdl IChuaWwpIG1hY3JvZXhwLXdhcm4tYW5kLXJldHVybiAiTWlzc2luZyBmb3JtYXQgYXJndW1lbnQi IG5pbF0gMTIgKCMkIC4gMTU5NDk0KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wy MTBcMzA0XDMwMVwzMDVcMzA2I1wzMDBcMjA3IiBbcHV0IHdpdGgtZGVtb3RlZC1lcnJvcnMgZWRl YnVnLWZvcm0tc3BlYyB0IGZ1bmN0aW9uLXB1dCBsaXNwLWluZGVudC1mdW5jdGlvbiAxXSA0KSNA NTE0IEV4ZWN1dGUgQk9EWSwgYnV0IGRvbid0IGNhbGwgdGhlIGFmdGVyLWNoYW5nZSBmdW5jdGlv bnMgdGlsbCB0aGUgZW5kLgpJZiBCT0RZIG1ha2VzIGNoYW5nZXMgaW4gdGhlIGJ1ZmZlciwgdGhl eSBhcmUgcmVjb3JkZWQKYW5kIHRoZSBmdW5jdGlvbnMgb24gYGFmdGVyLWNoYW5nZS1mdW5jdGlv bnMnIGFyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcwp3aGVuIEJPRFkgaXMgZmluaXNoZWQuClRoZSBy ZXR1cm4gdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGZvcm0gaW4gQk9EWS4KCklmIGBi ZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucycgaXMgbm9uLW5pbCwgdGhlbiBjYWxscyB0byB0aGUgYWZ0 ZXItY2hhbmdlCmZ1bmN0aW9ucyBjYW4ndCBiZSBkZWZlcnJlZCwgc28gaW4gdGhhdCBjYXNlIHRo aXMgbWFjcm8gaGFzIG5vIGVmZmVjdC4KCkRvIG5vdCBhbHRlciBgYWZ0ZXItY2hhbmdlLWZ1bmN0 aW9ucycgb3IgYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJwppbiBCT0RZLgoKKGZuICZyZXN0IEJP RFkpHwooZGVmYWxpYXMgJ2NvbWJpbmUtYWZ0ZXItY2hhbmdlLWNhbGxzICcobWFjcm8gLiAjWzEy OCAiXDMwMFwzMDFcMzAyA0JCXDMwM0JCXDIwNyIgW3Vud2luZC1wcm90ZWN0IGxldCAoKGNvbWJp bmUtYWZ0ZXItY2hhbmdlLWNhbGxzIHQpKSAoKGNvbWJpbmUtYWZ0ZXItY2hhbmdlLWV4ZWN1dGUp KV0gNSAoIyQgLiAxNjA0MDIpXSkpCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwz MDFcMzA1XDMwNiNcMjA3IiBbZnVuY3Rpb24tcHV0IGNvbWJpbmUtYWZ0ZXItY2hhbmdlLWNhbGxz IGxpc3AtaW5kZW50LWZ1bmN0aW9uIDAgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDUxIE5v bi1uaWwgd2hlbiBgY29tYmluZS1jaGFuZ2UtY2FsbHMtMScgaXMgcnVubmluZy4fCihkZWZ2YXIg dW5kby0tY29tYmluaW5nLWNoYW5nZS1jYWxscyBuaWwgKCMkIC4gMTYxMjUxKSkjQDk0NyBFdmFs dWF0ZSBCT0RZLCBydW5uaW5nIHRoZSBjaGFuZ2UgaG9va3MganVzdCBvbmNlLCBmb3IgcmVnaW9u IChCRUcgRU5EKS4KCkZpcnN0bHksIGBiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucycgaXMgaW52b2tl ZCBmb3IgdGhlIHJlZ2lvbgooQkVHIEVORCksIHRoZW4gQk9EWSAoYSBmdW5jdGlvbikgaXMgZXZh bHVhdGVkIHdpdGgKYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBhbmQgYGFmdGVyLWNoYW5nZS1m dW5jdGlvbnMnIGJvdW5kIHRvCm5pbCwgdGhlbiBmaW5hbGx5IGBhZnRlci1jaGFuZ2UtZnVuY3Rp b25zJyBpcyBpbnZva2VkIG9uIHRoZQp1cGRhdGVkIHJlZ2lvbiAoQkVHIE5FVy1FTkQpIHdpdGgg YSBjYWxjdWxhdGVkIE9MRC1MRU4gYXJndW1lbnQuCklmIGBpbmhpYml0LW1vZGlmaWNhdGlvbi1o b29rcycgaXMgaW5pdGlhbGx5IG5vbi1uaWwsIHRoZSBjaGFuZ2UKaG9va3MgYXJlIG5vdCBydW4u CgpUaGUgcmVzdWx0IG9mIGBjb21iaW5lLWNoYW5nZS1jYWxscy0xJyBpcyB0aGUgdmFsdWUgcmV0 dXJuZWQgYnkKQk9EWS4gIEJPRFkgbXVzdCBub3QgbWFrZSBhIGRpZmZlcmVudCBidWZmZXIgY3Vy cmVudCwgZXhjZXB0CnRlbXBvcmFyaWx5LiAgSXQgbXVzdCBub3QgbWFrZSBhbnkgY2hhbmdlcyB0 byB0aGUgYnVmZmVyIG91dHNpZGUKdGhlIHNwZWNpZmllZCByZWdpb24uICBJdCBtdXN0IG5vdCBj aGFuZ2UKYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBvciBgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9u cycuCgpBZGRpdGlvbmFsbHksIHRoZSBidWZmZXIgbW9kaWZpY2F0aW9ucyBvZiBCT0RZIGFyZSBy ZWNvcmRlZCBvbgp0aGUgYnVmZmVyJ3MgdW5kbyBsaXN0IGFzIGEgc2luZ2xlIChhcHBseSAuLi4p IGVudHJ5IGNvbnRhaW5pbmcKdGhlIGZ1bmN0aW9uIGB1bmRvLS13cmFwLWFuZC1ydW4tcHJpbWl0 aXZlLXVuZG8nLgoKKGZuIEJFRyBFTkQgQk9EWSkfCihkZWZhbGlhcyAnY29tYmluZS1jaGFuZ2Ut Y2FsbHMtMSAjWzc3MSAiXDMwNQMhXDIwMwsAXDMwNgMhXDI2MgNcMzA1AiFcMjAzFgBcMzA2AiFc MjYyAghcMzA3A1wzMTBcIlwzMTEJXDIwMycAAyBcMjYyAVwyMDJcMzMyAFwzMTAZXG5cMjA0NQBc MzEyXDMwMwYHBgcjXDIxMAtcZlwzMTNcMzAzIVwzMTNcMzA0IVwzMTRcMzE1AgQGBgYIJVwyMTZc MzE2XDMwMyFcMjEwXDMxNwQ+XDIwNVIAXDMyMBNcMzE2XDMwNCFcMjEwXDMxMRQGByApXDI2Nlwy MDUIXDMxMD1cMjA0XDMwNwBcMzIxBQNaBgdcMzA2BSFcMzIyBlxuXDMwNgYIIQhcMjU3CAhcMjEx BT1cMjA0XDMwNQBcMjExQQU9XDIwNFwyNjAAXDIxMUFcMjAzXDI2MABcMjExQTpcMjAzXDI1MQBc MjExQUA6XDIwM1wyNTEAXDIxMUFAQFwzMTA9XDIwM1wyNTEAXDIxMUFcMjExXDI2MgZcMjA0XDI2 MABcMjExQVwyNjIBXDIwMn8AXDIxMUFcMjA0XDI3MQBcMzIzXDMyNCFcMjEwXDIxMVwzMTFcMjQx XDIxMAEIQlwyMTEQBVwyNDFcMjEwXDI2NgJcblwyMDRcMzMxAFwzMTJcMzA0BgdcMzA2BSEGCAZc blokXDIxMCkBXDMxMVwyMTFcMjIzXDIxMFwyMDciIFtidWZmZXItdW5kby1saXN0IHVuZG8tLWNv bWJpbmluZy1jaGFuZ2UtY2FsbHMgaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgYmVmb3JlLWNo YW5nZS1mdW5jdGlvbnMgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyBtYXJrZXJwIG1hcmtlci1wb3Np dGlvbiBjb3B5LW1hcmtlciB0IG5pbCBydW4taG9vay13aXRoLWFyZ3MgbG9jYWwtdmFyaWFibGUt cCBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDIwMwkAXDMwMxRcMjAyDQBcMzA2XDMwNCFcMjEwXDMw MFwyMDMVAFwzMDJcMjExFVwyMDdcMzA2XDMwNSFcMjA3IiBbVjAgVjEgVjIgVjMgYmVmb3JlLWNo YW5nZS1mdW5jdGlvbnMgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyBraWxsLWxvY2FsLXZhcmlhYmxl XSAyXSBtYWtlLWxvY2FsLXZhcmlhYmxlIHN5bnRheC1wcHNzLWZsdXNoLWNhY2hlIChzeW50YXgt cHBzcy1mbHVzaC1jYWNoZSkgYXBwbHkgdW5kby0td3JhcC1hbmQtcnVuLXByaW1pdGl2ZS11bmRv IG1lc3NhZ2UgImNvbWJpbmUtY2hhbmdlLWNhbGxzOiBidWZmZXItdW5kby1saXN0IGJyb2tlbiJd IDE3ICgjJCAuIDE2MTM2MyldKSNAMTAxMyBFdmFsdWF0ZSBCT0RZLCBydW5uaW5nIHRoZSBjaGFu Z2UgaG9va3MganVzdCBvbmNlLgoKQk9EWSBpcyBhIHNlcXVlbmNlIG9mIExpc3AgZm9ybXMgdG8g ZXZhbHVhdGUuICBCRUcgYW5kIEVORCBib3VuZAp0aGUgcmVnaW9uIHRoZSBjaGFuZ2UgaG9va3Mg d2lsbCBiZSBydW4gZm9yLgoKRmlyc3RseSwgYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBpcyBp bnZva2VkIGZvciB0aGUgcmVnaW9uCihCRUcgRU5EKSwgdGhlbiB0aGUgQk9EWSBmb3JtcyBhcmUg ZXZhbHVhdGVkIHdpdGgKYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zJyBhbmQgYGFmdGVyLWNoYW5n ZS1mdW5jdGlvbnMnIGJvdW5kIHRvCm5pbCwgYW5kIGZpbmFsbHkgYGFmdGVyLWNoYW5nZS1mdW5j dGlvbnMnIGlzIGludm9rZWQgb24gdGhlCnVwZGF0ZWQgcmVnaW9uLiAgVGhlIGNoYW5nZSBob29r cyBhcmUgbm90IHJ1biBpZgpgaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MnIGlzIGluaXRpYWxs eSBub24tbmlsLgoKVGhlIHJlc3VsdCBvZiBgY29tYmluZS1jaGFuZ2UtY2FsbHMnIGlzIHRoZSB2 YWx1ZSByZXR1cm5lZCBieSB0aGUKbGFzdCBvZiB0aGUgQk9EWSBmb3JtcyB0byBiZSBldmFsdWF0 ZWQuICBCT0RZIG1heSBub3QgbWFrZSBhCmRpZmZlcmVudCBidWZmZXIgY3VycmVudCwgZXhjZXB0 IHRlbXBvcmFyaWx5LiAgQk9EWSBtYXkgbm90CmNoYW5nZSB0aGUgYnVmZmVyIG91dHNpZGUgdGhl IHNwZWNpZmllZCByZWdpb24uICBJdCBtdXN0IG5vdApjaGFuZ2UgYGJlZm9yZS1jaGFuZ2UtZnVu Y3Rpb25zJyBvciBgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucycuCgpBZGRpdGlvbmFsbHksIHRoZSBi dWZmZXIgbW9kaWZpY2F0aW9ucyBvZiBCT0RZIGFyZSByZWNvcmRlZCBvbgp0aGUgYnVmZmVyJ3Mg dW5kbyBsaXN0IGFzIGEgc2luZ2xlIChhcHBseSAuLi4pIGVudHJ5IGNvbnRhaW5pbmcKdGhlIGZ1 bmN0aW9uIGB1bmRvLS13cmFwLWFuZC1ydW4tcHJpbWl0aXZlLXVuZG8nLgoKKGZuIEJFRyBFTkQg JnJlc3QgQk9EWSkfCihkZWZhbGlhcyAnY29tYmluZS1jaGFuZ2UtY2FsbHMgJyhtYWNybyAuICNb NjQyICJcMzAwAwNcMzAxXDMwMgVCQkZcMjA3IiBbY29tYmluZS1jaGFuZ2UtY2FsbHMtMSBsYW1i ZGEgbmlsXSA5ICgjJCAuIDE2MzQ0NSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNc MjEwXDMwNFwzMDFcMzA1XDMwNiNcMzAwXDIwNyIgW3B1dCBjb21iaW5lLWNoYW5nZS1jYWxscyBl ZGVidWctZm9ybS1zcGVjIChmb3JtIGZvcm0gZGVmLWJvZHkpIGZ1bmN0aW9uLXB1dCBsaXNwLWlu ZGVudC1mdW5jdGlvbiAyXSA0KSNANTg3IENhbGwgYHByaW1pdGl2ZS11bmRvJyBvbiB0aGUgdW5k byBlbGVtZW50cyBpbiBMSVNULgoKVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxs ZWQgcHVyZWx5IGJ5IGB1bmRvJyBhcyB0aGUKZnVuY3Rpb24gaW4gYW4gKGFwcGx5IERFTFRBIEJF RyBFTkQgRlVOTkFNRSAuIEFSR1MpIHVuZG8KZWxlbWVudC4gIEl0IGludm9rZXMgYGJlZm9yZS1j aGFuZ2UtZnVuY3Rpb25zJyBhbmQKYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnIG9uY2UgZWFjaCBm b3IgdGhlIGVudGlyZSByZWdpb24gKEJFRwpFTkQpIHJhdGhlciB0aGFuIG9uY2UgZm9yIGVhY2gg aW5kaXZpZHVhbCBjaGFuZ2UuCgpBZGRpdGlvbmFsbHkgdGhlIGZyZXNoICJyZWRvIiBlbGVtZW50 cyB3aGljaCBhcmUgZ2VuZXJhdGVkIG9uCmBidWZmZXItdW5kby1saXN0JyB3aWxsIHRoZW1zZWx2 ZXMgYmUgImVuY2xvc2VkIiBpbgpgdW5kby0td3JhcC1hbmQtcnVuLXByaW1pdGl2ZS11bmRvJy4K ClVuZG8gZWxlbWVudHMgb2YgdGhpcyBmb3JtIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIG1hY3JvCmBj b21iaW5lLWNoYW5nZS1jYWxscycuCgooZm4gQkVHIEVORCBMSVNUKR8KKGRlZmFsaWFzICd1bmRv LS13cmFwLWFuZC1ydW4tcHJpbWl0aXZlLXVuZG8gI1s3NzEgIlwyMTFDXDMwMAQEXDMwMVwzMDIF XCIjXDIwNyIgW2NvbWJpbmUtY2hhbmdlLWNhbGxzLTEgbWFrZS1jbG9zdXJlICNbMCAiXDMwMFwy NDJcMjA1EABcMzAwXDMwMVwzMDJcMzAwXDI0MlwiXDI0MFwyMTBcMjAyAABcMjA3IiBbVjAgcHJp bWl0aXZlLXVuZG8gMV0gNF1dIDEwICgjJCAuIDE2NDc1NSldKSNAMTQ2IEV4ZWN1dGUgdGhlIGZv cm1zIGluIEJPRFkgd2l0aCBUQUJMRSBhcyB0aGUgY3VycmVudCBjYXNlIHRhYmxlLgpUaGUgdmFs dWUgcmV0dXJuZWQgaXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGZvcm0gaW4gQk9EWS4KCihmbiBU QUJMRSAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3aXRoLWNhc2UtdGFibGUgJyhtYWNybyAuICNb Mzg1ICJcMzAwXDMwMSFcMzAwXDMwMiFcMzAzAlwzMDRCAlwzMDVCRFwzMDZcMzA3XDMxMAYIRAYH QkJcMzExBVwzMTAGCERFRUVcMjA3IiBbbWFrZS1zeW1ib2wgInRhYmxlIiAiYnVmZmVyIiBsZXQg KChjdXJyZW50LWNhc2UtdGFibGUpKSAoKGN1cnJlbnQtYnVmZmVyKSkgdW53aW5kLXByb3RlY3Qg cHJvZ24gc2V0LWNhc2UtdGFibGUgd2l0aC1jdXJyZW50LWJ1ZmZlcl0gMTIgKCMkIC4gMTY1NTcx KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIg W2Z1bmN0aW9uLXB1dCB3aXRoLWNhc2UtdGFibGUgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQg ZWRlYnVnLWZvcm0tc3BlYyB0XSA1KSNAMTM1IEV4ZWN1dGUgQk9EWSB3aXRoIGRlZmF1bHQgZmls ZSBwZXJtaXNzaW9ucyB0ZW1wb3JhcmlseSBzZXQgdG8gTU9ERVMuCk1PREVTIGlzIGFzIGZvciBg c2V0LWRlZmF1bHQtZmlsZS1tb2RlcycuCgooZm4gTU9ERVMgJnJlc3QgQk9EWSkfCihkZWZhbGlh cyAnd2l0aC1maWxlLW1vZGVzICcobWFjcm8gLiAjWzM4NSAiXDMwMFwzMDEhXDMwMgFcMzAzQkNc MzA0XDMwNVwzMDYGB0QGBkJCXDMwNgVERUVcMjA3IiBbbWFrZS1zeW1ib2wgInVtYXNrIiBsZXQg KChkZWZhdWx0LWZpbGUtbW9kZXMpKSB1bndpbmQtcHJvdGVjdCBwcm9nbiBzZXQtZGVmYXVsdC1m aWxlLW1vZGVzXSA5ICgjJCAuIDE2NjEyNildKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMw MyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1maWxlLW1vZGVzIGxp c3AtaW5kZW50LWZ1bmN0aW9uIDEgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDE2MyBFeGVj dXRlIEJPRFkgd2l0aCBgZGVmYXVsdC1kaXJlY3RvcnknIGJvdW5kIHRvIGFuIGV4aXN0aW5nIGRp cmVjdG9yeS4KSWYgYGRlZmF1bHQtZGlyZWN0b3J5JyBpcyBhbHJlYWR5IGFuIGV4aXN0aW5nIGRp cmVjdG9yeSwgaXQncyBub3QgY2hhbmdlZC4KCihmbiAmcmVzdCBCT0RZKR8KKGRlZmFsaWFzICd3 aXRoLWV4aXN0aW5nLWRpcmVjdG9yeSAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxAkJCXDIwNyIg W2xldCAoKGRlZmF1bHQtZGlyZWN0b3J5IChzZXEtZmluZCAobGFtYmRhIChkaXIpIChhbmQgZGly IChmaWxlLWV4aXN0cy1wIGRpcikpKSAobGlzdCBkZWZhdWx0LWRpcmVjdG9yeSAoZXhwYW5kLWZp bGUtbmFtZSAifi8iKSB0ZW1wb3JhcnktZmlsZS1kaXJlY3RvcnkgKGdldGVudiAiVE1QRElSIikg Ii90bXAvIikgIi8iKSkpXSA0ICgjJCAuIDE2NjYwNyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFc MzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1leGlzdGlu Zy1kaXJlY3RvcnkgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMCBwdXQgZWRlYnVnLWZvcm0tc3BlYyB0 XSA1KSNAMzkxIEV4ZWN1dGUgdGhlIEJPRFkgZm9ybXMsIHJlc3RvcmluZyB0aGUgZ2xvYmFsIHZh bHVlIG9mIHRoZSBtYXRjaCBkYXRhLgpUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHZhbHVlIG9m IHRoZSBsYXN0IGZvcm0gaW4gQk9EWS4KTk9URTogVGhlIGNvbnZlbnRpb24gaW4gRWxpc3AgaXMg dGhhdCBhbnkgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgYSBmZXcKZXhjZXB0aW9ucyBsaWtlIGNhci9h c3NvYy8rL2dvdG8tY2hhciwgY2FuIGNsb2JiZXIgdGhlIG1hdGNoIGRhdGEsCnNvIGBzYXZlLW1h dGNoLWRhdGEnIHNob3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIHNhdmUgKnlvdXIqIG1hdGNoIGRh dGEKcmF0aGVyIHRoYW4geW91ciBjYWxsZXIncyBtYXRjaCBkYXRhLgoKKGZuICZyZXN0IEJPRFkp HwooZGVmYWxpYXMgJ3NhdmUtbWF0Y2gtZGF0YSAnKG1hY3JvIC4gI1sxMjggIlwzMDBcMzAxIVwz MDIBXDMwM0RDXDMwNFwzMDUFQlwzMDYFXDMwN0VFRVwyMDciIFttYWtlLXN5bWJvbCAic2F2ZWQt bWF0Y2gtZGF0YSIgbGV0IChtYXRjaC1kYXRhKSB1bndpbmQtcHJvdGVjdCBwcm9nbiBzZXQtbWF0 Y2gtZGF0YSB0XSA5ICgjJCAuIDE2NzE5MSldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMw MyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgc2F2ZS1tYXRjaC1kYXRhIGxp c3AtaW5kZW50LWZ1bmN0aW9uIDAgcHV0IGVkZWJ1Zy1mb3JtLXNwZWMgdF0gNSkjQDk2NyBSZXR1 cm4gdGhlIHN0cmluZyBvZiB0ZXh0IG1hdGNoZWQgYnkgdGhlIHByZXZpb3VzIHNlYXJjaCBvciBy ZWdleHAgb3BlcmF0aW9uLgpOVU0gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhlIHBhcmVudGhl c2l6ZWQgc3ViLWV4cHJlc3Npb24gaW4gdGhlIGxhc3QKcmVnZXhwIHdob3NlIG1hdGNoIHRvIHJl dHVybi4gIFplcm8gbWVhbnMgcmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlCmVudGlyZSBy ZWdleHAgb3IgdGhlIHdob2xlIHN0cmluZy4KClRoZSByZXR1cm4gdmFsdWUgaXMgbmlsIGlmIE5V TXRoIHBhaXIgZGlkbid0IG1hdGNoIGFueXRoaW5nLCBvciBpZiB0aGVyZQp3ZXJlIGZld2VyIHRo YW4gTlVNIHN1Yi1leHByZXNzaW9ucyBpbiB0aGUgcmVnZXhwIHVzZWQgaW4gdGhlIHNlYXJjaC4K ClNUUklORyBzaG91bGQgYmUgZ2l2ZW4gaWYgdGhlIGxhc3Qgc2VhcmNoIHdhcyBieSBgc3RyaW5n LW1hdGNoJwpvbiBTVFJJTkcuICBJZiBTVFJJTkcgaXMgbmlsLCB0aGUgY3VycmVudCBidWZmZXIg c2hvdWxkIGJlIHRoZQpzYW1lIGJ1ZmZlciBhcyB0aGUgb25lIGluIHdoaWNoIHRoZSBzZWFyY2gv bWF0Y2ggd2FzIHBlcmZvcm1lZC4KCk5vdGUgdGhhdCBtYW55IGZ1bmN0aW9ucyBpbiBFbWFjcyBt b2RpZnkgdGhlIG1hdGNoIGRhdGEsIHNvIHRoaXMKZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCAi Y2xvc2UiIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGRpZCB0aGUKcmVnZXhwIHNlYXJjaC4gIEluIHBh cnRpY3VsYXIsIHNheWluZyAoZm9yIGluc3RhbmNlKQpgTS06IChsb29raW5nLWF0ICJbMC05XSIp IFJFVCcgZm9sbG93ZWQgYnkgYE0tOiAobWF0Y2gtc3RyaW5nIDApIFJFVCcKaW50ZXJhY3RpdmVs eSBpcyBzZWxkb20gbWVhbmluZ2Z1bCwgc2luY2UgdGhlIEVtYWNzIGNvbW1hbmQgbG9vcAptYXkg bW9kaWZ5IHRoZSBtYXRjaCBkYXRhLgoKKGZuIE5VTSAmb3B0aW9uYWwgU1RSSU5HKR8KKGRlZmFs aWFzICdtYXRjaC1zdHJpbmcgI1s1MTMgIgFcMjI0XDIwNRUAXDIxMVwyMDMQAFwyMTECXDIyNANc MjI1T1wyMDcBXDIyNAJcMjI1e1wyMDciIFtdIDUgKCMkIC4gMTY3OTE4KV0pCihieXRlLWNvZGUg IlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgbWF0Y2gtc3RyaW5nIHNp ZGUtZWZmZWN0LWZyZWUgdF0gNCkjQDQ4NiBSZXR1cm4gc3RyaW5nIG9mIHRleHQgbWF0Y2hlZCBi eSBsYXN0IHNlYXJjaCwgd2l0aG91dCB0ZXh0IHByb3BlcnRpZXMuCk5VTSBzcGVjaWZpZXMgd2hp Y2ggcGFyZW50aGVzaXplZCBleHByZXNzaW9uIGluIHRoZSBsYXN0IHJlZ2V4cC4KIFZhbHVlIGlz IG5pbCBpZiBOVU10aCBwYWlyIGRpZG4ndCBtYXRjaCwgb3IgdGhlcmUgd2VyZSBsZXNzIHRoYW4g TlVNIHBhaXJzLgpaZXJvIG1lYW5zIHRoZSBlbnRpcmUgdGV4dCBtYXRjaGVkIGJ5IHRoZSB3aG9s ZSByZWdleHAgb3Igd2hvbGUgc3RyaW5nLgpTVFJJTkcgc2hvdWxkIGJlIGdpdmVuIGlmIHRoZSBs YXN0IHNlYXJjaCB3YXMgYnkgYHN0cmluZy1tYXRjaCcgb24gU1RSSU5HLgpJZiBTVFJJTkcgaXMg bmlsLCB0aGUgY3VycmVudCBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlcgp0aGUgc2Vh cmNoL21hdGNoIHdhcyBwZXJmb3JtZWQgaW4uCgooZm4gTlVNICZvcHRpb25hbCBTVFJJTkcpHwoo ZGVmYWxpYXMgJ21hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzICNbNTEzICIBXDIyNFwyMDUXAFwy MTFcMjAzEQBcMzAwAQNcMjI0BFwyMjUjXDIwN1wzMDECXDIyNANcMjI1XCJcMjA3IiBbc3Vic3Ry aW5nLW5vLXByb3BlcnRpZXMgYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzXSA2ICgjJCAu IDE2OTA4OCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rp b24tcHV0IG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIHNpZGUtZWZmZWN0LWZyZWUgdF0gNCkj QDM0MiBSZXR1cm4gUkVQTEFDRU1FTlQgYXMgaXQgd2lsbCBiZSBpbnNlcnRlZCBieSBgcmVwbGFj ZS1tYXRjaCcuCkluIG90aGVyIHdvcmRzLCBhbGwgYmFjay1yZWZlcmVuY2VzIGluIHRoZSBmb3Jt IGBcJicgYW5kIGBcTicKYXJlIHN1YnN0aXR1dGVkIHdpdGggYWN0dWFsIHN0cmluZ3MgbWF0Y2hl ZCBieSB0aGUgbGFzdCBzZWFyY2guCk9wdGlvbmFsIEZJWEVEQ0FTRSwgTElURVJBTCwgU1RSSU5H IGFuZCBTVUJFWFAgaGF2ZSB0aGUgc2FtZQptZWFuaW5nIGFzIGZvciBgcmVwbGFjZS1tYXRjaCcu CgooZm4gUkVQTEFDRU1FTlQgJm9wdGlvbmFsIEZJWEVEQ0FTRSBMSVRFUkFMIFNUUklORyBTVUJF WFApHwooZGVmYWxpYXMgJ21hdGNoLXN1YnN0aXR1dGUtcmVwbGFjZW1lbnQgI1sxMjgxICJcMzAw XDMwMQNcIlwzMDIgXDMwM1wzMDQCXCJcMjE2XDMwNVwzMDFcMjI0WyFcMjEwXDMwNgYHBgcGBwUG ByUpXDIwNyIgW21hdGNoLXN0cmluZyAwIG1hdGNoLWRhdGEgbWFrZS1jbG9zdXJlICNbMCAiXDMw MVwzMDBcMzAyXCJcMjA3IiBbVjAgc2V0LW1hdGNoLWRhdGEgdF0gM10gbWF0Y2gtZGF0YS0tdHJh bnNsYXRlIHJlcGxhY2UtbWF0Y2hdIDEzICgjJCAuIDE2OTg2NSldKSNANjU1IFJldHVybiBub24t bmlsIGlmIHRleHQgYmVmb3JlIHBvaW50IG1hdGNoZXMgcmVndWxhciBleHByZXNzaW9uIFJFR0VY UC4KTGlrZSBgbG9va2luZy1hdCcgZXhjZXB0IG1hdGNoZXMgYmVmb3JlIHBvaW50LCBhbmQgaXMg c2xvd2VyLgpMSU1JVCBpZiBub24tbmlsIHNwZWVkcyB1cCB0aGUgc2VhcmNoIGJ5IHNwZWNpZnlp bmcgYSBtaW5pbXVtCnN0YXJ0aW5nIHBvc2l0aW9uLCB0byBhdm9pZCBjaGVja2luZyBtYXRjaGVz IHRoYXQgd291bGQgc3RhcnQKYmVmb3JlIExJTUlULgoKSWYgR1JFRURZIGlzIG5vbi1uaWwsIGV4 dGVuZCB0aGUgbWF0Y2ggYmFja3dhcmRzIGFzIGZhciBhcwpwb3NzaWJsZSwgc3RvcHBpbmcgd2hl biBhIHNpbmdsZSBhZGRpdGlvbmFsIHByZXZpb3VzIGNoYXJhY3RlcgpjYW5ub3QgYmUgcGFydCBv ZiBhIG1hdGNoIGZvciBSRUdFWFAuICBXaGVuIHRoZSBtYXRjaCBpcwpleHRlbmRlZCwgaXRzIHN0 YXJ0aW5nIHBvc2l0aW9uIGlzIGFsbG93ZWQgdG8gb2NjdXIgYmVmb3JlCkxJTUlULgoKQXMgYSBn ZW5lcmFsIHJlY29tbWVuZGF0aW9uLCB0cnkgdG8gYXZvaWQgdXNpbmcgYGxvb2tpbmctYmFjaycK d2hlcmV2ZXIgcG9zc2libGUsIHNpbmNlIGl0IGlzIHNsb3cuCgooZm4gUkVHRVhQICZvcHRpb25h bCBMSU1JVCBHUkVFRFkpHwooZGVmYWxpYXMgJ2xvb2tpbmctYmFjayAjWzc2OSAiYFwyMTJcMzAw XDMwMQVcMzAyUQRcMzAzI1wyMDUOAGApAlwyMDNIAFwyMTFcMjAzSABcMjE0ZQJ9XDIxMFwyMTFl VlwyMDM7AFwyMTJcMjExYlwyMTBcMzA0dVwyMTBcMzA1XDMwMQYGXDMwNlEhKVwyMDM7AFwyMTFT XDI2MgFcMjAyHABcMjEyXDIxMWJcMjEwXDMwNVwzMDEGBlwzMDZRISpcMjEwXDIxMT8/XDIwNyIg W3JlLXNlYXJjaC1iYWNrd2FyZCAiXFwoPzoiICJcXClcXD0iIHQgLTEgbG9va2luZy1hdCAiXFwp XFwnIl0gOSAoIyQgLiAxNzA0NzYpXSkKKHNldC1hZHZlcnRpc2VkLWNhbGxpbmctY29udmVudGlv biAnbG9va2luZy1iYWNrICcocmVnZXhwIGxpbWl0ICZvcHRpb25hbCBncmVlZHkpICIyNS4xIikj QDg4IFNhbWUgYXMgYGxvb2tpbmctYXQnIGV4Y2VwdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNo YW5nZSB0aGUgbWF0Y2ggZGF0YS4KCihmbiBSRUdFWFApHwooZGVmYWxpYXMgJ2xvb2tpbmctYXQt cCAjWzI1NyAiXDMwMAFcMzAxXCJcMjA3IiBbbG9va2luZy1hdCB0XSA0ICgjJCAuIDE3MTUxNyld KQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1 bmN0aW9uLXB1dCBsb29raW5nLWF0LXAgc3BlZWQgLTEgcHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUt Y29tcGlsZS1pbmxpbmUtZXhwYW5kXSA1KSNAMTEzIFNhbWUgYXMgYHN0cmluZy1tYXRjaCcgZXhj ZXB0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBtYXRjaCBkYXRhLgoKKGZuIFJF R0VYUCBTVFJJTkcgJm9wdGlvbmFsIFNUQVJUKR8KKGRlZmFsaWFzICdzdHJpbmctbWF0Y2gtcCAj Wzc3MCAiXDMwMAMDA1wzMDEkXDIwNyIgW3N0cmluZy1tYXRjaCB0XSA4ICgjJCAuIDE3MTgyOSld KQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1 bmN0aW9uLXB1dCBzdHJpbmctbWF0Y2gtcCBzcGVlZCAtMSBwdXQgYnl0ZS1vcHRpbWl6ZXIgYnl0 ZS1jb21waWxlLWlubGluZS1leHBhbmRdIDUpI0A0MDIgUmV0dXJuIG5vbi1uaWwgaWYgUE9TIGlz IGluIGEgbm9ybWFsIHN1YnJlZ2V4cCBjb250ZXh0IGluIFJFR0VYUC4KQSBzdWJyZWdleHAgY29u dGV4dCBpcyBvbmUgd2hlcmUgYSBzdWItcmVnZXhwIGNhbiBhcHBlYXIuCkEgbm9uLXN1YnJlZ2V4 cCBjb250ZXh0IGlzIGZvciBleGFtcGxlIHdpdGhpbiBicmFja2V0cywgb3Igd2l0aGluIGEKcmVw ZXRpdGlvbiBib3VuZHMgb3BlcmF0b3IgYFw9XHsuLi5cfScsIG9yIHJpZ2h0IGFmdGVyIGEgYFwn LgpJZiBTVEFSVCBpcyBub24tbmlsLCBpdCBzaG91bGQgYmUgYSBwb3NpdGlvbiBpbiBSRUdFWFAs IHNtYWxsZXIKdGhhbiBQT1MsIGFuZCBrbm93biB0byBiZSBpbiBhIHN1YnJlZ2V4cCBjb250ZXh0 LgoKKGZuIFJFR0VYUCBQT1MgJm9wdGlvbmFsIFNUQVJUKR8KKGRlZmFsaWFzICdzdWJyZWdleHAt Y29udGV4dC1wICNbNzcwICJcMzAwMRMAXDMwMQMCXDIwNgsAXDMwMgRPXDMwM1wiXDIxMFwzMDQw XDIwN1wyMTFBQFwzMDVcMjM1P1wyMDciIFsoaW52YWxpZC1yZWdleHApIHN0cmluZy1tYXRjaCAw ICIiIHQgKCJVbm1hdGNoZWQgWyBvciBbXiIgIlVubWF0Y2hlZCBcXHsiICJUcmFpbGluZyBiYWNr c2xhc2giKV0gNyAoIyQgLiAxNzIxNzMpXSkjQDI5MCBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBzZXBh cmF0b3JzIGZvciBgc3BsaXQtc3RyaW5nJy4KCkEgcmVnZXhwIG1hdGNoaW5nIHN0cmluZ3Mgb2Yg d2hpdGVzcGFjZS4gIE1heSBiZSBsb2NhbGUtZGVwZW5kZW50CihhcyB5ZXQgdW5pbXBsZW1lbnRl ZCkuICBTaG91bGQgbm90IG1hdGNoIG5vbi1icmVha2luZyBzcGFjZXMuCgpXYXJuaW5nOiBiaW5k aW5nIHRoaXMgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYW5kIHVzaW5nIGl0IGFzIGRlZmF1bHQgaXMK bGlrZWx5IHRvIGhhdmUgdW5kZXNpcmVkIHNlbWFudGljcy4fCihkZWZjb25zdCBzcGxpdC1zdHJp bmctZGVmYXVsdC1zZXBhcmF0b3JzICJbIFxmCVxuDQtdKyIgKCMkIC4gMTcyNzk5KSkjQDE2NTcg U3BsaXQgU1RSSU5HIGludG8gc3Vic3RyaW5ncyBib3VuZGVkIGJ5IG1hdGNoZXMgZm9yIFNFUEFS QVRPUlMuCgpUaGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgU1RSSU5HLCBhbmQgZWFjaCBtYXRjaCBm b3IgU0VQQVJBVE9SUywgYXJlCnNwbGl0dGluZyBwb2ludHMuICBUaGUgc3Vic3RyaW5ncyBtYXRj aGluZyBTRVBBUkFUT1JTIGFyZSByZW1vdmVkLCBhbmQKdGhlIHN1YnN0cmluZ3MgYmV0d2VlbiB0 aGUgc3BsaXR0aW5nIHBvaW50cyBhcmUgY29sbGVjdGVkIGFzIGEgbGlzdCwKd2hpY2ggaXMgcmV0 dXJuZWQuCgpJZiBTRVBBUkFUT1JTIGlzIG5vbi1uaWwsIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIg ZXhwcmVzc2lvbiBtYXRjaGluZyB0ZXh0CnRoYXQgc2VwYXJhdGVzLCBidXQgaXMgbm90IHBhcnQg b2YsIHRoZSBzdWJzdHJpbmdzLiAgSWYgbmlsIGl0IGRlZmF1bHRzIHRvCmBzcGxpdC1zdHJpbmct ZGVmYXVsdC1zZXBhcmF0b3JzJywgbm9ybWFsbHkgIlsgXGZcdFxuXHJcdl0rIiwgYW5kCk9NSVQt TlVMTFMgaXMgZm9yY2VkIHRvIHQuCgpJZiBPTUlULU5VTExTIGlzIHQsIHplcm8tbGVuZ3RoIHN1 YnN0cmluZ3MgYXJlIG9taXR0ZWQgZnJvbSB0aGUgbGlzdCAoc28KdGhhdCBmb3IgdGhlIGRlZmF1 bHQgdmFsdWUgb2YgU0VQQVJBVE9SUyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCmFy ZSBlZmZlY3RpdmVseSB0cmltbWVkKS4gIElmIG5pbCwgYWxsIHplcm8tbGVuZ3RoIHN1YnN0cmlu Z3MgYXJlIHJldGFpbmVkLAp3aGljaCBjb3JyZWN0bHkgcGFyc2VzIENTViBmb3JtYXQsIGZvciBl eGFtcGxlLgoKSWYgVFJJTSBpcyBub24tbmlsLCBpdCBzaG91bGQgYmUgYSByZWd1bGFyIGV4cHJl c3Npb24gdG8gbWF0Y2gKdGV4dCB0byB0cmltIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9m IGVhY2ggc3Vic3RyaW5nLiAgSWYgdHJpbW1pbmcKbWFrZXMgdGhlIHN1YnN0cmluZyBlbXB0eSwg aXQgaXMgdHJlYXRlZCBhcyBudWxsLgoKSWYgeW91IHdhbnQgdG8gdHJpbSB3aGl0ZXNwYWNlIGZy b20gdGhlIHN1YnN0cmluZ3MsIHRoZSByZWxpYWJseSBjb3JyZWN0CndheSBpcyB1c2luZyBUUklN LiAgTWFraW5nIFNFUEFSQVRPUlMgbWF0Y2ggdGhhdCB3aGl0ZXNwYWNlIGdpdmVzIGluY29ycmVj dApyZXN1bHRzIHdoZW4gdGhlcmUgaXMgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb3IgZW5kIG9m IFNUUklORy4gIElmIHlvdQpzZWUgc3VjaCBjYWxscyB0byBgc3BsaXQtc3RyaW5nJywgcGxlYXNl IGZpeCB0aGVtLgoKTm90ZSB0aGF0IHRoZSBlZmZlY3Qgb2YgYChzcGxpdC1zdHJpbmcgU1RSSU5H KScgaXMgdGhlIHNhbWUgYXMKYChzcGxpdC1zdHJpbmcgU1RSSU5HIHNwbGl0LXN0cmluZy1kZWZh dWx0LXNlcGFyYXRvcnMgdCknLiAgSW4gdGhlIHJhcmUKY2FzZSB0aGF0IHlvdSB3aXNoIHRvIHJl dGFpbiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIHdoZW4gc3BsaXR0aW5nIG9uCndoaXRlc3BhY2Us IHVzZSBgKHNwbGl0LXN0cmluZyBTVFJJTkcgc3BsaXQtc3RyaW5nLWRlZmF1bHQtc2VwYXJhdG9y cyknLgoKTW9kaWZpZXMgdGhlIG1hdGNoIGRhdGE7IHVzZSBgc2F2ZS1tYXRjaC1kYXRhJyBpZiBu ZWNlc3NhcnkuCgooZm4gU1RSSU5HICZvcHRpb25hbCBTRVBBUkFUT1JTIE9NSVQtTlVMTFMgVFJJ TSkfCihkZWZhbGlhcyAnc3BsaXQtc3RyaW5nICNbMTAyNSAiAlwyMDMIAAFcMjAyCQBcMzAxPwNc MjA2DwAIXDMwMlwzMDNDXDMwM0NcMzAzXDIxMUNcMzA0XDMwNQYHBg0FXDIwMzgABghcMzAyXDIy NFVcMjAzOAAGCAYPR1dcMjAzOAAGCFRcMjAyOgAGCCNcMjAzagAFBlxmR1dcMjAzagBcMzAxXDI2 MgMEBgZcMjQwXDIxMANcMzAyXDIyNFwyNDBcMjEwXDMwMlwyMjVcMjYyBlwyMTEGXGYGXG4GXG4G CAYIBgcmBlwyMTBcMjAyGAAEBgZcMjQwXDIxMAMGXGZHXDI0MFwyMTBcMjExBlxmBlxuBlxuBggG CAYHJgZcMjEwAVwyNDJcMjM3XDIwNyIgW3NwbGl0LXN0cmluZy1kZWZhdWx0LXNlcGFyYXRvcnMg dCAwIG5pbCAjWzE1NDIgIgRcMjAzGABcMzAwBQYHBVwyNDIjXDIxMQRcMjQyPVwyMDMXAANcMzAx XDIyNVwyNDBcMjEwXDIxMANcMjA0JAACXDI0MgJcMjQyV1wyMDVbAAUDXDI0MgNcMjQyTwVcMjAz SABcMzAwBgZcMzAyUAJcMzAxI1wyMTFcMjAzRwBcMjExAkdXXDIwM0cAAVwzMDECT1wyNjICXDIx MARcMjA0UwBcMjExR1wzMDFWXDIwNVkAAQEDXDI0MkJcMjQwXDI2MgFcMjA3IiBbc3RyaW5nLW1h dGNoIDAgIlxcJyJdIDExICJcblxuKGZuIFNUUklORyBUUklNIEtFRVAtTlVMTFMgVEhJUy1TVEFS VCBUSElTLUVORCBMSVNUKSJdIHN0cmluZy1tYXRjaF0gMTkgKCMkIC4gMTczMTY2KV0pCihkZWZh bGlhcyAnc3RyaW5nLXNwbGl0ICdzcGxpdC1zdHJpbmcpI0AzODcgQ29uY2F0ZW5hdGUgdGhlIFNU UklOR1MsIGFkZGluZyB0aGUgU0VQQVJBVE9SIChkZWZhdWx0ICIgIikuClRoaXMgdHJpZXMgdG8g cXVvdGUgdGhlIHN0cmluZ3MgdG8gYXZvaWQgYW1iaWd1aXR5IHN1Y2ggdGhhdAogIChzcGxpdC1z dHJpbmctYW5kLXVucXVvdGUgKGNvbWJpbmUtYW5kLXF1b3RlLXN0cmluZ3Mgc3RycykpID09IHN0 cnMKT25seSBzb21lIFNFUEFSQVRPUnMgd2lsbCB3b3JrIHByb3Blcmx5LgoKTm90ZSB0aGF0IHRo aXMgaXMgbm90IGludGVuZGVkIHRvIHByb3RlY3QgU1RSSU5HUyBmcm9tCmludGVycHJldGF0aW9u IGJ5IHNoZWxscywgdXNlIGBzaGVsbC1xdW90ZS1hcmd1bWVudCcgZm9yIHRoYXQuCgooZm4gU1RS SU5HUyAmb3B0aW9uYWwgU0VQQVJBVE9SKR8KKGRlZmFsaWFzICdjb21iaW5lLWFuZC1xdW90ZS1z dHJpbmdzICNbNTEzICJcMjExXDIwNgUAXDMwMFwzMDFcMzAyAiFQXDMwM1wzMDRcMzA1A1wiBQQj XDIwNyIgWyIgIiAiW1xcXCJdXFx8IiByZWdleHAtcXVvdGUgbWFwY29uY2F0IG1ha2UtY2xvc3Vy ZSAjWzI1NyAiXDMwMVwzMDACXCJcMjAzEABcMzAyXDMwM1wzMDRcMzA1BCNcMzAyUVwyMDdcMjA3 IiBbVjAgc3RyaW5nLW1hdGNoICJcIiIgcmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJbXFxcIl0i ICJcXFxcXFwmIl0gNiAiXG5cbihmbiBTVFIpIl1dIDggKCMkIC4gMTc1NTQyKV0pI0AyNDUgU3Bs aXQgdGhlIFNUUklORyBpbnRvIGEgbGlzdCBvZiBzdHJpbmdzLgpJdCB1bmRlcnN0YW5kcyBFbWFj cyBMaXNwIHF1b3Rpbmcgd2l0aGluIFNUUklORywgc3VjaCB0aGF0CiAgKHNwbGl0LXN0cmluZy1h bmQtdW5xdW90ZSAoY29tYmluZS1hbmQtcXVvdGUtc3RyaW5ncyBzdHJzKSkgPT0gc3RycwpUaGUg U0VQQVJBVE9SIHJlZ2V4cCBkZWZhdWx0cyB0byAiXHMtKyIuCgooZm4gU1RSSU5HICZvcHRpb25h bCBTRVBBUkFUT1IpHwooZGVmYWxpYXMgJ3NwbGl0LXN0cmluZy1hbmQtdW5xdW90ZSAjWzUxMyAi XDIxMVwyMDYFAFwzMDBcMzAxXDMwMgRcIlwyMTFcMjA0EwBcMzAzBANcMzA0I1wyMDdcMzA1AVwz MDY9P1wyMDUjAFwzMDMFXDMwNgRPBFwzMDQjXDMwNwYGBFwiXDIxMUBcMzEwBggDQVwzMTFPBgdc IkJcMjYyAVwiXDIwNyIgWyJcXHMtKyIgc3RyaW5nLXNlYXJjaCAiXCIiIHNwbGl0LXN0cmluZyB0 IGFwcGVuZCAwIHJlYWQtZnJvbS1zdHJpbmcgc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlIG5pbF0g MTIgKCMkIC4gMTc2MjQxKV0pI0AxNzQgUmVwbGFjZSBGUk9NQ0hBUiB3aXRoIFRPQ0hBUiBpbiBT VFJJTkcgZWFjaCB0aW1lIGl0IG9jY3Vycy4KVW5sZXNzIG9wdGlvbmFsIGFyZ3VtZW50IElOUExB Q0UgaXMgbm9uLW5pbCwgcmV0dXJuIGEgbmV3IHN0cmluZy4KCihmbiBGUk9NQ0hBUiBUT0NIQVIg U1RSSU5HICZvcHRpb25hbCBJTlBMQUNFKR8KKGRlZmFsaWFzICdzdWJzdC1jaGFyLWluLXN0cmlu ZyAjWzEwMjcgIgFHAVwyMDNcbgACXDIwMg0AXDMwMAMhAVwzMDFWXDIwMykAAVNcMjYyAlwyMTEC SAYGPVwyMDMNAFwyMTECBgZJXDIxMFwyMDINAFwyMDciIFtjb3B5LXNlcXVlbmNlIDBdIDkgKCMk IC4gMTc2NzgxKV0pI0AxMDggUmVwbGFjZSBGUk9NLVNUUklORyB3aXRoIFRPLVNUUklORyBpbiBJ Ti1TVFJJTkcgZWFjaCB0aW1lIGl0IG9jY3Vycy4KCihmbiBGUk9NLVNUUklORyBUTy1TVFJJTkcg SU4tU1RSSU5HKR8KKGRlZmFsaWFzICdzdHJpbmctcmVwbGFjZSAjWzc3MSAiAlwzMDBcMjMyXDIw MwsAXDMwMVwzMDJcMzAzXCJcMjEwXDMwNFwzMDVcMjExXDMwNgYGBQUjXDIxMVwyNjICXDIwMzcA AgFVXDIwNCgAAwMCTwJCXDI2MgIEAkJcMjYyAlwyMTEGBkdcXFwyNjIDXDIwMg4AAVwyMDQ9AANc MjA3AgRHVVwyMDRMAAMDXDMwNU8CQlwyNjICXDMwN1wzMTADXDIzN1wiXDIwNyIgWyIiIHNpZ25h bCB3cm9uZy1sZW5ndGgtYXJndW1lbnQgKDApIDAgbmlsIHN0cmluZy1zZWFyY2ggYXBwbHkgY29u Y2F0XSAxMCAoIyQgLiAxNzcxMTcpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAw XDMwMVwzMDRcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IHN0cmluZy1yZXBsYWNlIHB1cmUg dCBzaWRlLWVmZmVjdC1mcmVlXSA1KSNAMTAyMSBSZXBsYWNlIGFsbCBtYXRjaGVzIGZvciBSRUdF WFAgd2l0aCBSRVAgaW4gU1RSSU5HLgoKUmV0dXJuIGEgbmV3IHN0cmluZyBjb250YWluaW5nIHRo ZSByZXBsYWNlbWVudHMuCgpPcHRpb25hbCBhcmd1bWVudHMgRklYRURDQVNFLCBMSVRFUkFMIGFu ZCBTVUJFWFAgYXJlIGxpa2UgdGhlCmFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWVzIG9mIGZ1 bmN0aW9uIGByZXBsYWNlLW1hdGNoJy4gIElmIFNUQVJUCmlzIG5vbi1uaWwsIHN0YXJ0IHJlcGxh Y2VtZW50cyBhdCB0aGF0IGluZGV4IGluIFNUUklORywgYW5kIG9taXQKdGhlIGZpcnN0IFNUQVJU IGNoYXJhY3RlcnMgb2YgU1RSSU5HIGZyb20gdGhlIHJldHVybiB2YWx1ZS4KClJFUCBpcyBlaXRo ZXIgYSBzdHJpbmcgdXNlZCBhcyB0aGUgTkVXVEVYVCBhcmcgb2YgYHJlcGxhY2UtbWF0Y2gnIG9y IGEKZnVuY3Rpb24uICBJZiBpdCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBjYWxsZWQgd2l0aCB0aGUg YWN0dWFsIHRleHQgb2YgZWFjaAptYXRjaCwgYW5kIGl0cyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBy ZXBsYWNlbWVudCB0ZXh0LiAgV2hlbiBSRVAgaXMgY2FsbGVkLAp0aGUgbWF0Y2ggZGF0YSBhcmUg dGhlIHJlc3VsdCBvZiBtYXRjaGluZyBSRUdFWFAgYWdhaW5zdCBhIHN1YnN0cmluZwpvZiBTVFJJ TkcsIHRoZSBzYW1lIHN1YnN0cmluZyB0aGF0IGlzIHRoZSBhY3R1YWwgdGV4dCBvZiB0aGUgbWF0 Y2ggd2hpY2gKaXMgcGFzc2VkIHRvIFJFUCBhcyBpdHMgYXJndW1lbnQuCgpUbyByZXBsYWNlIG9u bHkgdGhlIGZpcnN0IG1hdGNoIChpZiBhbnkpLCBtYWtlIFJFR0VYUCBtYXRjaCB1cCB0byBcXD0n CmFuZCByZXBsYWNlIGEgc3ViLWV4cHJlc3Npb24sIGUuZy4KICAocmVwbGFjZS1yZWdleHAtaW4t c3RyaW5nICJcXChmb29cXCkuKlxcXD0nIiAiYmFyIiAiIGZvbyBmb28iIG5pbCBuaWwgMSkKICAg ID0+ICIgYmFyIGZvbyIKCihmbiBSRUdFWFAgUkVQIFNUUklORyAmb3B0aW9uYWwgRklYRURDQVNF IExJVEVSQUwgU1VCRVhQIFNUQVJUKR8KKGRlZmFsaWFzICdyZXBsYWNlLXJlZ2V4cC1pbi1zdHJp bmcgI1sxNzk1ICIERwFcMjA2BwBcMzAwXDMwMVwyMTFcMjExXDIxMVwzMDIgXDMwM1wzMDQCXCJc MjE2BQYHV1wyMDN0AFwzMDUGDgYNBggjXDIwM3QAXDMwMFwyMjRcMjYyA1wzMDBcMjI1XDI2MgIB A1VcMjAzOQAGBgNUXlwyNjICXDMwNgNbIVwyMTAGCwMDT1wyNjIEXDMwNwYNO1wyMDNRAAYNXDIw MlkABg1cMzEwXDMwMAYHXCIhBlxmBlxmBgcGDSUGXGYGBwVPBgZCQlwyNjIFAVwyNjIGXDIwMhIA BgsGBgYITwVCXDI2MgVcMzExXDMxMgYGXDIzN1wiKVwyMDciIFswIG5pbCBtYXRjaC1kYXRhIG1h a2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwXDMwMlwiXDIwNyIgW1YwIHNldC1tYXRjaC1kYXRhIHRd IDNdIHN0cmluZy1tYXRjaCBtYXRjaC1kYXRhLS10cmFuc2xhdGUgcmVwbGFjZS1tYXRjaCBtYXRj aC1zdHJpbmcgYXBwbHkgY29uY2F0XSAyMCAoIyQgLiAxNzc2NDEpXSkjQDE4MSBMaWtlIGBzdHJp bmctZXF1YWwnLCBidXQgY2FzZS1pbnNlbnNpdGl2ZS4KVXBwZXItY2FzZSBhbmQgbG93ZXItY2Fz ZSBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGVxdWFsLgpVbmlieXRlIHN0cmluZ3MgYXJlIGNvbnZl cnRlZCB0byBtdWx0aWJ5dGUgZm9yIGNvbXBhcmlzb24uCgooZm4gU1RSSU5HMSBTVFJJTkcyKR8K KGRlZmFsaWFzICdzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UgI1s1MTQgIlwzMDACXDMwMVwzMDIE XDMwMVwzMDJcMzAzJgdcMzAzPVwyMDciIFtjb21wYXJlLXN0cmluZ3MgMCBuaWwgdF0gMTAgKCMk IC4gMTc5MTQxKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwzMDFcMzA0XDMw MyNcMzAwXDMwMVwzMDVcMzA2I1wzMDdcMzAxXDMxMFwzMTEjXDIwNyIgW2Z1bmN0aW9uLXB1dCBz dHJpbmctZXF1YWwtaWdub3JlLWNhc2UgcHVyZSB0IHNpZGUtZWZmZWN0LWZyZWUgc3BlZWQgLTEg cHV0IGJ5dGUtb3B0aW1pemVyIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kXSA3KSNAMTg3IFJl dHVybiBub24tbmlsIGlmIFBSRUZJWCBpcyBhIHByZWZpeCBvZiBTVFJJTkcuCklmIElHTk9SRS1D QVNFIGlzIG5vbi1uaWwsIHRoZSBjb21wYXJpc29uIGlzIGRvbmUgd2l0aG91dCBwYXlpbmcgYXR0 ZW50aW9uCnRvIGNhc2UgZGlmZmVyZW5jZXMuCgooZm4gUFJFRklYIFNUUklORyAmb3B0aW9uYWwg SUdOT1JFLUNBU0UpHwooZGVmYWxpYXMgJ3N0cmluZy1wcmVmaXgtcCAjWzc3MCAiAkdcMjExA0dW P1wyMDUZAFwzMDAEXDMwMQMGBlwzMDEGBgYIJgdcMzAyPVwyMDciIFtjb21wYXJlLXN0cmluZ3Mg MCB0XSAxMiAoIyQgLiAxNzk2NjIpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAw XDMwMVwzMDRcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IHN0cmluZy1wcmVmaXgtcCBwdXJl IHQgc2lkZS1lZmZlY3QtZnJlZV0gNSkjQDE4NyBSZXR1cm4gbm9uLW5pbCBpZiBTVUZGSVggaXMg YSBzdWZmaXggb2YgU1RSSU5HLgpJZiBJR05PUkUtQ0FTRSBpcyBub24tbmlsLCB0aGUgY29tcGFy aXNvbiBpcyBkb25lIHdpdGhvdXQgcGF5aW5nCmF0dGVudGlvbiB0byBjYXNlIGRpZmZlcmVuY2Vz LgoKKGZuIFNVRkZJWCBTVFJJTkcgJm9wdGlvbmFsIElHTk9SRS1DQVNFKR8KKGRlZmFsaWFzICdz dHJpbmctc3VmZml4LXAgI1s3NzAgIgFHA0daXDIxMVwzMDBZXDIwNRkAXDMwMQRcMzAyXDIxMQYG BVwzMDIGCCYHXDMwMz1cMjA3IiBbMCBjb21wYXJlLXN0cmluZ3MgbmlsIHRdIDEyICgjJCAuIDE4 MDA5MildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wzMDBcMzAxXDMwNFwzMDMjXDMw MFwyMDciIFtmdW5jdGlvbi1wdXQgc3RyaW5nLXN1ZmZpeC1wIHB1cmUgdCBzaWRlLWVmZmVjdC1m cmVlXSA1KSNANTYyIFJldHVybiBhIHN0cmluZyB0aGF0IGNhbiBiZSBzYWZlbHkgaW5zZXJ0ZWQg aW4gbGVmdC10by1yaWdodCB0ZXh0LgoKTm9ybWFsbHksIGluc2VydGluZyBhIHN0cmluZyB3aXRo IHJpZ2h0LXRvLWxlZnQgKFJUTCkgc2NyaXB0IGludG8KYSBidWZmZXIgbWF5IGNhdXNlIHNvbWUg c3Vic2VxdWVudCB0ZXh0IHRvIGJlIGRpc3BsYXllZCBhcyBwYXJ0Cm9mIHRoZSBSVEwgc2VnbWVu dCAodXN1YWxseSB0aGlzIGFmZmVjdHMgcHVuY3R1YXRpb24gY2hhcmFjdGVycykuClRoaXMgZnVu Y3Rpb24gcmV0dXJucyBhIHN0cmluZyB0aGF0IGRpc3BsYXlzIGFzIFNUUiBidXQgZm9yY2VzCnN1 YnNlcXVlbnQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgYXMgbGVmdC10by1yaWdodC4KCklmIFNUUiBj b250YWlucyBhbnkgUlRMIGNoYXJhY3RlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5n CmNvbnNpc3Rpbmcgb2YgU1RSIGZvbGxvd2VkIGJ5IGFuIGludmlzaWJsZSBsZWZ0LXRvLXJpZ2h0 IG1hcmsKKExSTSkgY2hhcmFjdGVyLiAgT3RoZXJ3aXNlLCBpdCByZXR1cm5zIFNUUi4KCihmbiBT VFIpHwooZGVmYWxpYXMgJ2JpZGktc3RyaW5nLW1hcmstbGVmdC10by1yaWdodCAjWzI1NyAiXDIx MTtcMjA0XGYAXDMwMFwzMDFcMzAyA0RcIlwyMTBcMzAzXDMwNAJcIlwyMDMdAFwyMTFcMzA1XDMw NlwzMDchXDMxMFwzMTEjUFwyMDdcMjA3IiBbc2lnbmFsIHdyb25nLXR5cGUtYXJndW1lbnQgc3Ry aW5ncCBzdHJpbmctbWF0Y2ggIlxcY1IiIHByb3BlcnRpemUgc3RyaW5nIDgyMDYgaW52aXNpYmxl IHRdIDYgKCMkIC4gMTgwNTMyKV0pI0AxODAgUmV0dXJuIG5vbi1uaWwgaWYgU1RSSU5HMSBpcyBn cmVhdGVyIHRoYW4gU1RSSU5HMiBpbiBsZXhpY29ncmFwaGljIG9yZGVyLgpDYXNlIGlzIHNpZ25p ZmljYW50LgpTeW1ib2xzIGFyZSBhbHNvIGFsbG93ZWQ7IHRoZWlyIHByaW50IG5hbWVzIGFyZSB1 c2VkIGluc3RlYWQuCgooZm4gU1RSSU5HMSBTVFJJTkcyKR8KKGRlZmFsaWFzICdzdHJpbmctZ3Jl YXRlcnAgI1s1MTQgIlwyMTECXDIzMVwyMDciIFtdIDQgKCMkIC4gMTgxMzQ0KV0pI0AxMjIgRm9y bSBhIHJlZ2V4cCB0byBmaW5kIEZJTEUgaW4gYGxvYWQtaGlzdG9yeScuCkZJTEUsIGEgc3RyaW5n LCBpcyBkZXNjcmliZWQgaW4gdGhlIGZ1bmN0aW9uIGBldmFsLWFmdGVyLWxvYWQnLgoKKGZuIEZJ TEUpHwooZGVmYWxpYXMgJ2xvYWQtaGlzdG9yeS1yZWdleHAgI1syNTcgIlwzMDIBIVwyMDMLAFwz MDMBIVwyNjIBXDMwMgEhXDIwMxUAXDMwNFwyMDIWAFwzMDVcMzA2AiFcMzA3AyFcMjAzIwBcMzEw XDIwMisAXDMxMVwzMTJcMzA2CFwzMTMjXDMxNFFcMzExXDMxMlwzMDYJXDMxMyNcMzE1XDI2MAZc MjA3IiBbbG9hZC1zdWZmaXhlcyBqa2EtY29tcHItbG9hZC1zdWZmaXhlcyBmaWxlLW5hbWUtYWJz b2x1dGUtcCBmaWxlLXRydWVuYW1lICJcXGAiICJcXChcXGBcXHwvXFwpIiByZWdleHAtcXVvdGUg ZmlsZS1uYW1lLWV4dGVuc2lvbiAiIiAiXFwoIiBtYXBjb25jYXQgIlxcfCIgIlxcKT8iICJcXCk/ XFwnIl0gOSAoIyQgLiAxODE1OTkpXSkjQDExNyBHZXQgdGhlIGZpcnN0IGVsdCBvZiBgbG9hZC1o aXN0b3J5JyB3aG9zZSBjYXIgbWF0Y2hlcyBGSUxFLVJFR0VYUC4KUmV0dXJuIG5pbCBpZiB0aGVy ZSBpc24ndCBvbmUuCgooZm4gRklMRS1SRUdFWFApHwooZGVmYWxpYXMgJ2xvYWQtaGlzdG9yeS1m aWxlbmFtZS1lbGVtZW50ICNbMjU3ICIIXDIxMVwyMDUHAFwyMTFAXDMwMSBcMzAyXDMwMwJcIlwy MTYCXDIwMy4AAUBcMjAzHwBcMzA0BANAXCJcMjA0LgACQVwyNjIDAlwyMDUpAAJAXDI2MgJcMjAy DgApXDIxMFwyMDciIFtsb2FkLWhpc3RvcnkgbWF0Y2gtZGF0YSBtYWtlLWNsb3N1cmUgI1swICJc MzAxXDMwMFwzMDJcIlwyMDciIFtWMCBzZXQtbWF0Y2gtZGF0YSB0XSAzXSBzdHJpbmctbWF0Y2hd IDcgKCMkIC4gMTgyMDg3KV0pI0AxNTYzIEFycmFuZ2UgdGhhdCBpZiBGSUxFIGlzIGxvYWRlZCwg Rk9STSB3aWxsIGJlIHJ1biBpbW1lZGlhdGVseSBhZnRlcndhcmRzLgpJZiBGSUxFIGlzIGFscmVh ZHkgbG9hZGVkLCBldmFsdWF0ZSBGT1JNIHJpZ2h0IG5vdy4KRk9STSBjYW4gYmUgYW4gRWxpc3Ag ZXhwcmVzc2lvbiAoaW4gd2hpY2ggY2FzZSBpdCdzIHBhc3NlZCB0byBgZXZhbCcpLApvciBhIGZ1 bmN0aW9uIChpbiB3aGljaCBjYXNlIGl0J3MgcGFzc2VkIHRvIGBmdW5jYWxsJyB3aXRoIG5vIGFy Z3VtZW50KS4KCklmIGEgbWF0Y2hpbmcgZmlsZSBpcyBsb2FkZWQgYWdhaW4sIEZPUk0gd2lsbCBi ZSBldmFsdWF0ZWQgYWdhaW4uCgpJZiBGSUxFIGlzIGEgc3RyaW5nLCBpdCBtYXkgYmUgZWl0aGVy IGFuIGFic29sdXRlIG9yIGEgcmVsYXRpdmUgZmlsZQpuYW1lLCBhbmQgbWF5IGhhdmUgYW4gZXh0 ZW5zaW9uIChlLmcuICIuZWwiKSBvciBtYXkgbGFjayBvbmUsIGFuZAphZGRpdGlvbmFsbHkgbWF5 IG9yIG1heSBub3QgaGF2ZSBhbiBleHRlbnNpb24gZGVub3RpbmcgYSBjb21wcmVzc2VkCmZvcm1h dCAoZS5nLiAiLmd6IikuCgpXaGVuIEZJTEUgaXMgYWJzb2x1dGUsIHRoaXMgZmlyc3QgY29udmVy dHMgaXQgdG8gYSB0cnVlIG5hbWUgYnkgY2hhc2luZwpzeW1ib2xpYyBsaW5rcy4gIE9ubHkgYSBm aWxlIG9mIHRoaXMgbmFtZSAoc2VlIG5leHQgcGFyYWdyYXBoIHJlZ2FyZGluZwpleHRlbnNpb25z KSB3aWxsIHRyaWdnZXIgdGhlIGV2YWx1YXRpb24gb2YgRk9STS4gIFdoZW4gRklMRSBpcyByZWxh dGl2ZSwKYSBmaWxlIHdob3NlIGFic29sdXRlIHRydWUgbmFtZSBlbmRzIGluIEZJTEUgd2lsbCB0 cmlnZ2VyIGV2YWx1YXRpb24uCgpXaGVuIEZJTEUgbGFja3MgYW4gZXh0ZW5zaW9uLCBhIGZpbGUg bmFtZSB3aXRoIGFueSBleHRlbnNpb24gd2lsbCB0cmlnZ2VyCmV2YWx1YXRpb24uICBPdGhlcndp c2UsIGl0cyBleHRlbnNpb24gbXVzdCBtYXRjaCBGSUxFJ3MuICBBIGZ1cnRoZXIKZXh0ZW5zaW9u IGZvciBhIGNvbXByZXNzZWQgZm9ybWF0IChlLmcuICIuZ3oiKSBvbiBGSUxFIHdpbGwgbm90IGFm ZmVjdAp0aGlzIG5hbWUgbWF0Y2hpbmcuCgpBbHRlcm5hdGl2ZWx5LCBGSUxFIGNhbiBiZSBhIGZl YXR1cmUgKGkuZS4gYSBzeW1ib2wpLCBpbiB3aGljaCBjYXNlIEZPUk0KaXMgZXZhbHVhdGVkIGF0 IHRoZSBlbmQgb2YgYW55IGZpbGUgdGhhdCBgcHJvdmlkZSdzIHRoaXMgZmVhdHVyZS4KSWYgdGhl IGZlYXR1cmUgaXMgcHJvdmlkZWQgd2hlbiBldmFsdWF0aW5nIGNvZGUgbm90IGFzc29jaWF0ZWQg d2l0aCBhCmZpbGUsIEZPUk0gaXMgZXZhbHVhdGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm92 aWRlIHN0YXRlbWVudC4KClVzdWFsbHkgRklMRSBpcyBqdXN0IGEgbGlicmFyeSBuYW1lIGxpa2Ug ImZvbnQtbG9jayIgb3IgYSBmZWF0dXJlIG5hbWUKbGlrZSBgZm9udC1sb2NrJy4KClRoaXMgZnVu Y3Rpb24gbWFrZXMgb3IgYWRkcyB0byBhbiBlbnRyeSBvbiBgYWZ0ZXItbG9hZC1hbGlzdCcuCgpT ZWUgYWxzbyBgd2l0aC1ldmFsLWFmdGVyLWxvYWQnLgoKKGZuIEZJTEUgRk9STSkfCihkZWZhbGlh cyAnZXZhbC1hZnRlci1sb2FkICNbNTE0ICIBO1wyMDMQAFwzMDJcMzAzAyEhXDIxMVwyNjIDXDIw MhEAAVwzMDQBCFwiXDMwNQMhXDIwMx8AAlwyMDImAFwzMDZcMzA3XDMxMAVFCVwiAVwyMDQyAAJD XDI2MgIBCEIQBDtcMjAzPQBcMzExAyFcMjAyQABcMzEyBSFcMjA1RQBcMjExIAM5XDIwNE4AAVwy MDJSAFwzMTNcMzE0A1wiXDIxMQRBXDIzNVwyMDReAAMBQ1wyNDRcMjEwXDIxMFwyMDciIFthZnRl ci1sb2FkLWFsaXN0IGxleGljYWwtYmluZGluZyBwdXJlY29weSBsb2FkLWhpc3RvcnktcmVnZXhw IGFzc29jIGZ1bmN0aW9ucCBldmFsIGxhbWJkYSBuaWwgbG9hZC1oaXN0b3J5LWZpbGVuYW1lLWVs ZW1lbnQgZmVhdHVyZXAgbWFrZS1jbG9zdXJlICNbMCAiCVwyMDQHAFwzMDAgXDIwNwlcMzAyXDMw MyFcMjExXDMwNFwzMDUDBVwzMDAkTVwyMTBcMzA2XDMwNwJcMzEwI1wyMDciIFtWMCBsb2FkLWZp bGUtbmFtZSBtYWtlLXN5bWJvbCAiZXZhbC1hZnRlci1sb2FkLWhlbHBlciIgbWFrZS1jbG9zdXJl ICNbMjU3ICJcMjExXDMwMVwyMzJcMjA1DQBcMzAzXDMwNFwzMDBcIlwyMTBcMzAyIFwyMDciIFtW MCBWMSBWMiByZW1vdmUtaG9vayBhZnRlci1sb2FkLWZ1bmN0aW9uc10gNCAiXG5cbihmbiBGSUxF KSJdIGFkZC1ob29rIGFmdGVyLWxvYWQtZnVuY3Rpb25zIGFwcGVuZF0gOF1dIDkgKCMkIC4gMTgy NDgyKV0pCihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwzMDFcMzA0XDMwNSNcMzAw XDIwNyIgW2Z1bmN0aW9uLXB1dCBldmFsLWFmdGVyLWxvYWQgbGlzcC1pbmRlbnQtZnVuY3Rpb24g MSBjb21waWxlci1tYWNybyBldmFsLWFmdGVyLWxvYWQtLWFub24tY21hY3JvXSA1KSNAMjQgCgoo Zm4gV0hPTEUgRklMRSBGT1JNKR8KKGRlZmFsaWFzICdldmFsLWFmdGVyLWxvYWQtLWFub24tY21h Y3JvICNbNzcxICJcMjExXDI0MlwzMDA9XDIwMxEAXDMwMQJcMzAyXDMwMwRBQEVFXDIwNwJcMjA3 IiBbcXVvdGUgZXZhbC1hZnRlci1sb2FkIGxhbWJkYSBuaWxdIDggKCMkIC4gMTg0OTA1KV0pI0Ay NjYgRXhlY3V0ZSBCT0RZIGFmdGVyIEZJTEUgaXMgbG9hZGVkLgpGSUxFIGlzIG5vcm1hbGx5IGEg ZmVhdHVyZSBuYW1lLCBidXQgaXQgY2FuIGFsc28gYmUgYSBmaWxlIG5hbWUsCmluIGNhc2UgdGhh dCBmaWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGZlYXR1cmUuICBTZWUgYGV2YWwtYWZ0ZXItbG9h ZCcKZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgZGlmZmVyZW50IGZvcm1zIG9mIEZJTEUgYW5k IHRoZWlyIHNlbWFudGljcy4KCihmbiBGSUxFICZyZXN0IEJPRFkpHwooZGVmYWxpYXMgJ3dpdGgt ZXZhbC1hZnRlci1sb2FkICcobWFjcm8gLiAjWzM4NSAiXDMwMAJcMzAxXDMwMgRCQkVcMjA3IiBb ZXZhbC1hZnRlci1sb2FkIGxhbWJkYSBuaWxdIDcgKCMkIC4gMTg1MDgyKV0pKQooYnl0ZS1jb2Rl ICJcMzAwXDMwMVwzMDJcMzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCB3 aXRoLWV2YWwtYWZ0ZXItbG9hZCBsaXNwLWluZGVudC1mdW5jdGlvbiAxIHB1dCBlZGVidWctZm9y bS1zcGVjIChmb3JtIGRlZi1ib2R5KV0gNSkjQDEzNyBTcGVjaWFsIGhvb2sgcnVuIGFmdGVyIGxv YWRpbmcgYSBmaWxlLgpFYWNoIGZ1bmN0aW9uIHRoZXJlIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xl IGFyZ3VtZW50LCB0aGUgYWJzb2x1dGUKbmFtZSBvZiB0aGUgZmlsZSBqdXN0IGxvYWRlZC4fCihk ZWZ2YXIgYWZ0ZXItbG9hZC1mdW5jdGlvbnMgbmlsICgjJCAuIDE4NTYyNCkpI0AyMDIgRXZhbHVh dGUgYWxsIGBldmFsLWFmdGVyLWxvYWQnIGZvcm1zLCBpZiBhbnksIGZvciBBQlMtRklMRS4KQUJT LUZJTEUsIGEgc3RyaW5nLCBzaG91bGQgYmUgdGhlIGFic29sdXRlIHRydWUgbmFtZSBvZiBhIGZp bGUganVzdCBsb2FkZWQuClRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhl IEMgY29kZS4KCihmbiBBQlMtRklMRSkfCihkZWZhbGlhcyAnZG8tYWZ0ZXItbG9hZC1ldmFsdWF0 aW9uICNbMjU3ICIIXDIxMVwyMDMpAFwyMTFAXDIxMUA7XDIwM1wiAFwyMTFAA1wzMDVcMzA2AwMD XDMwNyRcMjY2XDIwM1wyMDNcIgBcMzEwXDMxMQJBXCJcMjEwAUFcMjY2XDIwMlwyMDIBAFwyMTBc MzEyAVwzMDVcMzA2AwMDXDMwNyRcMjY2XDIwM1wyMDNcMjI1AFwzMTMBIVwzMTQBXDMxNVwzMDZc MzE2BVwiTwlcIlwzMTdcMzIwAlwiXDMyMVwzMjJcMzIzIVwyMDNXAFwzMjNcMzI0BFwiXDIwM1wy MjMAXDMyNVwzMDIhXDIwM1wyMDAAXG5cMjAzXDIwMABcbjtcMjAzdwBcMzEyXDMyNlxuC1wiXDMw NVwzMDYDAwNcMzA3JFwyNjZcMjAzXDIwNFwyMjMAXDMyN1wzMzADXCJcMjY2BVwyMDJcMjI1AFxm XDIwM1wyMTQAXDIxMQIhXDI2NgVcMjAyXDIyNQBcMzMxXDMxNVwzMDUDBSRcMjEwXDI2NgRcMzMy XDMzMwJcIlwyMDciIFthZnRlci1sb2FkLWFsaXN0IG9iYXJyYXkgYnl0ZS1jb21waWxlLWN1cnJl bnQtZmlsZSBieXRlLWNvbXBpbGUtcm9vdC1kaXIgbm9uaW50ZXJhY3RpdmUgbmlsIHN0cmluZy1t YXRjaCB0IG1hcGMgZnVuY2FsbCAiL29ic29sZXRlL1teL10qXFwnIiBmaWxlLW5hbWUtbm9uZGly ZWN0b3J5IGludGVybiAwICJcXC5lbGM/XFw+IiBmb3JtYXQgIlBhY2thZ2UgJXMgaXMgZGVwcmVj YXRlZCIgI1syNTcgIlwzMDBcMzAxAlwiXDIwNyIgW21lc3NhZ2UgIiVzIl0gNCAiXG5cbihmbiBN U0cpIl0gZmJvdW5kcCBieXRlLWNvbXBpbGUtd2FybmluZy1lbmFibGVkLXAgb2Jzb2xldGUgYm91 bmRwIGV4cGFuZC1maWxlLW5hbWUgYnl0ZS1jb21waWxlLXdhcm4gIiVzIiBydW4td2l0aC1pZGxl LXRpbWVyIHJ1bi1ob29rLXdpdGgtYXJncyBhZnRlci1sb2FkLWZ1bmN0aW9uc10gMTMgKCMkIC4g MTg1ODE0KV0pI0AxMDMgRGlzcGxheSBkZWxheWVkIHdhcm5pbmdzIGZyb20gYGRlbGF5ZWQtd2Fy bmluZ3MtbGlzdCcuClVzZWQgZnJvbSBgZGVsYXllZC13YXJuaW5ncy1ob29rJyAod2hpY2ggc2Vl KS4fCihkZWZhbGlhcyAnZGlzcGxheS1kZWxheWVkLXdhcm5pbmdzICNbMCAiCFwyMzdcMjExXDIw MxQAXDIxMUBcMzAxXDMwMgJcIlwyMTABQVwyNjZcMjAyXDIwMgIAXDIxMFwzMDNcMjExEFwyMDci IFtkZWxheWVkLXdhcm5pbmdzLWxpc3QgYXBwbHkgZGlzcGxheS13YXJuaW5nIG5pbF0gNSAoIyQg LiAxODY5MTgpXSkjQDE1NiBSZW1vdmUgZHVwbGljYXRlcyBmcm9tIGBkZWxheWVkLXdhcm5pbmdz LWxpc3QnLgpDb2xsYXBzZSBpZGVudGljYWwgYWRqYWNlbnQgd2FybmluZ3MgaW50byBvbmUgKHBs dXMgY291bnQpLgpVc2VkIGZyb20gYGRlbGF5ZWQtd2FybmluZ3MtaG9vaycgKHdoaWNoIHNlZSku HwooZGVmYWxpYXMgJ2NvbGxhcHNlLWRlbGF5ZWQtd2FybmluZ3MgI1swICJcMzAxXDMwMlwyMTEI XDIwMzwACFwyMTFBEFwyNDJcMjYyAVwyMTEIQFwyMzJcMjAzHAACVFwyNjIDXDIwMgMAAlwzMDFW XDIwMzQAXDIxMVwzMDNcMzA0A0FABgYjAkFBQlwyNDFcMjEwXDMwMVwyNjIDXDIxMQJCXDI2MgJc MjAyAwABXDIzN1wyMTEQXDIwNyIgW2RlbGF5ZWQtd2FybmluZ3MtbGlzdCAxIG5pbCBmb3JtYXQg IiVzIFslZCB0aW1lc10iXSA4ICgjJCAuIDE4NzIwNSldKSNAMjIxIE5vcm1hbCBob29rIHJ1biB0 byBwcm9jZXNzIGFuZCBkaXNwbGF5IGRlbGF5ZWQgd2FybmluZ3MuCkJ5IGRlZmF1bHQsIHRoaXMg aG9vayBjb250YWlucyBmdW5jdGlvbnMgdG8gY29uc29saWRhdGUgdGhlCndhcm5pbmdzIGxpc3Rl ZCBpbiBgZGVsYXllZC13YXJuaW5ncy1saXN0JywgZGlzcGxheSB0aGVtLCBhbmQgc2V0CmBkZWxh eWVkLXdhcm5pbmdzLWxpc3QnIGJhY2sgdG8gbmlsLh8KKGRlZnZhciBkZWxheWVkLXdhcm5pbmdz LWhvb2sgJyhjb2xsYXBzZS1kZWxheWVkLXdhcm5pbmdzIGRpc3BsYXktZGVsYXllZC13YXJuaW5n cykgKCMkIC4gMTg3NjI3KSkjQDE2NiBEaXNwbGF5IGEgZGVsYXllZCB3YXJuaW5nLgpBc2lkZSBm cm9tIGdvaW5nIHRocm91Z2ggYGRlbGF5ZWQtd2FybmluZ3MtbGlzdCcsIHRoaXMgaXMgZXF1aXZh bGVudAp0byBgZGlzcGxheS13YXJuaW5nJy4KCihmbiBUWVBFIE1FU1NBR0UgJm9wdGlvbmFsIExF VkVMIEJVRkZFUi1OQU1FKR8KKGRlZmFsaWFzICdkZWxheS13YXJuaW5nICNbMTAyNiAiAwMDA0YI QlwyMTEQXDIwNyIgW2RlbGF5ZWQtd2FybmluZ3MtbGlzdF0gOCAoIyQgLiAxODc5NTIpXSkjQDQy OSBBZGQgRUxFTUVOVCB0byBgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJy4KU2VlIGRvY3VtZW50 YXRpb24gZm9yIGBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMnIGZvciB0aGUga2luZCBvZiBlbGVt ZW50cwp0aGF0IGNhbiBiZSBhZGRlZC4KCklmIGBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMnIGlz bid0IGEgbGlzdCBiZWZvcmUgY2FsbGluZyB0aGlzCmZ1bmN0aW9uLCBgYnVmZmVyLWludmlzaWJp bGl0eS1zcGVjJyB3aWxsIGFmdGVyd2FyZHMgYmUgYSBsaXN0CndpdGggdGhlIHZhbHVlIGAodCBF TEVNRU5UKScuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGV4dCBleGlzdHMKdGhhdCBpbnZpc2liaWxp dHkgdmFsdWVzIHRoYXQgYXJlbid0IGVpdGhlciB0IG9yIEVMRU1FTlQsIHRoYXQKdGV4dCB3aWxs IGJlY29tZSB2aXNpYmxlLgoKKGZuIEVMRU1FTlQpHwooZGVmYWxpYXMgJ2FkZC10by1pbnZpc2li aWxpdHktc3BlYyAjWzI1NyAiCFwzMDE9XDIwMwkAXDMwMUMQXDIxMQhCXDIxMRBcMjA3IiBbYnVm ZmVyLWludmlzaWJpbGl0eS1zcGVjIHRdIDMgKCMkIC4gMTg4MjE2KV0pI0AzMDIgUmVtb3ZlIEVM RU1FTlQgZnJvbSBgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJy4KSWYgYGJ1ZmZlci1pbnZpc2li aWxpdHktc3BlYycgaXNuJ3QgYSBsaXN0IGJlZm9yZSBjYWxsaW5nIHRoaXMKZnVuY3Rpb24sIGl0 IHdpbGwgYmUgbWFkZSBpbnRvIGEgbGlzdCBjb250YWluaW5nIGp1c3QgdCBhcyB0aGUKb25seSBs aXN0IG1lbWJlci4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0ZXh0IGV4aXN0cyB3aXRoIG5vbi10Cmlu dmlzaWJpbGl0eSB2YWx1ZXMsIHRoYXQgdGV4dCB3aWxsIGJlY29tZSB2aXNpYmxlLgoKKGZuIEVM RU1FTlQpHwooZGVmYWxpYXMgJ3JlbW92ZS1mcm9tLWludmlzaWJpbGl0eS1zcGVjICNbMjU3ICII OlwyMDNcZgBcMzAxAQhcIlwyMDIOAFwzMDJDXDIxMRBcMjA3IiBbYnVmZmVyLWludmlzaWJpbGl0 eS1zcGVjIGRlbGV0ZSB0XSA0ICgjJCAuIDE4ODc3NSldKSNAMjUxIEV2YWx1YXRlIEJPRFkgd2l0 aCBzeW50YXggdGFibGUgb2YgY3VycmVudCBidWZmZXIgc2V0IHRvIFRBQkxFLgpUaGUgc3ludGF4 IHRhYmxlIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBzYXZlZCwgQk9EWSBpcyBldmFsdWF0ZWQs IGFuZCB0aGUKc2F2ZWQgdGFibGUgaXMgcmVzdG9yZWQsIGV2ZW4gaW4gY2FzZSBvZiBhbiBhYm5v cm1hbCBleGl0LgpWYWx1ZSBpcyB3aGF0IEJPRFkgcmV0dXJucy4KCihmbiBUQUJMRSAmcmVzdCBC T0RZKR8KKGRlZmFsaWFzICd3aXRoLXN5bnRheC10YWJsZSAnKG1hY3JvIC4gI1szODUgIlwzMDBc MzAxIVwzMDBcMzAyIVwzMDMCXDMwNEICXDMwNUJEXDMwNlwzMDdcMzEwBghEBgdCQlwzMTFcMzEy BgZEXDMxMAYIREVFRVwyMDciIFttYWtlLXN5bWJvbCAidGFibGUiICJidWZmZXIiIGxldCAoKHN5 bnRheC10YWJsZSkpICgoY3VycmVudC1idWZmZXIpKSB1bndpbmQtcHJvdGVjdCBwcm9nbiBzZXQt c3ludGF4LXRhYmxlIHNhdmUtY3VycmVudC1idWZmZXIgc2V0LWJ1ZmZlcl0gMTIgKCMkIC4gMTg5 MjIzKV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJcMzAzI1wyMTBcMzA0XDMwMVwzMDVcMzA2 I1wzMDBcMjA3IiBbcHV0IHdpdGgtc3ludGF4LXRhYmxlIGVkZWJ1Zy1mb3JtLXNwZWMgdCBmdW5j dGlvbi1wdXQgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMV0gNCkjQDE1OSBSZXR1cm4gYSBuZXcgc3lu dGF4IHRhYmxlLgpDcmVhdGUgYSBzeW50YXggdGFibGUgdGhhdCBpbmhlcml0cyBmcm9tIE9MRFRB QkxFIChpZiBub24tbmlsKSBvcgpmcm9tIGBzdGFuZGFyZC1zeW50YXgtdGFibGUnIG90aGVyd2lz ZS4KCihmbiAmb3B0aW9uYWwgT0xEVEFCTEUpHwooZGVmYWxpYXMgJ21ha2Utc3ludGF4LXRhYmxl ICNbMjU2ICJcMzAwXDMwMVwzMDJcIlwzMDMBA1wyMDZcZgBcMzA0IFwiXDIxMFwyMDciIFttYWtl LWNoYXItdGFibGUgc3ludGF4LXRhYmxlIG5pbCBzZXQtY2hhci10YWJsZS1wYXJlbnQgc3RhbmRh cmQtc3ludGF4LXRhYmxlXSA1ICgjJCAuIDE4OTkwOCldKSNAMTMxIFJldHVybiB0aGUgcmF3IHN5 bnRheCBkZXNjcmlwdG9yIGZvciB0aGUgY2hhciBhZnRlciBQT1MuCklmIFBPUyBpcyBvdXRzaWRl IHRoZSBidWZmZXIncyBhY2Nlc3NpYmxlIHBvcnRpb24sIHJldHVybiBuaWwuCgooZm4gUE9TKR8K KGRlZmFsaWFzICdzeW50YXgtYWZ0ZXIgI1syNTcgIlwyMTFlV1wyMDYJAFwyMTFkWT9cMjA1KQAI XDIwNRUAXDMwMQFcMzAyXCJcMjExOlwyMDMeAFwyMTFcMjAyJwBcMjExXDIwNiQAXDMwMiACZkhc MjYyAVwyMDciIFtwYXJzZS1zZXhwLWxvb2t1cC1wcm9wZXJ0aWVzIGdldC1jaGFyLXByb3BlcnR5 IHN5bnRheC10YWJsZV0gNCAoIyQgLiAxOTAyNDkpXSkjQDI4OSBSZXR1cm4gdGhlIGNvZGUgZm9y IHRoZSBzeW50YXggY2xhc3MgZGVzY3JpYmVkIGJ5IFNZTlRBWC4KClNZTlRBWCBzaG91bGQgYmUg YSByYXcgc3ludGF4IGRlc2NyaXB0b3I7IHRoZSByZXR1cm4gdmFsdWUgaXMgYQppbnRlZ2VyIHRo YXQgZW5jb2RlcyB0aGUgY29ycmVzcG9uZGluZyBzeW50YXggY2xhc3MuICBTZWUgSW5mbwpub2Rl IGAoZWxpc3ApU3ludGF4IFRhYmxlIEludGVybmFscycgZm9yIGEgbGlzdCBvZiBjb2Rlcy4KCklm IFNZTlRBWCBpcyBuaWwsIHJldHVybiBuaWwuCgooZm4gU1lOVEFYKR8KKGRlZmFsaWFzICdzeW50 YXgtY2xhc3MgI1syNTcgIlwyMTFcMjA1CQBcMzAwAUBcMzAxXCJcMjA3IiBbbG9nYW5kIDY1NTM1 XSA0ICgjJCAuIDE5MDU4OSldKSNAMTI4IFVzZWQgaW4gYGZvcndhcmQtd29yZC1zdHJpY3RseScg YW5kIGBiYWNrd2FyZC13b3JkLXN0cmljdGx5Jwp0byBjb3VudGVybWFuZCB0aGUgZWZmZWN0IG9m IGBmaW5kLXdvcmQtYm91bmRhcnktZnVuY3Rpb24tdGFibGUnLh8KKGRlZnZhciB3b3JkLW1vdmUt ZW1wdHktY2hhci10YWJsZSBuaWwgKCMkIC4gMTkwOTc1KSkjQDQ3MSBNb3ZlIHBvaW50IGZvcndh cmQgQVJHIHdvcmRzIChiYWNrd2FyZCBpZiBBUkcgaXMgbmVnYXRpdmUpLgpJZiBBUkcgaXMgb21p dHRlZCBvciBuaWwsIG1vdmUgcG9pbnQgZm9yd2FyZCBvbmUgd29yZC4KTm9ybWFsbHkgcmV0dXJu cyB0LgpJZiBhbiBlZGdlIG9mIHRoZSBidWZmZXIgb3IgYSBmaWVsZCBib3VuZGFyeSBpcyByZWFj aGVkLCBwb2ludCBpcyBsZWZ0IHRoZXJlCmFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBuaWwuICBG aWVsZCBib3VuZGFyaWVzIGFyZSBub3Qgbm90aWNlZCBpZgpgaW5oaWJpdC1maWVsZC10ZXh0LW1v dGlvbicgaXMgbm9uLW5pbC4KClRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgZm9yd2FyZC13b3JkJywg YnV0IGl0IGlzIG5vdCBhZmZlY3RlZApieSBgZmluZC13b3JkLWJvdW5kYXJ5LWZ1bmN0aW9uLXRh YmxlJy4gIEl0IGlzIGFsc28gbm90IGludGVyYWN0aXZlLgoKKGZuICZvcHRpb25hbCBBUkcpHwoo ZGVmYWxpYXMgJ2ZvcndhcmQtd29yZC1zdHJpY3RseSAjWzI1NiAiXDMwMgghXDIwM1xuAAhcMjAy DwBcMzAzXDMwNCFcMjExEBlcMjExXDIwNhUAXDMwNXYpXDIwNyIgW3dvcmQtbW92ZS1lbXB0eS1j aGFyLXRhYmxlIGZpbmQtd29yZC1ib3VuZGFyeS1mdW5jdGlvbi10YWJsZSBjaGFyLXRhYmxlLXAg bWFrZS1jaGFyLXRhYmxlIG5pbCAxXSAzICgjJCAuIDE5MTE2MildKSNAMzEwIE1vdmUgYmFja3dh cmQgdW50aWwgZW5jb3VudGVyaW5nIHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLgpXaXRoIGFyZ3Vt ZW50IEFSRywgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuCklmIEFSRyBpcyBvbWl0dGVkIG9yIG5p bCwgbW92ZSBwb2ludCBiYWNrd2FyZCBvbmUgd29yZC4KClRoaXMgZnVuY3Rpb24gaXMgbGlrZSBg Zm9yd2FyZC13b3JkJywgYnV0IGl0IGlzIG5vdCBhZmZlY3RlZApieSBgZmluZC13b3JkLWJvdW5k YXJ5LWZ1bmN0aW9uLXRhYmxlJy4gIEl0IGlzIGFsc28gbm90IGludGVyYWN0aXZlLgoKKGZuICZv cHRpb25hbCBBUkcpHwooZGVmYWxpYXMgJ2JhY2t3YXJkLXdvcmQtc3RyaWN0bHkgI1syNTYgIlwz MDIIIVwyMDNcbgAIXDIwMg8AXDMwM1wzMDQhXDIxMRAZXDIxMVwyMDYVAFwzMDVbdilcMjA3IiBb d29yZC1tb3ZlLWVtcHR5LWNoYXItdGFibGUgZmluZC13b3JkLWJvdW5kYXJ5LWZ1bmN0aW9uLXRh YmxlIGNoYXItdGFibGUtcCBtYWtlLWNoYXItdGFibGUgbmlsIDFdIDMgKCMkIC4gMTkxODUxKV0p I0AyNzMgTW92ZSBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBuZXh0IHNlcXVlbmNlIG9mIHdoaXRl c3BhY2UgY2hhcnMuCkVhY2ggc3VjaCBzZXF1ZW5jZSBtYXkgYmUgYSBzaW5nbGUgbmV3bGluZSwg b3IgYSBzZXF1ZW5jZSBvZgpjb25zZWN1dGl2ZSBzcGFjZSBhbmQvb3IgdGFiIGNoYXJhY3RlcnMu CldpdGggcHJlZml4IGFyZ3VtZW50IEFSRywgZG8gaXQgQVJHIHRpbWVzIGlmIHBvc2l0aXZlLCBv ciBtb3ZlCmJhY2t3YXJkcyBBUkcgdGltZXMgaWYgbmVnYXRpdmUuCgooZm4gQVJHKR8KKGRlZmFs aWFzICdmb3J3YXJkLXdoaXRlc3BhY2UgI1syNTcgIlwzMDABIVwyMDMNAFwzMDFcMzAyXDMwM1wz MDQEJFwyMDdcMjExXDMwNVdcMjA1LgBcMzA2XDMwMlwzMDNcMzA0I1wyMDMnAFwzMDVcMjI0Zlwz MDc9XDIwNCcAXDMxMFwzMDN4XDIxMFwyMTFUXDI2MgFcMjAyDQBcMjA3IiBbbmF0bnVtcCByZS1z ZWFyY2gtZm9yd2FyZCAiWyAJXStcXHxcbiIgbmlsIG1vdmUgMCByZS1zZWFyY2gtYmFja3dhcmQg MTAgIiAJIl0gNiAoIyQgLiAxOTIzODEpICJecCJdKSNAMjgzIE1vdmUgcG9pbnQgdG8gdGhlIG5l eHQgcG9zaXRpb24gdGhhdCBpcyB0aGUgZW5kIG9mIGEgc3ltYm9sLgpBIHN5bWJvbCBpcyBhbnkg c2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBpbiBlaXRoZXIgdGhlCndvcmQgY29uc3Rp dHVlbnQgb3Igc3ltYm9sIGNvbnN0aXR1ZW50IHN5bnRheCBjbGFzcy4KV2l0aCBwcmVmaXggYXJn dW1lbnQgQVJHLCBkbyBpdCBBUkcgdGltZXMgaWYgcG9zaXRpdmUsIG9yIG1vdmUKYmFja3dhcmRz IEFSRyB0aW1lcyBpZiBuZWdhdGl2ZS4KCihmbiBBUkcpHwooZGVmYWxpYXMgJ2ZvcndhcmQtc3lt Ym9sICNbMjU3ICJcMzAwASFcMjAzDQBcMzAxXDMwMlwzMDNcMzA0BCRcMjA3XDIxMVwzMDVXXDIw NSYAXDMwNlwzMDJcMzAzXDMwNCNcMjAzHwBcMzA3XDMxMCFcMjEwXDIxMVRcMjYyAVwyMDINAFwy MDciIFtuYXRudW1wIHJlLXNlYXJjaC1mb3J3YXJkICJcXChcXHN3XFx8XFxzX1xcKSsiIG5pbCBt b3ZlIDAgcmUtc2VhcmNoLWJhY2t3YXJkIHNraXAtc3ludGF4LWJhY2t3YXJkICJ3XyJdIDYgKCMk IC4gMTkyOTI1KSAiXnAiXSkjQDE3NiBNb3ZlIHBvaW50IHBhc3QgYWxsIGNoYXJhY3RlcnMgd2l0 aCB0aGUgc2FtZSBzeW50YXggY2xhc3MuCldpdGggcHJlZml4IGFyZ3VtZW50IEFSRywgZG8gaXQg QVJHIHRpbWVzIGlmIHBvc2l0aXZlLCBvciBtb3ZlCmJhY2t3YXJkcyBBUkcgdGltZXMgaWYgbmVn YXRpdmUuCgooZm4gJm9wdGlvbmFsIEFSRykfCihkZWZhbGlhcyAnZm9yd2FyZC1zYW1lLXN5bnRh eCAjWzI1NiAiXDIxMVwyMDQHAFwzMDBcMjYyAVwyMTFcMzAxV1wyMDMdAFwzMDJcMzAzYFNmeiEh XDIxMFwyMTFUXDI2MgFcMjAyBwBcMjExXDMwMVZcMjA1MgBcMzA0XDMwM1wzMDVmeiEhXDIxMFwy MTFTXDI2MgFcMjAyHQBcMjA3IiBbMSAwIHNraXAtc3ludGF4LWJhY2t3YXJkIGNoYXItdG8tc3Ry aW5nIHNraXAtc3ludGF4LWZvcndhcmQgbmlsXSA0ICgjJCAuIDE5MzQ4MSkgIl5wIl0pCihkZWZ2 YXIgdGV4dC1jbG9uZS0tbWFpbnRhaW5pbmcgbmlsKSNAMTc1IFByb3BhZ2F0ZSB0aGUgY2hhbmdl cyBtYWRlIHVuZGVyIHRoZSBvdmVybGF5IE9MMSB0byB0aGUgb3RoZXIgY2xvbmVzLgpUaGlzIGlz IHVzZWQgb24gdGhlIGBtb2RpZmljYXRpb24taG9va3MnIHByb3BlcnR5IG9mIHRleHQgY2xvbmVz LgoKKGZuIE9MMSBBRlRFUiBCRUcgRU5EICZvcHRpb25hbCBMRU4pHwooZGVmYWxpYXMgJ3RleHQt Y2xvbmUtLW1haW50YWluICNbMTI4NCAiA1wyMDUIAQg/XDIwNQgBCT9cMjA1CAFcMzAyBSFcMjA1 CAFcMzAzBVwzMDRcIlwyMDMfAFwzMDVcMjAyIABcMzA2A1wzMDIGByECXFxdXDI2MgQCXDMwNwYH IQJaXlwyNjIDAwNYXDIwNQYBXDIxMlwzMDMGBlwzMTBcIlwyMDNcMjQ1AFwzMDIGBiEBXFxcMzA3 BgchAloBYlwyMTBcMzExIFwzMTJcMzEzAlwiXDIxNlwzMTRcMzAzBlxuXDMxMFwiA1wzMTUjXDIw NGsAAlwyNjIGXDIwMlwyNDIAXDMwNlwyMjUCV1wyMDNcMjA2AAVcMzA2XDIyNV5cMjYyBlwzMTYG CVwzMDIGCyFcMzA2XDIyNQYHXFwjXDIxMFwzMDZcMjI0A1ZcMjAzXDI0MgBcMzA2XDIyNAYHXVwy NjIHXDMxNgYJXDMwNlwyMjQGBlpcMzA3BlxmISNcMjEwKVwyNjYDA1wzMDIGByFaXDMwNwYHIQRa BQV7XDMxNVwyMTEZXDMwMwZcblwzMTdcIlwyMTFcMjAzXDM3MQBcMjExQFwzMDcBIQZcZgI9XDIw NFwzNjEAXDIxMVwyMDNcMzYxAFwzMjBcMjYyBFwzMDICIQYHXFxcMzA3AyEGB1piXDIxMFwyMTFg VlwyMDRcMzYwAFwyMTIFYylcMjEwXDIxMWB8XDIxMFwyMTBcMjEwAUFcMjY2XDIwMlwyMDJcMjc0 AFwyMTBcMjExXDIwNQIBXDMyMQZcbiEpXDI2NlwyMDQpXDI2MgFcMjA3IiBbdW5kby1pbi1wcm9n cmVzcyB0ZXh0LWNsb25lLS1tYWludGFpbmluZyBvdmVybGF5LXN0YXJ0IG92ZXJsYXktZ2V0IHRl eHQtY2xvbmUtc3ByZWFkcCAxIDAgb3ZlcmxheS1lbmQgdGV4dC1jbG9uZS1zeW50YXggbWF0Y2gt ZGF0YSBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMFwzMDJcIlwyMDciIFtWMCBzZXQtbWF0Y2gt ZGF0YSB0XSAzXSByZS1zZWFyY2gtZm9yd2FyZCB0IG1vdmUtb3ZlcmxheSB0ZXh0LWNsb25lcyBu aWwgZGVsZXRlLW92ZXJsYXldIDE2ICgjJCAuIDE5Mzk1MSldKSNANjI2IENyZWF0ZSBhIHRleHQg Y2xvbmUgb2YgU1RBUlQuLi5FTkQgYXQgcG9pbnQuClRleHQgY2xvbmVzIGFyZSBjaHVua3Mgb2Yg dGV4dCB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGtlcHQgaWRlbnRpY2FsOgpjaGFuZ2VzIGRvbmUg dG8gb25lIG9mIHRoZSBjbG9uZXMgd2lsbCBiZSBpbW1lZGlhdGVseSBwcm9wYWdhdGVkIHRvIHRo ZSBvdGhlci4KClRoZSBidWZmZXIncyBjb250ZW50IGF0IHBvaW50IGlzIGFzc3VtZWQgdG8gYmUg YWxyZWFkeSBpZGVudGljYWwgdG8KdGhlIG9uZSBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQuCklmIFNZ TlRBWCBpcyBwcm92aWRlZCBpdCdzIGEgcmVnZXhwIHRoYXQgZGVzY3JpYmVzIHRoZSBwb3NzaWJs ZSB0ZXh0IG9mCnRoZSBjbG9uZXM7IHRoZSBjbG9uZSB3aWxsIGJlIHNocnVuayBvciBraWxsZWQg aWYgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0Cml0cyB0ZXh0IG1hdGNoZXMgdGhlIHJlZ2V4cC4K SWYgU1BSRUFEUCBpcyBub24tbmlsIGl0IGluZGljYXRlcyB0aGF0IHRleHQgaW5zZXJ0ZWQgYmVm b3JlL2FmdGVyIHRoZQpjbG9uZSBzaG91bGQgYmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBjbG9uZS4K CihmbiBTVEFSVCBFTkQgJm9wdGlvbmFsIFNQUkVBRFAgU1lOVEFYKR8KKGRlZmFsaWFzICd0ZXh0 LWNsb25lLWNyZWF0ZSAjWzEwMjYgImADBVpcXAJcMjAzEwBvXDIwNBMABGVYXDIwMxcAXDMwMFwy MDIYAFwzMDEDXDIwMygAAWRZXDIwNCgABWRZXDIwMywAXDMwMFwyMDItAFwzMDFcMzAyBgcDWgYH A1xcXDMwM1wzMDQkXDMwMmAEWgUEXFxcMzAzXDMwNCQBAURcMzA1A1wzMDZcMzA3I1wyMTAGB1wy MDNXAFwzMDUDXDMxMFwzMDQjXDIxMAYGXDIwM2MAXDMwNQNcMzExBgkjXDIxMFwzMDUDXDMxMlwz MDQjXDIxMFwzMDUDXDMxMwMjXDIxMFwzMDUCXDMwNlwzMTQjXDIxMAYHXDIwM1wyMDAAXDMwNQJc MzEwXDMwNCNcMjEwBgZcMjAzXDIxNABcMzA1AlwzMTEGCSNcMjEwXDMwNQJcMzEyXDMwNCNcMjEw XDMwNQJcMzEzAyNcMjA3IiBbMCAxIG1ha2Utb3ZlcmxheSBuaWwgdCBvdmVybGF5LXB1dCBtb2Rp ZmljYXRpb24taG9va3MgKHRleHQtY2xvbmUtLW1haW50YWluKSB0ZXh0LWNsb25lLXNwcmVhZHAg dGV4dC1jbG9uZS1zeW50YXggZXZhcG9yYXRlIHRleHQtY2xvbmVzICh0ZXh0LWNsb25lLS1tYWlu dGFpbildIDE0ICgjJCAuIDE5NTA0MCldKSNAMTM1OCBEZWZpbmUgYSBzeW1ib2wgdG8gaWRlbnRp ZnkgYSBtYWlsLXNlbmRpbmcgcGFja2FnZSBmb3IgYG1haWwtdXNlci1hZ2VudCcuCgpTWU1CT0wg Y2FuIGJlIGFueSBMaXNwIHN5bWJvbC4gIEl0cyBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZC9vcgp2 YWx1ZSBhcyBhIHZhcmlhYmxlIGRvIG5vdCBtYXR0ZXIgZm9yIHRoaXMgdXNhZ2U7IHdlIHVzZSBv bmx5IGNlcnRhaW4KcHJvcGVydGllcyBvbiBpdHMgcHJvcGVydHkgbGlzdCwgdG8gZW5jb2RlIHRo ZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuCgpDT01QT1NFRlVOQyBpcyBwcm9ncmFtIGNhbGxhYmxl IGZ1bmN0aW9uIHRoYXQgY29tcG9zZXMgYW4gb3V0Z29pbmcKbWFpbCBtZXNzYWdlIGJ1ZmZlci4g IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHNldCB1cCB0aGUgYmFzaWNzIG9mIHRoZQpidWZmZXIgd2l0 aG91dCByZXF1aXJpbmcgdXNlciBpbnRlcmFjdGlvbi4gIEl0IHNob3VsZCBwb3B1bGF0ZSB0aGUK c3RhbmRhcmQgbWFpbCBoZWFkZXJzLCBsZWF2aW5nIHRoZSBgdG86JyBhbmQgYHN1YmplY3Q6JyBo ZWFkZXJzIGJsYW5rCmJ5IGRlZmF1bHQuCgpDT01QT1NFRlVOQyBzaG91bGQgYWNjZXB0IHNldmVy YWwgb3B0aW9uYWwgYXJndW1lbnRzLS10aGUgc2FtZQphcmd1bWVudHMgdGhhdCBgY29tcG9zZS1t YWlsJyB0YWtlcy4gIFNlZSB0aGF0IGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbi4KClNFTkRGVU5D IGlzIHRoZSBjb21tYW5kIGEgdXNlciB3b3VsZCBydW4gdG8gc2VuZCB0aGUgbWVzc2FnZS4KCk9w dGlvbmFsIEFCT1JURlVOQyBpcyB0aGUgY29tbWFuZCBhIHVzZXIgd291bGQgcnVuIHRvIGFib3J0 IHRoZQptZXNzYWdlLiAgRm9yIG1haWwgcGFja2FnZXMgdGhhdCBkb24ndCBoYXZlIGEgc2VwYXJh dGUgYWJvcnQgZnVuY3Rpb24sCnRoaXMgY2FuIGJlIGBraWxsLWJ1ZmZlcicgKHRoZSBlcXVpdmFs ZW50IG9mIG9taXR0aW5nIHRoaXMgYXJndW1lbnQpLgoKT3B0aW9uYWwgSE9PS1ZBUiBpcyBhIGhv b2sgdmFyaWFibGUgdGhhdCBnZXRzIHJ1biBiZWZvcmUgdGhlIG1lc3NhZ2UKaXMgYWN0dWFsbHkg c2VudC4gIENhbGxlcnMgdGhhdCB1c2UgdGhlIGBtYWlsLXVzZXItYWdlbnQnIG1heQppbnN0YWxs IGEgaG9vayBmdW5jdGlvbiB0ZW1wb3JhcmlseSBvbiB0aGlzIGhvb2sgdmFyaWFibGUuCklmIEhP T0tWQVIgaXMgbmlsLCBgbWFpbC1zZW5kLWhvb2snIGlzIHVzZWQuCgpUaGUgcHJvcGVydGllcyB1 c2VkIG9uIFNZTUJPTCBhcmUgYGNvbXBvc2VmdW5jJywgYHNlbmRmdW5jJywKYGFib3J0ZnVuYycs IGFuZCBgaG9va3ZhcicuCgooZm4gU1lNQk9MIENPTVBPU0VGVU5DIFNFTkRGVU5DICZvcHRpb25h bCBBQk9SVEZVTkMgSE9PS1ZBUikfCihkZWZhbGlhcyAnZGVmaW5lLW1haWwtdXNlci1hZ2VudCAj WzEyODMgIlwzMDAFXDMwMQYGI1wyMTBcMzAwBVwzMDIFI1wyMTBcMzAwBVwzMDMEXDIwNhUAXDMw NCNcMjEwXDMwMAVcMzA1A1wyMDYfAFwzMDYjXDIwNyIgW3B1dCBjb21wb3NlZnVuYyBzZW5kZnVu YyBhYm9ydGZ1bmMga2lsbC1idWZmZXIgaG9va3ZhciBtYWlsLXNlbmQtaG9va10gOSAoIyQgLiAx OTYyMjYpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzAwXDIwNyIgW2Z1bmN0aW9u LXB1dCBkZWZpbmUtbWFpbC11c2VyLWFnZW50IGxpc3AtaW5kZW50LWZ1bmN0aW9uIGRlZnVuXSA0 KSNAMTc2IENvbGxlY3QgYWxsIGZyYW1lcyBvZiBjdXJyZW50IGJhY2t0cmFjZSBpbnRvIGEgbGlz dC4KSWYgbm9uLW5pbCwgQkFTRSBzaG91bGQgYmUgYSBmdW5jdGlvbiwgYW5kIGZyYW1lcyBiZWZv cmUgaXRzCm5lYXJlc3QgYWN0aXZhdGlvbiBmcmFtZSBhcmUgZGlzY2FyZGVkLgoKKGZuICZvcHRp b25hbCBCQVNFKR8KKGRlZmFsaWFzICdiYWNrdHJhY2UtZnJhbWVzICNbMjU2ICJcMzAwQ1wzMDFc MzAyXDMwMwNcIgNcMjA2XGYAXDMwNFwiXDIxMFwyMTFcMjQyXDIzN1wyMDciIFtuaWwgbWFwYmFj a3RyYWNlIG1ha2UtY2xvc3VyZSAjWzEyOCAiXDMwMAFcMzAwXDI0MkJcMjQwXDIwNyIgW1YwXSA0 ICJcblxuKGZuICZyZXN0IEZSQU1FKSJdIGJhY2t0cmFjZS1mcmFtZXNdIDYgKCMkIC4gMTk3OTEx KV0pI0A2NTUgUmV0dXJuIHRoZSBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIE5GUkFNRVMgdXAgZnJv bSBjdXJyZW50IGV4ZWN1dGlvbiBwb2ludC4KSWYgbm9uLW5pbCwgQkFTRSBzaG91bGQgYmUgYSBm dW5jdGlvbiwgYW5kIE5GUkFNRVMgY291bnRzIGZyb20gaXRzCm5lYXJlc3QgYWN0aXZhdGlvbiBm cmFtZS4KSWYgdGhlIGZyYW1lIGhhcyBub3QgZXZhbHVhdGVkIHRoZSBhcmd1bWVudHMgeWV0IChv ciBpcyBhIHNwZWNpYWwgZm9ybSksCnRoZSB2YWx1ZSBpcyAobmlsIEZVTkNUSU9OIEFSRy1GT1JN Uy4uLikuCklmIHRoZSBmcmFtZSBoYXMgZXZhbHVhdGVkIGl0cyBhcmd1bWVudHMgYW5kIGNhbGxl ZCBpdHMgZnVuY3Rpb24gYWxyZWFkeSwKdGhlIHZhbHVlIGlzICh0IEZVTkNUSU9OIEFSRy1WQUxV RVMuLi4pLgpBICZyZXN0IGFyZyBpcyByZXByZXNlbnRlZCBhcyB0aGUgdGFpbCBvZiB0aGUgbGlz dCBBUkctVkFMVUVTLgpGVU5DVElPTiBpcyB3aGF0ZXZlciB3YXMgc3VwcGxpZWQgYXMgY2FyIG9m IGV2YWx1YXRlZCBsaXN0LApvciBhIGxhbWJkYSBleHByZXNzaW9uIGZvciBtYWNybyBjYWxscy4K SWYgTkZSQU1FUyBpcyBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBmcmFtZXMsIHRoZSB2YWx1ZSBp cyBuaWwuCgooZm4gTkZSQU1FUyAmb3B0aW9uYWwgQkFTRSkfCihkZWZhbGlhcyAnYmFja3RyYWNl LWZyYW1lICNbNTEzICJcMzAwXDMwMQMDXDIwNggAXDMwMiNcMjA3IiBbYmFja3RyYWNlLWZyYW1l LS1pbnRlcm5hbCAjWzEwMjggIgMDA0JCXDIwNyIgW10gNyAiXG5cbihmbiBFVkFMRCBGVU5DIEFS R1MgXykiXSBiYWNrdHJhY2UtZnJhbWVdIDYgKCMkIC4gMTk4MzEyKV0pI0AzNjcgU3BlY2lhbCBo b29rIGNhbGxlZCB0byBza2lwIHNwZWNpYWwgZnJhbWVzIGluIGBjYWxsZWQtaW50ZXJhY3RpdmVs eS1wJy4KVGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggMyBhcmd1bWVudHM6IChJIEZSQU1F MSBGUkFNRTIpLAp3aGVyZSBGUkFNRTEgaXMgYSAiY3VycmVudCBmcmFtZSIsIEZSQU1FMiBpcyB0 aGUgbmV4dCBmcmFtZSwKSSBpcyB0aGUgaW5kZXggb2YgdGhlIGZyYW1lIGFmdGVyIEZSQU1FMi4g IEl0IHNob3VsZCByZXR1cm4gbmlsCmlmIHRob3NlIGZyYW1lcyBkb24ndCBzZWVtIHNwZWNpYWwg YW5kIG90aGVyd2lzZSwgaXQgc2hvdWxkIHJldHVybgp0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBz a2lwIChtaW51cyAxKS4fCihkZWZ2YXIgY2FsbGVkLWludGVyYWN0aXZlbHktcC1mdW5jdGlvbnMg bmlsICgjJCAuIDE5OTE0OSkpCihkZWZjb25zdCBpbnRlcm5hbC0tZnVuY2FsbC1pbnRlcmFjdGl2 ZWx5IChzeW1ib2wtZnVuY3Rpb24gJ2Z1bmNhbGwtaW50ZXJhY3RpdmVseSkpI0AxNDI0IFJldHVy biB0IGlmIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYnkgYGNhbGwtaW50ZXJh Y3RpdmVseScuCklmIEtJTkQgaXMgYGludGVyYWN0aXZlJywgdGhlbiByZXR1cm4gdCBvbmx5IGlm IHRoZSBjYWxsIHdhcyBtYWRlCmludGVyYWN0aXZlbHkgYnkgdGhlIHVzZXIsIGkuZS4gbm90IGlu IGBub25pbnRlcmFjdGl2ZScgbW9kZSBub3IKd2hlbiBgZXhlY3V0aW5nLWtiZC1tYWNybycuCklm IEtJTkQgaXMgYGFueScsIG9uIHRoZSBvdGhlciBoYW5kLCBpdCB3aWxsIHJldHVybiB0IGZvciBh bnkga2luZCBvZgppbnRlcmFjdGl2ZSBjYWxsLCBpbmNsdWRpbmcgYmVpbmcgY2FsbGVkIGFzIHRo ZSBiaW5kaW5nIG9mIGEga2V5IG9yCmZyb20gYSBrZXlib2FyZCBtYWNybywgZXZlbiBpbiBgbm9u aW50ZXJhY3RpdmUnIG1vZGUuCgpUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgYnJpdHRsZSwgaXQgbWF5 IGZhaWwgdG8gcmV0dXJuIHRoZSBpbnRlbmRlZCByZXN1bHQgd2hlbgp0aGUgY29kZSBpcyBkZWJ1 Z2dlZCwgYWR2aXNlZCwgb3IgaW5zdHJ1bWVudGVkIGluIHNvbWUgZm9ybS4gIFNvbWUgbWFjcm9z IGFuZApzcGVjaWFsIGZvcm1zIChzdWNoIGFzIGBjb25kaXRpb24tY2FzZScpIG1heSBhbHNvIHNv bWV0aW1lcyB3cmFwIHRoZWlyIGJvZGllcwppbiBhIGBsYW1iZGEnLCBzbyBhbnkgY2FsbCB0byBg Y2FsbGVkLWludGVyYWN0aXZlbHktcCcgZnJvbSB0aG9zZSBib2RpZXMgd2lsbAppbmRpY2F0ZSB3 aGV0aGVyIHRoYXQgbGFtYmRhIChyYXRoZXIgdGhhbiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24p IHdhcyBjYWxsZWQKaW50ZXJhY3RpdmVseS4KCkluc3RlYWQgb2YgdXNpbmcgdGhpcyBmdW5jdGlv biwgaXQgaXMgY2xlYW5lciBhbmQgbW9yZSByZWxpYWJsZSB0byBnaXZlIHlvdXIKZnVuY3Rpb24g YW4gZXh0cmEgb3B0aW9uYWwgYXJndW1lbnQgd2hvc2UgYGludGVyYWN0aXZlJyBzcGVjIHNwZWNp Zmllcwpub24tbmlsIHVuY29uZGl0aW9uYWxseSAoInAiIGlzIGEgZ29vZCB3YXkgdG8gZG8gdGhp cyksIG9yIHZpYQoobm90IChvciBleGVjdXRpbmcta2JkLW1hY3JvIG5vbmludGVyYWN0aXZlKSku CgpUaGUgb25seSBrbm93biBwcm9wZXIgdXNlIG9mIGBpbnRlcmFjdGl2ZScgZm9yIEtJTkQgaXMg aW4gZGVjaWRpbmcKd2hldGhlciB0byBkaXNwbGF5IGEgaGVscGZ1bCBtZXNzYWdlLCBvciBob3cg dG8gZGlzcGxheSBpdC4gIElmIHlvdSdyZQp0aGlua2luZyBvZiB1c2luZyBpdCBmb3IgYW55IG90 aGVyIHB1cnBvc2UsIGl0IGlzIHF1aXRlIGxpa2VseSB0aGF0CnlvdSdyZSBtYWtpbmcgYSBtaXN0 YWtlLiAgVGhpbms6IHdoYXQgZG8geW91IHdhbnQgdG8gZG8gd2hlbiB0aGUKY29tbWFuZCBpcyBj YWxsZWQgZnJvbSBhIGtleWJvYXJkIG1hY3JvPwoKKGZuICZvcHRpb25hbCBLSU5EKR8KKGRlZmFs aWFzICdjYWxsZWQtaW50ZXJhY3RpdmVseS1wICNbMjU2ICJcMjExXDMwMz1cMjA1CwAIXDIwNgsA CT9cMjA1EQFcMzA0Q1wzMDVDXDMwNUNcMzA2XDIxMQQEBCNcMjEwXDIxMQQEBCNcMjEwAlwyNDJc MjAzLQACXDI0MkBcMjAzHAACXDI0MkFAXDMwNz5cMjA0HABcMzEwXDMxMQVcMjQyBVwyNDIFXDI0 MiRcMjExXDMxMlwyNjdcMjAyTQBcMzA1XDIwMloAXDMxM1wyMDJaAARcMjExXDI0MgJcXFNcMjQw XDIxMAEFBQUjXDI2MgFcMjA0HAACXDI0MgJcMjQyQlwyMTE6XDIwNQ0BXDIxMVwyNDJcMjExOlwy MDNcMzQ0AFwyMTFcMjQzXDIxMTpcMjAzXDI3MABcMjExXDI0MlwzMTQBIVwzMTUBIVwyMDVcMjA2 AFwzMTYBIT9cMjYyAT9cMjA1XDI2MwADXDI0M1wyMTE6XDIwNVwyNjEAXDIxMVwyNDJcMjExXDMx Mz1cMjA1XDI1NwABXDI0M1wyMTE6XDIwNVwyNTUAXDIxMVwyNDJcblwzMTQCIT0/P1wyNjIBXDI2 MgFcMjYyAVwyNjIBXDI2MgFcMjAyXDMzNwACXDI0M1wyMTE6XDIwNVwzMzUAXDIxMVwyNDJcMjEx XDMxMz1cMjA1XDMzMwABXDI0M1wyMTE6XDIwNVwzMzEAXDIxMVwyNDJcblwzMTQCIT0/P1wyNjIB XDI2MgFcMjYyAVwyNjIBXDI2MgFcMjAyCwEBXDI0M1wyMTE6XDIwNQkBXDIxMVwyNDJcMjExXDMx Mz1cMjA1BwEBXDI0M1wyMTE6XDIwNQUBXDIxMVwyNDJcblwzMTQCIT0/P1wyNjIBXDI2MgFcMjYy AVwyNjIBXDI2MgFcMjYyAVwyNjZcMjA0XDIwNyIgW2V4ZWN1dGluZy1rYmQtbWFjcm8gbm9uaW50 ZXJhY3RpdmUgaW50ZXJuYWwtLWZ1bmNhbGwtaW50ZXJhY3RpdmVseSBpbnRlcmFjdGl2ZSAxIG5p bCAjWzc3MSAiAQFcMjQyXDI0MFwyMTBcMjExXDMwMARcMjQyXDMwMVwiXDI0MFwyMTACXDIxMVwy NDJUXDI0MFwyMDciIFtiYWNrdHJhY2UtZnJhbWUgY2FsbGVkLWludGVyYWN0aXZlbHktcF0gNyAi XG5cbihmbiBJIEZSQU1FIE5FWFRGUkFNRSkiXSAoaW50ZXJhY3RpdmUtcCAnYnl0ZS1jb2RlKSBy dW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyBjYWxsZWQtaW50ZXJhY3RpdmVseS1wLWZ1 bmN0aW9ucyAjcyhoYXNoLXRhYmxlIHNpemUgMiB0ZXN0IGVxIHJlaGFzaC1zaXplIDEuNSByZWhh c2gtdGhyZXNob2xkIDAuODEyNSBwdXJlY29weSB0IGRhdGEgKG5pbCA2OSAwIDczKSkgdCBpbmRp cmVjdC1mdW5jdGlvbiBzdWJycCBzdWJyLW5hdGl2ZS1lbGlzcC1wXSAxNiAoIyQgLiAxOTk2NjYp XSkKKHNldC1hZHZlcnRpc2VkLWNhbGxpbmctY29udmVudGlvbiAnY2FsbGVkLWludGVyYWN0aXZl bHktcCAnKGtpbmQpICIyMy4xIikjQDk2MCBSZXR1cm4gdCBpZiB0aGUgY29udGFpbmluZyBmdW5j dGlvbiB3YXMgcnVuIGRpcmVjdGx5IGJ5IHVzZXIgaW5wdXQuClRoaXMgbWVhbnMgdGhhdCB0aGUg ZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGBjYWxsLWludGVyYWN0aXZlbHknCih3aGljaCBpbmNs dWRlcyBiZWluZyBjYWxsZWQgYXMgdGhlIGJpbmRpbmcgb2YgYSBrZXkpCmFuZCBpbnB1dCBpcyBj dXJyZW50bHkgY29taW5nIGZyb20gdGhlIGtleWJvYXJkIChub3QgYSBrZXlib2FyZCBtYWNybyks CmFuZCBFbWFjcyBpcyBub3QgcnVubmluZyBpbiBiYXRjaCBtb2RlIChgbm9uaW50ZXJhY3RpdmUn IGlzIG5pbCkuCgpUaGUgb25seSBrbm93biBwcm9wZXIgdXNlIG9mIGBpbnRlcmFjdGl2ZS1wJyBp cyBpbiBkZWNpZGluZyB3aGV0aGVyIHRvCmRpc3BsYXkgYSBoZWxwZnVsIG1lc3NhZ2UsIG9yIGhv dyB0byBkaXNwbGF5IGl0LiAgSWYgeW91J3JlIHRoaW5raW5nCm9mIHVzaW5nIGl0IGZvciBhbnkg b3RoZXIgcHVycG9zZSwgaXQgaXMgcXVpdGUgbGlrZWx5IHRoYXQgeW91J3JlCm1ha2luZyBhIG1p c3Rha2UuICBUaGluazogd2hhdCBkbyB5b3Ugd2FudCB0byBkbyB3aGVuIHRoZSBjb21tYW5kIGlz CmNhbGxlZCBmcm9tIGEga2V5Ym9hcmQgbWFjcm8gb3IgaW4gYmF0Y2ggbW9kZT8KClRvIHRlc3Qg d2hldGhlciB5b3VyIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBgY2FsbC1pbnRlcmFjdGl2ZWx5 JywKZWl0aGVyIChpKSBhZGQgYW4gZXh0cmEgb3B0aW9uYWwgYXJndW1lbnQgYW5kIGdpdmUgaXQg YW4gYGludGVyYWN0aXZlJwpzcGVjIHRoYXQgc3BlY2lmaWVzIG5vbi1uaWwgdW5jb25kaXRpb25h bGx5IChzdWNoIGFzICJwIik7IG9yIChpaSkKdXNlIGBjYWxsZWQtaW50ZXJhY3RpdmVseS1wJy4K ClRvIHRlc3Qgd2hldGhlciBhIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW50ZXJhY3RpdmVseSwg dXNlCmBjb21tYW5kcCcuHwooZGVmYWxpYXMgJ2ludGVyYWN0aXZlLXAgI1swICJcMzAwXDMwMSFc MjA3IiBbY2FsbGVkLWludGVyYWN0aXZlbHktcCBpbnRlcmFjdGl2ZV0gMiAoIyQgLiAyMDIzNzYp XSkKKG1ha2Utb2Jzb2xldGUgJ2ludGVyYWN0aXZlLXAgJ2NhbGxlZC1pbnRlcmFjdGl2ZWx5LXAg IjIzLjIiKSNAMjIgCgooZm4gS0VZTUFQIFNZTUJPTCkfCihkZWZhbGlhcyAnaW50ZXJuYWwtcHVz aC1rZXltYXAgI1s1MTQgIlwyMTFKAgE+P1wyMDUoAFwzMDACSj5cMjA0XCIAXDMwMVwzMDIDSlwi XDI2MgFcMjExXDMwMAJBQlwyNDFcMjEwAQFMXDIxMFwyMTEDAkFCXDI0MVwyMDciIFthZGQta2V5 bWFwLXdpdG5lc3MgbWFrZS1jb21wb3NlZC1rZXltYXAgbmlsXSA2ICgjJCAuIDIwMzUwMildKSNA MjIgCgooZm4gS0VZTUFQIFNZTUJPTCkfCihkZWZhbGlhcyAnaW50ZXJuYWwtcG9wLWtleW1hcCAj WzUxNCAiXDIxMUoCAT5cMjAzEABcMjExXDMwMAQDQVwiXDI0MVwyMTBcMjExQUFcMjExXDIwMx0A XDMwMQEhXDIwNSgAAUFAXDMwMj1cMjA1KAACAUxcMjA3IiBbZGVscSBrZXltYXBwIGFkZC1rZXlt YXAtd2l0bmVzc10gNyAoIyQgLiAyMDM3MjEpXSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMw MyNcMjEwXDMwNFwzMDFcMzAyXDMwNSNcMjA3IiBbZGVmYWxpYXMgc2V0LXRlbXBvcmFyeS1vdmVy bGF5LW1hcCBzZXQtdHJhbnNpZW50LW1hcCBuaWwgbWFrZS1vYnNvbGV0ZSAiMjQuNCJdIDQpI0Ay NTEgVGltZW91dCBpbiBzZWNvbmRzIGZvciBkZWFjdGl2YXRpb24gb2YgYSB0cmFuc2llbnQga2V5 bWFwLgpJZiB0aGlzIGlzIGEgbnVtYmVyLCBpdCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBpZGxl IHRpbWUKYWZ0ZXIgd2hpY2ggdG8gZGVhY3RpdmF0ZSB0aGUga2V5bWFwIHNldCBieSBgc2V0LXRy YW5zaWVudC1tYXAnLAp0aHVzIG92ZXJyaWRpbmcgdGhlIHZhbHVlIG9mIHRoZSBUSU1FT1VUIGFy Z3VtZW50IHRvIHRoYXQgZnVuY3Rpb24uHwooZGVmdmFyIHNldC10cmFuc2llbnQtbWFwLXRpbWVv dXQgbmlsICgjJCAuIDIwNDA2MykpI0A0MCBUaW1lciBmb3IgYHNldC10cmFuc2llbnQtbWFwLXRp bWVvdXQnLh8KKGRlZnZhciBzZXQtdHJhbnNpZW50LW1hcC10aW1lciBuaWwgKCMkIC4gMjA0Mzcx KSkjQDE1MzkgU2V0IE1BUCBhcyBhIHRlbXBvcmFyeSBrZXltYXAgdGFraW5nIHByZWNlZGVuY2Ug b3ZlciBvdGhlciBrZXltYXBzLgpOb3JtYWxseSwgTUFQIGlzIHVzZWQgb25seSBvbmNlLCB0byBs b29rIHVwIHRoZSB2ZXJ5IG5leHQga2V5LgpIb3dldmVyLCBpZiB0aGUgb3B0aW9uYWwgYXJndW1l bnQgS0VFUC1QUkVEIGlzIHQsIE1BUCBzdGF5cwphY3RpdmUgaWYgYSBrZXkgZnJvbSBNQVAgaXMg dXNlZC4gIEtFRVAtUFJFRCBjYW4gYWxzbyBiZSBhCmZ1bmN0aW9uIG9mIG5vIGFyZ3VtZW50czog aXQgaXMgY2FsbGVkIGZyb20gYHByZS1jb21tYW5kLWhvb2snIGFuZAppZiBpdCByZXR1cm5zIG5v bi1uaWwsIHRoZW4gTUFQIHN0YXlzIGFjdGl2ZS4KCk9wdGlvbmFsIGFyZyBPTi1FWElULCBpZiBu b24tbmlsLCBzcGVjaWZpZXMgYSBmdW5jdGlvbiB0aGF0IGlzCmNhbGxlZCwgd2l0aCBubyBhcmd1 bWVudHMsIGFmdGVyIE1BUCBpcyBkZWFjdGl2YXRlZC4KCk9wdGlvbmFsIGFyZyBNRVNTQUdFLCBp ZiBub24tbmlsLCByZXF1ZXN0cyBkaXNwbGF5IG9mIGFuIGluZm9ybWF0aXZlCm1lc3NhZ2UgYWZ0 ZXIgYWN0aXZhdGluZyB0aGUgdHJhbnNpZW50IG1hcC4gIElmIE1FU1NBR0UgaXMgYSBzdHJpbmcs Cml0IHNwZWNpZmllcyB0aGUgZm9ybWF0IHN0cmluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gZGlzcGxh eSwgYW5kIHRoZSAlawpzcGVjaWZpZXIgaW4gdGhlIHN0cmluZyBpcyByZXBsYWNlZCB3aXRoIHRo ZSBsaXN0IG9mIGtleXMgZnJvbSB0aGUKdHJhbnNpZW50IG1hcC4gIEFueSBvdGhlciBub24tbmls IHZhbHVlIG9mIE1FU1NBR0UgbWVhbnMgdG8gdXNlIHRoZQptZXNzYWdlIGZvcm1hdCBzdHJpbmcg IlJlcGVhdCB3aXRoICVrIi4gIFVwb24gZGVhY3RpdmF0aW5nIHRoZSBtYXAsCnRoZSBkaXNwbGF5 ZWQgbWVzc2FnZSB3aWxsIGJlIGNsZWFyZWQgb3V0LgoKT3B0aW9uYWwgYXJnIFRJTUVPVVQsIGlm IG5vbi1uaWwsIHNob3VsZCBiZSBhIG51bWJlciBzcGVjaWZ5aW5nIHRoZQpudW1iZXIgb2Ygc2Vj b25kcyBvZiBpZGxlIHRpbWUgYWZ0ZXIgd2hpY2ggdGhlIG1hcCBpcyBkZWFjdGl2YXRlZC4KVGhl IHZhcmlhYmxlIGBzZXQtdHJhbnNpZW50LW1hcC10aW1lb3V0JywgaWYgbm9uLW5pbCwgb3ZlcnJp ZGVzIHRoZQp2YWx1ZSBvZiBUSU1FT1VULgoKVGhpcyBmdW5jdGlvbiB1c2VzIGBvdmVycmlkaW5n LXRlcm1pbmFsLWxvY2FsLW1hcCcsIHdoaWNoIHRha2VzIHByZWNlZGVuY2UKb3ZlciBhbGwgb3Ro ZXIga2V5bWFwcy4gIEFzIHVzdWFsLCBpZiBubyBtYXRjaCBmb3IgYSBrZXkgaXMgZm91bmQgaW4g TUFQLAp0aGUgbm9ybWFsIGtleSBsb29rdXAgc2VxdWVuY2UgdGhlbiBjb250aW51ZXMuCgpUaGlz IHJldHVybnMgYW4gImV4aXQgZnVuY3Rpb24iLCB3aGljaCBjYW4gYmUgY2FsbGVkIHdpdGggbm8g YXJndW1lbnQKdG8gZGVhY3RpdmF0ZSB0aGlzIHRyYW5zaWVudCBtYXAsIHJlZ2FyZGxlc3Mgb2Yg S0VFUC1QUkVELgoKKGZuIE1BUCAmb3B0aW9uYWwgS0VFUC1QUkVEIE9OLUVYSVQgTUVTU0FHRSBU SU1FT1VUKR8KKGRlZmFsaWFzICdzZXQtdHJhbnNpZW50LW1hcCAjWzEyODEgIghcMjA2BQBcMjEx AlwyMDUrAFwzMDJDXDMwM1wzMDRcMzA1A1wiBghcIlwyMTBcMzA2BDtcMjAzHgAEXDIwMh8AXDMw N1wzMTBcMzExXDMxMgVcMjQyXDMxMyNCQ1wiXDI2MgFcMzE0XDMxNSFcMzA0XDMxNgIEBgkGXGYl AVwzMDRcMzE3AwYGBlxmBg4lTVwyMTBcMzIwXDMyMQNcIlwyMTBcMzIyBglcMzIzXCJcMjEwA1wy MDNhAAlcMjAzWwBcMzI0CSFcMjEwXDMyNQRcMzAyAyMRAlwyMDNqAFwzMjZcMzI3BFwiXDIxMFwy MDciIFtzZXQtdHJhbnNpZW50LW1hcC10aW1lb3V0IHNldC10cmFuc2llbnQtbWFwLXRpbWVyIG5p bCBtYXAta2V5bWFwIG1ha2UtY2xvc3VyZSAjWzUxNCAiXDIxMVwyMDVcbgBcMzAwAlwzMDBcMjQy QlwyNDBcMjA3IiBbVjBdIDUgIlxuXG4oZm4gS0VZIENNRCkiXSBmb3JtYXQtc3BlYyAiUmVwZWF0 IHdpdGggJWsiIDEwNyBtYXBjb25jYXQgI1syNTcgIlwzMDBcMzAxXDMwMlwzMDNcMzA0BSEhXCIh XDIwNyIgW3N1YnN0aXR1dGUtY29tbWFuZC1rZXlzIGZvcm1hdCAiXFxgJXMnIiBrZXktZGVzY3Jp cHRpb24gdmVjdG9yXSA3ICJcblxuKGZuIEtFWSkiXSAiLCAiIG1ha2Utc3ltYm9sICJjbGVhci10 cmFuc2llbnQtbWFwIiAjWzAgIlwzMDVcMzAzXDMwNlwiXDIxMFwzMDdcMzEwXDMwMFwiXDIxMFwz MDFcMjAzEgBcMzExXDMxMiFcMjEwXGZcMjAzGgBcMzEzXGYhXDIxMFwzMDJcMjA1IABcMzAyIFwy MDciIFtWMCBWMSBWMiBWMyBzZXQtdHJhbnNpZW50LW1hcC10aW1lciBpbnRlcm5hbC1wb3Ata2V5 bWFwIG92ZXJyaWRpbmctdGVybWluYWwtbG9jYWwtbWFwIHJlbW92ZS1ob29rIHByZS1jb21tYW5k LWhvb2sgbWVzc2FnZSAiIiBjYW5jZWwtdGltZXJdIDNdICNbMCAiXDMwNjFVAFwzMDJcMjAzUQBc MzAzXGZBQD1cMjA0GABcMzAzXGZBQT5cMjA0RgBcMzAyXDMwNz1cMjAzQQBcMzEwXDMwM1wzMTEg XCJcMjExXDIwMzUAXDIxMTlcMjAzNQBcMzEyASFcMjA2MwBcMjExXDI2MgFcMjExXDIwNTwADQE9 XDI2MgFcMjAyQwBcMzAyIFwyMDNRAFwzMDFcMjA1UwBcMzEzXDMxNFwzMDFcIlwyMDJTAFwzMDAg MFwyMDdcMzEzXDMxNQJcIlwyMTBcMzE2XDIwNyIgW1YwIFYxIFYyIFYzIG92ZXJyaWRpbmctdGVy bWluYWwtbG9jYWwtbWFwIHRoaXMtY29tbWFuZCAoZGVidWcgZXJyb3IpIHQgbG9va3VwLWtleSB0 aGlzLWNvbW1hbmQta2V5cy12ZWN0b3IgY29tbWFuZC1yZW1hcHBpbmcgbWVzc2FnZSAiJXMiICJz ZXQtdHJhbnNpZW50LW1hcCBQQ0g6ICVTIiBuaWxdIDRdIGFkZC1ob29rIHByZS1jb21tYW5kLWhv b2sgaW50ZXJuYWwtcHVzaC1rZXltYXAgb3ZlcnJpZGluZy10ZXJtaW5hbC1sb2NhbC1tYXAgY2Fu Y2VsLXRpbWVyIHJ1bi13aXRoLWlkbGUtdGltZXIgbWVzc2FnZSAiJXMiXSAxNiAoIyQgLiAyMDQ0 NjgpXSkjQDcxNyBSZXBvcnQgcHJvZ3Jlc3Mgb2YgYW4gb3BlcmF0aW9uIGluIHRoZSBlY2hvIGFy ZWEuClJFUE9SVEVSIHNob3VsZCBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBgbWFrZS1wcm9n cmVzcy1yZXBvcnRlcicuCgpJZiBSRVBPUlRFUiBpcyBhIG51bWVyaWNhbCBwcm9ncmVzcyByZXBv cnRlci0tLWkuZS4gaWYgaXQgd2FzCiBtYWRlIHVzaW5nIG5vbi1uaWwgTUlOLVZBTFVFIGFuZCBN QVgtVkFMVUUgYXJndW1lbnRzIHRvCiBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcictLS10aGVuIFZB TFVFIHNob3VsZCBiZSBhIG51bWJlciBiZXR3ZWVuCiBNSU4tVkFMVUUgYW5kIE1BWC1WQUxVRS4K Ck9wdGlvbmFsIGFyZ3VtZW50IFNVRkZJWCBpcyBhIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgYWZ0 ZXIKUkVQT1JURVIncyBtYWluIG1lc3NhZ2UgYW5kIHByb2dyZXNzIHRleHQuICBJZiBSRVBPUlRF UiBpcyBhCm5vbi1udW1lcmljYWwgcmVwb3J0ZXIsIHRoZW4gVkFMVUUgc2hvdWxkIGJlIG5pbCwg b3IgYSBzdHJpbmcgdG8KdXNlIGluc3RlYWQgb2YgU1VGRklYLgoKVGhpcyBmdW5jdGlvbiBpcyBy ZWxhdGl2ZWx5IGluZXhwZW5zaXZlLiAgSWYgdGhlIGNoYW5nZSBzaW5jZQpsYXN0IHVwZGF0ZSBp cyB0b28gc21hbGwgb3IgaW5zdWZmaWNpZW50IHRpbWUgaGFzIHBhc3NlZCwgaXQgZG9lcwpub3Ro aW5nLgoKKGZuIFJFUE9SVEVSICZvcHRpb25hbCBWQUxVRSBTVUZGSVgpHwooZGVmYWxpYXMgJ3By b2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSAjWzc2OSAiAVwyNDdcMjAzXGYAAQNAWVwyMDURAFwzMDAD AwMjXDIwNyIgW3Byb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZV0gNyAoIyQgLiAyMDc0MzQpXSkK KGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5j dGlvbi1wdXQgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlIHNwZWVkIC0xIHB1dCBieXRlLW9wdGlt aXplciBieXRlLWNvbXBpbGUtaW5saW5lLWV4cGFuZF0gNSkjQDEyMDQgUmV0dXJuIHByb2dyZXNz IHJlcG9ydGVyIG9iamVjdCBmb3IgdXNlIHdpdGggYHByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZScu CgpNRVNTQUdFIGlzIHNob3duIGluIHRoZSBlY2hvIGFyZWEsIHdpdGggYSBzdGF0dXMgaW5kaWNh dG9yCmFwcGVuZGVkIHRvIHRoZSBlbmQuICBXaGVuIHlvdSBjYWxsIGBwcm9ncmVzcy1yZXBvcnRl ci1kb25lJywgdGhlCndvcmQgImRvbmUiIGlzIHByaW50ZWQgYWZ0ZXIgdGhlIE1FU1NBR0UuICBZ b3UgY2FuIGNoYW5nZSB0aGUKTUVTU0FHRSBvZiBhbiBleGlzdGluZyBwcm9ncmVzcyByZXBvcnRl ciBieSBjYWxsaW5nCmBwcm9ncmVzcy1yZXBvcnRlci1mb3JjZS11cGRhdGUnLgoKTUlOLVZBTFVF IGFuZCBNQVgtVkFMVUUsIGlmIG5vbi1uaWwsIGFyZSBzdGFydGluZyAoMCUgY29tcGxldGUpCmFu ZCBmaW5hbCAoMTAwJSBjb21wbGV0ZSkgc3RhdGVzIG9mIG9wZXJhdGlvbjsgdGhlIGxhdHRlciBz aG91bGQKYmUgbGFyZ2VyLiAgSW4gdGhpcyBjYXNlLCB0aGUgc3RhdHVzIG1lc3NhZ2Ugc2hvd3Mg dGhlIHBlcmNlbnRhZ2UKcHJvZ3Jlc3MuCgpJZiBNSU4tVkFMVUUgYW5kL29yIE1BWC1WQUxVRSBp cyBvbWl0dGVkIG9yIG5pbCwgdGhlIHN0YXR1cwptZXNzYWdlIHNob3dzIGEgInNwaW5uaW5nIiwg bm9uLW51bWVyaWMgaW5kaWNhdG9yLgoKT3B0aW9uYWwgQ1VSUkVOVC1WQUxVRSBpcyB0aGUgaW5p dGlhbCBwcm9ncmVzczsgdGhlIGRlZmF1bHQgaXMKTUlOLVZBTFVFLgpPcHRpb25hbCBNSU4tQ0hB TkdFIGlzIHRoZSBtaW5pbWFsIGNoYW5nZSBpbiBwZXJjZW50cyB0byByZXBvcnQ7CnRoZSBkZWZh dWx0IGlzIDElLgpDVVJSRU5ULVZBTFVFIGFuZCBNSU4tQ0hBTkdFIGRvIG5vdCBoYXZlIGFueSBl ZmZlY3QgaWYgTUlOLVZBTFVFCmFuZC9vciBNQVgtVkFMVUUgYXJlIG5pbC4KCk9wdGlvbmFsIE1J Ti1USU1FIHNwZWNpZmllcyB0aGUgbWluaW11bSBpbnRlcnZhbCB0aW1lIGJldHdlZW4KZWNobyBh cmVhIHVwZGF0ZXMgKGRlZmF1bHQgaXMgMC4yIHNlY29uZHMuKSAgSWYgdGhlIE9TIGlzIG5vdApj YXBhYmxlIG9mIG1lYXN1cmluZyBmcmFjdGlvbnMgb2Ygc2Vjb25kcywgdGhpcyBwYXJhbWV0ZXIg aXMKZWZmZWN0aXZlbHkgcm91bmRlZCB1cC4KCihmbiBNRVNTQUdFICZvcHRpb25hbCBNSU4tVkFM VUUgTUFYLVZBTFVFIENVUlJFTlQtVkFMVUUgTUlOLUNIQU5HRSBNSU4tVElNRSkfCihkZWZhbGlh cyAnbWFrZS1wcm9ncmVzcy1yZXBvcnRlciAjWzE1MzcgIlwzMDBcMzAxBgdcIlwyMDMNAAVcMzAy UFwyNjIGXDIxMVwyMDQUAFwzMDNcMjYyAQRcMjA2GQBcMzA0XDMwNQJcMzA2WVwyMDVcIgBcMzA3 IAYHBgcGXG4GB1wyMDM2AAYHXDMxMF5cMzExXVwyMDI3AFwzMTEGB1wzMTImB0JcMjExBFwyMDZE AAYGXDMxMgFcMjQ3XDIwM1EAAQNAWVwyMDVWAFwzMTMDAwMjXDI2NgRcMjA3IiBbc3RyaW5nLW1h dGNoICJbWzphbG51bTpdXVxcJyIgIi4uLiIgMC4yIDAgdmVjdG9yIDAuMDIgZmxvYXQtdGltZSA1 MCAxIG5pbCBwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGVdIDE1ICgjJCAuIDIwODQzNCldKSNA MjU1IFJlcG9ydCBwcm9ncmVzcyBvZiBhbiBvcGVyYXRpb24gaW4gdGhlIGVjaG8gYXJlYSB1bmNv bmRpdGlvbmFsbHkuCgpSRVBPUlRFUiwgVkFMVUUsIGFuZCBTVUZGSVggYXJlIHRoZSBzYW1lIGFz IGluIGBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUnLgpORVctTUVTU0FHRSwgaWYgbm9uLW5pbCwg c2V0cyBhIG5ldyBtZXNzYWdlIGZvciB0aGUgcmVwb3J0ZXIuCgooZm4gUkVQT1JURVIgJm9wdGlv bmFsIFZBTFVFIE5FVy1NRVNTQUdFIFNVRkZJWCkfCihkZWZhbGlhcyAncHJvZ3Jlc3MtcmVwb3J0 ZXItZm9yY2UtdXBkYXRlICNbMTAyNSAiA0ECXDIwMwsAXDIxMVwzMDAESVwyMTBcMjExXDMwMUhc MjAzFwBcMjExXDMwMVwzMDIgSVwyMTBcMzAzBQUEI1wyMDciIFszIDAgZmxvYXQtdGltZSBwcm9n cmVzcy1yZXBvcnRlci1kby11cGRhdGVdIDkgKCMkIC4gMjA5OTkyKV0pI0A1MSBDaGFyYWN0ZXJz IHRvIHVzZSBmb3IgcHVsc2luZyBwcm9ncmVzcyByZXBvcnRlcnMuHwooZGVmdmFyIHByb2dyZXNz LXJlcG9ydGVyLS1wdWxzZS1jaGFyYWN0ZXJzIFsiLSIgIlxcIiAifCIgIi8iXSAoIyQgLiAyMTA0 MzQpKSNANDAgCgooZm4gUkVQT1JURVIgVkFMVUUgJm9wdGlvbmFsIFNVRkZJWCkfCihkZWZhbGlh cyAncHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlICNbNzcwICICQVwyMTFcMzAySAFcMzAzSAJc MzA0SANcMzA1SAM/XDIwNiMAXDMwNgRcMzA3XCJcMjA1IwAEXDMwMgUGB1wzMTBIXFxJA1wyMDNc MjM2AAJcMjAzXDIzNgACBFpcMzExXDI0NQMFVVwyMDM6AFwzMDJcMjAyQwBcMzEyBgkGBloCXDI0 NSEGXG4GBgIFXDIwM1MABlxuXDMxM0hcMjAyVABcMzAzXFwEX1xcBgZeXDI0MFwyMTAGCVwyNTBc MjAzbAAGXG5cMzE0BlxmQCFcMjQwXDIxMAJcMjA1XDIzNQAGCFwyMDN/AAYHXDMxNQZcbklcMjEw XDIwMlwyMTEABgdcMzE1SFwyMDZcMjA3AFwzMTZcMjYyCVwyMTFcMzAyVlwyMDNcMjI3AFwzMTdc MzIwBQMGXGYkXDIwN1wzMTdcMzIxBQYLI1wyMDdcMjExXDIwNVwzNDIABgdcMjAzXDI2MAAGBlwy MDRcMjYwAAYHXDI2MgcGBlwyMDNcMjc2AAVcMzE1BghJXDIxMFwyMDJcMzA3AAVcMzE1SFwyMDZc MzA1AFwzMTZcMjYyB1wzMjIGCUBUXDMxM1wiXDMwNxgJAUgGXG4CXDI0MFwyMTBcMzE3XDMyMwUD BlxmJClcMjY2XDIwMlwyMDciIFttZXNzYWdlLWxvZy1tYXggcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1 bHNlLWNoYXJhY3RlcnMgMCAxIDIgMyB0aW1lLWxlc3MtcCBuaWwgNSAxMDAuMCB0cnVuY2F0ZSA0 IGNlaWxpbmcgNiAiIiBtZXNzYWdlICIlcyVkJSUgJXMiICIlcyAlcyIgbW9kICIlcyAlcyAlcyJd IDE2ICgjJCAuIDIxMDU2NyldKSNANzkgUHJpbnQgcmVwb3J0ZXIncyBtZXNzYWdlIGZvbGxvd2Vk IGJ5IHdvcmQgImRvbmUiIGluIGVjaG8gYXJlYS4KCihmbiBSRVBPUlRFUikfCihkZWZhbGlhcyAn cHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZSAjWzI1NyAiXDMwMFwzMDECQVwzMDJIXCJcMjA3IiBbbWVz c2FnZSAiJXNkb25lIiAzXSA1ICgjJCAuIDIxMTMyMyldKSNANjk1IExvb3AgYSBjZXJ0YWluIG51 bWJlciBvZiB0aW1lcyBhbmQgcmVwb3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEuCkV2YWx1 YXRlIEJPRFkgd2l0aCBWQVIgYm91bmQgdG8gc3VjY2Vzc2l2ZSBpbnRlZ2VycyBydW5uaW5nIGZy b20KMCwgaW5jbHVzaXZlLCB0byBDT1VOVCwgZXhjbHVzaXZlLiAgVGhlbiBldmFsdWF0ZSBSRVNV TFQgdG8gZ2V0CnRoZSByZXR1cm4gdmFsdWUgKG5pbCBpZiBSRVNVTFQgaXMgb21pdHRlZCkuCgpS RVBPUlRFUi1PUi1NRVNTQUdFIGlzIGEgcHJvZ3Jlc3MgcmVwb3J0ZXIgb2JqZWN0IG9yIGEgc3Ry aW5nLiAgSW4gdGhlIGxhdHRlcgpjYXNlLCB1c2UgdGhpcyBzdHJpbmcgdG8gY3JlYXRlIGEgcHJv Z3Jlc3MgcmVwb3J0ZXIuCgpBdCBlYWNoIGl0ZXJhdGlvbiwgcHJpbnQgdGhlIHJlcG9ydGVyIG1l c3NhZ2UgZm9sbG93ZWQgYnkgcHJvZ3Jlc3MKcGVyY2VudGFnZSBpbiB0aGUgZWNobyBhcmVhLiAg QWZ0ZXIgdGhlIGxvb3AgaXMgZmluaXNoZWQsCnByaW50IHRoZSByZXBvcnRlciBtZXNzYWdlIGZv bGxvd2VkIGJ5IHRoZSB3b3JkICJkb25lIi4KClRoaXMgbWFjcm8gaXMgYSBjb252ZW5pZW5jZSB3 cmFwcGVyIGFyb3VuZCBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcicgYW5kIGZyaWVuZHMuCgooZm4g KFZBUiBDT1VOVCBbUkVTVUxUXSkgUkVQT1JURVItT1ItTUVTU0FHRSBCT0RZLi4uKR8KKGRlZmFs aWFzICdkb3RpbWVzLXdpdGgtcHJvZ3Jlc3MtcmVwb3J0ZXIgJyhtYWNybyAuICNbNjQyICJcMzAw XDMwMSFcMzAwXDMwMiFcMzAzAgVEAgYHQUBERFwzMDRcMzA1BURcMzA2BgZcMzA3BghcMzEwBglG RUVcMzExBghABURcMzEyBghcMzEzBglcMzE0Bg5AREVDXCJCQlwzMTUGBkRcMzE2XDMxMgYLQUFc MzE3XCJCXDI1NwZcMjA3IiBbbWFrZS1zeW1ib2wgIi0tZG90aW1lcy1wcmVwLS0iICItLWRvdGlt ZXMtZW5kLS0iIGxldCB3aGVuIHN0cmluZ3Agc2V0cSBtYWtlLXByb2dyZXNzLXJlcG9ydGVyIDAg ZG90aW1lcyBhcHBlbmQgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlIDErIHByb2dyZXNzLXJlcG9y dGVyLWRvbmUgb3IgKG5pbCldIDE2ICgjJCAuIDIxMTUxMCldKSkKKGJ5dGUtY29kZSAiXDMwMFwz MDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVcMzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgZG90aW1lcy13 aXRoLXByb2dyZXNzLXJlcG9ydGVyIGxpc3AtaW5kZW50LWZ1bmN0aW9uIDIgcHV0IGVkZWJ1Zy1m b3JtLXNwZWMgKChzeW1ib2xwIGZvcm0gJm9wdGlvbmFsIGZvcm0pIGZvcm0gYm9keSldIDUpI0A1 NDAgTG9vcCBvdmVyIGEgbGlzdCBhbmQgcmVwb3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEu CkV2YWx1YXRlIEJPRFkgd2l0aCBWQVIgYm91bmQgdG8gZWFjaCBjYXIgZnJvbSBMSVNULCBpbiB0 dXJuLgpUaGVuIGV2YWx1YXRlIFJFU1VMVCB0byBnZXQgcmV0dXJuIHZhbHVlLCBkZWZhdWx0IG5p bC4KClJFUE9SVEVSLU9SLU1FU1NBR0UgaXMgYSBwcm9ncmVzcyByZXBvcnRlciBvYmplY3Qgb3Ig YSBzdHJpbmcuICBJbiB0aGUgbGF0dGVyCmNhc2UsIHVzZSB0aGlzIHN0cmluZyB0byBjcmVhdGUg YSBwcm9ncmVzcyByZXBvcnRlci4KCkF0IGVhY2ggaXRlcmF0aW9uLCBwcmludCB0aGUgcmVwb3J0 ZXIgbWVzc2FnZSBmb2xsb3dlZCBieSBwcm9ncmVzcwpwZXJjZW50YWdlIGluIHRoZSBlY2hvIGFy ZWEuICBBZnRlciB0aGUgbG9vcCBpcyBmaW5pc2hlZCwKcHJpbnQgdGhlIHJlcG9ydGVyIG1lc3Nh Z2UgZm9sbG93ZWQgYnkgdGhlIHdvcmQgImRvbmUiLgoKKGZuIChWQVIgTElTVCBbUkVTVUxUXSkg UkVQT1JURVItT1ItTUVTU0FHRSBCT0RZLi4uKR8KKGRlZmFsaWFzICdkb2xpc3Qtd2l0aC1wcm9n cmVzcy1yZXBvcnRlciAnKG1hY3JvIC4gI1s2NDIgIlwzMDBcMzAxIVwzMDBcMzAyIVwzMDBcMzAz IVwzMDQDBgZEA1wzMDVCAwYJQUBERVwzMDZcMzA3BgZEXDMxMAYHXDMxMQYJXDMxMlwzMTMGXG5E RkVFXDMxNAYJQAVEXDMxNQYJXDMxNgZcblwzMTAGC1wzMTcGDURFRUNcIkJCXDMyMAYHRFwzMjFc MzE1BlxmQUFcMzIyXCJCXDI1NwZcMjA3IiBbbWFrZS1zeW1ib2wgIi0tZG9saXN0LXByb2dyZXNz LXJlcG9ydGVyLS0iICItLWRvbGlzdC1jb3VudC0tIiAiLS1kb2xpc3QtbGlzdC0tIiBsZXQgKDAp IHdoZW4gc3RyaW5ncCBzZXRxIG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIgMCBsZW5ndGggZG9saXN0 IGFwcGVuZCBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUgMSsgcHJvZ3Jlc3MtcmVwb3J0ZXItZG9u ZSBvciAobmlsKV0gMTkgKCMkIC4gMjEyNzg0KV0pKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJc MzAzI1wzMDRcMzAxXDMwNVwzMDYjXDIwNyIgW2Z1bmN0aW9uLXB1dCBkb2xpc3Qtd2l0aC1wcm9n cmVzcy1yZXBvcnRlciBsaXNwLWluZGVudC1mdW5jdGlvbiAyIHB1dCBlZGVidWctZm9ybS1zcGVj ICgoc3ltYm9scCBmb3JtICZvcHRpb25hbCBmb3JtKSBmb3JtIGJvZHkpXSA1KSNAMTIyIFNwZWNp ZnkgdGhlIHN0cmluZyB1c2VkIHRvIHNlcGFyYXRlIHRoZSB2ZXJzaW9uIGVsZW1lbnRzLgoKVXN1 YWxseSB0aGUgc2VwYXJhdG9yIGlzICIuIiwgYnV0IGl0IGNhbiBiZSBhbnkgb3RoZXIgc3RyaW5n Lh8KKGRlZmNvbnN0IHZlcnNpb24tc2VwYXJhdG9yICIuIiAoIyQgLiAyMTM5NzMpKSNAOTgzIFNw ZWNpZnkgYXNzb2NpYXRpb24gYmV0d2VlbiBub24tbnVtZXJpYyB2ZXJzaW9uIGFuZCBpdHMgcHJp b3JpdHkuCgpUaGlzIGFzc29jaWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHZlcnNpb24gc3RyaW5n IGxpa2UgIjEuMHByZTIiLAoiMC45YWxwaGExIiwgZXRjLiAgSXQncyB1c2VkIGJ5IGB2ZXJzaW9u LXRvLWxpc3QnICh3aGljaCBzZWUpIHRvIGNvbnZlcnQgdGhlCm5vbi1udW1lcmljIHBhcnQgb2Yg YSB2ZXJzaW9uIHN0cmluZyB0byBhbiBpbnRlZ2VyLiAgRm9yIGV4YW1wbGU6CgogICBTdHJpbmcg VmVyc2lvbiAgICBJbnRlZ2VyIExpc3QgVmVyc2lvbgogICAiMC45c25hcHNob3QiICAgICAoMCAg OSAtNCkKICAgIjEuMC1naXQiICAgICAgICAgKDEgIDAgLTQpCiAgICIxLjAuY3ZzIiAgICAgICAg ICgxICAwIC00KQogICAiMS4wcHJlMiIgICAgICAgICAoMSAgMCAtMSAyKQogICAiMS4wUFJFMiIg ICAgICAgICAoMSAgMCAtMSAyKQogICAiMjIuOGJldGEzIiAgICAgICAoMjIgOCAtMiAzKQogICAi MjIuOCBCZXRhMyIgICAgICAoMjIgOCAtMiAzKQogICAiMC45YWxwaGExIiAgICAgICAoMCAgOSAt MyAxKQogICAiMC45QWxwaEExIiAgICAgICAoMCAgOSAtMyAxKQogICAiMC45IGFscGhhIiAgICAg ICAoMCAgOSAtMykKCkVhY2ggZWxlbWVudCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOgoKICAgKFJF R0VYUCAuIFBSSU9SSVRZKQoKV2hlcmU6CgpSRUdFWFAJCXJlZ2V4cCB1c2VkIHRvIG1hdGNoIG5v bi1udW1lcmljIHBhcnQgb2YgYSB2ZXJzaW9uIHN0cmluZy4KCQlJdCBzaG91bGQgYmVnaW4gd2l0 aCB0aGUgYF4nIGFuY2hvciBhbmQgZW5kIHdpdGggYSBgJCcgdG8KCQlwcmV2ZW50IGZhbHNlIGhp dHMuICBMZXR0ZXItY2FzZSBpcyBpZ25vcmVkIHdoaWxlIG1hdGNoaW5nCgkJUkVHRVhQLgoKUFJJ T1JJVFkJYSBuZWdhdGl2ZSBpbnRlZ2VyIHNwZWNpZnlpbmcgbm9uLW51bWVyaWMgcHJpb3JpdHkg b2YgUkVHRVhQLh8KKGRlZmNvbnN0IHZlcnNpb24tcmVnZXhwLWFsaXN0ICcoKCJeWy0uXysgXT9z bmFwc2hvdCQiIC4gLTQpICgiXlstLl8rXSQiIC4gLTQpICgiXlstLl8rIF0/XFwoY3ZzXFx8Z2l0 XFx8YnpyXFx8c3ZuXFx8aGdcXHxkYXJjc1xcKSQiIC4gLTQpICgiXlstLl8rIF0/dW5rbm93biQi IC4gLTQpICgiXlstLl8rIF0/YWxwaGEkIiAuIC0zKSAoIl5bLS5fKyBdP2JldGEkIiAuIC0yKSAo Il5bLS5fKyBdP1xcKHByZVxcfHJjXFwpJCIgLiAtMSkpICgjJCAuIDIxNDE0NykpI0AxMDkzIENv bnZlcnQgdmVyc2lvbiBzdHJpbmcgVkVSIGludG8gYSBsaXN0IG9mIGludGVnZXJzLgoKVGhlIHZl cnNpb24gc3ludGF4IGlzIGdpdmVuIGJ5IHRoZSBmb2xsb3dpbmcgRUJORjoKCiAgIFZFUlNJT04g Ojo9IE5VTUJFUiAoIFNFUEFSQVRPUiBOVU1CRVIgKSouCgogICBOVU1CRVIgOjo9ICgwfDF8Mnwz fDR8NXw2fDd8OHw5KSsuCgogICBTRVBBUkFUT1IgOjo9IGB2ZXJzaW9uLXNlcGFyYXRvcicgKHdo aWNoIHNlZSkKCSAgICAgICB8IGB2ZXJzaW9uLXJlZ2V4cC1hbGlzdCcgKHdoaWNoIHNlZSkuCgpU aGUgTlVNQkVSIHBhcnQgaXMgb3B0aW9uYWwgaWYgU0VQQVJBVE9SIGlzIGEgbWF0Y2ggZm9yIGFu IGVsZW1lbnQKaW4gYHZlcnNpb24tcmVnZXhwLWFsaXN0Jy4KCkV4YW1wbGVzIG9mIHZhbGlkIHZl cnNpb24gc3ludGF4OgoKICAgMS4wcHJlMiAgIDEuMC43LjUgICAyMi44YmV0YTMgICAwLjlhbHBo YTEgICA2LjkuMzBCZXRhICAgMi40LnNuYXBzaG90ICAgLjUKCkV4YW1wbGVzIG9mIGludmFsaWQg dmVyc2lvbiBzeW50YXg6CgogICAxLjBwcmVwcmUyICAgMS4wLi43LjUgICAyMi44WDMgICBhbHBo YTMuMgoKRXhhbXBsZXMgb2YgdmVyc2lvbiBjb252ZXJzaW9uOgoKICAgVmVyc2lvbiBTdHJpbmcg ICAgVmVyc2lvbiBhcyBhIExpc3Qgb2YgSW50ZWdlcnMKICAgIi41IiAgICAgICAgICAgICAgKDAg NSkKICAgIjAuOSBhbHBoYSIgICAgICAgKDAgIDkgLTMpCiAgICIwLjlBbHBoQTEiICAgICAgICgw ICA5IC0zIDEpCiAgICIwLjlzbmFwc2hvdCIgICAgICgwICA5IC00KQogICAiMS4wLWdpdCIgICAg ICAgICAoMSAgMCAtNCkKICAgIjEuMC43LjUiICAgICAgICAgKDEgIDAgIDcgNSkKICAgIjEuMC5j dnMiICAgICAgICAgKDEgIDAgLTQpCiAgICIxLjBQUkUyIiAgICAgICAgICgxICAwIC0xIDIpCiAg ICIxLjBwcmUyIiAgICAgICAgICgxICAwIC0xIDIpCiAgICIyMi44IEJldGEzIiAgICAgICgyMiA4 IC0yIDMpCiAgICIyMi44YmV0YTMiICAgICAgICgyMiA4IC0yIDMpCgpTZWUgZG9jdW1lbnRhdGlv biBmb3IgYHZlcnNpb24tc2VwYXJhdG9yJyBhbmQgYHZlcnNpb24tcmVnZXhwLWFsaXN0Jy4KCihm biBWRVIpHwooZGVmYWxpYXMgJ3ZlcnNpb24tdG8tbGlzdCAjWzI1NyAiXDIxMTtcMjA0CQBcMzAz XDMwNCFcMjEwXDIxMUcIR1lcMjAzIABcMjExXDMwNQhHTwhcMjMwXDIwMyAAXDMwNgFQXDI2MgFc MzA3AVwzMTBcMzExAwMDXDMxMiRcMjY2XDIwM1wyMDQzAFwzMDNcMzEzAlwiXDIxMFwzMTQgXDMx NVwzMTYCXCJcMjE2XDMwNVwzMTJcMzEwXDIxMVwyMTEDGVwzMTFcMzE3BggGByNcMjExXDI2MgNc MjAzXDMzMAABBVVcMjAzXDMzMABcMzIwBgcGBlwzMDVcMjI1TyEDQlwyNjIDXDMwNVwyMjVcMjYy BVwzMTFcMzIxBggGByNcMjExXDI2MgNcMjAzQQABBVVcMjAzQQAGBgVcMzA1XDIyNU9cMjYyAlwz MDVcMjI1XDI2MgUBCFwyMzBcMjA0QQBcblwyNjIBXDIxMVwyMDNcMjQxAFwzMTEBQEADXCJcMjA0 XDI0MQBcMjExQVwyNjIBXDIwMlwyMTUAXDIxMVwyMDNcMjU3AFwyMTFAQQNCXDI2MgNcMjAyQQBc MzExXDMyMgNcIlwyMDNcMzE3AAQGB0dVXDIwM1wzMTcAXDMyM1wzMjQDXCJcMjI3XDMwNUhcMzI1 WlQDQlwyNjIDXDIwMkEAXDMwM1wzMjYGCFwiXDIxMFwyMDJBAAJcMjM3KVwyNjZcMjA1KVwyMDci IFt2ZXJzaW9uLXNlcGFyYXRvciBjYXNlLWZvbGQtc2VhcmNoIHZlcnNpb24tcmVnZXhwLWFsaXN0 IGVycm9yICJWZXJzaW9uIG11c3QgYmUgYSBzdHJpbmciIDAgIjAiICJeWzAtOV0iIG5pbCBzdHJp bmctbWF0Y2ggdCAiSW52YWxpZCB2ZXJzaW9uIHN5bnRheDogYCVzJyAobXVzdCBzdGFydCB3aXRo IGEgbnVtYmVyKSIgbWF0Y2gtZGF0YSBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMFwzMDJcIlwy MDciIFtWMCBzZXQtbWF0Y2gtZGF0YSB0XSAzXSAiWzAtOV0rIiBzdHJpbmctdG8tbnVtYmVyICJb XjAtOV0rIiAiXlstLl8rIF0/XFwoW2EtekEtWl1cXCkkIiBtYXRjaC1zdHJpbmcgMSA5NyAiSW52 YWxpZCB2ZXJzaW9uIHN5bnRheDogYCVzJyJdIDExICgjJCAuIDIxNTQwMSldKSNAMzQ4IFJldHVy biB0IGlmIEwxLCBhIGxpc3Qgc3BlY2lmaWNhdGlvbiBvZiBhIHZlcnNpb24sIGlzIGxvd2VyIHRo YW4gTDIuCgpOb3RlIHRoYXQgYSB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUgbGlzdCAoMSkgaXMg ZXF1YWwgdG8gKDEgMCksCigxIDAgMCksICgxIDAgMCAwKSwgZXRjLiAgVGhhdCBpcywgdGhlIHRy YWlsaW5nIHplcm9zIGFyZSBpbnNpZ25pZmljYW50LgpBbHNvLCBhIHZlcnNpb24gZ2l2ZW4gYnkg dGhlIGxpc3QgKDEpIGlzIGhpZ2hlciB0aGFuICgxIC0xKSwgd2hpY2ggaW4KdHVybiBpcyBoaWdo ZXIgdGhhbiAoMSAtMiksIHdoaWNoIGlzIGhpZ2hlciB0aGFuICgxIC0zKS4KCihmbiBMMSBMMikf CihkZWZhbGlhcyAndmVyc2lvbi1saXN0LTwgI1s1MTQgIgFcMjAzGwBcMjExXDIwMxsAAUABQFVc MjAzGwABQVwyNjICXDIxMUFcMjYyAVwyMDIAAAFcMjAzKQBcMjExXDIwMykAAUABQFdcMjA3AVwy MDQzAFwyMTFcMjA0MwBcMzAwXDIwNwFcMjAzPQBcMzAxAiFcMzAyV1wyMDdcMzAyXDMwMQIhV1wy MDciIFtuaWwgdmVyc2lvbi1saXN0LW5vdC16ZXJvIDBdIDUgKCMkIC4gMjE3NDUwKV0pI0AzNDYg UmV0dXJuIHQgaWYgTDEsIGEgbGlzdCBzcGVjaWZpY2F0aW9uIG9mIGEgdmVyc2lvbiwgaXMgZXF1 YWwgdG8gTDIuCgpOb3RlIHRoYXQgYSB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUgbGlzdCAoMSkg aXMgZXF1YWwgdG8gKDEgMCksCigxIDAgMCksICgxIDAgMCAwKSwgZXRjLiAgVGhhdCBpcywgdGhl IHRyYWlsaW5nIHplcm9zIGFyZSBpbnNpZ25pZmljYW50LgpBbHNvLCBhIHZlcnNpb24gZ2l2ZW4g YnkgdGhlIGxpc3QgKDEpIGlzIGhpZ2hlciB0aGFuICgxIC0xKSwgd2hpY2ggaW4KdHVybiBpcyBo aWdoZXIgdGhhbiAoMSAtMiksIHdoaWNoIGlzIGhpZ2hlciB0aGFuICgxIC0zKS4KCihmbiBMMSBM MikfCihkZWZhbGlhcyAndmVyc2lvbi1saXN0LT0gI1s1MTQgIgFcMjAzGwBcMjExXDIwMxsAAUAB QFVcMjAzGwABQVwyNjICXDIxMUFcMjYyAVwyMDIAAAFcMjAzJQBcMjExXDIwMyUAXDMwMFwyMDcB XDIwNC4AXDIxMT9cMjA2PQABXDIwMzgAXDMwMQIhXDMwMlVcMjA3XDMwMQEhXDMwMlVcMjA3IiBb bmlsIHZlcnNpb24tbGlzdC1ub3QtemVybyAwXSA0ICgjJCAuIDIxODAyNSldKSNAMzE2IFJldHVy biB0IGlmIEwxLCBhIGxpc3Qgc3BlY2lmaWNhdGlvbiBvZiBhIHZlcnNpb24sIGlzIGxvd2VyIG9y IGVxdWFsIHRvIEwyLgoKTm90ZSB0aGF0IGludGVnZXIgbGlzdCAoMSkgaXMgZXF1YWwgdG8gKDEg MCksICgxIDAgMCksICgxIDAgMCAwKSwKZXRjLiAgVGhhdCBpcywgdGhlIHRyYWlsaW5nIHplcm9l cyBhcmUgaW5zaWduaWZpY2FudC4gIEFsc28sIGludGVnZXIKbGlzdCAoMSkgaXMgZ3JlYXRlciB0 aGFuICgxIC0xKSB3aGljaCBpcyBncmVhdGVyIHRoYW4gKDEgLTIpCndoaWNoIGlzIGdyZWF0ZXIg dGhhbiAoMSAtMykuCgooZm4gTDEgTDIpHwooZGVmYWxpYXMgJ3ZlcnNpb24tbGlzdC08PSAjWzUx NCAiAVwyMDMbAFwyMTFcMjAzGwABQAFAVVwyMDMbAAFBXDI2MgJcMjExQVwyNjIBXDIwMgAAAVwy MDMpAFwyMTFcMjAzKQABQAFAV1wyMDcBXDIwNDIAXDIxMT9cMjA2QQABXDIwMzwAXDMwMAIhXDMw MVhcMjA3XDMwMVwzMDACIVhcMjA3IiBbdmVyc2lvbi1saXN0LW5vdC16ZXJvIDBdIDUgKCMkIC4g MjE4NTkwKV0pI0AxNDEgUmV0dXJuIHRoZSBmaXJzdCBub24temVybyBlbGVtZW50IG9mIExTVCwg d2hpY2ggaXMgYSBsaXN0IG9mIGludGVnZXJzLgoKSWYgYWxsIExTVCBlbGVtZW50cyBhcmUgemVy b3Mgb3IgTFNUIGlzIG5pbCwgcmV0dXJuIHplcm8uCgooZm4gTFNUKR8KKGRlZmFsaWFzICd2ZXJz aW9uLWxpc3Qtbm90LXplcm8gI1syNTcgIlwyMTFcMjAzEgBcMjExQFwzMDBVXDIwMxIAXDIxMUFc MjYyAVwyMDIAAFwyMTFcMjAzGQBcMjExQFwyMDdcMzAwXDIwNyIgWzBdIDMgKCMkIC4gMjE5MTIz KV0pI0A0MDIgUmV0dXJuIHQgaWYgdmVyc2lvbiBWMSBpcyBsb3dlciAob2xkZXIpIHRoYW4gVjIu CgpOb3RlIHRoYXQgdmVyc2lvbiBzdHJpbmcgIjEiIGlzIGVxdWFsIHRvICIxLjAiLCAiMS4wLjAi LCAiMS4wLjAuMCIsCmV0Yy4gIFRoYXQgaXMsIHRoZSB0cmFpbGluZyAiLjAicyBhcmUgaW5zaWdu aWZpY2FudC4gIEFsc28sIHZlcnNpb24Kc3RyaW5nICIxIiBpcyBoaWdoZXIgKG5ld2VyKSB0aGFu ICIxcHJlIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gIjFiZXRhIiwKd2hpY2ggaXMgaGlnaGVyIHRo YW4gIjFhbHBoYSIsIHdoaWNoIGlzIGhpZ2hlciB0aGFuICIxc25hcHNob3QiLgpBbHNvLCAiLUdJ VCIsICItQ1ZTIiBhbmQgIi1OTk4iIGFyZSB0cmVhdGVkIGFzIHNuYXBzaG90IHZlcnNpb25zLgoK KGZuIFYxIFYyKR8KKGRlZmFsaWFzICd2ZXJzaW9uPCAjWzUxNCAiXDMwMFwzMDEDIVwzMDEDIVwi XDIwNyIgW3ZlcnNpb24tbGlzdC08IHZlcnNpb24tdG8tbGlzdF0gNiAoIyQgLiAyMTk0MDIpXSkj QDQxNCBSZXR1cm4gdCBpZiB2ZXJzaW9uIFYxIGlzIGxvd2VyIChvbGRlcikgdGhhbiBvciBlcXVh bCB0byBWMi4KCk5vdGUgdGhhdCB2ZXJzaW9uIHN0cmluZyAiMSIgaXMgZXF1YWwgdG8gIjEuMCIs ICIxLjAuMCIsICIxLjAuMC4wIiwKZXRjLiAgVGhhdCBpcywgdGhlIHRyYWlsaW5nICIuMCJzIGFy ZSBpbnNpZ25pZmljYW50LiAgQWxzbywgdmVyc2lvbgpzdHJpbmcgIjEiIGlzIGhpZ2hlciAobmV3 ZXIpIHRoYW4gIjFwcmUiLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAiMWJldGEiLAp3aGljaCBpcyBo aWdoZXIgdGhhbiAiMWFscGhhIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gIjFzbmFwc2hvdCIuCkFs c28sICItR0lUIiwgIi1DVlMiIGFuZCAiLU5OTiIgYXJlIHRyZWF0ZWQgYXMgc25hcHNob3QgdmVy c2lvbnMuCgooZm4gVjEgVjIpHwooZGVmYWxpYXMgJ3ZlcnNpb248PSAjWzUxNCAiXDMwMFwzMDED IVwzMDEDIVwiXDIwNyIgW3ZlcnNpb24tbGlzdC08PSB2ZXJzaW9uLXRvLWxpc3RdIDYgKCMkIC4g MjE5OTExKV0pI0AzOTIgUmV0dXJuIHQgaWYgdmVyc2lvbiBWMSBpcyBlcXVhbCB0byBWMi4KCk5v dGUgdGhhdCB2ZXJzaW9uIHN0cmluZyAiMSIgaXMgZXF1YWwgdG8gIjEuMCIsICIxLjAuMCIsICIx LjAuMC4wIiwKZXRjLiAgVGhhdCBpcywgdGhlIHRyYWlsaW5nICIuMCJzIGFyZSBpbnNpZ25pZmlj YW50LiAgQWxzbywgdmVyc2lvbgpzdHJpbmcgIjEiIGlzIGhpZ2hlciAobmV3ZXIpIHRoYW4gIjFw cmUiLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAiMWJldGEiLAp3aGljaCBpcyBoaWdoZXIgdGhhbiAi MWFscGhhIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gIjFzbmFwc2hvdCIuCkFsc28sICItR0lUIiwg Ii1DVlMiIGFuZCAiLU5OTiIgYXJlIHRyZWF0ZWQgYXMgc25hcHNob3QgdmVyc2lvbnMuCgooZm4g VjEgVjIpHwooZGVmYWxpYXMgJ3ZlcnNpb249ICNbNTE0ICJcMzAwXDMwMQMhXDMwMQMhXCJcMjA3 IiBbdmVyc2lvbi1saXN0LT0gdmVyc2lvbi10by1saXN0XSA2ICgjJCAuIDIyMDQzNCldKSNAMjA1 IEFsaXN0IGdpdmluZyB0aGUgdmVyc2lvbiBvZiBlYWNoIHZlcnNpb25lZCBidWlsdGluIHBhY2th Z2UuCkkuZS4gZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIG9mIHRoZSBmb3JtIChOQU1FIC4g VkVSU0lPTikgd2hlcmUKTkFNRSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGEgc3ltYm9sLCBhbmQg VkVSU0lPTiBpcyBpdHMgdmVyc2lvbgphcyBhIGxpc3QuHwooZGVmdmFyIHBhY2thZ2UtLWJ1aWx0 aW4tdmVyc2lvbnMgKGJ5dGUtY29kZSAiXDMwMVwzMDJcMzAzCCFCQyFcMjA3IiBbZW1hY3MtdmVy c2lvbiBwdXJlY29weSBlbWFjcyB2ZXJzaW9uLXRvLWxpc3RdIDQpICgjJCAuIDIyMDkzMykpI0A2 NSBSZXR1cm4gcGFja2FnZSBkZXNjcmlwdGlvbiBmaWxlIG5hbWUgZm9yIHBhY2thZ2UgRElSLgoK KGZuIERJUikfCihkZWZhbGlhcyAncGFja2FnZS0tZGVzY3JpcHRpb24tZmlsZSAjWzI1NyAiXDMw MFwzMDECISFcMzAyXDMwMwJcIlwyMDMTAFwzMDRcMzA1AlwiXDIwMhQAXDIxMVwyNjIBXDMwNlBc MjA3IiBbZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBkaXJlY3RvcnktZmlsZS1uYW1lIHN0cmluZy1t YXRjaCAiXFwoW14uXS4qP1xcKS1cXChbMC05XStcXCg/OlsuXVswLTldK1xcfFxcKD86cHJlXFx8 YmV0YVxcfGFscGhhXFwpWzAtOV0rXFwpKlxcKSIgbWF0Y2gtc3RyaW5nIDEgIi1wa2cuZWwiXSA1 ICgjJCAuIDIyMTI3NildKSNAMTQyIEludm9rZSBCT0RZIHdpdGggTVVURVggaGVsZCwgcmVsZWFz aW5nIE1VVEVYIHdoZW4gZG9uZS4KVGhpcyBpcyB0aGUgc2ltcGxlc3Qgc2FmZSB3YXkgdG8gYWNx dWlyZSBhbmQgcmVsZWFzZSBhIG11dGV4LgoKKGZuIE1VVEVYICZyZXN0IEJPRFkpHwooZGVmYWxp YXMgJ3dpdGgtbXV0ZXggJyhtYWNybyAuICNbMzg1ICJcMzAwXDMwMSFcMzAyAQREQ1wzMDMDRFwz MDRcMzA1BgZCXDMwNgYGREVGXDIwNyIgW21ha2Utc3ltYm9sICJtdXRleCIgbGV0IG11dGV4LWxv Y2sgdW53aW5kLXByb3RlY3QgcHJvZ24gbXV0ZXgtdW5sb2NrXSAxMCAoIyQgLiAyMjE2MzgpXSkp CihieXRlLWNvZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwNFwzMDFcMzA1XDMwNiNcMjA3IiBbZnVu Y3Rpb24tcHV0IHdpdGgtbXV0ZXggbGlzcC1pbmRlbnQtZnVuY3Rpb24gMSBwdXQgZWRlYnVnLWZv cm0tc3BlYyB0XSA1KSNAMjY4IFNob3cgYWxsIHN5bWJvbHMgd2hvc2UgbmFtZXMgY29udGFpbiBt YXRjaCBmb3IgUkVHRVhQLgpJZiBvcHRpb25hbCAybmQgYXJnIFBSRURJQ0FURSBpcyBub24tbmls LCAoZnVuY2FsbCBQUkVESUNBVEUgU1lNQk9MKSBpcyBkb25lCmZvciBlYWNoIHN5bWJvbCBhbmQg YSBzeW1ib2wgaXMgbWVudGlvbmVkIG9ubHkgaWYgdGhhdCByZXR1cm5zIG5vbi1uaWwuClJldHVy biBsaXN0IG9mIHN5bWJvbHMgZm91bmQuCgooZm4gUkVHRVhQICZvcHRpb25hbCBQUkVESUNBVEUp HwooZGVmYWxpYXMgJ2Fwcm9wb3MtaW50ZXJuYWwgI1s1MTMgIlwzMDBDXDMwMVwzMDJcMzAzAwUG ByQhXDIxMFwzMDQBXDI0MlwzMDVcIlwyMDciIFtuaWwgbWFwYXRvbXMgbWFrZS1jbG9zdXJlICNb MjU3ICJcMzAzXDMwMlwzMDQDIVwiXDIwNRkAXDMwMVwyMDMTAFwzMDEBIVwyMDUZAFwzMDABXDMw MFwyNDJCXDI0MFwyMDciIFtWMCBWMSBWMiBzdHJpbmctbWF0Y2ggc3ltYm9sLW5hbWVdIDUgIlxu XG4oZm4gU1lNQk9MKSJdIHNvcnQgc3RyaW5nLWxlc3NwXSA5ICgjJCAuIDIyMjA5MSldKSNANjMx IEhhc2ggdGFibGUgbWFwcGluZyBwcmVmaXhlcyB0byB0aGUgZmlsZXMgaW4gd2hpY2ggdGhleSdy ZSB1c2VkLgpUaGlzIGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZmV0Y2ggbm90LXlldC1s b2FkZWQgZGVmaW5pdGlvbnMuCk1vcmUgc3BlY2lmaWNhbGx5LCBpZiB0aGVyZSBpcyBhIHZhbHVl IG9mIHRoZSBmb3JtIChGSUxFUy4uLikgZm9yCmEgc3RyaW5nIFBSRUZJWCBpdCBtZWFucyB0aGF0 IHRoZSBGSUxFUyBkZWZpbmUgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucwp3aXRoIG5hbWVzIHRoYXQg c3RhcnQgd2l0aCBQUkVGSVguCgpOb3RlIHRoYXQgaXQgZG9lcyBub3QgaW1wbHkgdGhhdCBhbGwg ZGVmaW5pdGlvbnMgc3RhcnRpbmcgd2l0aCBQUkVGSVggY2FuCmJlIGZvdW5kIGluIHRob3NlIGZp bGVzLiAgRS5nLiBpZiBwcmVmaXggaXMgImdudXMtYXJ0aWNsZS0iIHRoZXJlIG1pZ2h0CnN0aWxs IGJlIGRlZmluaXRpb25zIG9mIHRoZSBmb3JtICJnbnVzLWFydGljbGUtdG90by10aXRpIiBpbiBv dGhlciBmaWxlcywKd2hpY2ggd291bGQgcHJlc3VtYWJseSBhcHBlYXIgaW4gdGhpcyB0YWJsZSB1 bmRlciBhbm90aGVyIHByZWZpeCBzdWNoIGFzCiJnbnVzLSIgb3IgImdudXMtYXJ0aWNsZS10b3Rv LSIuHwooZGVmdmFyIGRlZmluaXRpb24tcHJlZml4ZXMgKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAn ZXF1YWwpICgjJCAuIDIyMjY0MykpI0A1NSBSZWdpc3RlciB0aGF0IEZJTEUgdXNlcyBQUkVGSVhF Uy4KCihmbiBGSUxFIFBSRUZJWEVTKR8KKGRlZmFsaWFzICdyZWdpc3Rlci1kZWZpbml0aW9uLXBy ZWZpeGVzICNbNTE0ICJcMjExXDIxMVwyMDUZAFwyMTFAXDMwMQEFXDMwMgQIXCJCCCNcMjEwAUFc MjY2XDIwMlwyMDIBAFwyMDciIFtkZWZpbml0aW9uLXByZWZpeGVzIHB1dGhhc2ggZ2V0aGFzaF0g MTAgKCMkIC4gMjIzMzUyKV0pI0AyMiBTZXBhcmF0b3IgZm9yIG1lbnVzLh8KKGRlZmNvbnN0IG1l bnUtYmFyLXNlcGFyYXRvciAnKCItLSIpICgjJCAuIDIyMzU3NykpCihieXRlLWNvZGUgIlwzMDBc MzAxXDMwMlwzMDMgISFAIVwyMDMQAFwzMDRcMzA1IVwyMTBcMzAwXDIwNyIgW2hhc2gtdGFibGUt cCByZWFkLWZyb20tc3RyaW5nIHByaW4xLXRvLXN0cmluZyBtYWtlLWhhc2gtdGFibGUgcHJvdmlk ZSBoYXNodGFibGUtcHJpbnQtcmVhZGFibGVdIDQpI0AzMDEgUHJvZHVjZSB0aGUgY2Fub25pY2Fs IGZpbGUgbmFtZSBmb3IgRklMRSBmcm9tIGl0cyBNU1lTIGZvcm0uCgpPbiBzeXN0ZW1zIG90aGVy IHRoYW4gTVMtV2luZG93cywganVzdCByZXR1cm5zIEZJTEUuCk9uIE1TLVdpbmRvd3MsIGNvbnZl cnRzIC9kL2Zvby9iYXIgZm9ybSBvZiBmaWxlIG5hbWVzCnBhc3NlZCBieSBNU1lTIE1ha2UgaW50 byBkOi9mb28vYmFyIHRoYXQgRW1hY3MgY2FuIGdyb2suCgpUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBmcm9tIGxpc3AvTWFrZWZpbGUgYW5kIGxlaW0vTWFrZWZpbGUuCgooZm4gRklMRSkfCihkZWZh bGlhcyAndW5tc3lzLS1maWxlLW5hbWUgI1syNTcgIghcMzAxPVwyMDMZAFwzMDJcMzAzAlwiXDIw MxkAXDIxMVwzMDRcMzA1T1wzMDYCXDMwNVwzMDdPUVwyNjIBXDIwNyIgW3N5c3RlbS10eXBlIHdp bmRvd3MtbnQgc3RyaW5nLW1hdGNoICJcXGAvW2EtekEtWl0vIiAxIDIgIjoiIG5pbF0gNiAoIyQg LiAyMjM4MTgpXSkjQDI5MCBSZXR1cm4gYSAiZmxhdHRlbmVkIiBjb3B5IG9mIFRSRUUuCkluIG90 aGVyIHdvcmRzLCByZXR1cm4gYSBsaXN0IG9mIHRoZSBub24tbmlsIHRlcm1pbmFsIG5vZGVzLCBv cgpsZWF2ZXMsIG9mIHRoZSB0cmVlIG9mIGNvbnMgY2VsbHMgcm9vdGVkIGF0IFRSRUUuICBMZWF2 ZXMgaW4gdGhlCnJldHVybmVkIGxpc3QgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluIFRSRUUu CgooZmxhdHRlbi10cmVlIFw9JygxICgyIC4gMykgbmlsICg0IDUgKDYpKSA3KSkKPT4gKDEgMiAz IDQgNSA2IDcpCgooZm4gVFJFRSkfCihkZWZhbGlhcyAnZmxhdHRlbi10cmVlICNbMjU3ICJcMzAw ATpcMjAzKwABXDIxMUFcMjYyA1wyNDJcMjExOlwyMDMeAFwyMTFBA0JcMjYyA1wyMTFAXDI2MgFc MjAyXGYAXDIxMVwyMDMnAFwyMTECQlwyNjICXDIxMFwyMDIBAAFcMjAzNAABAUJcMjYyAVwyMTFc MjM3XDIwNyIgW25pbF0gNSAoIyQgLiAyMjQzMTIpXSkKKGRlZmFsaWFzICdmbGF0dGVuLWxpc3Qg J2ZsYXR0ZW4tdHJlZSkjQDExMiBUcmltIFNUUklORyBvZiBsZWFkaW5nIHN0cmluZyBtYXRjaGlu ZyBSRUdFWFAuCgpSRUdFWFAgZGVmYXVsdHMgdG8gIlsgXHRcblxyXSsiLgoKKGZuIFNUUklORyAm b3B0aW9uYWwgUkVHRVhQKR8KKGRlZmFsaWFzICdzdHJpbmctdHJpbS1sZWZ0ICNbNTEzICJcMzAw XDMwMQJcMjA2BwBcMzAyXDMwM1EDXCJcMjAzFAABXDMwNFwyMjVcMzA1T1wyMDcBXDIwNyIgW3N0 cmluZy1tYXRjaCAiXFxgXFwoPzoiICJbIAlcbg1dKyIgIlxcKSIgMCBuaWxdIDYgKCMkIC4gMjI0 ODI4KV0pI0AxMTQgVHJpbSBTVFJJTkcgb2YgdHJhaWxpbmcgc3RyaW5nIG1hdGNoaW5nIFJFR0VY UC4KClJFR0VYUCBkZWZhdWx0cyB0byAgIlsgXHRcblxyXSsiLgoKKGZuIFNUUklORyAmb3B0aW9u YWwgUkVHRVhQKR8KKGRlZmFsaWFzICdzdHJpbmctdHJpbS1yaWdodCAjWzUxMyAiXDMwMAFcMjA2 BgBcMzAxXDMwMlECXDMwM1wzMDQDAwNcMzA1JFwyNjZcMjAzXDIxMVwyMDMbAAJcMzA2Ak9cMjA3 AlwyMDciIFsiXFwoPzoiICJbIAlcbg1dKyIgIlxcKVxcJyIgbmlsIHN0cmluZy1tYXRjaCB0IDBd IDEwICgjJCAuIDIyNTEwNSldKSNAMTc1IFRyaW0gU1RSSU5HIG9mIGxlYWRpbmcgYW5kIHRyYWls aW5nIHN0cmluZ3MgbWF0Y2hpbmcgVFJJTS1MRUZUIGFuZCBUUklNLVJJR0hULgoKVFJJTS1MRUZU IGFuZCBUUklNLVJJR0hUIGRlZmF1bHQgdG8gIlsgXHRcblxyXSsiLgoKKGZuIFNUUklORyAmb3B0 aW9uYWwgVFJJTS1MRUZUIFRSSU0tUklHSFQpHwooZGVmYWxpYXMgJ3N0cmluZy10cmltICNbNzY5 ICJcMzAwXDMwMQQDXCIDXCJcMjA3IiBbc3RyaW5nLXRyaW0tbGVmdCBzdHJpbmctdHJpbS1yaWdo dF0gNyAoIyQgLiAyMjU0MDMpXSkjQDYwIFN0YW5kYXJkIHJlZ2V4cCBndWFyYW50ZWVkIG5vdCB0 byBtYXRjaCBhbnkgc3RyaW5nIGF0IGFsbC4fCihkZWZjb25zdCByZWdleHAtdW5tYXRjaGFibGUg IlxcYGFcXGAiICgjJCAuIDIyNTY4OCkpI0AyODYgUnVuIEhPT0ssIGNhdGNoaW5nIGVycm9ycywg YW5kIHF1ZXJ5aW5nIHRoZSB1c2VyIGFib3V0IHdoZXRoZXIgdG8gY29udGludWUuCklmIGEgZnVu Y3Rpb24gaW4gSE9PSyBzaWduYWxzIGFuIGVycm9yLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVk CndoZXRoZXIgdG8gY29udGludWUgb3Igbm90LiAgSWYgdGhlIHVzZXIgZG9lc24ndCByZXNwb25k LApldmFsdWF0aW9uIHdpbGwgY29udGludWUgaWYgdGhlIHVzZXIgZG9lc24ndCByZXNwb25kIHdp dGhpbiBmaXZlCnNlY29uZHMuCgooZm4gSE9PSykfCihkZWZhbGlhcyAncnVuLWhvb2stcXVlcnkt ZXJyb3Itd2l0aC10aW1lb3V0ICNbMjU3ICJcMzAwAVwzMDFcIlwyMDciIFtydW4taG9vay13cmFw cGVkICNbMjU3ICJcMzAwMQsAXDIxMSAwXDIxMFwyMDIcAFwzMDFcMzAyXDMwMwNcIlwzMDRcMzA1 Iz9cMjA1GgBcMzA2ASFcMjY2AlwzMDdcMjA3IiBbKGVycm9yKSB5LW9yLW4tcC13aXRoLXRpbWVv dXQgZm9ybWF0ICJFcnJvciAlczsgY29udGludWU/IiA1IHQgZXJyb3IgbmlsXSA2ICJcblxuKGZu IEZVTikiXV0gNCAoIyQgLiAyMjU4MDcpXSkjQDIxMSBGaWxsIHN0cmluZyBTVFIgdG8gYGZpbGwt Y29sdW1uJy4KVGhpcyBpcyBpbnRlbmRlZCBmb3IgdmVyeSBzaW1wbGUgZmlsbGluZyB3aGlsZSBi b290c3RyYXBwaW5nCkVtYWNzIGl0c2VsZiwgYW5kIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBj dXN0b21pemF0aW9uIG9wdGlvbnMKb2YgZmlsbC5lbCAoZm9yIGV4YW1wbGUgYGZpbGwtcmVnaW9u JykuCgooZm4gU1RSKR8KKGRlZmFsaWFzICdpbnRlcm5hbC0tZmlsbC1zdHJpbmctc2luZ2xlLWxp bmUgI1syNTcgIlwyMTFHCFdcMjAzCABcMjA3CAFHXgFcMzAxAk8CAlwzMDJPXDMwM1wzMDQDXCJc MjAzJwBcMzA1XDMwNlwzMDJcMjExBVwzMDclXDI2MgJcMjAyVABcMzAzXDMxMAJcIlwyMDM8AAFc MzA2UFwyNjICXDMxMVwzMDcCXCJcMjYyAVwyMDJUAFwzMDNcMzEyA1wiXDIwM1QAXDMxMVwzMTMD XCIBUFwyNjIBXDMwNVwzMDZcMzAyXDIxMQVcMzA3JVwyNjICAVwzMTQCIVBcMjA3IiBbZmlsbC1j b2x1bW4gMCBuaWwgc3RyaW5nLW1hdGNoICJcXCggXFwpJCIgcmVwbGFjZS1tYXRjaCAiXG4iIDEg Il4gXFwoLipcXCkiIG1hdGNoLXN0cmluZyAiLipcXCggXFwoLitcXClcXCkkIiAyIGludGVybmFs LS1maWxsLXN0cmluZy1zaW5nbGUtbGluZV0gMTAgKCMkIC4gMjI2Mzc5KV0pI0AzMzQgRm9ybWF0 IGEgc2luZ2xlIGxpbmUgZnJvbSBhIGRvY3VtZW50YXRpb24gc3RyaW5nIG91dCBvZiBTVFJJTkcg YW5kIE9CSkVDVFMuClNpZ25hbCBhbiBlcnJvciBpZiBTVFJJTkcgY29udGFpbnMgYSBuZXdsaW5l LgpUaGlzIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gIEF2b2lkIHVzaW5nIHRo aXMgZm9yIHRoZQpmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nOyB0aGUgZmlyc3QgbGluZSBzaG91 bGQgYmUgYSBjb21wbGV0ZQpzZW50ZW5jZSAoc2VlIEluZm8gbm9kZSBgKGVsaXNwKSBEb2N1bWVu dGF0aW9uIFRpcHMnKS4KCihmbiBTVFJJTkcgJnJlc3QgT0JKRUNUUykfCihkZWZhbGlhcyAnaW50 ZXJuYWwtLWZvcm1hdC1kb2NzdHJpbmctbGluZSAjWzM4NSAiXDMwMFwzMDEDXCJcMjAzXGYAXDMw MlwzMDMDXCJcMjEwXDMwNFwzMDVcMzA2BAQjIVwyMDciIFtzdHJpbmctbWF0Y2ggIlxuIiBlcnJv ciAiVW5hYmxlIHRvIGZpbGwgc3RyaW5nIGNvbnRhaW5pbmcgbmV3bGluZTogJVMiIGludGVybmFs LS1maWxsLXN0cmluZy1zaW5nbGUtbGluZSBhcHBseSBmb3JtYXRdIDcgKCMkIC4gMjI3MDI1KV0p I0A0OSBSZXR1cm4gbm9uLW5pbCBpZiBFbWFjcyBoYXMgbGliamFuc3NvbiBzdXBwb3J0Lh8KKGRl ZmFsaWFzICdqc29uLWF2YWlsYWJsZS1wICNbMCAiXDMwMFwzMDEhXDIwNREAXDMwMjEPAFwzMDMw XDIxMFwzMDRcMjA3XDIxMFwzMDVcMjA3IiBbZmJvdW5kcCBqc29uLXNlcmlhbGl6ZSAoanNvbi11 bmF2YWlsYWJsZSkgInRydWUiIHQgbmlsXSAyICgjJCAuIDIyNzYwNildKSNAMTU2IFJldHVybiBP QkpFQ1QgYXMgYSBsaXN0LgpJZiBPQkpFQ1QgaXMgYWxyZWFkeSBhIGxpc3QsIHJldHVybiBPQkpF Q1QgaXRzZWxmLiAgSWYgaXQncwpub3QgYSBsaXN0LCByZXR1cm4gYSBvbmUtZWxlbWVudCBsaXN0 IGNvbnRhaW5pbmcgT0JKRUNULgoKKGZuIE9CSkVDVCkfCihkZWZhbGlhcyAnZW5zdXJlLWxpc3Qg I1syNTcgIlwyMTE8XDIwMwYAXDIwN1wyMTFDXDIwNyIgW10gMiAoIyQgLiAyMjc4MjEpXSkjQDI1 MiBMaWtlIGBwcm9nbicsIGJ1dCBkaXNwbGF5IE1FU1NBR0UgaWYgQk9EWSB0YWtlcyBsb25nZXIg dGhhbiBUSU1FT1VUIHNlY29uZHMuClRoZSBNRVNTQUdFIGZvcm0gd2lsbCBiZSBldmFsdWF0ZWQg aW1tZWRpYXRlbHksIGJ1dCB0aGUgcmVzdWx0aW5nCnN0cmluZyB3aWxsIGJlIGRpc3BsYXllZCBv bmx5IGlmIEJPRFkgdGFrZXMgbG9uZ2VyIHRoYW4gVElNRU9VVCBzZWNvbmRzLgoKKGZuICh0aW1l b3V0IG1lc3NhZ2UpICZyZXN0IGJvZHkpHwooZGVmYWxpYXMgJ3dpdGgtZGVsYXllZC1tZXNzYWdl ICcobWFjcm8gLiAjWzM4NSAiXDMwMAJAA0FAXDMwMVwzMDIFQkJGXDIwNyIgW2Z1bmNhbGwtd2l0 aC1kZWxheWVkLW1lc3NhZ2UgbGFtYmRhIG5pbF0gOCAoIyQgLiAyMjgwNTkpXSkpCihieXRlLWNv ZGUgIlwzMDBcMzAxXDMwMlwzMDMjXDMwMFwyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1kZWxheWVk LW1lc3NhZ2UgbGlzcC1pbmRlbnQtZnVuY3Rpb24gMV0gNCkjQDI2NiBSZXR1cm4gbmlsIGlmIEZV TkMgaXMgbm90IGEgZnVuY3Rpb24gYWxpYXMuCklmIEZVTkMgaXMgYSBmdW5jdGlvbiBhbGlhcywg cmV0dXJuIHRoZSBmdW5jdGlvbiBhbGlhcyBjaGFpbi4KCklmIHRoZSBmdW5jdGlvbiBhbGlhcyBj aGFpbiBjb250YWlucyBsb29wcywgYW4gZXJyb3Igd2lsbCBiZQpzaWduYWxlZC4gIElmIE5PRVJS T1IsIHRoZSBub24tbG9vcCBwYXJ0cyBvZiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQuCgooZm4gRlVO QyAmb3B0aW9uYWwgTk9FUlJPUikfCihkZWZhbGlhcyAnZnVuY3Rpb24tYWxpYXMtcCAjWzUxMyAi XDMwMAJcMzAxMkAAAzlcMjAzPgADS1wyMTFcMjYyBVwyMDM+AAM5XDIwMz4AAwI+XDIwNCQAAwE9 XDIwMzYAAlwyMDMwAFwzMDJcMzAxA1wiXDIxMFwyMDI2AFwzMDNcMzA0AkNcIlwyMTADAkJcMjYy AlwyMDIGAAEwXDIzN1wyMDciIFtuaWwgbG9vcCB0aHJvdyBzaWduYWwgY3ljbGljLWZ1bmN0aW9u LWluZGlyZWN0aW9uXSA3ICgjJCAuIDIyODU1NCldKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwzMDJc MzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IGZ1bmN0aW9uLWFsaWFzLXAgc2lkZS1lZmZlY3Qt ZnJlZSB0XSA0KSNAMjcwIFNheSB3aGV0aGVyIE9CSkVDVCBoYXMgYSByZWFkYWJsZSBzeW50YXgu ClRoaXMgbWVhbnMgdGhhdCBPQkpFQ1QgY2FuIGJlIHByaW50ZWQgb3V0IGFuZCB0aGVuIHJlYWQg YmFjawphZ2FpbiBieSB0aGUgTGlzcCByZWFkZXIuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbmls IGlmIE9CSkVDVCBpcwp1bnJlYWRhYmxlLCBhbmQgdGhlIHByaW50ZWQgcmVwcmVzZW50YXRpb24g KGZyb20gYHByaW4xJykgb2YKT0JKRUNUIGlmIGl0IGlzIHJlYWRhYmxlLgoKKGZuIE9CSkVDVCkf CihkZWZhbGlhcyAncmVhZGFibGVwICNbMjU3ICJcMzAxMgsAXDMwMhhcMzAzASEpMFwyMDciIFtw cmludC11bnJlYWRhYmxlLWZ1bmN0aW9uIHVucmVhZGFibGUgI1s1MTQgIlwzMDBcMzAxXDMwMlwi XDIwNyIgW3Rocm93IHVucmVhZGFibGUgbmlsXSA1ICJcblxuKGZuIE9CSkVDVCBFU0NBUEUpIl0g cHJpbjEtdG8tc3RyaW5nXSAzICgjJCAuIDIyOTE1NildKQooYnl0ZS1jb2RlICJcMzAwXDMwMVwz MDJcMzAzI1wzMDBcMjA3IiBbZnVuY3Rpb24tcHV0IHJlYWRhYmxlcCBzaWRlLWVmZmVjdC1mcmVl IGVycm9yLWZyZWVdIDQpI0AyNiBEZWxldGUgdGhlIGN1cnJlbnQgbGluZS4fCihkZWZhbGlhcyAn ZGVsZXRlLWxpbmUgI1swICJcMzAwIFwzMDBcMzAxIXxcMjA3IiBbcG9zLWJvbCAyXSAzICgjJCAu IDIyOTczMCldKSNANDU5IEVuc3VyZSB0aGF0IHRoZXJlIGFyZSBMSU5FUyBudW1iZXIgb2YgZW1w dHkgbGluZXMgYmVmb3JlIHBvaW50LgpJZiBMSU5FUyBpcyBuaWwgb3Igb21pdHRlZCwgZW5zdXJl IHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgZW1wdHkKbGluZSBiZWZvcmUgcG9pbnQuCgpJZiBjYWxs ZWQgaW50ZXJhY3RpdmVseSwgTElORVMgaXMgZ2l2ZW4gYnkgdGhlIHByZWZpeCBhcmd1bWVudC4K CklmIHRoZXJlIGFyZSBtb3JlIHRoYW4gTElORVMgZW1wdHkgbGluZXMgYmVmb3JlIHBvaW50LCB0 aGUgbnVtYmVyCm9mIGVtcHR5IGxpbmVzIGlzIHJlZHVjZWQgdG8gTElORVMuCgpJZiBwb2ludCBp cyBub3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIGEgbmV3bGluZSBjaGFyYWN0ZXIKaXMg aW5zZXJ0ZWQgYmVmb3JlIGFkanVzdGluZyB0aGUgbnVtYmVyIG9mIGVtcHR5IGxpbmVzLgoKKGZu ICZvcHRpb25hbCBMSU5FUykfCihkZWZhbGlhcyAnZW5zdXJlLWVtcHR5LWxpbmVzICNbMjU2ICJu XDIwNAcAXDMwMGNcMjEwXDIxMVwyMDZcZgBcMzAxXDIxMlwzMDJcMzAzXDMwNFwzMDUjXDIwMxsA YFwzMDZcXFwyMDIcAGUpYAFaAlZcMjAzLwBgYGADWgRaWnxcMjA3YAFaAldcMjA1QABcMzA3AmAD WlpcMzEwXCJjXDIwNyIgWyJcbiIgMSByZS1zZWFyY2gtYmFja3dhcmQgIlteXG5dIiBuaWwgdCAy IG1ha2Utc3RyaW5nIDEwXSA3ICgjJCAuIDIyOTg0MCkgInAiXSkjQDIxNiBTcGxpdCBTVFJJTkcg aW50byBhIGxpc3Qgb2YgbGluZXMuCklmIE9NSVQtTlVMTFMsIGVtcHR5IGxpbmVzIHdpbGwgYmUg cmVtb3ZlZCBmcm9tIHRoZSByZXN1bHRzLgpJZiBLRUVQLU5FV0xJTkVTLCBkb24ndCBzdHJpcCB0 cmFpbGluZyBuZXdsaW5lcyBmcm9tIHRoZSByZXN1bHQKbGluZXMuCgooZm4gU1RSSU5HICZvcHRp b25hbCBPTUlULU5VTExTIEtFRVAtTkVXTElORVMpHwooZGVmYWxpYXMgJ3N0cmluZy1saW5lcyAj Wzc2OSAiAlwzMDBcMjMyXDIwMw4AAT9cMjA1dABcMzAwQ1wyMDdcMzAxXDMwMlwyMTEFR1dcMjAz cABcMzAzXDMwNAYGAyNcMjExXDIwM1MABFwyMDMrAAEBVVwyMDRMAAUCBVwyMDM2AAJUXDIwMjcA Ak8EXDIwM0YABVwyMDNGAFwyMTFcMzA0XDIzMlwyMDRLAFwyMTEEQlwyNjIEXDIxMFwyMTFUXDI2 NlwyMDJcMjAyEAABXDMwMlVcMjAzYQAFA0JcMjYyA1wyMDJpAAUCXDMwMU8DQlwyNjIDBUdcMjY2 XDIwMlwyMDIQAAFcMjM3XDI2NlwyMDJcMjA3IiBbIiIgbmlsIDAgc3RyaW5nLXNlYXJjaCAiXG4i XSA5ICgjJCAuIDIzMDU1MildKSNAOTg0IFJldHVybiBub24tbmlsIGlmIEJVRkZFUi1PUi1OQU1F IG1hdGNoZXMgQ09ORElUSU9OLgpDT05ESVRJT04gaXMgZWl0aGVyOgotIHRoZSBzeW1ib2wgdCwg dG8gYWx3YXlzIG1hdGNoLAotIHRoZSBzeW1ib2wgbmlsLCB3aGljaCBuZXZlciBtYXRjaGVzLAot IGEgcmVndWxhciBleHByZXNzaW9uLCB0byBtYXRjaCBhIGJ1ZmZlciBuYW1lLAotIGEgcHJlZGlj YXRlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBidWZmZXIgb2JqZWN0IGFuZCBBUkcgYXMKICBhcmd1 bWVudHMsIGFuZCByZXR1cm5zIG5vbi1uaWwgaWYgdGhlIGJ1ZmZlciBtYXRjaGVzLAotIGEgY29u cy1jZWxsLCB3aGVyZSB0aGUgY2FyIGRlc2NyaWJlcyBob3cgdG8gaW50ZXJwcmV0IHRoZSBjZHIu CiAgVGhlIGNhciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgKiBgZGVyaXZlZC1tb2Rl JzogdGhlIGJ1ZmZlciBtYXRjaGVzIGlmIHRoZSBidWZmZXIncyBtYWpvciBtb2RlCiAgICBpcyBk ZXJpdmVkIGZyb20gdGhlIG1ham9yIG1vZGUgaW4gdGhlIGNvbnMtY2VsbCdzIGNkci4KICAqIGBt YWpvci1tb2RlJzogdGhlIGJ1ZmZlciBtYXRjaGVzIGlmIHRoZSBidWZmZXIncyBtYWpvciBtb2Rl CiAgICBpcyBlcSB0byB0aGUgY29ucy1jZWxsJ3MgY2RyLiAgUHJlZmVyIHVzaW5nIGBkZXJpdmVk LW1vZGUnCiAgICBpbnN0ZWFkIHdoZW4gYm90aCBjYW4gd29yay4KICAqIGBub3QnOiB0aGUgY2Ry IGlzIGludGVycHJldGVkIGFzIGEgbmVnYXRpb24gb2YgYSBjb25kaXRpb24uCiAgKiBgYW5kJzog dGhlIGNkciBpcyBhIGxpc3Qgb2YgcmVjdXJzaXZlIGNvbmRpdGlvbnMsIHRoYXQgYWxsIGhhdmUK ICAgIHRvIGJlIG1ldC4KICAqIGBvcic6IHRoZSBjZHIgaXMgYSBsaXN0IG9mIHJlY3Vyc2l2ZSBj b25kaXRpb24sIG9mIHdoaWNoIGF0CiAgICBsZWFzdCBvbmUgaGFzIHRvIGJlIG1ldC4KCihmbiBD T05ESVRJT04gQlVGRkVSLU9SLU5BTUUgJm9wdGlvbmFsIEFSRykfCihkZWZhbGlhcyAnYnVmZmVy LW1hdGNoLXAgI1s3NzAgIlwzMDACIVwzMDFDXDIxMVwzMDJcMzAzAwUGByRcMjQwXDIxMFwyMTFc MjQyBUMhXDIwNyIgW2dldC1idWZmZXIgbmlsIG1ha2UtY2xvc3VyZSAjWzI1NyAiXDMwMzJcMjc3 AFwyMTFcMjExXDIwNVwyNzQAXDIxMUBcMjExXDMwND1cMjA0XDI2MABcMjExO1wyMDMmAFwyMTFc MzA1XDMwMSFcMzA2XDMwNwMDA1wzMDQkXDI2NlwyMDNcMjAyXDI1NQBcMzEwASFcMjAzQgBcMzEx ASFBXDMxMj1cMjAzOwBcMjExXDMwMSFcMjAyXDI1NQBcMjExXDMwMVwzMDJcIlwyMDJcMjU1AFwy MTE6XDIwM1wyNjUAXDIxMVwyNDJcMjExXDMxM1wyNjdcMjAyXDI1MgABXDI0M1wzMTRcMzE1XDMw MVwiAT1cMjYyAVwyMDJcMjUzAAFcMjQzXDMxNlwzMTRcMzE1XDMwMVwiAlwiXDI2MgFcMjAyXDI1 MwABXDI0M1wzMDBcMjQyASE/XDI2MgFcMjAyXDI1MwABXDI0M1wzMDBcMjQyASFcMjYyAVwyMDJc MjUzAAFcMjQzXDMxNzJcMjQ1AFwyMTFcMjExXDIwM1wyNDIAXDIxMUBcMzAwXDI0MgFDIVwyMDRc MjMzAFwzMjBcMzE3XDMwNlwiXDIxMAFBXDI2NlwyMDJcMjAyXDIxMABcMjEwXDMwNDBcMjYyAVwy MDJcMjUzAFwzMDZcMjYyAVwyMDNcMjY1AFwzMjBcMzAzXDMwNFwiXDIxMAFBXDI2NlwyMDJcMjAy BQBcMjYyATBcMjA3IiBbVjAgVjEgVjIgbWF0Y2ggdCBidWZmZXItbmFtZSBuaWwgc3RyaW5nLW1h dGNoIGZ1bmN0aW9ucCBmdW5jLWFyaXR5IDEgI3MoaGFzaC10YWJsZSBzaXplIDUgdGVzdCBlcSBy ZWhhc2gtc2l6ZSAxLjUgcmVoYXNoLXRocmVzaG9sZCAwLjgxMjUgcHVyZWNvcHkgdCBkYXRhICht YWpvci1tb2RlIDc5IGRlcml2ZWQtbW9kZSA5MiBub3QgMTA2IG9yIDExOCBhbmQgMTI5KSkgYnVm ZmVyLWxvY2FsLXZhbHVlIG1ham9yLW1vZGUgcHJvdmlkZWQtbW9kZS1kZXJpdmVkLXAgZmFpbCB0 aHJvd10gMTEgIlxuXG4oZm4gQ09ORElUSU9OUykiXV0gMTEgKCMkIC4gMjMxMTAzKV0pI0AzNDEg UmV0dXJuIGEgbGlzdCBvZiBidWZmZXJzIHRoYXQgbWF0Y2ggQ09ORElUSU9OLgpTZWUgYGJ1ZmZl ci1tYXRjaC1wJyBmb3IgZGV0YWlscyBvbiBDT05ESVRJT04uICBCeSBkZWZhdWx0IGFsbApidWZm ZXJzIGFyZSBjaGVja2VkLCB0aGlzIGNhbiBiZSByZXN0cmljdGVkIGJ5IHBhc3NpbmcgYW4Kb3B0 aW9uYWwgYXJndW1lbnQgQlVGRkVSUywgc2V0IHRvIGEgbGlzdCBvZiBidWZmZXJzIHRvIGNoZWNr LgpBUkcgaXMgcGFzc2VkIHRvIGBidWZmZXItbWF0Y2gnLCBmb3IgcHJlZGljYXRlIGNvbmRpdGlv bnMgaW4KQ09ORElUSU9OLgoKKGZuIENPTkRJVElPTiAmb3B0aW9uYWwgQlVGRkVSUyBBUkcpHwoo ZGVmYWxpYXMgJ21hdGNoLWJ1ZmZlcnMgI1s3NjkgIlwzMDACXDIwNgcAXDMwMSBcMjExXDIwMyUA XDIxMUBcMzAyBgZcMzAzAyEGBiNcMjAzHgBcMjExA0JcMjYyAwFBXDI2NlwyMDJcMjAyBwBcMjEw XDIwNyIgW25pbCBidWZmZXItbGlzdCBidWZmZXItbWF0Y2gtcCBnZXQtYnVmZmVyXSAxMCAoIyQg LiAyMzMwNzMpXSkjQDE4MCBSZXR1cm4gdGhlIHZhbHVlIG9mIENPREUgYW5kIHN0YXNoIGl0IGlu IFBMQUNFLgpJZiBQTEFDRSdzIHZhbHVlIGlzIG5vbi1uaWwsIHRoZW4gZG9uJ3QgYm90aGVyIGV2 YWx1YXRpbmcgQ09ERQphbmQgcmV0dXJuIHRoZSB2YWx1ZSBmb3VuZCBpbiBQTEFDRSBpbnN0ZWFk LgoKKGZuIFBMQUNFICZyZXN0IENPREUpHwooZGVmYWxpYXMgJ3dpdGgtbWVtb2l6YXRpb24gJyht YWNybyAuICNbMzg1ICJcMzAwAlwzMDFcMzAyBFwiXCJcMjA3IiBbZ3YtZ2V0IG1ha2UtY2xvc3Vy ZSAjWzUxNCAiXDMwMQJcMzAyXDMwMCFcMzAzASFcMjAzDwBcMjExXDIwMhIAXDMwNFwzMDUhXDMw NgUCIQJFAQM9XDIwMyQAXDIxMVwyNjZcMjAzXDIwMi0AXDMwNwIEREMCXCJcMjY2XDIwM0VcMjA3 IiBbVjAgb3IgbWFjcm9leHAtcHJvZ24gbWFjcm9leHAtY29uc3QtcCBtYWtlLXN5bWJvbCAidmFs IiBwcm9nbiBtYWNyb2V4cC1sZXQqXSAxMCAiXG5cbihmbiBHRVRURVIgU0VUVEVSKSJdXSA3ICgj JCAuIDIzMzYwMyldKSkKKGJ5dGUtY29kZSAiXDMwMFwzMDFcMzAyXDMwMyNcMzA0XDMwMVwzMDVc MzA2I1wyMDciIFtmdW5jdGlvbi1wdXQgd2l0aC1tZW1vaXphdGlvbiBsaXNwLWluZGVudC1mdW5j dGlvbiAxIHB1dCBlZGVidWctZm9ybS1zcGVjIChndi1wbGFjZSBib2R5KV0gNSkK --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOLjFsACgkQVTX89U2I YWv1PQ/+KrE81e3auXIrx2LGqYlYOlIBQUBpC8dPZ7XZJ3qZSqkyKv+1obwa2WLj 8vH0Mcp3aGA8regkk+tvY9veYqjUfFmYICsalA9ixtGlzWo08ztHDpeBnhd4VGnr 2LRYG2DoYD4tjyyPux1o0+N+7g9eMHOeA24KOPM/yglncdLZD0luLG3fjXXlC6xw X4TpAMmjnJyFVW9gaNGQCev7HfVMLJye48VOWSCkp1XMHDkcTR5nzns/UPml7f/0 xQx8C0/MqFyjUasdHWsk4+Dcz5pbyE8boLme2fA6FxipELwEywZsu7q7o/YOfm/Z qQJVsa78TY5LQWuM0Y+vA0Si4G4W3VhqEVU0g/qTQAeOFZdaSulwYphges83YoiI wBf+Uo/MKl1AogDzgqym67f9FWgICPht3b1gRmqGi7O2M8eryuuDJVe5fM8ZAOVq gmdTZpsBsz+3T5BnoVNxjafl5cxJZWnCzZfhqHwY8uj7juZcUip3yXDpaAj6JCLk IUZgtm/T/0vSzEG+BNuwr6WeL58ZodsvVFQiXafZ0jWQDvxKa0uR5An3K1ipl0aN tsF1NH3dLFVXEuj2m/CQ1aqk39amOQGUwca3reXfFYAxiu0fhaWKK/LcZMrmtHmE lz1R7codUuN6mZuladjXeeFNFrH0RWFFj/7YrQ19l/2qVfUiPyk= =k+Pv -----END PGP SIGNATURE----- --==-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 13:10:58 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 18:10:58 +0000 Received: from localhost ([127.0.0.1]:52573 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WyP-0005oz-Jk for submit@debbugs.gnu.org; Sat, 03 Dec 2022 13:10:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:51078) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1WyN-0005ot-QR for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 13:10:48 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1WyF-0002g1-P6; Sat, 03 Dec 2022 13:10:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=fGUu2rFdcxwa+VF1v+vN7uTp1wcvl6vE1K/qkpSgqN8=; b=UQdoPETOtJ9b JJ76kgYUwK+Gt5f54OCfd4SEE7HrkpnDt9LdzdJbhl0QePsnWPxhqhIhaiz/sHHVyL9HYJgqud98S Iqo7Yq4NqP1FLvKlEjHpxdJIpv02sdx6ODa+M1XjR75CbaTcBqBwPzkTwx3PZAsLamj7684H5y7ih x6vbRJJyNG2LimmDgf8EOtMm9HR6NUljtiidIzmakHlBMaCoQmfoK66IuMObUIljS8TVwhyeyeVNP eyeD9m7xZ8JzApLZSYUF1q2zQ9/oi5aCj5ZLTn4GjjmIXANCFkOT4/q0Zljo6pz12vVej6aXCUY5P F9zSlxyS/GTl7t0OxtkUcw==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1WyF-00065v-7F; Sat, 03 Dec 2022 13:10:39 -0500 Date: Sat, 03 Dec 2022 20:10:18 +0200 Message-Id: <83sfhwcq9h.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87v8mspfuo.fsf@disroot.org> (message from Akib Azmain Turja on Sat, 03 Dec 2022 23:16:47 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: Feng Shu , 59793@debbugs.gnu.org > Date: Sat, 03 Dec 2022 23:16:47 +0600 > > > Am I missing something, or do you redefine a function and then expect it to work like you never redefined it? > > Unexpected: bug59593-yank just inserts the killed text. > Expected: bug59593-yank intercepts and shows the killed text in echo > area. You have redefined a subr.el function with cl-letf*, so how is what happens as result a bug in Emacs? Does the original subr.el function not do what it's supposed to do, before you replace it? I understand you didn't expect the result of cl-letf*, and were surprised by what you saw, but I don't understand why you expect the Emacs development to do something about your surprise. > > So I'm still confused... > > Is it clear now? (Somehow, I think, no.) See above: I understand what you are saying, but not why this is submitted as a bug to the Emacs development team. From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 16:49:16 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 21:49:16 +0000 Received: from localhost ([127.0.0.1]:53500 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1aNn-0003vB-S5 for submit@debbugs.gnu.org; Sat, 03 Dec 2022 16:49:16 -0500 Received: from m12.mail.163.com ([123.126.96.233]:50813) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1aNj-0003v5-Uv for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 16:49:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version; bh=nDlqg yYOrXL636jN3kU+iu+LBBD8fKglRDW9T3gxxW0=; b=XQyHk/ezZnhw8RfJH1f5R UOokYzkZjmx5gb0u+qw1JiY41wPxydgfYr4xS4r1cbWefjREnw8ZG14k+47vpdfs psMN7n1UnN9CgsJhn4XrbsGG5h6tl4QdDkXJz8tQiupG4aNkQKxlo3IF1EhHGRlF Nca8SwJSr3sQ/k6cqdwklI= Received: from Guix (unknown [49.88.144.183]) by smtp16 (Coremail) with SMTP id MNxpCgDn76NhxItjdfs0Ag--.19708S2; Sun, 04 Dec 2022 05:49:21 +0800 (CST) From: Feng Shu To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <83sfhwcq9h.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 03 Dec 2022 20:10:18 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> Date: Sun, 04 Dec 2022 05:49:06 +0800 Message-ID: <87v8ms6tv1.fsf@163.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-CM-TRANSID: MNxpCgDn76NhxItjdfs0Ag--.19708S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww43uF17Gw18JrW7ZrW3trb_yoW8CF4rpa 4DC3Wqkr4ktFZakw1DJ3W0vF4Svrs5J398Gr18ArW0kayDAF93WrWYqrWFkF42qr18Ga1Y yan7uF18ZFy8uaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRxWrZUUUUU= X-Originating-IP: [49.88.144.183] X-CM-SenderInfo: 5wxpt2lkx6il2tof0z/xtbB3wXM1GBHNHnrLwAAss X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: Akib Azmain Turja , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: Feng Shu , 59793@debbugs.gnu.org >> Date: Sat, 03 Dec 2022 23:16:47 +0600 >> >> > Am I missing something, or do you redefine a function and then expect it to work like you never redefined it? >> >> Unexpected: bug59593-yank just inserts the killed text. >> Expected: bug59593-yank intercepts and shows the killed text in echo >> area. > > You have redefined a subr.el function with cl-letf*, so how is what happens > as result a bug in Emacs? Does the original subr.el function not do what > it's supposed to do, before you replace it? > > I understand you didn't expect the result of cl-letf*, and were surprised by > what you saw, but I don't understand why you expect the Emacs development to > do something about your surprise. I think the issue is that: when I run emacs-29 first, I can not temp override `insert' function in `insert-for-yank-1' with the help of cl-letf in bug59593-yank (require 'cl-lib) (defun bug59593-yank (&optional arg) (interactive "*P") (cl-letf* ((inhibit-read-only t) (insert-for-yank (symbol-function #'insert-for-yank)) ((symbol-function #'insert-for-yank) (lambda (&rest args) (cl-letf (((symbol-function #'insert) (lambda (&rest args) (message "%S" (mapconcat (lambda (arg) (if (stringp arg) arg (string arg))) args ""))))) (apply insert-for-yank args))))) (yank arg))) but after I run (load "subr.el"), overriding `insert' success. if I run (load "subr.elc"), overriding do not success. so I think subr.elc maybe has some problem. by the way, I use f6e2f30f394a270c2eca9a9a14be46876d2a86e5 to test > >> > So I'm still confused... >> >> Is it clear now? (Somehow, I think, no.) > > See above: I understand what you are saying, but not why this is submitted > as a bug to the Emacs development team. -- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 16:50:49 2022 Received: (at 59793) by debbugs.gnu.org; 3 Dec 2022 21:50:49 +0000 Received: from localhost ([127.0.0.1]:53509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1aPJ-0003w1-BX for submit@debbugs.gnu.org; Sat, 03 Dec 2022 16:50:49 -0500 Received: from m12.mail.163.com ([220.181.12.196]:40182) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1aPE-0003vv-Gx for 59793@debbugs.gnu.org; Sat, 03 Dec 2022 16:50:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version: Content-Type; bh=0rYZAs76IoLYH+WP2c2xZL+mtd61qOeD8/7VTOxNbZk=; b=e+y6C3lNos7DCXSq2Rq+gf5WPGFfymV6guS2I5pun7CeYSvKh/lWn3lU5FXtir t+msDQcIJaaDw5fbLD5BoUV9JkvLY3BlpDOPRqNe1qcsWXM7J8bjr91KQv3WHVs6 hqEKpOia4BwLpTHEMvg5MBQ8s/8EArSCy4aL25jBDg/SM= Received: from Guix (unknown [49.88.144.183]) by zwqz-smtp-mta-g4-0 (Coremail) with SMTP id _____wAHqSmpxItjz9sJAA--.8573S2; Sun, 04 Dec 2022 05:50:34 +0800 (CST) From: Feng Shu To: Akib Azmain Turja Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87359wr08z.fsf@disroot.org> (Akib Azmain Turja's message of "Sat, 03 Dec 2022 21:10:52 +0600") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> Date: Sun, 04 Dec 2022 05:50:33 +0800 Message-ID: <87r0xg6tsm.fsf@163.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-CM-TRANSID: _____wAHqSmpxItjz9sJAA--.8573S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxCFWruFWDtry5Gw1UCF48Zwb_yoW5Zr43pa 9xt3Z0kF40vrWxKw1Utw18JryFkan5Ww4kWry8JrWI9FWDtFy0qr42qFyrC3y7Zr4UG3yY y39Fyry3ZFyUZa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRcJ5wUUUUU= X-Originating-IP: [49.88.144.183] X-CM-SenderInfo: 5wxpt2lkx6il2tof0z/1tbiSgzM1GI0Vy2QmgAAs4 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: Eli Zaretskii , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Akib Azmain Turja writes: > Eli Zaretskii writes: > >>> From: Feng Shu >>> Date: Sat, 03 Dec 2022 15:24:55 +0800 >>> >>> This week, I faced an issue about emacs-eat: >>> >>> >>> eat-yank not work well: https://codeberg.org/akib/emacs-eat/issues/9 >>> >>> >>> ------------- >>> (defun eat-yank (&optional arg) >>> "Same as `yank', but for Eat. >>> >>> ARG is passed to `yank', which see." >>> (interactive "*P") >>> (when eat--terminal >>> (funcall eat--synchronize-scroll-function) >>> (cl-letf* ((inhibit-read-only t) >>> (insert-for-yank (symbol-function #'insert-for-yank)) >>> ((symbol-function #'insert-for-yank) >>> (lambda (&rest args) >>> (cl-letf (((symbol-function #'insert) >>> (lambda (&rest args) >>> (eat-send-string-as-yank >>> eat--terminal >>> (mapconcat (lambda (arg) >>> (if (stringp arg) >>> arg >>> (string arg))) >>> args ""))))) >>> (apply insert-for-yank args))))) >>> (yank arg)))) >>> --------- >>> >>> >>> After some test with author of emacs-eat, we find that config >>> >>> (require 'eat) >>> (load "subr.el") >>> >>> work, while the below config do not work. >>> >>> (require 'eat) >>> (load "subr.elc") >>> >>> >>> we find that C-x C-e insert-for-yank and insert-for-yank-1 works too. >>> >>> >>> so we think subr.elc is not compiled correctly, I use the below >>> script to compile emacs, do not install and run ~/emacs/emacs29/src/emacs directly >> >> Thanks, but what exactly "does not work" in the byte-compiled version of >> subr.el? Do you have a recipe to reproduce the problem you see without >> using emacs-eat? If so, please post such a recipe. Because from your >> report, I don't see how to reproduce the problem and how to investigate it. >> >> >> > > I have figured out a simpler reproduction method, but since I don't have > the much information other than the subr.elc file, Feng should verify > it. > > 1. Save the following in a file. > > (require 'cl-lib) > (defun bug59593-yank (&optional arg) > (interactive "*P") > (cl-letf* ((inhibit-read-only t) > (insert-for-yank (symbol-function #'insert-for-yank)) > ((symbol-function #'insert-for-yank) > (lambda (&rest args) > (cl-letf (((symbol-function #'insert) > (lambda (&rest args) > (message > "%S" > (mapconcat (lambda (arg) > (if (stringp arg) > arg > (string arg))) > args ""))))) > (apply insert-for-yank args))))) > (yank arg))) > > 2. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/YOUR/SUBR.EL.GZ > 3. Kill something. > 4. M-x bug59593-yank. Now you should see the yank text in echo area. > 5. emacs -nw -Q -l FILE-FROM-STEP-1 -l PATH/TO/ATTACHED/SUBR.ELC > 6. Kill something. > 7. M-x bug59593-yank. The yank text got unexpectedly inserted. > > Feng, can you precisely specify the commit you're building from? It'll > allow to reproducing your problem more easily and precisely. The step is work to show this issue, and I use the below commit to test. commit f6e2f30f394a270c2eca9a9a14be46876d2a86e5 (HEAD -> emacs-29, origin/emacs-29) Author: Stefan Kangas Date: Sat Dec 3 15:31:07 2022 +0100 ; Fix typos -- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 02:08:48 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 07:08:48 +0000 Received: from localhost ([127.0.0.1]:55824 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1j7I-0007vA-DL for submit@debbugs.gnu.org; Sun, 04 Dec 2022 02:08:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55700) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1j7H-0007v4-A5 for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 02:08:47 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1j79-00037e-9a; Sun, 04 Dec 2022 02:08:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=TB7jcYky6qOPmu/KHp3xP+dCIPpEYUdX8cMaVYLBNPE=; b=jp7p8d37JPm6 ZyEjjdGQSx7crEB/5dg9oIMWlFqhFuof5e7NuEp4tS8y4wlz6WY44Ly8eD2T+6xQqt5Zr+r9OoNUg 5As9Wzfa6VodI6BYu8XZNth3OQpw/Am2rjVQ3oN04JN3Jj3vKvXYL3kCMG+q0QJwsOOymSaj0/hpZ Cue+YUkVp8gOrMrHKaEhMzPhEMWShFj/Ci6XXew8i2CudXdr1A7LzOjuBBQ8IW/rukOTsz5fR3lUT 6THYG3xoPvwDFGcEP+4iw0OVAGxSzthel1YrzVVyBV69ACR5FmgVccc6GlC4uaxgMdbKHNepTLV85 GHM7Z7Zt/9Lz3HwodGJrKg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1j78-0002sS-LH; Sun, 04 Dec 2022 02:08:38 -0500 Date: Sun, 04 Dec 2022 09:08:19 +0200 Message-Id: <831qpfd4t8.fsf@gnu.org> From: Eli Zaretskii To: Feng Shu In-Reply-To: <87v8ms6tv1.fsf@163.com> (message from Feng Shu on Sun, 04 Dec 2022 05:49:06 +0800) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: akib@disroot.org, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Feng Shu > Cc: Akib Azmain Turja , 59793@debbugs.gnu.org > Date: Sun, 04 Dec 2022 05:49:06 +0800 > > > You have redefined a subr.el function with cl-letf*, so how is what happens > > as result a bug in Emacs? Does the original subr.el function not do what > > it's supposed to do, before you replace it? > > > > I understand you didn't expect the result of cl-letf*, and were surprised by > > what you saw, but I don't understand why you expect the Emacs development to > > do something about your surprise. > > I think the issue is that: > when I run emacs-29 first, I can not temp override `insert' function > in `insert-for-yank-1' with the help of cl-letf in bug59593-yank > > (require 'cl-lib) > (defun bug59593-yank (&optional arg) > (interactive "*P") > (cl-letf* ((inhibit-read-only t) > (insert-for-yank (symbol-function #'insert-for-yank)) > ((symbol-function #'insert-for-yank) > (lambda (&rest args) > (cl-letf (((symbol-function #'insert) > (lambda (&rest args) > (message > "%S" > (mapconcat (lambda (arg) > (if (stringp arg) > arg > (string arg))) > args ""))))) > (apply insert-for-yank args))))) > (yank arg))) > > > but after I run (load "subr.el"), overriding `insert' success. > if I run (load "subr.elc"), overriding do not success. > > so I think subr.elc maybe has some problem. No, I see no problem in subr.elc here. You need to find a different way of overriding what insert-for-yank does. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 11:16:10 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 16:16:11 +0000 Received: from localhost ([127.0.0.1]:58466 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1rf0-0001QS-GQ for submit@debbugs.gnu.org; Sun, 04 Dec 2022 11:16:10 -0500 Received: from knopi.disroot.org ([178.21.23.139]:50518) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1rex-0001QK-2O for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 11:16:09 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 00D0244441; Sun, 4 Dec 2022 17:16:06 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id t2sVEYDUSpIU; Sun, 4 Dec 2022 17:16:04 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670170564; bh=wqZfPs1EHeVrX93MItX+/ASbGCFaN4DVdq9Z7mqKKbk=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=Zb3Q3Qk3KwU1/5n1ANXsllY0av/TrMvraiMSg7yLnDtBNObYtda9Fd3ghcB1Tf4ZE 8yQHZyldTJbHHmbJ6cMHKTgnPS3/8R6JA5qaVvqwpTb2yNJuCgkQa+f6IPSQtQNI2Q fG59jlBtKjCd1AeJRNtyh8OWyxJptTusdvy/BjVI1UCH+yTJgCJmjxZ4VG/7gWUqx8 P/8fsZLKOd9tnonnZIM2W/PpWtZ4fMAZkFumKP6NfdMnS9aJxppFhOgyl748jmw8yR rK+j7haIXSdDDLkG8/Ql7SzwT/ngBe480ndiwR5ety9dFCVgux/avoe9t4HtuFm4cO wO5lcVdpylfnw== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <83sfhwcq9h.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 03 Dec 2022 20:10:18 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> Date: Sun, 04 Dec 2022 17:18:24 +0600 Message-ID: <87zgc31kov.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 1.1 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: Feng Shu , 59793@debbugs.gnu.org >> Date: Sat, 03 Dec 2022 23:16:47 +0600 >> >> > Am I missing something, or do you redefine a fun [...] Content analysis details: (1.1 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 1.1 DATE_IN_PAST_03_06 Date: is 3 to 6 hours before Received: date -0.0 SPF_PASS SPF: sender matches SPF record X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.1 (/) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: Feng Shu , 59793@debbugs.gnu.org >> Date: Sat, 03 Dec 2022 23:16:47 +0600 >>=20 >> > Am I missing something, or do you redefine a function and then expect = it to work like you never redefined it? >>=20 >> Unexpected: bug59593-yank just inserts the killed text. >> Expected: bug59593-yank intercepts and shows the killed text in echo >> area. > > You have redefined a subr.el function with cl-letf*, so how is what happe= ns > as result a bug in Emacs? Does the original subr.el function not do what > it's supposed to do, before you replace it? > > I understand you didn't expect the result of cl-letf*, and were surprised= by > what you saw, but I don't understand why you expect the Emacs development= to > do something about your surprise. > With subr.el (source), the bug59793-yank function overrides 'insert-for-yank' successfully. With subr.elc (compiled byte-code), the function can't override 'insert-for-yank'. Just try to replace the 'cl-letf' (not 'cl-letf*') form with an 'error' call, bug59793-yank still just inserts text, which is, obviously, unexpected. >> > So I'm still confused... >>=20 >> Is it clear now? (Somehow, I think, no.) > > See above: I understand what you are saying, but not why this is submitted > as a bug to the Emacs development team. Both source and compiled Emacs Lisp code should show the same behavior, except performance. But 'subr.el' and 'subr.elc' show different behaviors. Isn't this a byte-compiler bug? =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOMggEACgkQVTX89U2I YWuMaQ//RL1lJZ7sZIEjtfgeNLLJwdLC15s66czi/AIS6ESrcJ/wZBUW+A0HJC3R s+PjIeykYGRqVASNVUL6cz8HCsEDZBbJTZGUe+xFuBUpgn1DrmJBuGWK/Jb/fQqO OoNTY+2QSflk7Ix8RvNoEi4flKv6G1nQOiCk+I0SH6+qyXAW7lJpRvKMJPsA3gmB 4QBMzTO5GOsTRb88HqgdZA66u5llsUdl2zc0blszU2Eq/GS419HGSrtsOJF1XEaL d2W+UeP5V8RVEgZsaHN4AP5foyUSxDsE89qF3Jrw0TR/ZgdZkVdCAYT+U+vmQLS+ yI8x6H8+L1ta+n9eOHMqlvdpthNkp8fsMrBusinAeF+JviFX4/+bmzBkep3373M2 NC2yxWabS/ZsvJlLTGRBx4614LA2thvu1YeRok//r8y48Y73k67etjuu6+5ta+wz 2dQGSq9p+YUEe1dQpBWDlsm+9VS5RHWdPkjbWB24/oUwWic61MEuDhG/4zaKZovd QqvzBDwoaGEtv4+Je51Z+5gu7Q3CoPo3IIqQJZZKhkWffnnAlZT6E0ESdO5IjI1P lGkVj5gklQLlvMDbkJcNo9HaqIrCJEu7YK5Mv/L4kemybeD66uAUqqJ4rTWS3aue pAr7KALnki6JIi5s9Lh51vX671pcvnqVBC9aKPAB1KLvW+zlKPQ= =8Knm -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 11:16:19 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 16:16:19 +0000 Received: from localhost ([127.0.0.1]:58469 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1rf8-0001Qf-Ve for submit@debbugs.gnu.org; Sun, 04 Dec 2022 11:16:19 -0500 Received: from knopi.disroot.org ([178.21.23.139]:53508) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1rf7-0001QZ-4A for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 11:16:17 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 72D7641595; Sun, 4 Dec 2022 17:16:16 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DG1etehBJ_ai; Sun, 4 Dec 2022 17:16:15 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670170575; bh=axTMY72FuXT1ZXhkAvb94HhqIq0ryINRMnlnfr+UQlE=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=XDZAF/dDQzqVURCpSe4Dzcq5+pWOTcKQAt3jwhk6Vky1C9X5mtIuO+rTiRsvGjgdQ /t6Q3vYH0wBORT3tzuS/7FBAhiDhKZ4uMzw25jPYwX0hDKVDLYKjPKmz+qVfRYKr67 AiE4iezStBonQedCjI/39XPQ5oMtVMqkMoF3ES/IMi/j+Ynsf0B84x2dgB2MYgUVIE aEQbkK59mtWXnFGpxnmZ2EB2zWNmiffzIqDpkE+uVDWlRbPeZAmyH72CbTfSrX5YxH hFJcjQdns4PV8t3kvf8O88tRAMS3atf5rP+LuXKfiXQncvsFjkr76KlJKUG1zX3caU f5LTPfxNfCR8g== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <831qpfd4t8.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 04 Dec 2022 09:08:19 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> Date: Sun, 04 Dec 2022 17:21:28 +0600 Message-ID: <87v8mr1kjr.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 1.1 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Eli Zaretskii writes: >> From: Feng Shu >> Cc: Akib Azmain Turja , 59793@debbugs.gnu.org >> Date: Sun, 04 Dec 2022 05:49:06 +0800 >> >> > You have redefined a subr.el function with cl-le [...] Content analysis details: (1.1 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 1.1 DATE_IN_PAST_03_06 Date: is 3 to 6 hours before Received: date -0.0 SPF_PASS SPF: sender matches SPF record X-Debbugs-Envelope-To: 59793 Cc: Feng Shu , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.1 (/) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: >> From: Feng Shu >> Cc: Akib Azmain Turja , 59793@debbugs.gnu.org >> Date: Sun, 04 Dec 2022 05:49:06 +0800 >>=20 >> > You have redefined a subr.el function with cl-letf*, so how is what ha= ppens >> > as result a bug in Emacs? Does the original subr.el function not do w= hat >> > it's supposed to do, before you replace it? >> > >> > I understand you didn't expect the result of cl-letf*, and were surpri= sed by >> > what you saw, but I don't understand why you expect the Emacs developm= ent to >> > do something about your surprise. >>=20 >> I think the issue is that:=20 >> when I run emacs-29 first, I can not temp override `insert' function >> in `insert-for-yank-1' with the help of cl-letf in bug59593-yank >>=20 >> (require 'cl-lib) >> (defun bug59593-yank (&optional arg) >> (interactive "*P") >> (cl-letf* ((inhibit-read-only t) >> (insert-for-yank (symbol-function #'insert-for-yank)) >> ((symbol-function #'insert-for-yank) >> (lambda (&rest args) >> (cl-letf (((symbol-function #'insert) >> (lambda (&rest args) >> (message >> "%S" >> (mapconcat (lambda (arg) >> (if (stringp arg) >> arg >> (string arg))) >> args ""))))) >> (apply insert-for-yank args))))) >> (yank arg))) >>=20 >>=20 >> but after I run (load "subr.el"), overriding `insert' success. >> if I run (load "subr.elc"), overriding do not success. >>=20 >> so I think subr.elc maybe has some problem. > > No, I see no problem in subr.elc here. Did you the subr.elc attached in the first message? Note that my subr.elc works good, but using the subr.elc attached in the first message shows the problem. > > You need to find a different way of overriding what insert-for-yank does. Why? And any suggestion how? =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOMgrgACgkQVTX89U2I YWt47A//e7GYoh8kYlgroPCWFDW1EVdkeuvOAuJ4oobiSGgjUtBZOTewDfBL1dcy h7mTJzuYLM5w9BVObgYuJEux/zZF9EF3VPyLHiWI7KvRCB/w73Ru8FHDwAeyTSLp eXIgHts13W7ENkLHrVTW9d/AUzBmD+ejQnLPlnUiPioGVo/Nmysh6IWMYOUOJkhO dRO1/3TRrdO7yGVmiiKWTyUvT1ETbpuc70XCxMJTUrn/7coEDkddVLcN0Z2/Bquz zZFDqxQzzKAnq11y/VtM6AHe2sSFwdmo1k7tU1vhLWJdYp0XosLCw5V5xkhdl5oF gIIhTmuZbruG7cMXjQm27tMfWR0FB8RwSSbZAZMTF7Z6BuDLmakgTK2RJNVECPYv 5afLqBRKQijpNYSIjSPDkA9qPHIA5yE+UShARdCCtiCMuO28pQXN8JRv+RQjh3al ybLtxuF2IIShWdBDGDQTeoIROHGDoSUUWKdDiVB/nQB5ttTleQO0QdePBZ3uNoc4 Pzf1PdyVPnC0Sn1uVAC1UdjEMbD5Pj9UP3FtU7v9GQpISvlrlJe5FiVEyAj5a45k Wg8olPhuJtfJVlHo81sdKasBWeC8POz9+KngKGQNt7pJlfZJn3rt2Ge+DN+qGvop N1HNVklkzRsmNLevICqf9v9QQ7kFHhd29FwXidDWotJv7GafoOU= =/bwi -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 12:00:37 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 17:00:37 +0000 Received: from localhost ([127.0.0.1]:58683 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1sLz-0004F2-Fe for submit@debbugs.gnu.org; Sun, 04 Dec 2022 12:00:36 -0500 Received: from eggs.gnu.org ([209.51.188.92]:39054) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1sLu-0004Et-S1 for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 12:00:34 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1sLn-00065A-5D; Sun, 04 Dec 2022 12:00:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=6YpxdPAcjbceRX4g7kl+pnGmRbJm3olz1YtEBByfxTs=; b=Uwfb52JFItjY l7sTq46pf/cGNqAjb3hdQd30onPGy7wci7aIOFION0iuzGgmlRKvkq3NDA+IGkL0NC1ABtFJXZobf 7gG6O46MLrNUILPl3JotdntsdHPhLohCdE97r8p6UHzo8R+JQkku4b1bBsqBOouzI2PQ5J+kX7a6n R2PLEjtXADD+GDtDJtgNW+s7hz0QZTUFqU79XlwohBhndIurd6VYx/lzw+LMtRzMO2RUqR4KLU54I 7BKEDTRrRon1Cn6OZhts/jvnc/fzWv49NRqNNRsO+faKboWKMqWUD0EBDMrahqzCdNPKtvGe7X/CD S3eV3edwrGeYLlYH+ZO0SA==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1sLm-0002Ov-DM; Sun, 04 Dec 2022 12:00:22 -0500 Date: Sun, 04 Dec 2022 19:00:02 +0200 Message-Id: <83o7sj9ka5.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87zgc31kov.fsf@disroot.org> (message from Akib Azmain Turja on Sun, 04 Dec 2022 17:18:24 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87zgc31kov.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: tumashu@163.com, 59793@debbugs.gnu.org > Date: Sun, 04 Dec 2022 17:18:24 +0600 > > > I understand you didn't expect the result of cl-letf*, and were surprised by > > what you saw, but I don't understand why you expect the Emacs development to > > do something about your surprise. > > > > With subr.el (source), the bug59793-yank function overrides > 'insert-for-yank' successfully. > > With subr.elc (compiled byte-code), the function can't override > 'insert-for-yank'. Just try to replace the 'cl-letf' (not 'cl-letf*') > form with an 'error' call, bug59793-yank still just inserts text, which > is, obviously, unexpected. Yes, I understand. > > See above: I understand what you are saying, but not why this is submitted > > as a bug to the Emacs development team. > > Both source and compiled Emacs Lisp code should show the same behavior, > except performance. No, not when you replace the function's definition with the likes of cl-letf. > But 'subr.el' and 'subr.elc' show different behaviors. Isn't this a > byte-compiler bug? No. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 12:02:20 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 17:02:20 +0000 Received: from localhost ([127.0.0.1]:58700 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1sNg-0004Gb-FO for submit@debbugs.gnu.org; Sun, 04 Dec 2022 12:02:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:58574) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1sNe-0004GP-SZ for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 12:02:19 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1sNZ-0006Pt-Ml; Sun, 04 Dec 2022 12:02:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=zyQ+uCzAnQ5pWY0vLS+2sY4Rvv/Wkp7S8GkCnd4mNkA=; b=KXvuW6go8kit 4WeYKRIJxNNvuLW+Vo6T04ryAfkVOHmfQ6e6/HhjzPVGtZRv6Sgqk6pnOuWj/uyvHqP8YKoNMn3CT hLowyuppFLfW7iQANRBMxff+jFw7690b7DukBZdz+L7yUSrEjDAGCLKJ0PG4lvyDJo8LX6++t7gtC iSdi6QefEKpIjdJY9FM7K/3MCTE3sYCquBcEG3e6XeM7HxW/ZNY8eFjdMD2KJFeO9mpuc2SmEvAEm paaj45MtcnFxgKma3onCDHFkj3vgmmY2cUePLeowiHNDykw1+vjUKH5tOQjKuQHRaeB9XRL8KHpwV GYwCzdk6UDyOttj9SMyt4w==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1sNZ-0000gl-2Z; Sun, 04 Dec 2022 12:02:13 -0500 Date: Sun, 04 Dec 2022 19:01:55 +0200 Message-Id: <83mt839k70.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87v8mr1kjr.fsf@disroot.org> (message from Akib Azmain Turja on Sun, 04 Dec 2022 17:21:28 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: Feng Shu , 59793@debbugs.gnu.org > Date: Sun, 04 Dec 2022 17:21:28 +0600 > > > You need to find a different way of overriding what insert-for-yank does. > > Why? And any suggestion how? The why is "because what you tried doesn't work." As to how, I'd need to know more about the problem you are trying to solve, and why you've selected such a strange way of solving it. Surely programming for Emacs doesn't require replacing the definitions of standard functions. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 12:25:41 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 17:25:41 +0000 Received: from localhost ([127.0.0.1]:58809 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1skH-0006mN-7p for submit@debbugs.gnu.org; Sun, 04 Dec 2022 12:25:41 -0500 Received: from kamnitnik.top ([209.250.245.214]:33532) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1skC-0006mF-3T for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 12:25:40 -0500 From: miha@kamnitnik.top DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kamnitnik.top; s=mail; t=1670174734; bh=moaQrdQchBHedftBtf3/4pABRxwRZLc2mLaWcB7yfIw=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=sx4wh8FfvST9ydMUlyLaBelD5AlPXDXtehzUUSoycVHeXDCetD5mRY6TofgOUyJrn j+2EpCdavgCaVt75dIL8KrfOK5BudBiwF7PO+g9jF0MgGlpIdFsr6ZamSdClOva5nH PSoC1+cgM13ZGzeiD/Nj3mCCo+tkeW7FqKWoFKuw4lKujvc/inN00nwaVJIYL/t5/s ohomKUSdR85xnC4aYRxorwAb+YSAHdBHMoaCMUjN4a5fNasKMfPmiTHJHnPC5jow9z yLoaxZXKnuIqklaYyCdTSGwhHTkQHzrMBXZMecwbU7FKlKO72ZO8e6TDSje+wZDt26 KLPlFdUeOnhmw== To: Akib Azmain Turja , Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87zgc31kov.fsf@disroot.org> References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87zgc31kov.fsf@disroot.org> Date: Sun, 04 Dec 2022 18:27:07 +0100 Message-ID: <87iliraxlg.fsf@miha-pc> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 2.0 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Akib Azmain Turja via "Bug reports for GNU Emacs, the Swiss army knife of text editors" writes: > Both source and compiled Emacs Lisp code should show the same behavior, > except performance. But 'subr.el' and 'subr.elc' show different > behaviors. Isn't this a byte-compiler bug? Content analysis details: (2.0 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.0 PDS_OTHER_BAD_TLD Untrustworthy TLDs [URI: kamnitnik.top (top)] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FROM_SUSPICIOUS_NTLD From abused NTLD X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.0 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Akib Azmain Turja via "Bug reports for GNU Emacs, the Swiss army knife of text editors" writes: > Both source and compiled Emacs Lisp code should show the same behavior, > except performance. But 'subr.el' and 'subr.elc' show different > behaviors. Isn't this a byte-compiler bug? Content analysis details: (2.0 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.0 PDS_OTHER_BAD_TLD Untrustworthy TLDs [URI: kamnitnik.top (top)] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 1.0 BULK_RE_SUSP_NTLD Precedence bulk and RE: from a suspicious TLD 0.0 FROM_SUSPICIOUS_NTLD From abused NTLD -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Akib Azmain Turja via "Bug reports for GNU Emacs, the Swiss army knife of text editors" writes: > Both source and compiled Emacs Lisp code should show the same behavior, > except performance. But 'subr.el' and 'subr.elc' show different > behaviors. Isn't this a byte-compiler bug? In Emacs 29.0.50, I checked M-x disassemble RET insert-for-yank-1 RET and it looks like it uses an 'insert' bytcode operation instead of funcalling the 'insert' function. I think this is what prevents overriding of 'insert' from working on byte-compiled code, as explained in '(elisp) Advice and Byte Code'. > --=20 > Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 > Fediverse: akib@hostux.social > Codeberg: akib > emailselfdefense.fsf.org | "Nothing can be secure without encryption." Best regards. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJHBAEBCAAxFiEEmxVnesoT5rQXvVXnswkaGpIVmT8FAmOM2GsTHG1paGFAa2Ft bml0bmlrLnRvcAAKCRCzCRoakhWZP/BAEACY+a53ObpOVlx6yjOVaHdKqo38uCnO qDvN5jPgb9kvcjq4J7tezzK/ep+wHnoPBCaJeahtdiLAM0xtJgGsQ133q+NADN0U MzVh9KxQ9aFYOuOxKZIIU3UGooQueuCBAL7GIuRzwDVyzCGJnthYcxWt22nNpE1o SYKbs6ggSJVtD/u8GcWkqSKBHX89eN8jYRv5qz8+d0wB1Ubmil+VgwaJO/+NiO0f ylY2iIOfcWHCC42nkd1N0nPZPzz0xNOYolTjGZ0JLKMsZfZObXp4H8j38wEg/Unn F8qtGNO3KCe+GrufQPd/nfBCbxQmn6XLzITa1KpY6i/K0JsgcA18dH1Xf6p1+WzW eQ1QQeramtSGXDvLzFEA+TY7ZBEqqDvG7z80j/ojGuc3zfaPfbzjkZX6DipGGU5r VEkuxWu5NPWXqew0X7gk3BcHvo7YxqzjEV3KdcXXnOYPfOIDPxKD/RBF3qPwM/8+ nU9uVq+BBLEDqnk2/HNKRfVybAWq4q7qT9/3zLpmWQmjR7N02UfJudlRZp7gKd2a fgYPtD9dKa4rUZ8nmDU/hn6o3ialVKFtwVRqpkwS7XIBxZick1lE4EuxsY8gLovt Q+fV1l2k8Fx6ExBkRjaIsmXsOwHlwqdKu6YaBlMA8Umoq88UoFV3vAfwiUP88Q0U TuB3LNQ1c1T7fQ== =N8L0 -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 12:35:52 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 17:35:52 +0000 Received: from localhost ([127.0.0.1]:58858 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1su7-0006tG-ME for submit@debbugs.gnu.org; Sun, 04 Dec 2022 12:35:52 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57904) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1su2-0006t6-PM for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 12:35:51 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1stt-00082T-NR; Sun, 04 Dec 2022 12:35:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=RlzUb6vL2aaxOuUTjNwS3RIsSiGDyxjOcb0qySwqtsM=; b=qu6aZVv2bg6K b77jYSKxWAj2ro0Eh1hvgkTQO4t2V//42HB/6vw1+YcFhyDNLGQWRoUXTnGYOwSOhk7DyjwdUvN4n 4kiYNGq2DOvh1MXFpFXEWqWG3KlYf984z6i/d6swnixOUOWq7wtUFpK8VE2NFrCpzo+GJxD7moHCB 3Oy1raY6qNo2IOcIVvHpA1vaeEAaS3iJPqFgchQyYtZPTp2ydFYK669IhVbuZ2W3VYvOX7XNkgBe7 JgNI/q7dt5xvb3QHxdO6UTrEOm5Zburk6Cygjm4X/edMv5W3BU1wBX9LrX7J/UoNJ6pk+DYCSLZrs /NZwhr/bRABgypSJ3m4NiA==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1stt-0005gU-6I; Sun, 04 Dec 2022 12:35:37 -0500 Date: Sun, 04 Dec 2022 19:35:17 +0200 Message-Id: <83k0379ine.fsf@gnu.org> From: Eli Zaretskii To: miha@kamnitnik.top In-Reply-To: <87iliraxlg.fsf@miha-pc> Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87zgc31kov.fsf@disroot.org> <87iliraxlg.fsf@miha-pc> X-Spam-Score: -0.3 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, akib@disroot.org, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.3 (-) > From: miha@kamnitnik.top > Cc: tumashu@163.com, 59793@debbugs.gnu.org > Date: Sun, 04 Dec 2022 18:27:07 +0100 > > In Emacs 29.0.50, I checked M-x disassemble RET insert-for-yank-1 RET > and it looks like it uses an 'insert' bytcode operation instead of > funcalling the 'insert' function. I think this is what prevents > overriding of 'insert' from working on byte-compiled code, as explained > in '(elisp) Advice and Byte Code'. Of course! And the same can happen with other function calls that the byte compiler converts into bytecode operations. That is why this technique is unreliable and shouldn't be used. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 14:01:28 2022 Received: (at submit) by debbugs.gnu.org; 4 Dec 2022 19:01:28 +0000 Received: from localhost ([127.0.0.1]:59214 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uEx-0007hP-Kg for submit@debbugs.gnu.org; Sun, 04 Dec 2022 14:01:28 -0500 Received: from lists.gnu.org ([209.51.188.17]:52576) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uEt-0007h3-Q9 for submit@debbugs.gnu.org; Sun, 04 Dec 2022 14:01:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1uEt-0000OZ-Hv for bug-gnu-emacs@gnu.org; Sun, 04 Dec 2022 14:01:23 -0500 Received: from knopi.disroot.org ([178.21.23.139]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1uEs-0007UY-2y; Sun, 04 Dec 2022 14:01:23 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 5152B41150; Sun, 4 Dec 2022 20:01:19 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BnoQ6W3Fibhh; Sun, 4 Dec 2022 20:01:17 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670180477; bh=38d4eba6M55/N21x4sJnZU/OWz8Mmix01tG+uI4LWoY=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=VwptPh0Z+LEJjXEzgapUexy2sJyaJEXgs5r9O3Py50urrT2zI5Vfu/XUpNi6bP9Hd Zq/SsTZcdVyvSH7eL2bFMRWI7fixigY7ItQ5tuEG8arUwGVvKYCLIBeXBfFMdWUYG5 GPOND27YxmX351vJ6Edy47CkZ0flRtlEzc+u8Xi9rO5DIYwyL40XG5OwAv3WJaBG82 KuB9qljNJdTgibUyMtsyXRA3R/ZhVWMQLWSDlBJO0QEglCgQGGJXGQP8B9MgEwrF4Q aY5wg5fxA8knwri40P5lu8uQQwKNV93VBVmXCKd/R++e2o6FmhqPbtS3TahNDnYNO6 /eDTGB4/5jQNA== To: miha--- via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87iliraxlg.fsf@miha-pc> (miha's message of "Sun, 04 Dec 2022 18:27:07 +0100") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87zgc31kov.fsf@disroot.org> <87iliraxlg.fsf@miha-pc> Date: Mon, 05 Dec 2022 00:52:49 +0600 Message-ID: <87sfhvypa6.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Received-SPF: pass client-ip=178.21.23.139; envelope-from=akib@disroot.org; helo=knopi.disroot.org X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit Cc: tumashu@163.com, Eli Zaretskii , 59793@debbugs.gnu.org, miha@kamnitnik.top X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable miha--- via "Bug reports for GNU Emacs, the Swiss army knife of text editors" writes: > Akib Azmain Turja via "Bug reports for GNU Emacs, the Swiss army knife > of text editors" writes: > >> Both source and compiled Emacs Lisp code should show the same behavior, >> except performance. But 'subr.el' and 'subr.elc' show different >> behaviors. Isn't this a byte-compiler bug? > > In Emacs 29.0.50, I checked M-x disassemble RET insert-for-yank-1 RET > and it looks like it uses an 'insert' bytcode operation instead of > funcalling the 'insert' function. I think this is what prevents > overriding of 'insert' from working on byte-compiled code, as explained > in '(elisp) Advice and Byte Code'. That might be the reason on some Emacs. But I have observed that 'insert-for-yank' isn't overridden at all with Feng's 'subr.elc' on my Emacs. 'insert-for-yank' doesn't have any opcode, does it? =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOM7IEACgkQVTX89U2I YWtJRQ//bSArSj73bwigvSmyb5E8Sn2zQOXNBZLrrURMVIWvK2eyH3YnqW32XhRA rvNS2mAs4bWMugKaX4znogA4vVL908FsS30VLX3E0vBi7Sw8UNXIoNS6Fy+zXjEL +EetBhd1utawqX15kZhhe4SnH/4KUatBfO/W1GgeI9ZrY8rTN/Lgnxapgvf2sCR2 j6oSobSdrEZzMlslX9Z9TPBuVX4rpTOZWRT8WCAg3tOJExvqqavoKBjuWgGpLk8C PQoKJRe88hPS3p6Bh8IDaoV4R2lqf/OWCMyiEgWn4pYAYePFrbutRDkc/lykB+4r 5bJihjrY19zZbrE94VXprIBourRnfoblEAB8qXecnSos8s2pb3r1wVA9eB1/L1JH uigUZ3ByWFZc8by6BPb96cS7YoHTfjNZeG2w+gbKMhvrtqXm0fcuFeFsIx/qgPdX ROUBM5d9aA+LZPyBZLVj/QspsB27St7RKyLsnSQoy0XS8gduSrqENHpak0oMhKcj tUDvNt/xB90mdpsVBCqEzhbRpmv6skOYIEFwUXb6jmp5DIgdcg6uZExDP5mKOEHF Uhqnp3agx0JvVb/Y4k8hmnaN5m9PaATR9c2DDDBy5jTJ9C9xdxsms+/kl0e4zZXT GEw+vLHJZzkjnCxeveGMwMOHzgiQ61xaSIH4l/cBlxdEjcQ0SLM= =pbHG -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 14:01:30 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 19:01:30 +0000 Received: from localhost ([127.0.0.1]:59216 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uF0-0007hZ-7q for submit@debbugs.gnu.org; Sun, 04 Dec 2022 14:01:30 -0500 Received: from knopi.disroot.org ([178.21.23.139]:53022) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uEu-0007h4-TL for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 14:01:27 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 598F7444AB; Sun, 4 Dec 2022 20:01:24 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id L0plvzp2x0s6; Sun, 4 Dec 2022 20:01:23 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670180483; bh=m0h2sFgGm7qHA7iT+5VMh/euoZ4TS6v+Ofm0puV6iA4=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=NneBFWp2J/2zlaPGCvb6znmfasLOij4Nr6DhbmXxJj1F4rUH/K1Zuo76eSTby6k6x elN2HHHaiWzC5/827glfZUvClXvI7fwCffUC2FqSjCaFEQUKugHOu0uyzp/kKY7Zcj BQ9DvzQbh9wdzFVQ50iLHYcmm/dyUeMINNPbhNGWBWyDa8N2zROOstPl9BTfRLL9AO ZvDSCcVSD2V/R42boKzavwYzRIE3dJTkYV19b6gSwklhljDF/YFjBik+sehsjLOrTk V33DW2/lq2P7uvr7EZn+1HQYLCDPL6/x/rqG6MniSO954wdXmAEpYdKIX1Ysp7lFBV Yfj7xi0RvKGIg== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <83mt839k70.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 04 Dec 2022 19:01:55 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> Date: Mon, 05 Dec 2022 00:56:16 +0600 Message-ID: <87o7sjyp4f.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: Feng Shu , 59793@debbugs.gnu.org >> Date: Sun, 04 Dec 2022 17:21:28 +0600 >>=20 >> > You need to find a different way of overriding what insert-for-yank do= es. >>=20 >> Why? And any suggestion how? > > The why is "because what you tried doesn't work." As to how, I'd need to > know more about the problem you are trying to solve, and why you've selec= ted > such a strange way of solving it. Surely programming for Emacs doesn't > require replacing the definitions of standard functions. I'm trying a make 'eat-yank' (a command in Eat package) to be as much identical as to 'yank' as possible. That hack allows to avoid overriding the whole 'yank' logic. =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOM7VAACgkQVTX89U2I YWuyMg//ZU2qxdBO1hoHEa6KmE/wJh4cvHKz2o4JkcWw9+IOmwiMT+pq8qavpVjV 1nUBayXgsQygSZk1FEB/crJ8m3wBxfy6/3J4lRmBO08d4/fJtRDbQ34Ddj7vcs+j /Ol+8oealCy8zkOc6TGTAz1ul1ztTSRlZ8EyiyQRmMd7tYkkYxz0qsaLbotBjAfQ 3qHy2HdohinE3jzPY7truv7M+yWr5qVzsk4lPCD+Xm/QIsfFj2a1bz6UzTLCM/Ji 4iwbrlUcOM9TgQHkjZSDe/VKKsoSrbkM2bn+KVgqb4GEcf8dq+izyAGErhkhuogE NEVTlZCGLO7PMxBXQuso+9KqnRvOTdz1LBFZvl9w01MlzIws9PpYnwho4KBBjB7I 551EaIYNzbLX4hVTWnUblfF7utycUk1e9GM6taG94PUbMdZeZ7EGPlRPFaD4HLqf SNF8l5ae2HPsCOYo9Xm0m90bvYVpb/7uVciUtvbYLODLUhFt/g8JpElixEr8PQ9P pH8rIv4+TgevrZcysp3wXOP+XKv8lpB9qJzQvBiK0fUFGTrRdtQnXOP3gHVEEGul RBUPeCI+OUPrFXdWmY7wbopx8JELQk6Z32r3RzlIvPM6/qwSH/Jzpg9Leb1dwkaU E5h3WER0z8To/o5AiluC6h4jt0Ln3goI1frt/GsRNF5nq+wVD4A= =71y6 -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 14:18:07 2022 Received: (at 59793) by debbugs.gnu.org; 4 Dec 2022 19:18:07 +0000 Received: from localhost ([127.0.0.1]:59289 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uV5-0007pk-9p for submit@debbugs.gnu.org; Sun, 04 Dec 2022 14:18:07 -0500 Received: from eggs.gnu.org ([209.51.188.92]:52582) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1uV4-0007pN-1m for 59793@debbugs.gnu.org; Sun, 04 Dec 2022 14:18:06 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1uUy-0004WO-Qn; Sun, 04 Dec 2022 14:18:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=q64PgvuqQ5nbmRzuS/+q4fYzZR1dl2+la/2GE54FKxw=; b=lyYPQ92CB6YF CvYlLRlf3VRMJJlPU8lqcddCMEyhjI75XG5Bbh7V7r7HCBewf9r9VtzCC4VWySSlayJIDnpX793KU Xav6buPasix6FPbQAX3V54TEyZaWYVYJyYU4ZnSUnTYTcx1OOhrevhiqjjQvOuNarrYPRIwCBSFjf xDKI8cwoXxjZHZfH52FdBx3/uq6VQo5li8AMiHxJ+z2s6pUaNB8mCKu1bSjTpbMKT9VoFXyuA1uRi cQg/V5Cq42eF3iUv9wmQuLbYSzeYdLuIAW+fxTrBJVEhF42FofKFSpZGFNHhlwXh1NVEFY7FGxGRw lIgK3CFGD0Auj30IaFhX5Q==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p1uUy-00055y-8s; Sun, 04 Dec 2022 14:18:00 -0500 Date: Sun, 04 Dec 2022 21:17:42 +0200 Message-Id: <83bkoj9dwp.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87o7sjyp4f.fsf@disroot.org> (message from Akib Azmain Turja on Mon, 05 Dec 2022 00:56:16 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: tumashu@163.com, 59793@debbugs.gnu.org > Date: Mon, 05 Dec 2022 00:56:16 +0600 > > Eli Zaretskii writes: > > >> From: Akib Azmain Turja > >> Cc: Feng Shu , 59793@debbugs.gnu.org > >> Date: Sun, 04 Dec 2022 17:21:28 +0600 > >> > >> > You need to find a different way of overriding what insert-for-yank does. > >> > >> Why? And any suggestion how? > > > > The why is "because what you tried doesn't work." As to how, I'd need to > > know more about the problem you are trying to solve, and why you've selected > > such a strange way of solving it. Surely programming for Emacs doesn't > > require replacing the definitions of standard functions. > > I'm trying a make 'eat-yank' (a command in Eat package) to be as much > identical as to 'yank' as possible. That hack allows to avoid > overriding the whole 'yank' logic. You cannot rely on such kludges. The Emacs feature provided for doing stuff like this is add-function. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 09 05:45:50 2022 Received: (at 59793) by debbugs.gnu.org; 9 Dec 2022 10:45:50 +0000 Received: from localhost ([127.0.0.1]:35226 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3at4-0005wf-Go for submit@debbugs.gnu.org; Fri, 09 Dec 2022 05:45:50 -0500 Received: from knopi.disroot.org ([178.21.23.139]:35092) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3at0-0005wZ-4y for 59793@debbugs.gnu.org; Fri, 09 Dec 2022 05:45:49 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id A0ED040655; Fri, 9 Dec 2022 11:45:44 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id V6zlRlI9V-3p; Fri, 9 Dec 2022 11:45:43 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670582743; bh=4wLf7nXgF3s95H8w3nOeyMSl8p7RGV+PmdVkeF1RNJI=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=BoBDDpc4Vz30XZ3oR4eP7H7J/TneKwJ+FIlL0kEWU1S8JMkusPkIGgwRxDt87uuKO V55c5QuiihORailFUSv7WmlfcvSptFroObk7RHGABznq+O+o6k+WtuxAjlWSMft+Iu CgoNZVgGkD/AGpwwXLOeLS89Vyc1IElqBrDuJb8N4bxoRG8bi7TGvpH3rNw1lbmnLf Fx8DVgk3fKm/FJdS77Txk/w8GBx8OQxoL9yFUcnYq2+ctry7nsd3tJ8VckjRHNYCZA csp9Q/CbRBXpIEkDG3ijuCZn4JT3NU/YhmZRR48qhPJRLJ1FWxYDmDsUdTvT5CzhBy aMKXUtawN9VNw== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <83bkoj9dwp.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 04 Dec 2022 21:17:42 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> Date: Fri, 09 Dec 2022 16:44:36 +0600 Message-ID: <87sfhon9ez.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: [...] >> >> > You need to find a different way of overriding what insert-for-yank= does. >> >>=20 >> >> Why? And any suggestion how? >> > >> > The why is "because what you tried doesn't work." As to how, I'd need= to >> > know more about the problem you are trying to solve, and why you've se= lected >> > such a strange way of solving it. Surely programming for Emacs doesn't >> > require replacing the definitions of standard functions. >>=20 >> I'm trying a make 'eat-yank' (a command in Eat package) to be as much >> identical as to 'yank' as possible. That hack allows to avoid >> overriding the whole 'yank' logic. > > You cannot rely on such kludges. The Emacs feature provided for doing st= uff > like this is add-function. How about this: (with-temp-buffer (yank ARG) (buffer-string)) I guess this is OK, right? Or, A better idea would be: (with-temp-buffer (insert-for-yank (current-kill (cond ((listp ARG) 0) ((eq ARG '-) -2) (t (1- ARG))))) (buffer-string)) Right? But how can I copy 'yank-transform-functions' hook to the temporary buffer? =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOTEZQACgkQVTX89U2I YWsfORAAnnJ7+UKZSq3YRkzJSN1HeWaT7+24cJCoSrMDSPGdo73p9faF4GqtCOoz /JIIHgvgkWdziHGjG0R7wnF9bt9arjD/tuzJDS2rUREb+a1XFXXtwgmILUEPAX4k f+unff7+X1pM1zIQ/26Qp2pr+O1fxzvwzpg7XpcRmixDFUg8A1TJxCR+OUArmRUK JIXtEkJ+HGbElkC/5+dUwkkm9w7i1RMsUUIyBD4RV6HTptpvpVPCo9jzpFU4viWF wYOGEpWzZ4fGqMViLaBVmOfWUc1IJnX9Y3ihsOuQ1V25OZuzrPgSUYSAIOseT6YL Q2GVotanOemUH6ZImklMv/IAhobhX4IWwoRtzaVuR0kJOyrOY08IKmxgdY6Xx6/t Umo2jwkPhMI9bVgE652u57hn/SxiuXuWBHw6rSIbGsMOHOC6qnSFkBHAlbxJi5EH RIORqzmE8aISFmfU5WMDl3aoa12ANEdrc9X4JaFljwiVKQoRqKGhlA1+0N9MQ5AI ABLbbocpZXUKSCZGQRNbY8c2VO2YCLGCPk7xWP9EGe4KvTtsbInfJucMiCpcrdK6 YNWHUEtvpyex+uH3pIQC5fQ61qTgiWr2dL/LapFSeiegNyB5Z1tj3DEVRTpPsrQZ RtfzkoGC0kTC2Q/eDN3g7p1utn1GJX5A+XTGCc2mGXNOgQNwCHo= =Zqae -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 09 14:18:30 2022 Received: (at 59793) by debbugs.gnu.org; 9 Dec 2022 19:18:31 +0000 Received: from localhost ([127.0.0.1]:37930 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3itC-00026y-BT for submit@debbugs.gnu.org; Fri, 09 Dec 2022 14:18:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:39844) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3itA-00026r-Fw for 59793@debbugs.gnu.org; Fri, 09 Dec 2022 14:18:28 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p3it4-0001xn-Ii; Fri, 09 Dec 2022 14:18:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=yc72FipEnbTHr9wGLX8b+SP8maLpGMnSBJvwpg+WFF0=; b=o0NHYc83w24L ip0ac4fEReywMRCwIRSkzLH1dLuqMG+DnoSJw3s8is0ekVt6n0232+4eoehTzp5+d/anU/D6w/asE BnmcopfrdBNDUf8QJz8D1uwlyFhVqoQBy7wH1wYHkg0r+dO2E8Q0to9QMV0fRreQVkQSjQorFy4nV IBiTWEVIikNCc7jP12sdC4xQGaYWlcMw3xONtG+v5StiZG3h5hNfoesUC79Vk3RAcn0TT1awEhX6X YdvXVBjjPw4YfR4c41PKBk2eW0KqDr0KexO4AxdFZuv/ofjqTu2RvB0YlrDphsQLl/NzREs8ggrzn dS9mucdDbdJ1Ud0TvQOYDw==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p3isr-00040u-Vt; Fri, 09 Dec 2022 14:18:22 -0500 Date: Fri, 09 Dec 2022 21:18:04 +0200 Message-Id: <838rjgz8r7.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87sfhon9ez.fsf@disroot.org> (message from Akib Azmain Turja on Fri, 09 Dec 2022 16:44:36 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> <87sfhon9ez.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: tumashu@163.com, 59793@debbugs.gnu.org > Date: Fri, 09 Dec 2022 16:44:36 +0600 > > But how can I copy 'yank-transform-functions' hook to the temporary > buffer? By using add-hook, of course. But I feel that I don't understand the question, or am missing something, because you basically are asking how to assign to a variable the value of another variable, and what is the difficulty with that that needs such a question to be answered? From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 10 01:16:15 2022 Received: (at 59793) by debbugs.gnu.org; 10 Dec 2022 06:16:15 +0000 Received: from localhost ([127.0.0.1]:40846 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3t9j-0004PE-14 for submit@debbugs.gnu.org; Sat, 10 Dec 2022 01:16:15 -0500 Received: from knopi.disroot.org ([178.21.23.139]:54568) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3t9g-0004P8-Ma for 59793@debbugs.gnu.org; Sat, 10 Dec 2022 01:16:13 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 49C0341226; Sat, 10 Dec 2022 07:16:11 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WmPypHcigfTZ; Sat, 10 Dec 2022 07:16:10 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670652970; bh=MXGQxbsfMwyrMq9vAh81g1IL+LthzDGPCORTAwc/GdY=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=DHBcXgnFewCYr/rYtONsMJejD8YiA/Bm7mcyi+dmrZB88qJ4uIgzrbvxbb2VMDmb9 helZFXRRooGiGBEZnUOC5QPfgQ/6zSjQ8SOT4mamk0W0ZNSQSVqhhPV6Xy5lIdeX0i cG0tfCsEcb4DiqsuYXfnR/YDwKRV6PHxzflAPUnENIksst40M8nJScAOCfZQXDX8gy qdEAqiFITq1A+EOYVtoq6Gek2ifizXTgB4o2qcaE58k+4AZFLpgeulagxd9s1rws6q le+KX/+lF3mIDIe1a9g6ggNq3vCX1pcr/ND/+TnhA6APeaFEwfHGKi60yG4NVp3yLO m6PVOsgYupeCQ== To: Eli Zaretskii Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <838rjgz8r7.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 09 Dec 2022 21:18:04 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> <87sfhon9ez.fsf@disroot.org> <838rjgz8r7.fsf@gnu.org> Date: Sat, 10 Dec 2022 12:09:58 +0600 Message-ID: <87fsdnn615.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: tumashu@163.com, 59793@debbugs.gnu.org >> Date: Fri, 09 Dec 2022 16:44:36 +0600 >>=20 >> But how can I copy 'yank-transform-functions' hook to the temporary >> buffer? > > By using add-hook, of course. > > But I feel that I don't understand the question, or am missing > something, because you basically are asking how to assign to a > variable the value of another variable, and what is the difficulty > with that that needs such a question to be answered? Yes, you didn't understand. Hooks can have global and local function. I'm asking how to copy the local functions in 'yank-transform-functions' hook to the temporary buffer? (So that 'run-hook-wrapped' calls the same functions on both (original and temporary) buffers.) =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOUIrcACgkQVTX89U2I YWukCxAAxGq9JqMUPuwpL+ayWetGAmU+b0bGSlS/MhbdgiJC/2fwMMYs1ViAOpjD 6HuHvtfltVbwSCAYeyz4SKzNNIAE+YbFWR5omRwb9iQgkiQGaNMwnbqbcRFAr6SA Ff3Uj0rK5wktziYRBCL8JQlDu1RA5yWLCXLXufUxQFSDKAnW0qAIrvkyRB4/aMCA 3NHCkifA2JtCFZvwESiPpJ5WStbNr50D3yLipJA5xh95MYsh2NA+rzVxKzRM2Lp1 5e5L2g6nn5r3V1hqH7q4jfJV57spTRvS+aAzJ3iXhxKT5c/KL9vRR82d+rKMr6a5 6TWsNvcJsB1g6hqQYPN8iUWAb10JciDCTdQ9qKjgtszdS8ecQiEio2X5LTe6uDJ8 h8RvdbGOI1neecyUzLtroMoKtN0puSVEvvId1uBCWKi2JrDkj23Eyb4UD0wAAbxB Q77g7pCBtO+DF3A4SIHIvNX3OiuD39EQKOYJawduJPFQmkjKwlkG7/TEWujbh5Qr SoDtjUqqtp6mMUwT2mn43L/8LQollRLftsKh8XHjhY0dfYE/4eP0oLmRa6A+4tSC HnzxNGd28Tf8uxWIflJ1GgaehS0uG5WhUxI+5JaMiO1A1rTv7gTIF5Z/9jxaEvI7 ZkKq8+GTCif/mShjtgOYCeep0XygbylRILb0UkrDpbDzefzwppo= =L+Cb -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 10 02:32:33 2022 Received: (at 59793) by debbugs.gnu.org; 10 Dec 2022 07:32:33 +0000 Received: from localhost ([127.0.0.1]:41178 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3uLY-0005EL-SW for submit@debbugs.gnu.org; Sat, 10 Dec 2022 02:32:33 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:37866) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3uLX-0005EE-70 for 59793@debbugs.gnu.org; Sat, 10 Dec 2022 02:32:31 -0500 Received: by mail-pg1-f193.google.com with SMTP id v3so4998362pgh.4 for <59793@debbugs.gnu.org>; Fri, 09 Dec 2022 23:32:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ENH9Q6EZTNamuZLgxZpTk6bRVTI/sQRbIKnpkrjHRP0=; b=eVcYLxOXRk19h8geZ83Rtw05QFZzd/mJFmwjuYIUgSQJeevTM1k0W5yzdHkKfT718x 63+8r4COQwGhYQkVzyCi43Tr2kdhd9WifzMzpORcvL3JJkw827P8JOj5WaIjkUrxWWA/ QOikVOfrxA4J9h7V+vkLN8G6aIZW9+aQxXu1G2YG0vU+CdpmywnzYq58WJTBBPA58aZg D5Q1lyTdHV8SZZtPVrisATJcu++g2afCzJxJ0Zy8+l0YZTptXMWGjTPESTl6d+M0ekgd SerJvPVEmlsaVbtFazKuYgTYbcWqmR1IHrFxPmXDn2+KoejRxxxfvfgUAl8e925XCEoY Wv4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ENH9Q6EZTNamuZLgxZpTk6bRVTI/sQRbIKnpkrjHRP0=; b=sNMdUWb6/6Pzo2e5JK3njbeJYmhR6DVAdIphYAaxeml/Jdnz/IWKIGnY5JzYwvkMeJ Lm02TAHNyC6ITDqTJxM/0vN0++RgeAPQ+C/sX+TCtb10Q3KYxZdQEhNDBak6KCqYvUYA nRPcW32GWk8TLs5AntO+LdWkF8nqokxANjpz75Lpe0H2KnApHhS+Utkw0AYHFbGaARXG T8+Uf8Hol6JMAb5mGaElGFczpF9szOA3Fks6wdRSwUvCpN+c2KyCzE/z3S2owRxyPMWc naffzTgYX1gHlQISRF15cyOXPNCv+ATtk27VxNvC6GQ2JbaSWk3nXflpbD1//YWSDEVo OBiA== X-Gm-Message-State: ANoB5plo2mfHkN/39wT+Y4i8WcbjSlLeA8/VVCQepOk+bitBbZevd0P3 B/piZIlvBDcJwWogwxcixf4= X-Google-Smtp-Source: AA0mqf7rd1kGa4pgcMYXSyjOWGLxc+zhmSsuFfsWT32RRgHqHrT067oTsSMRT8a9SIY2Bz3i18lkCg== X-Received: by 2002:aa7:804a:0:b0:566:94d0:8c83 with SMTP id y10-20020aa7804a000000b0056694d08c83mr8148317pfm.7.1670657545057; Fri, 09 Dec 2022 23:32:25 -0800 (PST) Received: from localhost ([49.204.138.150]) by smtp.gmail.com with ESMTPSA id c29-20020a056a00009d00b0056da073b2b7sm2211332pfj.210.2022.12.09.23.32.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Dec 2022 23:32:24 -0800 (PST) From: Visuwesh To: Akib Azmain Turja Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87sfhon9ez.fsf@disroot.org> (Akib Azmain Turja via's message of "Fri, 09 Dec 2022 16:44:36 +0600") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> <87sfhon9ez.fsf@disroot.org> Date: Sat, 10 Dec 2022 13:02:16 +0530 Message-ID: <87cz8r3e9r.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, Eli Zaretskii , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) [=E0=AE=B5=E0=AF=86=E0=AE=B3=E0=AF=8D=E0=AE=B3=E0=AE=BF =E0=AE=9F=E0=AE=BF= =E0=AE=9A=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 09, 2022] Akib Azmai= n Turja via "Bug reports for GNU Emacs, the Swiss army knife of text editor= s" wrote: > But how can I copy 'yank-transform-functions' hook to the temporary > buffer? I think you can do, (setq-local yank-transform-functions=20 (buffer-local-value 'yank-transform-functions ORIG-BUFFER)) From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 10 03:26:39 2022 Received: (at 59793) by debbugs.gnu.org; 10 Dec 2022 08:26:39 +0000 Received: from localhost ([127.0.0.1]:41420 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3vBv-0005nh-DE for submit@debbugs.gnu.org; Sat, 10 Dec 2022 03:26:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36196) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3vBq-0005nW-IX for 59793@debbugs.gnu.org; Sat, 10 Dec 2022 03:26:38 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p3vBj-0000Nb-Oo; Sat, 10 Dec 2022 03:26:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=IzALAaN11GOttNHLqLOOP0EIN+HeBTenOEE1mfS6tMs=; b=OmEnwgV8TgHQ MoFeSU7cqMLompcqoQPyrISItkYz+BeJsXvDl3nYtR2D3O0w883tdNihN5W6EPWxiMrj3BTGN/MC2 8q83StSH4cl1c+ua01YlzETr6Xgx+NV5kKGHZu/KU9/9cTCrMc6nYSxG0xsJjLM0JOaZej2tYzp6U zcAf4cFxIjSvX1oYk73WdLBspjJ8EKtLZe8M85BjWYkvknl2uLihdJ6ahSuKbp2+J+9MtOt7Lp2S8 ywaizi6q59QSQuRIKZEu+45uO8WZQFvBab1kr+hWjdWxoQrs8B2eSqS7MXxAcizqRdKYYyjoxjapp XV8/+GwKdOXBfmioVcagYg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p3vBj-0000kB-3Y; Sat, 10 Dec 2022 03:26:27 -0500 Date: Sat, 10 Dec 2022 10:26:23 +0200 Message-Id: <83ilijy89c.fsf@gnu.org> From: Eli Zaretskii To: Akib Azmain Turja In-Reply-To: <87fsdnn615.fsf@disroot.org> (message from Akib Azmain Turja on Sat, 10 Dec 2022 12:09:58 +0600) Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> <87sfhon9ez.fsf@disroot.org> <838rjgz8r7.fsf@gnu.org> <87fsdnn615.fsf@disroot.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Akib Azmain Turja > Cc: tumashu@163.com, 59793@debbugs.gnu.org > Date: Sat, 10 Dec 2022 12:09:58 +0600 > > Hooks can have global and local function. I'm asking how to copy the > local functions in 'yank-transform-functions' hook to the temporary > buffer? (So that 'run-hook-wrapped' calls the same functions on both > (original and temporary) buffers.) Isn't the local value of the hook accessible via buffer-local-value? And setting that to be the local hook in the temporary buffer should be achievable by calling add-hook with the 4th argument non-nil. Or what else am I missing? From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 10 03:42:35 2022 Received: (at 59793) by debbugs.gnu.org; 10 Dec 2022 08:42:35 +0000 Received: from localhost ([127.0.0.1]:41495 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3vRL-00061p-Fi for submit@debbugs.gnu.org; Sat, 10 Dec 2022 03:42:35 -0500 Received: from knopi.disroot.org ([178.21.23.139]:34446) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p3vRI-00061f-Hk for 59793@debbugs.gnu.org; Sat, 10 Dec 2022 03:42:33 -0500 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 3FA1C4122D; Sat, 10 Dec 2022 09:42:31 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pn2lDdUUf2Ml; Sat, 10 Dec 2022 09:42:30 +0100 (CET) From: Akib Azmain Turja DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1670661750; bh=oHKNwDqv0SW67nLeCwU13WBJr9ZyF520dRLfb+d5C78=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=EQ7DA/9gUkapLUQEK1Dq7h8PHC4gUQhU4yO89IqCYrrKD1RRBu5mL3I5rUQQ89xJN A/KjyOn+xFKISiXHQTyN/N0v66/8Jfbcj6fhHJMquNxovWEfv2LXZ0bKlDvD9lla0F 90e+RC15lZxyTkaV6VQOVTOVk9mKpis4XaAevNPso3xY4PncpsJOUZtx33j8VimwfC fLHjbcirFnqdtbTmLGqOGXFFrcxVK7ECKg/6YD5fuCy8eEdT+1iOK+KsPzha1yR/D6 KWtB66bOJ3aPNApPLBLJpLhRU2DnhnW6Y5toTk+sgAlEzmpYOTYK2vLfotQRKC9Cnb lvVDq8DeSmu1Q== To: Visuwesh Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly In-Reply-To: <87cz8r3e9r.fsf@gmail.com> (Visuwesh's message of "Sat, 10 Dec 2022 13:02:16 +0530") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87v8ms6tv1.fsf@163.com> <831qpfd4t8.fsf@gnu.org> <87v8mr1kjr.fsf@disroot.org> <83mt839k70.fsf@gnu.org> <87o7sjyp4f.fsf@disroot.org> <83bkoj9dwp.fsf@gnu.org> <87sfhon9ez.fsf@disroot.org> <87cz8r3e9r.fsf@gmail.com> Date: Sat, 10 Dec 2022 14:30:50 +0600 Message-ID: <878rjfmzid.fsf@disroot.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, Eli Zaretskii , 59793@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Visuwesh writes: > [=E0=AE=B5=E0=AF=86=E0=AE=B3=E0=AF=8D=E0=AE=B3=E0=AE=BF =E0=AE=9F=E0=AE= =BF=E0=AE=9A=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 09, 2022] Akib Az= main Turja via "Bug reports for GNU Emacs, the Swiss army knife of text edi= tors" wrote: > >> But how can I copy 'yank-transform-functions' hook to the temporary >> buffer? > > I think you can do, > > (setq-local yank-transform-functions=20 > (buffer-local-value 'yank-transform-functions ORIG-BUFFER= )) Thanks, I know that. But is there any else to do? I don't know the internals of 'run-hook-wrapped', so I'm not sure whether that function treats the global and the local value of hook as the sole source of truth. =2D-=20 Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption." --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEyVTKmrtL6kNBe3FRVTX89U2IYWsFAmOUQ7sACgkQVTX89U2I YWusCBAA2ukEYoPHfKZHAlQ6lGd3h20IYJx79AmpEeL22MFLHrOdnehE+SoR+iJH xKRBCYjF1baIlk7bnoEBvuFhcWYmXcUX1yg2uMmiD8S8ndvIZDP6vwzXT5eXlX9H ztuAiZtsmW8Ic+GW9q0oD3AdnZPksxCHhHycbJppNkFeC6hBv6ptu9nKRQgmWALw Ar2RiuSKxtTZ/yLZ6Q9pjyBp4kRDHCCeWruknWbiSpxB8fDM4L//aBeB6g20ID/k qbCuR3Tan6xjg43f8eLg1u4p/OcS8kBZVzrd88QvhusKhUCZ0QLViChdLYzhwYR6 RBVfVuKo3zG77ONj+/hAHusWY7rPMy/7YHT7i63TZIUHRCoVwHHBAXOn4QUSdw6v vYzItVUZYmQDi6jOx2o1HwcUyVoWl/LL2DOkDZISzxewJJEnPFKR2NzePtFeL0/k Fv6A4mdoHF1mrlDdu9vTS6aWxk1/IoY7IblapwopEAtDThKLOTc7lAEWTJXRnkiH QmsawTqOvvsjt6LYp4GG0UbhfHwfNr36mGntt3qEfJGJStl1ycF/dMn678NHe20k KEeF0LznIIyDfVjfe5OzczNr510SV/wDzNEGbu0adwP3LYbuHz0eVwLvWwpEabJ0 wj52mPfi0g5Fz1U0YPGPSJAgnk/F2IGr3jPrjNErQZ6tFME16b4= =tP1h -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 10 15:26:13 2023 Received: (at 59793) by debbugs.gnu.org; 10 Sep 2023 19:26:13 +0000 Received: from localhost ([127.0.0.1]:51352 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfQ4T-0004KL-2E for submit@debbugs.gnu.org; Sun, 10 Sep 2023 15:26:13 -0400 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]:51205) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfQ4Q-0004Jy-KR for 59793@debbugs.gnu.org; Sun, 10 Sep 2023 15:26:12 -0400 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2bf66a32f25so40517341fa.2 for <59793@debbugs.gnu.org>; Sun, 10 Sep 2023 12:26:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694373961; x=1694978761; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=/miTGS4H7iwbChKvYLTQ8AcsMfRPOd/rtoYLjO6xgPI=; b=RKpgkZMtKgLessJXjSR+IqsfvrTxFEFIujEO5SNvHOKKbvq/TN7fjn1ijBOXr0eXFv h6+FauJ6Byn/94PERpOitZ7HWiergCXbzKNEMJXjxel4Ieybwxtp6rwODDN28s/scqqm mTr0AuIQGczIQu8yDJV/CT43pitVysGJdJyTt3jkm+8RPK3Cgpmd7ZN6rfELO8qvJrMq ZzJGPcfehwBMcsSmw5nyly9gTN3gIeJYfzNmjF5B8WDMckZyWYBLh2GkYW/di2JyOf67 O3rg253n+KFeaLkvf0Nz/lp8WNmWa8cYxvvJryieZiPtHT5tmO2/nq4XjNzFwglV6rJW 7ipg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694373961; x=1694978761; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/miTGS4H7iwbChKvYLTQ8AcsMfRPOd/rtoYLjO6xgPI=; b=E+ijoG/ZvEyZfZigEG5k8pypg/YCqktJ6guuZZLxEIwlWr9/Zxd+QWkyej5h5ZIYKX CrBmNLTA6v41ycSL+d49YPJRCaeV303qBIOqwOt6JJ5sEfDjPdQAR9MykdLzIzcEZ71V 6kgG9tcIlpqSZYRL00UElgCjyVrCeN+FwxBMkNof3uyBx8pezfwLyQXIUMpwtsuVj5fb TrKiSE7sWtUxnVQqQrAhFhvkqLJ383ATxl618Nmt16Fbq8xHxsF5aJ+6MN7WbN9jqVkw iBh4/h8xd8ESKkLdu70tu2TsfKSCeE980XM85S793t+bollPp1zW/Y0UHl7nn3y4RttI KJxA== X-Gm-Message-State: AOJu0Ywz8dz2KVjvP1Jx2yc+TM/rSD7TH1OQ163sndsN/ApgwKMtEMCz jetUXchu7swMKnqdxDGbq69kQzmmUUx9GXscGiA= X-Google-Smtp-Source: AGHT+IGhL+AVccu/AVrKeAQ3f0fuJ2ZyZhpgDc0Rqvgc5ekaORCjbNQlyoXysJ6GyeZiUFh7XGcunLKBBhY/u1QHpv4= X-Received: by 2002:a05:6512:3b88:b0:500:9734:b415 with SMTP id g8-20020a0565123b8800b005009734b415mr7551873lfv.30.1694373960869; Sun, 10 Sep 2023 12:26:00 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 10 Sep 2023 12:26:00 -0700 From: Stefan Kangas In-Reply-To: <83k0379ine.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 04 Dec 2022 19:35:17 +0200") References: <87lenpne48.fsf@163.com> <83cz90erqg.fsf@gnu.org> <87359wr08z.fsf@disroot.org> <0D6CA055-C9DD-425D-9D0B-03B555227E72@gnu.org> <87v8mspfuo.fsf@disroot.org> <83sfhwcq9h.fsf@gnu.org> <87zgc31kov.fsf@disroot.org> <87iliraxlg.fsf@miha-pc> <83k0379ine.fsf@gnu.org> MIME-Version: 1.0 Date: Sun, 10 Sep 2023 12:26:00 -0700 Message-ID: Subject: Re: bug#59793: 29.0.60; subr.elc is not compiled correctly To: Eli Zaretskii Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 59793 Cc: tumashu@163.com, 59793@debbugs.gnu.org, akib@disroot.org, miha@kamnitnik.top X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 59793 + notabug close 59793 thanks Eli Zaretskii writes: >> From: miha@kamnitnik.top >> Cc: tumashu@163.com, 59793@debbugs.gnu.org >> Date: Sun, 04 Dec 2022 18:27:07 +0100 >> >> In Emacs 29.0.50, I checked M-x disassemble RET insert-for-yank-1 RET >> and it looks like it uses an 'insert' bytcode operation instead of >> funcalling the 'insert' function. I think this is what prevents >> overriding of 'insert' from working on byte-compiled code, as explained >> in '(elisp) Advice and Byte Code'. > > Of course! And the same can happen with other function calls that the byte > compiler converts into bytecode operations. > > That is why this technique is unreliable and shouldn't be used. This bug report was about redefining built-in functions that have opcodes and then wondering why the bytecode behavior differs from the interpreted. The answer is: don't do that, use add-advice instead. So I'm closing this bug report. From unknown Tue Jun 17 22:26:30 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 09 Oct 2023 11:24:11 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator