From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5754 invoked by alias); 7 Nov 2011 21:41:34 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 29897 Received: (qmail 15146 invoked from network); 7 Nov 2011 21:41:30 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 Received-SPF: none (ns1.primenet.com.au: domain at netview.no does not designate permitted sender hosts) MIME-Version: 1.0 In-Reply-To: <20111107194600.GA3526@soljaris10.fritz.box> References: <20111107194600.GA3526@soljaris10.fritz.box> Date: Mon, 7 Nov 2011 22:35:25 +0100 Message-ID: Subject: Re: New completion function (nmcli) and patch for _ffmpeg From: Haakon Riiser To: Haakon Riiser , zsh-workers@zsh.org, Peter.Stephenson@csr.com Content-Type: multipart/mixed; boundary=e89a8f2343fd3d6a8d04b12bd549 --e89a8f2343fd3d6a8d04b12bd549 Content-Type: text/plain; charset=UTF-8 On Mon, Nov 7, 2011 at 20:46, Sebastian Tramp wrote: > On Mon, Nov 07, 2011 at 07:05:36PM +0100, Haakon Riiser wrote: > >> Here's a new completion function for nmcli, the command line interface >> to Linux' Network Manager. [...] > > Haakon, > > +1 - like it very much. > Tested with an older 0.8.3.998 and works smooth! > > thank you Glad to hear it was immediately useful to someone. :) Anyway, I have an updated version already. There are no changes to the completion itself, I've only tried to make it more portable and in line with other completion functions: * Use _call_program so that users can override the calls * Use _describe, _wanted and _message instead of compadd directly (to avoid using ANSI escape codes to set the bold attribute in the description line) * Use _net_interfaces to generate completion for network interfaces * Fixed some weird indenting That's it for now. -- Haakon --e89a8f2343fd3d6a8d04b12bd549 Content-Type: application/octet-stream; name=_nmcli Content-Disposition: attachment; filename=_nmcli Content-Transfer-Encoding: base64 X-Attachment-Id: f_gupzmwda0 I2NvbXBkZWYgbm1jbGkKCmxvY2FsIGNvbnRleHQgc3RhdGUgbGluZSBleHBsCnR5cGVzZXQgLUEg b3B0X2FyZ3MKCmlmIFtbIC16ICRfbm1jbGlfdmVyc2lvbiBdXTsgdGhlbgogICAgX25tY2xpX3Zl cnNpb249IiR7IiQoX2NhbGxfcHJvZ3JhbSBubWNsaSAkd29yZHNbMV0gLS12ZXJzaW9uKSIjIyp2 ZXJzaW9uIH0iCmZpCgooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfaXNfcnVubmluZ10gKSkgfHwgX25t Y2xpX2lzX3J1bm5pbmcoKSB7CiAgICBbWyAkKF9jYWxsX3Byb2dyYW0gbm1jbGkgJHdvcmRzWzFd IC1mIHJ1bm5pbmcgbm0pICE9IConbm90IHJ1bm5pbmcnKiBdXQp9CgooKCAkK2Z1bmN0aW9uc1tf bm1jbGlfY29uX2lkc10gKSkgfHwgX25tY2xpX2Nvbl9pZHMoKSB7CiAgICBfbm1jbGlfaXNfcnVu bmluZyB8fCByZXR1cm4KICAgIGxvY2FsIC1hIGNvbl9pZHMKICAgIGNvbl9pZHM9KCR7KGYpIiQo X2NhbGxfcHJvZ3JhbSBubWNsaSAkd29yZHNbMV0gLWYgbmFtZSBjb24pIn0pCiAgICBjb25faWRz PSgke2Nvbl9pZHNbMiwtMl19KQogICAgY29uX2lkcz0oJHtjb25faWRzW0BdJSVcICMjfSkKICAg IF9kZXNjcmliZSAnc2VsZWN0IGNvbm5lY3Rpb24nIGNvbl9pZHMKfQoKKCggJCtmdW5jdGlvbnNb X25tY2xpX2Nvbl91dWlkc10gKSkgfHwgX25tY2xpX2Nvbl91dWlkcygpIHsKICAgIF9ubWNsaV9p c19ydW5uaW5nIHx8IHJldHVybgogICAgbG9jYWwgLWEgY29uX3V1aWRzCiAgICBjb25fdXVpZHM9 KCR7KGYpIiQoX2NhbGxfcHJvZ3JhbSBubWNsaSAkd29yZHNbMV0gLWYgdXVpZCBjb24pIn0pCiAg ICBjb25fdXVpZHM9KCR7Y29uX3V1aWRzWzIsLTJdfSkKICAgIGNvbl91dWlkcz0oJHtjb25fdXVp ZHNbQF0lJVwgIyN9KQogICAgX2Rlc2NyaWJlICdzZWxlY3QgY29ubmVjdGlvbicgY29uX3V1aWRz Cn0KIAooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfb2JqZWN0c10gKSkgfHwgX25tY2xpX29iamVjdHMo KSB7CiAgICBsb2NhbCAtYSBvYmplY3RzX2FycmF5CiAgICBvYmplY3RzX2FycmF5PSgKICAgICAg ICAnbm06TmV0d29ya01hbmFnZXIgc3RhdHVzJwogICAgICAgICdjb246TmV0d29ya01hbmFnZXIg Y29ubmVjdGlvbnMnCiAgICAgICAgJ2RldjpkZXZpY2VzIG1hbmFnZWQgYnkgTmV0d29ya01hbmFn ZXInCiAgICApCiAgICBfZGVzY3JpYmUgJ25tY2xpIG9iamVjdCcgb2JqZWN0c19hcnJheQp9Cgoo KCAkK2Z1bmN0aW9uc1tfbm1jbGlfbm1dICkpIHx8IF9ubWNsaV9ubSgpIHsKICAgIGxvY2FsIC1h IG5tX2FycmF5CiAgICBubV9hcnJheT0oCiAgICAgICAgJ3N0YXR1czpzaG93IG92ZXJhbGwgc3Rh dHVzIG9mIE5ldHdvcmtNYW5hZ2VyJwogICAgICAgICdlbmFibGU6Z2V0IHN0YXR1cyBvciBlbmFi bGUvZGlzYWJsZSBuZXR3b3JraW5nJwogICAgICAgICdzbGVlcDpnZXQgc2xlZXAgc3RhdHVzIG9y IHB1dCB0byBzbGVlcC9hd2FrZSBOZXR3b3JrTWFuYWdlcicKICAgICAgICAnd2lmaTppbnF1aXJl IG9yIHNldCBzdGF0dXMgb2YgV2lGaSBpbiBOZXR3b3JrTWFuYWdlcicKICAgICAgICAnd3dhbjpp bnF1aXJlIG9yIHNldCBzdGF0dXMgb2YgV1dBTiBpbiBOZXR3b3JrTWFuYWdlcicKICAgICkKICAg IF9kZXNjcmliZSAnaW5xdWlyZSBhbmQgY2hhbmdlIHN0YXRlIG9mIE5ldHdvcmtNYW5hZ2VyJyBu bV9hcnJheQp9CgooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfY29uXSApKSB8fCBfbm1jbGlfY29uKCkg ewogICAgbG9jYWwgLWEgY29uX2FycmF5CiAgICBjb25fYXJyYXk9KAogICAgICAgICdsaXN0Omxp c3QgY29uZmlndXJlZCBjb25uZWN0aW9ucycKICAgICAgICAnc3RhdHVzOnByaW50IHN0YXR1cyBv ZiBhY3RpdmUgY29ubmVjdGlvbnMnCiAgICAgICAgJ3VwOmFjdGl2YXRlIGEgY29ubmVjdGlvbicK ICAgICAgICAnZG93bjpkZWFjdGl2YXRlIGEgY29ubmVjdGlvbicKICAgICkKICAgIGlmIFtbICRf bm1jbGlfdmVyc2lvbiA9PSAwLjkuWzEtOV0qIF1dOyB0aGVuCiAgICAgICAgY29uX2FycmF5WzVd PSJkZWxldGU6ZGVsZXRlIGEgY29ubmVjdGlvbiIKICAgIGZpCiAgICBfZGVzY3JpYmUgImdldCBp bmZvcm1hdGlvbiBhYm91dCBOZXR3b3JrTWFuYWdlcidzIGNvbm5lY3Rpb25zIiBjb25fYXJyYXkK fQoKKCggJCtmdW5jdGlvbnNbX25tY2xpX2Nvbl9saXN0XSApKSB8fCBfbm1jbGlfY29uX2xpc3Qo KSB7CiAgICBsb2NhbCAtYSBjb25fbGlzdF9hcnJheQogICAgY29uX2xpc3RfYXJyYXk9KAogICAg ICAgICdpZDpnZXQgZGV0YWlscyBvbiBjb25uZWN0aW9uIHNwZWNpZmllZCBieSBpZCcKICAgICAg ICAndXVpZDpnZXQgZGV0YWlscyBvbiBjb25uZWN0aW9uIHNwZWNpZmllZCBieSB1dWlkJwogICAg KQogICAgaWYgW1sgJF9ubWNsaV92ZXJzaW9uID09IDAuOCogXV07IHRoZW4KICAgICAgICBjb25f bGlzdF9hcnJheVszXT0nc3lzdGVtOm9ubHkgbGlzdCBzeXN0ZW0gY29ubmVjdGlvbnMnCiAgICAg ICAgY29uX2xpc3RfYXJyYXlbNF09J3VzZXI6b25seSBsaXN0IHVzZXIgY29ubmVjdGlvbnMnCiAg ICBmaQogICAgX2Rlc2NyaWJlICdsaXN0IGNvbmZpZ3VyZWQgY29ubmVjdGlvbnMnIGNvbl9saXN0 X2FycmF5Cn0KCigoICQrZnVuY3Rpb25zW19ubWNsaV9jb25fdXBdICkpIHx8IF9ubWNsaV9jb25f dXAoKSB7CiAgICBsb2NhbCAtYSBjb25fdXBfYXJyYXkKICAgIGNvbl91cF9hcnJheT0oCiAgICAg ICAgJ2lkOmFjdGl2YXRlIGNvbm5lY3Rpb24gc3BlY2lmaWVkIGJ5IGlkJwogICAgICAgICd1dWlk OmFjdGl2YXRlIGNvbm5lY3Rpb24gc3BlY2lmaWVkIGJ5IHV1aWQnCiAgICApCiAgICBfZGVzY3Jp YmUgJ2FjdGl2YXRlIGNvbm5lY3Rpb24gYnkgaWQgb3IgdXVpZCcgY29uX3VwX2FycmF5Cn0KCigo ICQrZnVuY3Rpb25zW19ubWNsaV9jb25fZG93bl0gKSkgfHwgX25tY2xpX2Nvbl9kb3duKCkgewog ICAgbG9jYWwgLWEgY29uX2Rvd25fYXJyYXkKICAgIGNvbl9kb3duX2FycmF5PSgKICAgICAgICAn aWQ6ZGVhY3RpdmF0ZSBjb25uZWN0aW9uIHNwZWNpZmllZCBieSBpZCcKICAgICAgICAndXVpZDpk ZWFjdGl2YXRlIGNvbm5lY3Rpb24gc3BlY2lmaWVkIGJ5IHV1aWQnCiAgICApCiAgICBfZGVzY3Jp YmUgJ2RlYWN0aXZhdGUgY29ubmVjdGlvbiBieSBpZCBvciB1dWlkJyBjb25fZG93bl9hcnJheQp9 CgooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfY29uX2RlbGV0ZV0gKSkgfHwgX25tY2xpX2Nvbl9kZWxl dGUoKSB7CiAgICBsb2NhbCAtYSBjb25fZGVsZXRlX2FycmF5CiAgICBjb25fZGVsZXRlX2FycmF5 PSgKICAgICAgICAnaWQ6ZGVsZXRlIGNvbm5lY3Rpb24gc3BlY2lmaWVkIGJ5IGlkJwogICAgICAg ICd1dWlkOmRlbGV0ZSBjb25uZWN0aW9uIHNwZWNpZmllZCBieSB1dWlkJwogICAgKQogICAgX2Rl c2NyaWJlICdkZWxldGUgY29ubmVjdGlvbiBieSBpZCBvciB1dWlkJyBjb25fZGVsZXRlX2FycmF5 Cn0KCigoICQrZnVuY3Rpb25zW19ubWNsaV9jb25fdXBfZXh0cmFhcmdzXSApKSB8fCBfbm1jbGlf Y29uX3VwX2V4dHJhYXJncygpIHsKICAgIGxvY2FsIC1hIGNvbl91cF9leHRyYWFyZ3NfYXJyYXkK ICAgIGNvbl91cF9leHRyYWFyZ3NfYXJyYXk9KAogICAgICAgICdpZmFjZTpyZXF1aXJlIGEgcGFy dGljdWxhciBpbnRlcmZhY2UnCiAgICAgICAgJ2FwOnJlcXVpcmUgYSBzcGVjaWZpYyBhY2Nlc3Mg cG9pbnQnCiAgICAgICAgJy0tbm93YWl0OmRvbicndCB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRp b24nCiAgICAgICAgJy0tdGltZW91dDpzcGVjaWZ5IGhvdyBsb25nIHRvIHdhaXQgZm9yIG9wZXJh dGlvbiB0byBjb21wbGV0ZScKICAgICkKICAgIF9kZXNjcmliZSAnZXh0cmEgb3B0aW9ucyBmb3Ig ImNvbiB1cCInIGNvbl91cF9leHRyYWFyZ3NfYXJyYXkKfQoKKCggJCtmdW5jdGlvbnNbX25tY2xp X2Rldl9kaXNjb25uZWN0X2V4dHJhYXJnc10gKSkgfHwgX25tY2xpX2Rldl9kaXNjb25uZWN0X2V4 dHJhYXJncygpIHsKICAgIGxvY2FsIC1hIGRldl9kaXNjb25uZWN0X2V4dHJhYXJnc19hcnJheQog ICAgZGV2X2Rpc2Nvbm5lY3RfZXh0cmFhcmdzX2FycmF5PSgKICAgICAgICAnLS1ub3dhaXQ6ZG9u Jyd0IHdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbicKICAgICAgICAnLS10aW1lb3V0OnNwZWNp ZnkgaG93IGxvbmcgdG8gd2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlJwogICAgKQogICAg X2Rlc2NyaWJlICdleHRyYSBvcHRpb25zIGZvciAiZGV2IGRpc2Nvbm5lY3QiJyBkZXZfZGlzY29u bmVjdF9leHRyYWFyZ3NfYXJyYXkKfQoKKCggJCtmdW5jdGlvbnNbX25tY2xpX2Rldl93aWZpX2xp c3RdICkpIHx8IF9ubWNsaV9kZXZfd2lmaV9saXN0KCkgewogICAgbG9jYWwgLWEgZGV2X3dpZmlf bGlzdF9hcnJheQogICAgZGV2X3dpZmlfbGlzdF9hcnJheT0oCiAgICAgICAgJ2lmYWNlOmxpc3Qg QVBzIGZvciBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlJwogICAgKQogICAgaWYgW1sgJF9ubWNsaV92 ZXJzaW9uID09IDAuOCogfHwgJF9ubWNsaV92ZXJzaW9uID09IDAuOS4wKiBdXTsgdGhlbgogICAg ICAgIGRldl93aWZpX2xpc3RfYXJyYXlbMl0gPSAnaHdhZGRyOmxpc3QgYSBzcGVjaWZpYyBBUCBi eSBNQUMgYWRkcmVzcycKICAgIGVsaWYgW1sgJF9ubWNsaV92ZXJzaW9uID09IDAuOS5bMS05XSog XV07IHRoZW4KICAgICAgICBkZXZfd2lmaV9saXN0X2FycmF5WzJdID0gJ2Jzc2lkOmxpc3QgYSBz cGVjaWZpYyBBUCBieSBCU1NJRCcKICAgIGZpCiAgICBfZGVzY3JpYmUgJ29wdGlvbnMgZm9yIHNw ZWNpZnlpbmcgdGhlIEFQIHRvIGxpc3QnIGRldl93aWZpX2xpc3RfYXJyYXkKfQoKKCggJCtmdW5j dGlvbnNbX25tY2xpX2Rldl0gKSkgfHwgX25tY2xpX2RldigpIHsKICAgIGxvY2FsIC1hIGRldl9h cnJheQogICAgZGV2X2FycmF5PSgKICAgICAgICAnc3RhdHVzOnByaW50IHN0YXR1cyBvZiBkZXZp Y2VzJwogICAgICAgICdsaXN0OmdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2Vz JwogICAgICAgICdkaXNjb25uZWN0OmRpc2Nvbm5lY3QgZGV2aWNlIGFuZCBwcmV2ZW50IGl0IGZy b20gYXV0b21hdGljYWxseSBhY3RpdmF0aW5nJwogICAgICAgICd3aWZpOmxpc3QgYXZhaWxhYmxl IFdpRmkgYWNjZXNzIHBvaW50cycKICAgICkKICAgIF9kZXNjcmliZSAiZ2V0IGluZm9ybWF0aW9u IGFib3V0IGRldmljZXMiIGRldl9hcnJheQp9CgooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfdHJ1ZWZh bHNlXSApKSB8fCBfbm1jbGlfdHJ1ZWZhbHNlKCkgewogICAgX3dhbnRlZCBib29sZWFuIGV4cGwg J3VzZSB0cnVlL2ZhbHNlIHRvIG1vZGlmeSAobm90aGluZyA9IHF1ZXJ5IHN0YXR1cyknIGNvbXBh ZGQgdHJ1ZSBmYWxzZQp9CgooKCAkK2Z1bmN0aW9uc1tfbm1jbGlfb25vZmZdICkpIHx8IF9ubWNs aV9vbm9mZigpIHsKICAgIF93YW50ZWQgb25vZmYgZXhwbCAndXNlIG9uL29mZiB0byBtb2RpZnkg KG5vdGhpbmcgPSBxdWVyeSBzdGF0dXMpJyBjb21wYWRkIG9uIG9mZgp9Cgpsb2NhbCB3MT0iJHt3 b3Jkc1skI3dvcmRzIC0gMV19Igpsb2NhbCB3Mj0iJHt3b3Jkc1skI3dvcmRzIC0gMl19Igpsb2Nh bCB3Mz0iJHt3b3Jkc1skI3dvcmRzIC0gM119Igpsb2NhbCB3ND0iJHt3b3Jkc1skI3dvcmRzIC0g NF19IgoKaWYgW1sgJHcyID09IG5tICYmICR3MSA9PSAoc2xlZXB8ZW5hYmxlKSBdXTsgdGhlbgog ICAgX25tY2xpX3RydWVmYWxzZSAmJiByZXR1cm4KZWxpZiBbWyAkdzIgPT0gbm0gJiYgJHcxID09 ICh3aWZpfHd3YW4pIF1dOyB0aGVuCiAgICBfbm1jbGlfb25vZmYgJiYgcmV0dXJuCmVsaWYgW1sg JHcxID09IG5tIF1dOyB0aGVuCiAgICBfbm1jbGlfbm0gJiYgcmV0dXJuCmVsaWYgW1sgJHczID09 IGNvbiAmJiAkdzIgPT0gbGlzdCAmJiAkdzEgPT0gaWQgXV07IHRoZW4KICAgIF9ubWNsaV9jb25f aWRzICYmIHJldHVybgplbGlmIFtbICR3MyA9PSBjb24gJiYgJHcyID09IGxpc3QgJiYgJHcxID09 IHV1aWQgXV07IHRoZW4KICAgIF9ubWNsaV9jb25fdXVpZHMgJiYgcmV0dXJuCmVsaWYgW1sgJHcy ID09IGNvbiAmJiAkdzEgPT0gbGlzdCBdXTsgdGhlbgogICAgX25tY2xpX2Nvbl9saXN0ICYmIHJl dHVybgplbGlmIFtbICR3MyA9PSBjb24gJiYgJHcyID09ICh1cHxkb3duKSAmJiAkdzEgPT0gaWQg XV07IHRoZW4KICAgIF9ubWNsaV9jb25faWRzICYmIHJldHVybgplbGlmIFtbICRfbm1jbGlfdmVy c2lvbiA9PSAwLjkuWzEtOV0qICYmICR3MyA9PSBjb24gJiYgJHcyID09IGRlbGV0ZSAmJiAkdzEg PT0gaWQgXV07IHRoZW4KICAgIF9ubWNsaV9jb25faWRzICYmIHJldHVybgplbGlmIFtbICR3MyA9 PSBjb24gJiYgJHcyID09ICh1cHxkb3duKSAmJiAkdzEgPT0gdXVpZCBdXTsgdGhlbgogICAgX25t Y2xpX2Nvbl91dWlkcyAmJiByZXR1cm4KZWxpZiBbWyAkX25tY2xpX3ZlcnNpb24gPT0gMC45Llsx LTldKiAmJiAkdzMgPT0gY29uICYmICR3MiA9PSBkZWxldGUgJiYgJHcxID09IHV1aWQgXV07IHRo ZW4KICAgIF9ubWNsaV9jb25fdXVpZHMgJiYgcmV0dXJuCmVsaWYgW1sgJHsocGo6XDA6KXdvcmRz fSA9PSAqJCdcMGNvblwwdXBcMCcoaWR8dXVpZCkkJ1wwJyogXV07IHRoZW4KICAgICBpZiBbWyAk dzEgPT0gaWZhY2UgXV07IHRoZW4KICAgICAgICAgX25ldF9pbnRlcmZhY2VzICYmIHJldHVybgog ICAgIGVsaWYgW1sgJHcxID09IGFwIF1dOyB0aGVuCiAgICAgICAgIF9tZXNzYWdlIC1lIGRlc2Ny aXB0aW9ucyAnZW50ZXIgTUFDIGFkZHJlc3MnICYmIHJldHVybgogICAgIGVsaWYgW1sgJHcxID09 IC0tdGltZW91dCBdXTsgdGhlbgogICAgICAgICBfbWVzc2FnZSAtZSBkZXNjcmlwdGlvbnMgJ2Vu dGVyIHRpbWVvdXQnICYmIHJldHVybgogICAgIGVsc2UKICAgICAgICAgX25tY2xpX2Nvbl91cF9l eHRyYWFyZ3MgJiYgcmV0dXJuCiAgICAgZmkKZWxpZiBbWyAkdzIgPT0gY29uICYmICR3MSA9PSB1 cCBdXTsgdGhlbgogICAgX25tY2xpX2Nvbl91cCAmJiByZXR1cm4KZWxpZiBbWyAkdzIgPT0gY29u ICYmICR3MSA9PSBkb3duIF1dOyB0aGVuCiAgICBfbm1jbGlfY29uX2Rvd24gJiYgcmV0dXJuCmVs aWYgW1sgJF9ubWNsaV92ZXJzaW9uID09IDAuOS5bMS05XSogJiYgJHcyID09IGNvbiAmJiAkdzEg PT0gZGVsZXRlIF1dOyB0aGVuCiAgICBfbm1jbGlfY29uX2RlbGV0ZSAmJiByZXR1cm4KZWxpZiBb WyAkdzEgPT0gY29uIF1dOyB0aGVuCiAgICBfbm1jbGlfY29uICYmIHJldHVybgplbGlmIFtbICR3 MyA9PSBkZXYgJiYgJHcyID09IChsaXN0fGRpc2Nvbm5lY3QpICYmICR3MSA9PSBpZmFjZSBdXTsg dGhlbgogICAgX25ldF9pbnRlcmZhY2VzICYmIHJldHVybgplbGlmIFtbICR7KHBqOlwwOil3b3Jk c30gPT0gKiQnXDBkZXZcMGRpc2Nvbm5lY3RcMGlmYWNlXDAnKiBdXTsgdGhlbgogICAgIGlmIFtb ICR3MSA9PSAtLXRpbWVvdXQgXV07IHRoZW4KICAgICAgICAgX21lc3NhZ2UgLWUgZGVzY3JpcHRp b25zICdlbnRlciB0aW1lb3V0JyAmJiByZXR1cm4KICAgICBlbHNlCiAgICAgICAgIF9ubWNsaV9k ZXZfZGlzY29ubmVjdF9leHRyYWFyZ3MgJiYgcmV0dXJuCiAgICAgZmkKZWxpZiBbWyAkdzIgPT0g ZGV2ICYmICR3MSA9PSBsaXN0IF1dOyB0aGVuCiAgICBjb21wYWRkIGlmYWNlICYmIHJldHVybgpl bGlmIFtbICR3MiA9PSBkZXYgJiYgJHcxID09IGRpc2Nvbm5lY3QgXV07IHRoZW4KICAgIGNvbXBh ZGQgaWZhY2UgJiYgcmV0dXJuCmVsaWYgW1sgJHc0ID09IGRldiAmJiAkdzMgPT0gd2lmaSAmJiAk dzIgPT0gbGlzdCAmJiAkdzEgPT0gaWZhY2UgXV07IHRoZW4KICAgIF9uZXRfaW50ZXJmYWNlcyAm JiByZXR1cm4KZWxpZiBbWyAkdzQgPT0gZGV2ICYmICR3MyA9PSB3aWZpICYmICR3MiA9PSBsaXN0 ICYmICR3MSA9PSBod2FkZHIgXV07IHRoZW4KICAgIF9tZXNzYWdlIC1lIGRlc2NyaXB0aW9ucyAn ZW50ZXIgTUFDIGFkZHJlc3MnICYmIHJldHVybgplbGlmIFtbICR3MyA9PSBkZXYgJiYgJHcyID09 IHdpZmkgJiYgJHcxID09IGxpc3QgXV07IHRoZW4KICAgIF9ubWNsaV9kZXZfd2lmaV9saXN0ICYm IHJldHVybgplbGlmIFtbICR3MiA9PSBkZXYgJiYgJHcxID09IHdpZmkgXV07IHRoZW4KICAgIGNv bXBhZGQgbGlzdCAmJiByZXR1cm4KZWxpZiBbWyAkdzEgPT0gZGV2IF1dOyB0aGVuCiAgICBfbm1j bGlfZGV2ICYmIHJldHVybgplbHNlCiAgICBfYXJndW1lbnRzIFwKICAgICAgeycoLS10ZXJzZSkt dCcsJygtdCktLXRlcnNlJ30nW3RlcnNlIG91dHB1dF0nIFwKICAgICAgeycoLS1wcmV0dHkpLXAn LCcoLXApLS1wcmV0dHknfSdbcHJldHR5IG91dHB1dF0nIFwKICAgICAgeycoLS1tb2RlKS1tJywn KC1tKS0tbW9kZSd9J1tvdXRwdXQgbW9kZV06b3V0cHV0IG1vZGU6KHRhYnVsYXIgbXVsdGlsaW5l KScgXAogICAgICB7JygtLWZpZWxkcyktZicsJygtZiktLWZpZWxkcyd9J1tzcGVjaWZ5IGZpZWxk cyB0byBvdXRwdXRdOiA6LT5maWVsZHMnIFwKICAgICAgeycoLS1lc2NhcGUpLWUnLCcoLWUpLS1l c2NhcGUnfSdbZXNjYXBlIGNvbHVtbnMgc2VwYXJhdG9ycyBpbiB2YWx1ZXNdOmVzY2FwZSBjb2x1 bW5zIHNlcGFyYXRvcnMgaW4gdmFsdWVzOih5ZXMgbm8pJyBcCiAgICAgIHsnKC0tdmVyc2lvbikt dicsJygtdiktLXZlcnNpb24nfSdbc2hvdyBwcm9ncmFtIHZlcnNpb25dJyBcCiAgICAgIHsnKC0t aGVscCktaCcsJygtaCktLWhlbHAnfSdbcHJpbnQgdGhpcyBoZWxwXScgXAogICAgICAnKjo6bm1j bGkgb2JqZWN0Ol9ubWNsaV9vYmplY3RzJyBcCiAgICAgICYmIHJldHVybgpmaQoKW1sgIiRzdGF0 ZSIgPT0gImZpZWxkcyIgXV0gJiYKIF92YWx1ZXMgLXMgLCAnZmllbGRzIHRvIGJlIHByaW50ZWQn IFwKICAgYWxsIGNvbW1vbiBcCiAgIGF1dG9jb25uZWN0IGRidXMtcGF0aCBkZXZpY2UgbmFtZSBu ZXQtZW5hYmxlZCByZWFkb25seSBydW5uaW5nIFwKICAgc2NvcGUgc3RhdGUgdGltZXN0YW1wIHRp bWVzdGFtcC1yZWFsIHR5cGUgdXVpZCB3aWZpIHdpZmktaGFyZHdhcmUgXAogICB3d2FuIHd3YW4t aGFyZHdhcmUgXAogICAmJiByZXR1cm4K --e89a8f2343fd3d6a8d04b12bd549--