# rvm_plugin_diff v0.2 # Find changes made to installed plugins # # License: GNU GPLv2 or later # # Ruud van Melick # http://vanmelick.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InJ2bV9wbHVnaW5fZGlmZiI7czo3OiJ2ZXJzaW9uIjtz OjM6IjAuMiI7czo2OiJhdXRob3IiO3M6MTU6IlJ1dWQgdmFuIE1lbGljayI7czoxMDoiYXV0 aG9yX3VyaSI7czoyMToiaHR0cDovL3Zhbm1lbGljay5jb20vIjtzOjExOiJkZXNjcmlwdGlv biI7czozODoiRmluZCBjaGFuZ2VzIG1hZGUgdG8gaW5zdGFsbGVkIHBsdWdpbnMiO3M6NDoi dHlwZSI7aToxO3M6NDoiaGVscCI7czo1NjY6Igk8cD5JbiB0aGUgZXh0ZW5zaW9ucyB0YWIs IHlvdSYjODIxNztsbCBmaW5kIGEgbmV3IHRhYiBjYWxsZWQgJiM4MjE2O1BsdWdpbiBEaWZm JiM4MjE3Oywgd2hpY2ggeW91IGNhbiB1c2UgdG86PC9wPgoKCTx1bD4KCQk8bGk+RmluZCB3 aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIGluc3RhbGxlZCBwbHVnaW5zLjwvbGk+CgkJPGxp PkRvd25sb2FkIHRob3NlIGNoYW5nZXMgaW4gdW5pZmllZCBkaWZmIGZvcm1hdC4gVGhlIHJl c3VsdGluZyBwYXRjaCB1c2VzIDxzcGFuIGNsYXNzPSJjYXBzIj5VTklYPC9zcGFuPi1zdHls ZSAoTEYpIGxpbmUgZW5kaW5ncywgd2hpY2ggeW91IG1heSBoYXZlIHRvIGNvbnZlcnQgaWYg eW91JiM4MjE3O3JlIGRldmVsb3Bpbmcgb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0gKFdpbmRv d3MgPSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1JMRjwvc3Bhbj4sIE1hYyA9IENSKS48L2xpPgoJ CTxsaT5TZWUgdGhlIGNvZGUgd2l0aCBsaW5lIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBv ZiBlYWNoIGxpbmUgKG1ha2VzIGZpbmRpbmcgZXJyb3JzIGVhc2llcikuPC9saT4KCTwvdWw+ IjtzOjQ6ImNvZGUiO3M6ODk4NToiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewog IGFkZF9wcml2cygncnZtX3BsdWdpbl9kaWZmJywgJzEsMicpOwogIHJlZ2lzdGVyX3RhYign ZXh0ZW5zaW9ucycsICdydm1fcGx1Z2luX2RpZmYnLCAnUGx1Z2luIERpZmYnKTsKICByZWdp c3Rlcl9jYWxsYmFjaygncnZtX3BsdWdpbl9kaWZmJywgJ3J2bV9wbHVnaW5fZGlmZicpOwp9 CgovKioKICBEaWZmIHJvdXRpbmUgdXNlcyBzb21lIHBhcnRzIG9mIHRoZSBjb2RlIGZvdW5k IGF0IHRoaXMgYWRkcmVzczoKICBodHRwOi8vd3d3LmhvbG9taW5kLmRlL3BocG5ldC9kaWZm Mi5zcmMucGhwCiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYW5pZWwgVW50ZXJiZXJnZXIgPGRp ZmYucGhwbmV0QGhvbG9taW5kLmRlPgogIENvcHlyaWdodCAoQykgMjAwNSAgTmlscyBLbmFw cG1laWVyIChuZXh0IHZlcnNpb24pCiAgTGljZW5zZTogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIG9yIGxhdGVyCiAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz L2dwbC5odG1sCioqLwoKZnVuY3Rpb24gcnZtX3BsdWdpbl9kaWZmKCRldmVudCwgJHN0ZXAp IHsKICBwYWdldG9wKCdQbHVnaW4gRGlmZicpOwoKICAkbmFtZSA9IGdwcygnbmFtZScpOwog ICRub3NwYWNlID0gZ3BzKCdub3NwYWNlJykgPyAxIDogMDsKICAkY29udGV4dCA9IGlzX251 bWVyaWMoZ3BzKCdjb250ZXh0JykpID8gaW50dmFsKGdwcygnY29udGV4dCcpKSA6ICc1JzsK CiAgJHBsdWdpbnMgPSBhcnJheSgpOwogICRtcGx1Z2lucyA9IHNhZmVfY29sdW1uKCduYW1l JywgJ3R4cF9wbHVnaW4nLCAnY29kZSAhPSBjb2RlX3Jlc3RvcmUnKTsKICAkb3BsdWdpbnMg PSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfcGx1Z2luJywgJ2NvZGUgPSBjb2RlX3Jlc3Rv cmUnKTsKICBhc29ydCgkb3BsdWdpbnMpOyBhc29ydCgkbXBsdWdpbnMpOwogIGlmICgkbXBs dWdpbnMpIHsKICAgICRwbHVnaW5zW10gPSAnICc7CiAgICBpZiAoJG9wbHVnaW5zKSAkcGx1 Z2luc1tdID0gJyAtLS0tLSBNT0RJRklFRCAtLS0tLSAnOwogICAgZm9yZWFjaCgkbXBsdWdp bnMgYXMgJHBsdWdpbikgJHBsdWdpbnNbXSA9ICRwbHVnaW47CiAgfQogIGlmICgkb3BsdWdp bnMpIHsKICAgICRwbHVnaW5zW10gPSAnICc7CiAgICBpZiAoJG1wbHVnaW5zKSAkcGx1Z2lu c1tdID0gJyAtLS0tLSBPUklHSU5BTCAtLS0tLSAnOwogICAgZm9yZWFjaCgkb3BsdWdpbnMg YXMgJHBsdWdpbikgJHBsdWdpbnNbXSA9ICRwbHVnaW47CiAgfQogIGlmIChpc3NldCgkcGx1 Z2luc1skbmFtZV0pKSAkbmFtZSA9ICRwbHVnaW5zWyRuYW1lXTsKCiAgZWNobyAnPGRpdiBz dHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6I2Y3ZjdmNztwYWRkaW5n OjFlbTttYXJnaW4tbGVmdDoyZW07ZmxvYXQ6bGVmdDsiPic7CiAgZWNobyBmb3JtKAogICAg JzxwPlBsdWdpbiAnLnNlbGVjdElucHV0KCduYW1lJywgJHBsdWdpbnMsICRuYW1lLCAwKS4n PC9wPicuCiAgICAnPHA+U2hvdyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29udGV4dCIg bWF4bGVuZ3RoPSI0IiBzaXplPSIzIiB2YWx1ZT0iJy4kY29udGV4dC4nIiBjbGFzcz0iZWRp dCIgLz4gbGluZXMgYXJvdW5kIGVhY2ggY2hhbmdlPC9wPicuCiAgICAnPHA+Jy5jaGVja2Jv eCgnbm9zcGFjZScsJ2lnbm9yZScsJG5vc3BhY2UpLicgSWdub3JlIHdoaXRlIHNwYWNlIGNo YW5nZXM8L3A+Jy4KICAgIGVJbnB1dCgncnZtX3BsdWdpbl9kaWZmJykuCiAgICBmSW5wdXQo J3N1Ym1pdCcsJycsJ1Nob3cgQ2hhbmdlcycsJ3B1Ymxpc2gnKQogICk7CiAgZWNobyAnPC9k aXY+JzsKICBlY2hvICc8YnIgc3R5bGU9ImNsZWFyOmJvdGgiIC8+JzsKCiAgJHJzID0gc2Fm ZV9yb3coJ2NvZGUsY29kZV9yZXN0b3JlLG5hbWUsdmVyc2lvbicsICd0eHBfcGx1Z2luJywg Im5hbWU9JyIuc2FmZV9lc2NhcGUoJG5hbWUpLiInIik7CiAgaWYgKCEkcnMpIHJldHVybjsK ICBleHRyYWN0KCRycyk7CiAgdW5zZXQoJHJzKTsKCiAgIyBmb3JjZSBVbml4LXN0eWxlIGxp bmUgYnJlYWtzCiAgJGNvZGVfcmVzdG9yZSA9IHN0cl9yZXBsYWNlKCJcclxuIiwgbiwgJGNv ZGVfcmVzdG9yZSk7CiAgJGNvZGVfcmVzdG9yZSA9IHN0cl9yZXBsYWNlKCJcciIsIG4sICRj b2RlX3Jlc3RvcmUpOwogICRjb2RlID0gc3RyX3JlcGxhY2UoIlxyXG4iLCBuLCAkY29kZSk7 CiAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiXHIiLCBuLCAkY29kZSk7CgogICMgc3BsaXQgdGhl IHNvdXJjZSB0ZXh0IGludG8gYXJyYXlzIG9mIGxpbmVzCiAgJHQxID0gZXhwbG9kZShuLHRy aW0oJGNvZGVfcmVzdG9yZSkpOwogICR0MiA9IGV4cGxvZGUobix0cmltKCRjb2RlKSk7CiAg dW5zZXQoJGNvZGVfcmVzdG9yZSwkY29kZSk7CgogICMgYnVpbGQgYSByZXZlcnNlLWluZGV4 IGFycmF5IHVzaW5nIHRoZSBsaW5lIGFzIGtleSBhbmQgbGluZSBudW1iZXIgYXMgdmFsdWUK ICBmb3JlYWNoKCR0MSBhcyAkaT0+JHgpICRyMVskeF1bXSA9ICRpOwogIGZvcmVhY2goJHQy IGFzICRpPT4keCkgJHIyWyR4XVtdID0gJGk7CgogICRhMT0wOyAkYTI9MDsgICAjIHN0YXJ0 IGF0IGJlZ2lubmluZyBvZiBlYWNoIGxpc3QKICAkYWN0aW9ucyA9IGFycmF5KCk7CiAgJGlz X2RpZmYgPSBmYWxzZTsKCiAgIyB3YWxrIHRoaXMgbG9vcCB1bnRpbCB3ZSByZWFjaCB0aGUg ZW5kIG9mIG9uZSBvZiB0aGUgbGlzdHMKICB3aGlsZSAoJGExPGNvdW50KCR0MSkgJiYgJGEy PGNvdW50KCR0MikpIHsKICAgICMgaWYgd2UgaGF2ZSBhIGNvbW1vbiBlbGVtZW50LCBzYXZl IGl0IGFuZCBnbyB0byB0aGUgbmV4dAogICAgaWYgKCRub3NwYWNlID8gdHJpbSgkdDFbJGEx XSk9PXRyaW0oJHQyWyRhMl0pIDogJHQxWyRhMV09PSR0MlskYTJdKQogICAgICB7ICRhY3Rp b25zW109MDsgJGExKys7ICRhMisrOyBjb250aW51ZTsgfQogICAgIyBvdGhlcndpc2UsIGZp bmQgdGhlIHNob3J0ZXN0IG1vdmUgKE1hbmhhdHRhbi1kaXN0YW5jZSkgZnJvbSB0aGUKICAg ICMgY3VycmVudCBsb2NhdGlvbgogICAgJGlzX2RpZmYgPSB0cnVlOwogICAgJGJlc3QxPWNv dW50KCR0MSk7ICRiZXN0Mj1jb3VudCgkdDIpOwogICAgJHMxPSRhMTsgJHMyPSRhMjsKICAg IHdoaWxlKCRzMSskczIgPCAkYmVzdDErJGJlc3QyKSB7CiAgICAgICRkPS0xOwogICAgICBm b3JlYWNoKChhcnJheSlAJHIxWyR0MlskczJdXSBhcyAkbikKICAgICAgICBpZiAoJG4+PSRz MSkgeyAkZD0kbjsgYnJlYWs7IH0KICAgICAgaWYgKCRkPj0kczEgYW5kICRkKyRzMiA8ICRi ZXN0MSskYmVzdDIpCiAgICAgICAgeyAkYmVzdDE9JGQ7ICRiZXN0Mj0kczI7IH0KICAgICAg JGQ9LTE7CiAgICAgIGZvcmVhY2goKGFycmF5KUAkcjJbJHQxWyRzMV1dIGFzICRuKQogICAg ICAgIGlmICgkbj49JHMyKSB7ICRkPSRuOyBicmVhazsgfQogICAgICBpZiAoJGQ+PSRzMiBh bmQgJHMxKyRkIDwgJGJlc3QxKyRiZXN0MikKICAgICAgICB7ICRiZXN0MT0kczE7ICRiZXN0 Mj0kZDsgfQogICAgICAkczErKzsgJHMyKys7CiAgICB9CiAgICB3aGlsZSAoJGExPCRiZXN0 MSkgeyAkYWN0aW9uc1tdPTE7ICRhMSsrOyB9ICAjIGRlbGV0ZWQgZWxlbWVudHMKICAgIHdo aWxlICgkYTI8JGJlc3QyKSB7ICRhY3Rpb25zW109MjsgJGEyKys7IH0gICMgYWRkZWQgZWxl bWVudHMKICB9CiAgdW5zZXQoJHIxLCRyMik7CgogICMgd2UndmUgcmVhY2hlZCB0aGUgZW5k IG9mIG9uZSBsaXN0LCBub3cgd2FsayB0byB0aGUgZW5kIG9mIHRoZSBvdGhlcgogIHdoaWxl KCRhMTxjb3VudCgkdDEpKSB7ICRhY3Rpb25zW109MTsgJGExKys7IH0gICMgZGVsZXRlZCBl bGVtZW50cwogIHdoaWxlKCRhMjxjb3VudCgkdDIpKSB7ICRhY3Rpb25zW109MjsgJGEyKys7 IH0gICMgYWRkZWQgZWxlbWVudHMKCiAgIyBjcmVhdGUgJGxpbmVzIGFycmF5IHdpdGggYWxs IG5lZWRlZCBpbmZvIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcKICAkaTE9JGkyPTA7CiAgJGxp bmVzID0gYXJyYXkoKTsKICBmb3JlYWNoKCRhY3Rpb25zIGFzICRhY3QpIHsKICAgICRsaW5l ID0gKCRhY3Q9PTEgPyAkdDFbJGkxXSA6ICR0MlskaTJdKTsKICAgICRsaW5lX29sZCA9ICgk YWN0PT0yID8gMCA6ICsrJGkxKTsKICAgICRsaW5lX25ldyA9ICgkYWN0PT0xID8gMCA6ICsr JGkyKTsKICAgICRsaW5lc1tdID0gYXJyYXkoJGxpbmVfb2xkLCAkbGluZV9uZXcsICRsaW5l LCAyKTsKICB9CgogICMgcmVtZW1iZXIgaG93IG11Y2ggc3BhY2UgdGhlIGxpbmUgbnVtYmVy cyB3aWxsIG5lZWQKICAkbjEgPSBzdHJsZW4oY291bnQoJHQxKSk7IGlmICgkbjEgPCAzKSAk bjEgPSAzOyAkbjErKzsKICAkbjIgPSBzdHJsZW4oY291bnQoJHQyKSk7IGlmICgkbjIgPCAz KSAkbjIgPSAzOyAkbjIrKzsKICB1bnNldCgkdDEsJHQyLCRhY3Rpb25zKTsKCiAgIyBtYXJr IGxpbmVzIHRoYXQgYXJlIG5lZWRlZCB0byBwcm92aWRlIGNvbnRleHQKICBpZiAoJGlzX2Rp ZmYpIHsKICAgIGlmICh0cmltKCRjb250ZXh0KSAhPSAnJykgewogICAgICAkY291bnQgPSAw OwogICAgICBmb3JlYWNoKCRsaW5lcyBhcyAkbnIgPT4gJGxpbmUpIHsKICAgICAgICBpZiAo JGxpbmVbMF0gYW5kICRsaW5lWzFdKSB7CiAgICAgICAgICBpZiAoJGNvdW50KSAkY291bnQt LTsKICAgICAgICAgIGVsc2UgJGxpbmVzWyRucl1bM10tLTsKICAgICAgICB9CiAgICAgICAg ZWxzZSAkY291bnQgPSAkY29udGV4dDsKICAgICAgfQogICAgICAkY291bnQgPSAwOwogICAg ICBmb3IoJG5yID0gY291bnQoJGxpbmVzKS0xOyAkbnIgPj0gMDsgJG5yLS0pIHsKICAgICAg ICBpZiAoJGxpbmVzWyRucl1bMF0gYW5kICRsaW5lc1skbnJdWzFdKSB7CiAgICAgICAgICBp ZiAoJGNvdW50KSAkY291bnQtLTsKICAgICAgICAgIGVsc2UgJGxpbmVzWyRucl1bM10tLTsK ICAgICAgICB9CiAgICAgICAgZWxzZSAkY291bnQgPSAkY29udGV4dDsKICAgICAgfQogICAg fQoKICAgICMgdW5pZmllZCBkaWZmCiAgICBpZiAoZ3BzKCdmb3JtYXQnKSkgewogICAgICAk dWRpZmYgPSAnJzsKICAgICAgJGRpZmYgPSBhcnJheSgwLDAsMCwwKTsKICAgICAgZm9yZWFj aCgkbGluZXMgYXMgJGxpbmUpIHsKICAgICAgICBpZiAoISRsaW5lWzNdKSB7CiAgICAgICAg ICBpZiAoJG91dCkgewogICAgICAgICAgICAkdWRpZmYgLj0gJGRpZmZbNF0uJG91dDsKICAg ICAgICAgICAgJG91dCA9ICcnOwogICAgICAgICAgICAkZGlmZiA9IGFycmF5KDAsMCwwLDAp OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmICgh JGRpZmZbMF0pICRkaWZmWzBdID0gJGxpbmVbMF07CiAgICAgICAgICBpZiAoISRkaWZmWzFd KSAkZGlmZlsxXSA9ICRsaW5lWzFdOwogICAgICAgICAgaWYgKCRsaW5lWzBdKSAkZGlmZlsy XSA9ICRsaW5lWzBdOwogICAgICAgICAgaWYgKCRsaW5lWzFdKSAkZGlmZlszXSA9ICRsaW5l WzFdOwogICAgICAgICAgJGRpZmZbNF0gPSAnQEAgLScuJGRpZmZbMF0uJywnLigkZGlmZlsy XSsxLSRkaWZmWzBdKS4nICsnLiRkaWZmWzFdLicsJy4oJGRpZmZbM10rMS0kZGlmZlsxXSku JyBAQCcubjsKICAgICAgICAgICRvdXQgLj0gKCEkbGluZVsxXSA/ICctJyA6ICghJGxpbmVb MF0gPyAnKycgOiAnICcpKSAuICRsaW5lWzJdIC4gbjsKICAgICAgICB9CiAgICAgIH0KICAg ICAgaWYgKCRvdXQpICR1ZGlmZiAuPSAkZGlmZls0XS4kb3V0OwoKICAgICAgIyBzZW5kIHVu aWZpZWQgZGlmZiBmaWxlCiAgICAgIGlmICgkdWRpZmYpIHsKICAgICAgICAkcGx1Z2luID0g JG5hbWUuJy0nLiR2ZXJzaW9uOwogICAgICAgICR0aW1lID0gc3RyZnRpbWUoJyAlWS0lbS0l ZCAlSDolTTolUy4wMDAwMDAwMDAgJXonLHRpbWUoKSk7CiAgICAgICAgJHVkaWZmID0gJy0t LSAnLiRwbHVnaW4uJy5vcmlnJy4kdGltZS5uLicrKysgJy4kcGx1Z2luLicubmV3Jy4kdGlt ZS5uLiR1ZGlmZjsKICAgICAgICBvYl9jbGVhbigpOwogICAgICAgIGhlYWRlcignQ29udGVu dC1EZXNjcmlwdGlvbjogUGx1Z2luIERpZmYnKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04Jyk7CiAgICAgICAgaGVhZGVyKCdDb250 ZW50LUxlbmd0aDogJyAuIHN0cmxlbigkdWRpZmYpKTsKICAgICAgICBoZWFkZXIoJ0NvbnRl bnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJHBsdWdpbiAuICcu ZGlmZiInKTsKICAgICAgICBlY2hvICR1ZGlmZjsKICAgICAgICBvYl9mbHVzaCgpOwogICAg ICAgIGZsdXNoKCk7CiAgICAgICAgZXhpdDsKICAgICAgfQogICAgfQoKICAgICMgYWRkIGlu bGluZSBkaWZmIG1hcmtlcnMKICAgICRpbnMgPSAkZGVsID0gYXJyYXkoKTsKICAgIGZvcmVh Y2goJGxpbmVzIGFzICRuciA9PiAkbGluZSkgewogICAgICBpZiAoJGxpbmVbMF0gYW5kICRs aW5lWzFdKSB7CiAgICAgICAgaWYgKCRkZWwgYW5kIGNvdW50KCRkZWwpID09IGNvdW50KCRp bnMpKSB7CiAgICAgICAgICB3aGlsZSgkZGVsbnIgPSBhcnJheV9zaGlmdCgkZGVsKSBhbmQg JGluc25yID0gYXJyYXlfc2hpZnQoJGlucykpIHsKICAgICAgICAgICAgJGJlZ2luID0gMDsg JGVuZCA9IDA7CiAgICAgICAgICAgICRkZWxzdHIgPSAkbGluZXNbJGRlbG5yXVsyXTsKICAg ICAgICAgICAgJGluc3N0ciA9ICRsaW5lc1skaW5zbnJdWzJdOwogICAgICAgICAgICAkbWF4 ID0gbWluKHN0cmxlbigkaW5zc3RyKSxzdHJsZW4oJGRlbHN0cikpOwogICAgICAgICAgICB3 aGlsZSgkYmVnaW4gPD0gJG1heCBhbmQgc3Vic3RyKCRkZWxzdHIsJGJlZ2luLDEpID09IHN1 YnN0cigkaW5zc3RyLCRiZWdpbiwxKSkgJGJlZ2luKys7CiAgICAgICAgICAgIHdoaWxlKCRl bmQgPD0gJG1heCBhbmQgc3Vic3RyKCRkZWxzdHIsLSRlbmQtMSwxKSA9PSBzdWJzdHIoJGlu c3N0ciwtJGVuZC0xLDEpKSAkZW5kKys7CiAgICAgICAgICAgIGlmICghJGJlZ2luIGFuZCAh JGVuZCkgY29udGludWU7CiAgICAgICAgICAgIGZvcmVhY2goYXJyYXkoJGRlbG5yLCRpbnNu cikgYXMgJGxpbmVucikgewogICAgICAgICAgICAgICRzdHIgPSAkbGluZXNbJGxpbmVucl1b Ml07CiAgICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkc3RyKSAtICRiZWdpbiAtICRlbmQ7 CiAgICAgICAgICAgICAgaWYgKCRsZW4gPCAwKSB7ICRlbmQgKz0gJGxlbjsgJGxlbiA9IDA7 IH0KICAgICAgICAgICAgICAkbGluZXNbJGxpbmVucl1bMl0gPSBzdWJzdHIoJHN0ciwwLCRi ZWdpbikuIlxyIi5zdWJzdHIoJHN0ciwkYmVnaW4sJGxlbikuIlxyIi4oJGVuZD9zdWJzdHIo JHN0ciwtJGVuZCk6JycpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQog ICAgICAgICRpbnMgPSAkZGVsID0gYXJyYXkoKTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBpZiAoJGxpbmVbMF0pICRkZWxbXSA9ICRucjsKICAgICAgICBlbHNlICRpbnNbXSA9 ICRucjsKICAgICAgfQogICAgfQogIH0KCiAgIyBkb3dubG9hZCBsaW5rCiAgaWYgKCRpc19k aWZmKSBlY2hvICc8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6M2VtIj48YSBocmVmPSI/ZXZlbnQ9 cnZtX3BsdWdpbl9kaWZmJy5hLidmb3JtYXQ9ZGlmZicuYS4nbmFtZT0nLnVybGVuY29kZSgk bmFtZSkuYS4nY29udGV4dD0nLiRjb250ZXh0LmEuJ25vc3BhY2U9Jy4kbm9zcGFjZS4nIj5E b3dubG9hZCBpbiA8c3Ryb25nPnVuaWZpZWQgZGlmZjwvc3Ryb25nPiBmb3JtYXQ8L2E+PC9w Pic7CgogICMgY29sb3IgZGlmZgogICRsc3R5bGUgPSAnIHN0eWxlPSJjb2xvcjogIzk5OTsg Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6MGVtIC41ZW0gMGVtIDBlbTsi JzsKICBlY2hvICc8cHJlPic7CiAgaWYgKCRpc19kaWZmKSB7CiAgICBlY2hvICI8c3BhbiRs c3R5bGU+Ii5zdHJfcGFkKCdPbGQnLCAkbjEsICcgJywgU1RSX1BBRF9MRUZUKS4nPC9zcGFu Pic7CiAgICBlY2hvICI8c3BhbiRsc3R5bGU+Ii5zdHJfcGFkKCdOZXcnLCAkbjIsICcgJywg U1RSX1BBRF9MRUZUKS4nPC9zcGFuPicubjsKICB9CiAgJHNraXAgPSBmYWxzZTsKICBmb3Jl YWNoKCRsaW5lcyBhcyAkbGluZSkgewogICAgaWYgKCEkbGluZVszXSkgewogICAgICAjIGVt cHR5IHNwYWNlIGJldHdlZW4gZGlmZiBwYXJ0cwogICAgICBpZiAoISRza2lwKSBlY2hvICc8 ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmN2Y3Zjc7aGVpZ2h0OjJlbTtib3JkZXI6MXB4IHNv bGlkICNjY2MiO2JvcmRlci1yaWdodDpub25lOz4mbmJzcDs8L2Rpdj4nOwogICAgICAkc2tp cCA9IHRydWU7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgZWxzZSAkc2tpcCA9IGZhbHNl OwogICAgaWYgKCRpc19kaWZmKSBlY2hvICI8c3BhbiRsc3R5bGU+Ii5zdHJfcGFkKCgkbGlu ZVswXSA/ICRsaW5lWzBdIDogJycpLCRuMSwnICcsU1RSX1BBRF9MRUZUKS4nPC9zcGFuPic7 CiAgICBlY2hvICI8c3BhbiRsc3R5bGU+Ii5zdHJfcGFkKCgkbGluZVsxXSA/ICRsaW5lWzFd IDogJycpLCRuMiwnICcsU1RSX1BBRF9MRUZUKS4nPC9zcGFuPic7CiAgICBpZiAoISRsaW5l WzFdKSBlY2hvICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZkZDsiPic7CiAgICBpZiAo ISRsaW5lWzBdKSBlY2hvICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2RmZDsiPic7CiAg ICAkc3RyID0gc3RyX3JlcGxhY2UoIlx0IiwnICAnLGh0bWxzcGVjaWFsY2hhcnMoJGxpbmVb Ml0pKTsKICAgIGlmICghJGxpbmVbMV0gb3IgISRsaW5lWzBdKSB7CiAgICAgICMgY29sb3Ig aW5saW5lIGRpZmYKICAgICAgJGNvbG9yID0gJGxpbmVbMF0gPyAnI2VhYScgOiAnIzllOSc7 CiAgICAgICRzdHIgPSBwcmVnX3JlcGxhY2UoJy9cciguKilcci8nLCc8c3BhbiBzdHlsZT0i YmFja2dyb3VuZDonLiRjb2xvci4nIj4kezF9PC9zcGFuPicsJHN0cik7CiAgICB9CiAgICBl Y2hvICcgJy4kc3RyOwogICAgaWYgKCEkbGluZVswXSBvciAhJGxpbmVbMV0pIGVjaG8gJzwv c3Bhbj4nOwogICAgZWNobyBuOwogIH0KICBlY2hvICc8L3ByZT4nOwp9IjtzOjM6Im1kNSI7 czozMjoiMDY0MjYyZDdhNjFjZTRiMGYxMzlmZmVjM2YxZWJmYjUiO30=