# phq_subscribe v0.1.3.1 # Comment subscription by email # Peter Hultqvist # http://notes.endnode.se/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NzoiMC4xLjMuMSI7czo2OiJhdXRob3IiO3M6MTU6IlBl dGVyIEh1bHRxdmlzdCI7czoxMDoiYXV0aG9yX3VyaSI7czoyNDoiaHR0cDovL25vdGVzLmVu ZG5vZGUuc2UvIjtzOjExOiJkZXNjcmlwdGlvbiI7czoyOToiQ29tbWVudCBzdWJzY3JpcHRp b24gYnkgZW1haWwiO3M6NDoidHlwZSI7aToxO3M6NDoibmFtZSI7czoxMzoicGhxX3N1YnNj cmliZSI7czo0OiJoZWxwIjtzOjIzMTI6Igk8aDE+U3Vic2NyaWJlIHRvIGNvbW1lbnRzIHZp YSBlbWFpbDwvaDE+CgoJPGgyPkluc3RhbGxhdGlvbjwvaDI+CgoJPHA+Rm9yIGJhc2ljIGZ1 bmN0aW9uYWxpdHkgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIGVuYWJsZSB0aGUgcGx1Z2luIGlu IHRoZSBhZG1pbi1wbHVnaW4gYXJlYS48L3A+CgoJPGgyPkJhc2ljIHVzYWdlPC9oMj4KCgk8 cD5XaGVuIHlvdSB3cml0ZSBhIGNvbW1lbnQgYW5kIHNwZWNpZnkgeW91ciBlbWFpbCBhZGRy ZXNzIHlvdSB3aWxsIGRpcmVjdGx5IHJlY2VpdmUgYW4gZW1haWwgd2l0aCBhIGNvbmZpcm1h dGlvbiBhbmQgYW4gaW52aXRhdGlvbiB0byBzdWJzY3JpYmUgdG8gdGhlIGFydGljbGUgY29t bWVudHMuPC9wPgoKCTxwPlRoaXMgc3Vic2NyaXB0aW9ucyBpcyBkb25lL2NvbmZpcm1lZCBi eSBmb2xsb3dpbmcgdGhlIGxpbmsgaW4gdGhlIGVtYWlsLjwvcD4KCgk8cD5BZnRlciB0aGlz IHRoZSB1c2VyIHdpbGwgcmVjZWl2ZSBhIG5ldyBub3RpZmljYXRpb24gd2hlbmV2ZXIgYSBu ZXcgY29tbWVudCBpcyBwb3N0ZWQuPC9wPgoKCTxwPkFsbCB0aGlzIGlzIGRvbmUgYXV0b21h dGljYWxseSB3aXRob3V0IGludGVydmVudGlvbiBmcm9tIHRoZSBzaXRlIG93bmVyIG9uY2Ug dGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuPC9wPgoKCTxoMj5VbnN1YnNj cmliZTwvaDI+CgoJPHA+RWFjaCBtYWlsIHlvdSByZWNlaXZlIGNvbnRhaW4gYW4gdW5zdWJz Y3JpYmUgbGluaywgZm9sbG93IGl0IGFuZCB5b3UmIzgyMTc7cmUgZG9uZS48L3A+CgoJPHA+ VGhlc2UgbWFpbHMgY2FuIGJlIGN1c3RvbWl6ZWQoc2VlIGJlbG93KSBidXQgaXQgaXMgaGln aGx5IGVuY291cmFnZWQgdG8gYXQgbGVhc3Qga2VlcCB0aGlzIGxpbmsuPC9wPgoKCTxoMj5N dWx0aXBsZSBjb21tZW50czwvaDI+CgoJPHA+T25seSB0aGUgZmlyc3QgdGltZSB5b3Ugd3Jp dGUgYSBjb21tZW50IHlvdSB3aWxsIGdldCB0aGUgZ3JlZXRpbmcgYW5kIG9mZmVyIHRvIHN1 YnNjcmliZS48YnIgLz4KVGhlIGVtYWlsIGlzIHJlY29yZGVkIHRvIHRoYXQgc3BlY2lmaWMg YXJ0aWNsZSBzbyBpZiB5b3Ugd3JpdGUgYSBjb21tZW50IHRvIGFub3RoZXIgYXJ0aWNsZSB5 b3Ugd2lsbCBvbmNlIGFnYWluIHJlY2VpdmUgYSBjb25maXJtYXRpb24uIFRoaXMgaXMgd2hl dGVyIG9yIG5vdCB5b3UgY2hvb3NlIHRvIHN1YnNjcmliZS48YnIgLz4KSWYgeW91IGNob29z ZSBub3QgdG8gc3Vic2NyaWJlIHRoZXJlIHdpbGwgYmUgYSByZWNvcmQgc3RhdGluZyB0aGF0 LiBJZiB5b3UgY2hvb3NlIGFjdGl2ZWx5IHRvIHVuc3Vic2NyaWJlIHRoZSByZWNvcmQgd2ls bCBiZSByZW1vdmVkLjwvcD4KCgk8cD5JZiB5b3Ugb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hv b3NlcyB0byB1bnN1YnNjcmliZSBhbnkgZnV0dXJlIGNvbW1lbnRzIHdpbGwgYWdhaW4gYmUg dHJlYXRlZCBhcyB0aGUgZmlyc3Qgb25lIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZ3JlZXRp bmcgZW1haWwuPC9wPgoKCTxoMj5Ib3cgdG8gYWRtaW5pc3RyYXRlPC9oMj4KCgk8cD5BcyBh biBhZG1pbmlzdHJhdG9yLCB0b3AgdGhyZWUgbGV2ZWxzKGNvbW1lbnRzKSwgeW91IGNhbiBz dWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIGVtYWlscyB1c2luZyB0aGUgJiM4MjIwO1N1YnNj cmlwdGlvbnMmIzgyMjE7IHRhYiB1bmRlciAmIzgyMjA7Q29udGVudCYjODIyMTsgaW4gdGhl IGFkbWluIGFyZWEuPC9wPgoKCTxoMj5Ib3cgdG8gY3VzdG9taXplPC9oMj4KCgk8cD5Zb3Ug Y2FuIGN1c3RvbWl6ZSB0aGUgZW1haWxzIHRoYXQgYXJlIHNlbnQgb24gZmlyc3QgY29tbWVu dCBhbmQgb24gc3Vic2NyaXB0aW9uIG5vdGlmaWNhdGlvbnMgYnkgZWRpdCB0aGUgJiM4MjIw O3BocV9zdWJzY3JpYmVfY29tbWVudCYjODIyMTsgYW5kICYjODIyMDtwaHFfc3Vic2NyaWJl X25ldyYjODIyMTsgbWlzYyBGb3JtIHVuZGVyIFByZXNlbnRhdGlvbi48L3A+CgoJPHA+QWZ0 ZXIgaW5zdGFsbGF0aW9uIHRoZXNlIHRlbXBsYXRlcyBhcmUgbm90IHRvIGJlIGZvdW5kIHRo ZXJlIHVudGlsIHRoZSBmaXJzdCBtYWlsIHMgc2VudCBmb3IgZWFjaCB0eXBlIG9mIG1lc3Nh Z2UsIHRoZXJlZm9yZSB5b3UgbXVzdCB3cml0ZSBvbmUgY29tbWVudCBzdWJzY3JpYmUgdG8g aXQsIGFuZCB0aGVuIHdyaXRlIGFub3RoZXIgb25lLjxiciAvPgpZb3UgY2FuIGFsc28gY3Jl YXRlIHRoZSBmb3JtcyB5b3Vyc2VsZiB1c2luZyA8dHhwOnBocV91bnN1YnNjcmliZV91cmwg Lz4gYW5kIDx0eHA6cGhxX3N1YnNjcmliZV91cmwgLz4gdG8gaW5zZXJ0IHRoZSByZXNwZWN0 aXZlIHVybHMuPC9wPgoKIjtzOjQ6ImNvZGUiO3M6MTAxNDE6IgpyZWdpc3Rlcl9jYWxsYmFj aygncGhxX3N1YnNjcmliZV9mb3JtJywnY29tbWVudC5mb3JtJyk7CmZ1bmN0aW9uIHBocV9z dWJzY3JpYmVfZm9ybSgpCnsKCWdsb2JhbCAkcHJldGV4dDsKCXJldHVybiBwaHFfc3Vic2Ny aWJlX2Zvcm1fY29tbW9uKCRwcmV0ZXh0WydpZCddKTsKfQoKZnVuY3Rpb24gcGhxX3N1YnNj cmliZV9mb3JtX2NvbW1vbigkYXJ0aWNsZSkKewoJLy8gY3JlYXRlIHRoZSB0YWJsZSBpZiBu b3QgYXZhaWxhYmxlIGFscmVhZHkKCXBocV9zdWJzY3JpYmVfY3JlYXRldGFibGUoKTsKCgkv L1N1YnNjcmliZS91bnN1YnNjcmliZSBjb2RlCgkkc3ViX2NvZGUgPSBncHMoJ2NvZGUnKTsK CgkvLyBVbnN1YnNjcmliZSAvIGRlbGV0ZSByZWNvcmQKCSR1bnN1YiA9IGdwcygndW5zdWJz Y3JpYmUnKTsKCWlmKCR1bnN1YiA8PiAnJykKCXsKCQlpZihzYWZlX2RlbGV0ZSgicGhxX3N1 YnNjcmliZSIsCgkJCSJgYXJ0aWNsZWAgPSAiLmludHZhbCgkYXJ0aWNsZSkuIiAiLgoJCQki IEFORCBgZW1haWxgID0gJyIubXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1bnN1YikuIicg Ii4KCQkJIiBBTkQgYGNvZGVgID0gJyIubXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRzdWJf Y29kZSkuIiciCgkJKSkKCQkJcGhxX3N1YnNjcmliZV9tYWlsKCR1bnN1YiwgIlVuc3Vic2Ny aWJlIGNvbmZpcm1hdGlvbiIsICJZb3UgaGF2ZSBub3cgYmVlbiB1bnN1YnNjcmliZWQgZnJv bSAiLnBlcm1saW5rdXJsX2lkKCRhcnRpY2xlKSk7Cgl9CgoJLy8gU3Vic2NyaWJlL3Zlcmlm eSBlbWFpbAoJJHN1Yl9lbWFpbCA9IGdwcygnc3Vic2NyaWJlJyk7CglpZigkc3ViX2VtYWls IDw+ICcnICYmICRzdWJfY29kZSA8PiAnJykKCXsKCQlpZihzYWZlX3VwZGF0ZSgicGhxX3N1 YnNjcmliZSIsICdgc3Vic2NyaWJlZGAgPSB0cnVlICcsCgkJCSJgYXJ0aWNsZWAgPSAnIi5p bnR2YWwoJGFydGljbGUpLiInICIuCgkJCSIgQU5EIGBlbWFpbGAgPSAnIi5teXNxbF9yZWFs X2VzY2FwZV9zdHJpbmcoJHN1Yl9lbWFpbCkuIicgIi4KCQkJIiBBTkQgYGNvZGVgID0gJyIu bXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRzdWJfY29kZSkuIiciCgkJKSkKCQkJcGhxX3N1 YnNjcmliZV9tYWlsKCRzdWJfZW1haWwsICJTdWJzY3JpYmUgY29uZmlybWF0aW9uIiwgIllv dSBoYXZlIG5vdyBiZWVuIHN1YnNjcmliZWQgdG8gIi5wZXJtbGlua3VybF9pZCgkYXJ0aWNs ZSkpOwoJfQoKCXJldHVybjsKfQoKcmVnaXN0ZXJfY2FsbGJhY2soJ3BocV9zdWJzY3JpYmVf c2F2ZScsJ2NvbW1lbnQuc2F2ZScpOwpmdW5jdGlvbiBwaHFfc3Vic2NyaWJlX3NhdmUoKQp7 CglnbG9iYWwgJHNpdGVuYW1lOwoKCSRjb21tZW50ID0gZ2V0Q29tbWVudCgpOwoJJGFydGlj bGUgPSBzYWZlX3JvdygiQXV0aG9ySUQsIFRpdGxlIiwgInRleHRwYXR0ZXJuIiwgIklEID0g Ii5pbnR2YWwoJGNvbW1lbnRbJ3BhcmVudGlkJ10pKTsKCgkvL1NlbmQgbm90aWZpY2F0aW9u IHRvIGVhY2ggc3Vic2NyaWJlcgoJJHN1YnNjcmliZXJzID0gYXJyYXlfdW5pcXVlKHNhZmVf cm93cygnZW1haWwsIGNvZGUnLCAncGhxX3N1YnNjcmliZScsICdgYXJ0aWNsZWAgPSAnLmlu dHZhbCgkY29tbWVudFsncGFyZW50aWQnXSkuJyBBTkQgYHN1YnNjcmliZWRgID0gdHJ1ZScp KTsKCWlmKGlzX2FycmF5KCRzdWJzY3JpYmVycykpCgl7CgkJJHN1YmplY3QgPSAnWycuJHNp dGVuYW1lLiddIE5ldyBjb21tZW50IG9uIGFydGljbGUgJy4kYXJ0aWNsZVsnVGl0bGUnXTsK CQkkbWFpbGZvcm0gPSBwaHFfc3Vic2NyaWJlX2dldG1haWxmb3JtKCdjb21tZW50Jyk7CgoJ CWZvcmVhY2goJHN1YnNjcmliZXJzIGFzICRzdWJzY3JpYmVyKQoJCXsKCQkJJGJvZHkgPSBw YXJzZShwaHFfc3Vic2NyaWJlcl9wYXJzZSgkbWFpbGZvcm0sICRjb21tZW50WydwYXJlbnRp ZCddLCAkc3Vic2NyaWJlclsnZW1haWwnXSwgJHN1YnNjcmliZXJbJ2NvZGUnXSkpOwoJCQkv L0Rvbid0IHVzZSBwaHFfc3Vic2NyaWJlX21haWwgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIHJl dmVhbCB0aGUgSVAgYWRkcmVzcyBvZiBvdGhlciBjb21tZW50IHBvc3RlcnMKCQkJbWFpbCgk c3Vic2NyaWJlclsnZW1haWwnXSwgJHN1YmplY3QsICRib2R5LCAiRnJvbTogIi4kcHJlZnNb J3NtdHBfZnJvbSddKTsKCQl9OwoJfTsKCgkvL1NlbmQgc3Vic2NyaWJlIGludml0ZSB0byBj b21tZW50IGF1dGhvcgoJaWYoZW1haWxjaGVjaygkY29tbWVudFsnZW1haWwnXSkgPT0gdHJ1 ZSkKCXsKCQkkY29kZSA9IG10X3JhbmQoKTsKCQkkcmV0ID0gc2FmZV9pbnNlcnQoJ3BocV9z dWJzY3JpYmUnLCAnCgkJCWBhcnRpY2xlYCA9ICcuaW50dmFsKCRjb21tZW50WydwYXJlbnRp ZCddKS4nLAoJCQlgZW1haWxgID0gXCcnLm15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkY29t bWVudFsnZW1haWwnXSkuJ1wnLAoJCQlgc3Vic2NyaWJlZGAgPSBmYWxzZSwKCQkJYGNvZGVg ID0gXCcnLm15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkY29kZSkuJ1wnJwoJCSk7CgoJCWlm KCRyZXQpCgkJewoJCQkkYXJ0aWNsZSA9IHNhZmVfcm93KCJBdXRob3JJRCwgVGl0bGUiLCAi dGV4dHBhdHRlcm4iLCAiSUQgPSAiLmludHZhbCgkY29tbWVudFsncGFyZW50aWQnXSkpOwoJ CQkkYXV0aG9yID0gc2FmZV9yb3coIlJlYWxOYW1lLCBlbWFpbCIsICJ0eHBfdXNlcnMiLCAi bmFtZSA9ICciLm15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkYXJ0aWNsZVsnJEF1dGhvcklE J10pLiInIik7CgkJCSRzdWJqZWN0ID0gJ1snLiRzaXRlbmFtZS4nXSBTdWJzY3JpYmUgdG8g YXJ0aWNsZSAnLiRhcnRpY2xlWydUaXRsZSddOwoJCQkkbWFpbGZvcm0gPSBwaHFfc3Vic2Ny aWJlX2dldG1haWxmb3JtKCduZXcnKTsKCQkJJGJvZHkgPSBwYXJzZShwaHFfc3Vic2NyaWJl cl9wYXJzZSgkbWFpbGZvcm0sICRjb21tZW50WydwYXJlbnRpZCddLCAkY29tbWVudFsnZW1h aWwnXSwgJGNvZGUpKTsKCQkJcGhxX3N1YnNjcmliZV9tYWlsKCRjb21tZW50WydlbWFpbCdd LCAkc3ViamVjdCwgJGJvZHkpOwoJCX0KCX07CgoKfQoKZnVuY3Rpb24gcGhxX3N1YnNjcmli ZV9nZXRtYWlsZm9ybSgkbmFtZSkKewoJc3dpdGNoKCRuYW1lKQoJewoJY2FzZSAnY29tbWVu dCc6CgkJJGZvcm0gPSAiSGkgdGhlcmUsXG5cbiIuCgkJCSJUaGVyZSBpcyBhIG5ldyBjb21t ZW50IG9uIDx0eHA6c2l0ZW5hbWUvPiBmb3IgdGhlICBcIjx0eHA6dGl0bGUgLz5cIi5cbiIu CgkJCSJZb3UgY2FuIHJlYWQgaXQgb24gPHR4cDpwZXJtbGluayAvPi5cblxuIi4KCQkJIlVu c3Vic2NyaWJlIGJ5IGZvbGxvd2luZyB0aGlzIHVybDogPHR4cDpwaHFfdW5zdWJzY3JpYmVf dXJsIC8+IjsKCQlicmVhazsKCWNhc2UgJ25ldyc6CgkJJGZvcm0gPSAiRm9sbG93IHRoaXMg bGluayB0byBzdWJzY3JpYmUgdG8gdGhlIGFydGljbGUgXCI8dHhwOnRpdGxlIC8+XCJcbiIu CgkJCQkiPHR4cDpwaHFfc3Vic2NyaWJlX3VybCAvPlxuXG4iLgoJCQkJIllvdSBjYW4gcmVh ZCB0aGUgYXJ0aWNsZSBvbiA8dHhwOnBlcm1saW5rIC8+LiI7CgkJYnJlYWs7CglkZWZhdWx0 OgoJCXJldHVybiAnJzsKCX0KCgkkZm9ybV9yb3cgPSBzYWZlX3JvdygiRm9ybSIsICJ0eHBf Zm9ybSIsICJuYW1lPSdwaHFfc3Vic2NyaWJlXyRuYW1lJyBsaW1pdCAxIik7CglpZighJGZv cm1fcm93KQoJCXNhZmVfaW5zZXJ0KCJ0eHBfZm9ybSIsICJuYW1lPSdwaHFfc3Vic2NyaWJl XyRuYW1lJywgdHlwZT0nbWlzYycsIEZvcm09JyIubXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5n KCRmb3JtKS4iJyIpOwoKCWlmKCRmb3JtX3JvdykKCQlyZXR1cm4gJGZvcm1fcm93WydGb3Jt J107CgllbHNlCgkJcmV0dXJuICRmb3JtOwp9CgpmdW5jdGlvbiBwaHFfc3Vic2NyaWJlX21h aWwoJGVtYWlsLCAkc3ViamVjdCwgJGJvZHkpCnsKCWdsb2JhbCAkcHJlZnM7CglyZXR1cm4g bWFpbCgkZW1haWwsICRzdWJqZWN0LCAkYm9keSwKCQkiRnJvbTogIi4kcHJlZnNbJ3NtdHBf ZnJvbSddLiJcbiIuCgkJJ1gtUmVtb3RlLUlQOiAnLiRfU0VSVkVSWydSRU1PVEVfQUREUidd CgkpOwp9CgpmdW5jdGlvbiBwaHFfc3Vic2NyaWJlX2NyZWF0ZXRhYmxlKCl7CgoJJHNxbCA9 ICdTRUxFQ1QgKiBGUk9NIGAnLnNhZmVfcGZ4KCdwaHFfc3Vic2NyaWJlJykuJ2AgTElNSVQg MSc7CglpZihzYWZlX3F1ZXJ5KCRzcWwpID09IGZhbHNlKXsKCgkJc2FmZV9xdWVyeSgnUkVO QU1FIFRBQkxFIGAnLnNhZmVfcGZ4KCdwaHFfc3Vic2NyaWJlJykuJ2AgVE8gYCcuc2FmZV9w ZngoJ3BocV9zdWJzY3JpYmUnKS4nYCA7Jyk7CgkJc2FmZV9xdWVyeSgnQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMgYCcuc2FmZV9wZngoJ3BocV9zdWJzY3JpYmUnKS4nYCAoCgkJCQkJ YGFydGljbGVgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCgkJCQkJYGVtYWlsYCB2YXJj aGFyKDEyNykgTk9UIE5VTEwsCgkJCQkJYHN1YnNjcmliZWRgIHRpbnlpbnQoMSkgTk9UIE5V TEwsCgkJCQkJYGNvZGVgIHZhcmNoYXIoMTI3KSBOT1QgTlVMTCwKCQkJCQlVTklRVUUgS0VZ IGBhcnRpY2xlYCAoYGFydGljbGVgLGBlbWFpbGApCgkJCQkJKTsnCgkJKTsKCgl9OwoJcmV0 dXJuOwp9CgovLyBSZXBsYWNlIHNvbWUgdGFncyB3aXRoIHVuL3N1YnNjcmliZSBsaW5rcwov LyBUaGlzIGNhbm5vdCBiZSBkb25lIHVzaW5nIHRoZSB0ZXh0cGF0dGVybiBwYXJzZXIgYmVj YXVzZSBvZiB0aGUKLy8gZXh0cmEgcGFyYW1ldGVycyB0aGF0IHZhcmllcyBmb3IgZWFjaCBy ZWNpcGllbnQuCmZ1bmN0aW9uIHBocV9zdWJzY3JpYmVyX3BhcnNlKCRjb250ZW50LCAkYXJ0 aWNsZSwgJGVtYWlsLCAkY29kZSkKewoJJHVybCA9IHBlcm1saW5rdXJsX2lkKCRhcnRpY2xl KTsKCSR1cmwgLj0gKHN0cnN0cigkdXJsLCAnPycpKSA/ICImIiA6ICI/IjsKCgkkc3ViX3Vy bAkJPSAkdXJsLiJzdWJzY3JpYmU9Ii51cmxlbmNvZGUoJGVtYWlsKS4nJmNvZGU9Jy51cmxl bmNvZGUoJGNvZGUpOwoJJHVuc3ViX3VybAk9ICR1cmwuInVuc3Vic2NyaWJlPSIudXJsZW5j b2RlKCRlbWFpbCkuJyZjb2RlPScudXJsZW5jb2RlKCRjb2RlKTsKCgkkY29udGVudCA9IGVy ZWdfcmVwbGFjZSgiPHR4cDpwaHFfc3Vic2NyaWJlX3VybCAqLz4iLCAkc3ViX3VybCwgJGNv bnRlbnQpOwoJJGNvbnRlbnQgPSBlcmVnX3JlcGxhY2UoIjx0eHA6cGhxX3Vuc3Vic2NyaWJl X3VybCAqLz4iLCAkdW5zdWJfdXJsLCAkY29udGVudCk7CgoJcmV0dXJuICRjb250ZW50Owp9 CgppZighZnVuY3Rpb25fZXhpc3RzKCdlbWFpbGNoZWNrJykpewoJZnVuY3Rpb24gZW1haWxj aGVjaygkZWFkZHI9IiIpewoJCS8qKgoJCSAqIEB2YXIgc3RyaW5nIFJlZ2V4cCBmP3IgbWF0 Y2hpbmcgYXVmIHZhbGlkZSBFbWFpbHN5bnRheAoJCSAqLwoJCSRwYXR0ZXJuID0gIi9eKFth LXpBLVowLTldKSsoW1wuYS16QS1aMC05Xy1dKSpAKFthLXpBLVowLTlfLV0pKyhcLlthLXpB LVowLTlfLV0rKSsvIjsKCQlpZiAoZW1wdHkoJGVhZGRyKSkgewoJCQlyZXR1cm4gZmFsc2U7 CgkJfSBlbHNlaWYgKCFwcmVnX21hdGNoKCRwYXR0ZXJuLCAkZWFkZHIpKSB7CgkJCXJldHVy biBmYWxzZTsKCQl9IGVsc2UgewoJCQkkbGFkZHIgPSAiIjsKCQkJJGxhZGRyID0gJGVhZGRy OwoJCQkkbGFkZHIgPSBwcmVnX3JlcGxhY2UoJy9eLio8LycsJycsICRsYWRkcik7CgkJCSRs YWRkciA9IHByZWdfcmVwbGFjZSgnLz4uKiQvJywnJywkbGFkZHIpOwoJCQlpZiAocHJlZ19t YXRjaCgnL15cQC4qOi8nLCRsYWRkcikpewoJCQkJbGlzdCgkZG9tYWluLCRhZGRyX3NwZWMp ID0gcHJlZ19zcGxpdCgnLzovJywkbGFkZHIpOwoJCQkJJGRvbWFpbiA9IHByZWdfcmVwbGFj ZSgnL15cQC8nLCcnLCRkb21haW4pOwoJCQkJaWYgKCFpc19kb21haW4oJGRvbWFpbikpIHty ZXR1cm4gZmFsc2U7fQoJCQkJJGxhZGRyID0gJGFkZHJfc3BlYzsKCQkJfTsKCQkJcmV0dXJu KGlzX2FkZHJfc3BlYygkbGFkZHIpKTsKCQl9OwoJfQoJLyoqI0ArCgkgKiBAYWNjZXNzIHBy aXZhdGUKCSAqIEBzaW5jZSAxLjAuMSAoMjYuMDMuMjAwNCkKCSAqIEB2ZXJzaW9uIDEuMC4x CgkgKi8KCWZ1bmN0aW9uIGlzX2FkZHJfc3BlYyAoJGVhZGRyID0gIiIpewoJCWxpc3QoJGxv Y2FsX3BhcnQsJGRvbWFpbikgPSBwcmVnX3NwbGl0KCcvXEAvJywkZWFkZHIpOwoJCWlmICgh aXNfbG9jYWxfcGFydCgkbG9jYWxfcGFydCkgfHwgIWlzX2RvbWFpbigkZG9tYWluKSl7CgkJ CXJldHVybiBmYWxzZTsKCQl9OwoJCXJldHVybiB0cnVlOwoJfQoJZnVuY3Rpb24gaXNfbG9j YWxfcGFydCAoJGxvY2FsX3BhcnQgPSAiIil7CgkJaWYgKGVtcHR5KCRsb2NhbF9wYXJ0KSkg ewoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCQkkYml0X2FycmF5ID0gcHJlZ19zcGxpdCgnL1wu LycsJGxvY2FsX3BhcnQpOwoJCXdoaWxlIChsaXN0KCwkYml0KSA9IGVhY2goJGJpdF9hcnJh eSkpewoJCQlpZiAoIWlzX3dvcmQoJGJpdCkpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfTsK CQl9OwoJCXJldHVybiB0cnVlOwoJfQoJZnVuY3Rpb24gaXNfd29yZCgkd29yZCA9ICIiKXsK CQlpZiAocHJlZ19tYXRjaCgnL14iLioiJC9pJywkd29yZCkpewoJCQlyZXR1cm4oaXNfcXVv dGVkX3N0cmluZygkd29yZCkpOwoJCX07CgkJcmV0dXJuKGlzX2F0b20oJHdvcmQpKTsKCX0K CWZ1bmN0aW9uIGlzX3F1b3RlZF9zdHJpbmcoJHdvcmQgPSAiIil7CgkJJHdvcmQgPSBwcmVn X3JlcGxhY2UoJy9eIi8nLCcnLCR3b3JkKTsKCQkkd29yZCA9IHByZWdfcmVwbGFjZSgnLyIk LycsJycsJHdvcmQpOwoJCSR3b3JkID0gcHJlZ19yZXBsYWNlKCcvXFwrLycsJycsJHdvcmQp OwoJCWlmIChwcmVnX21hdGNoKCcvXCJcXFxyLycsJHdvcmQpKXsKCQkJcmV0dXJuIGZhbHNl OwoJCX07CgkJcmV0dXJuIHRydWU7Cgl9CglmdW5jdGlvbiBpc19hdG9tKCRhdG9tID0gIiIp ewoJCWlmICgocHJlZ19tYXRjaCgnL1tcKFwpXDxcPlxAXCxcO1w6XFxcIlwuXFtcXV0vJywk YXRvbSkpIHx8IChwcmVnX21hdGNoKCcvXDA0MC8nLCRhdG9tKSkgfHwgKHByZWdfbWF0Y2go Jy9bXHgwMC1ceDFGXS8nLCRhdG9tKSkpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX07CgkJcmV0 dXJuIHRydWU7Cgl9CglmdW5jdGlvbiBpc19kb21haW4oJGRvbWFpbiA9ICIiKXsKCQlpZiAo ZW1wdHkoJGRvbWFpbikpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX07CgkJaWYgKCFwcmVnX21h dGNoKCcvXC4vJywkZG9tYWluKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCQkkZGJpdF9h cnJheSA9IHByZWdfc3BsaXQoJy8uLycsJGRvbWFpbik7CgkJd2hpbGUgKGxpc3QoLCRkYml0 KSA9IGVhY2goJGRiaXRfYXJyYXkpKXsKCQkJaWYgKCFpc19zdWJfZG9tYWluKCRkYml0KSkg ewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9OwoJCX07CgkJcmV0dXJuIHRydWU7Cgl9CglmdW5j dGlvbiBpc19zdWJfZG9tYWluKCRzdWJkID0gIiIpewoJCWlmIChwcmVnX21hdGNoKCcvXlxb LipcXSQvJywkc3ViZCkpewoJCQlyZXR1cm4oaXNfZG9tYWluX2xpdGVyYWwoJHN1YmQpKTsK CQl9OwoJCXJldHVybihpc19hdG9tKCRzdWJkKSk7Cgl9CglmdW5jdGlvbiBpc19kb21haW5f bGl0ZXJhbCgkZG9tID0gIiIpewoJCSRkb20gPSBwcmVnX3JlcGxhY2UoJy9cXCsvJywnJywk ZG9tKTsKCQlpZiAocHJlZ19tYXRjaCgnL1tcW1xdXFxccl0vJywkZG9tKSl7CgkJCXJldHVy biBmYWxzZTsKCQl9OwoJCXJldHVybiB0cnVlOwoJfQoJLyoqI0AtKi8KCn0KCi8vU3Vic2Ny aWJlIHRhYiB1bmRlciBDb250ZW50IGluIHRoZSBhZG1pbiBhcmVhCmlmIChAdHhwaW50ZXJm YWNlID09ICdhZG1pbicpCnsKCWdsb2JhbCAkcGhxX3N1YnNjcmliZV9hZG1pbmV2ZW50OwoJ JHBocV9zdWJzY3JpYmVfYWRtaW5ldmVudCA9ICdzdWJzY3JpYmVfYWRtaW4nOwoJJG15dGFi ID0gJ1N1YnNjcmlwdGlvbnMnOwoKCS8vIFNldCB0aGUgcHJpdmlsZWdlIGxldmVscyBmb3Ig b3VyIG5ldyBldmVudAoJYWRkX3ByaXZzKCRwaHFfc3Vic2NyaWJlX2FkbWluZXZlbnQsICcx LDIsMycpOwoKCS8vIEFkZCBhIG5ldyB0YWIgdW5kZXIgJ2V4dGVuc2lvbnMnIGFzc29jaWF0 ZWQgd2l0aCBvdXIgZXZlbnQKCXJlZ2lzdGVyX3RhYigiY29udGVudCIsICRwaHFfc3Vic2Ny aWJlX2FkbWluZXZlbnQsICRteXRhYik7CgoJLy8gJ3plbV9hZG1pbl90ZXN0JyB3aWxsIGJl IGNhbGxlZCB0byBoYW5kbGUgdGhlIG5ldyBldmVudAoJcmVnaXN0ZXJfY2FsbGJhY2soInBo cV9zdWJzY3JpYmVfYWRtaW4iLCAkcGhxX3N1YnNjcmliZV9hZG1pbmV2ZW50KTsKCglmdW5j dGlvbiBwaHFfc3Vic2NyaWJlX2FkbWluX3N1Yl91cmwoJGFydGljbGUsICRlbWFpbCwgJGNv ZGUpCgl7CgkJZ2xvYmFsICRwaHFfc3Vic2NyaWJlX2FkbWluZXZlbnQ7CgkJcmV0dXJuCgkJ CSc/ZXZlbnQ9Jy4kcGhxX3N1YnNjcmliZV9hZG1pbmV2ZW50LgoJCQknJmFydGljbGU9Jy51 cmxlbmNvZGUoJGFydGljbGUpLgoJCQknJnN1YnNjcmliZT0nLnVybGVuY29kZSgkZW1haWwp LgoJCQknJmNvZGU9Jy51cmxlbmNvZGUoJGNvZGUpOwoJfQoKCWZ1bmN0aW9uIHBocV9zdWJz Y3JpYmVfYWRtaW5fdW5zdWJfdXJsKCRhcnRpY2xlLCAkZW1haWwsICRjb2RlKQoJewoJCWds b2JhbCAkcGhxX3N1YnNjcmliZV9hZG1pbmV2ZW50OwoJCXJldHVybgoJCQknP2V2ZW50PScu JHBocV9zdWJzY3JpYmVfYWRtaW5ldmVudC4KCQkJJyZhcnRpY2xlPScudXJsZW5jb2RlKCRh cnRpY2xlKS4KCQkJJyZ1bnN1YnNjcmliZT0nLnVybGVuY29kZSgkZW1haWwpLgoJCQknJmNv ZGU9Jy51cmxlbmNvZGUoJGNvZGUpOwoJfQoKCWZ1bmN0aW9uIHBocV9zdWJzY3JpYmVfYWRt aW4oJGV2ZW50LCAkc3RlcCkKCXsKCQkvLyBXZSBuZWVkIHRoZSBwZXJtbGlua3VybF9pZCgp IGZ1bmN0aW9uCgkJQGluY2x1ZGVfb25jZSgncHVibGlzaC90YWdoYW5kbGVycy5waHAnKTsK CgkJLy9Gb3Igc29tZSByZWFzb24gdGhpcyBpcyBuZWVkZWQgb24gdGhlIHRvcCBwYWdlIG9m IHRoZSBhZG1pbiB0YWIuCgkJcGFnZXRvcCgiQ29tbWVudCBTdWJzY3JpcHRpb25zIiwgIiIp OwoKCQlwaHFfc3Vic2NyaWJlX2Zvcm1fY29tbW9uKGdwcygnYXJ0aWNsZScpKTsKCgkJJHN1 YnNjcmliZXJzID0gc2FmZV9yb3dzKCdhcnRpY2xlLCBlbWFpbCwgY29kZScsICdwaHFfc3Vi c2NyaWJlJywgJ2BzdWJzY3JpYmVkYCA9IHRydWUnKTsKCQllY2hvICc8aDE+U3Vic2NyaWJl ZDwvaDE+PHRhYmxlPjx0cj48dGg+QXJ0aWNsZTwvdGg+PHRoPkVtYWlsPC90aD48dGg+VW5z dWJzY3JpYmUvUmVtb3ZlPC90aD48L3RyPic7CgkJZm9yZWFjaCgkc3Vic2NyaWJlcnMgYXMg JHN1YikKCQkJZWNobyAnPHRyPgoJCQkJPHRkPicuaHRtbGVudGl0aWVzKCRzdWJbJ2FydGlj bGUnXSkuJzwvdGQ+CgkJCQk8dGQ+Jy5odG1sZW50aXRpZXMoJHN1YlsnZW1haWwnXSkuJzwv dGQ+CgkJCQk8dGQ+PGEgaHJlZj0iJy5waHFfc3Vic2NyaWJlX2FkbWluX3Vuc3ViX3VybCgk c3ViWydhcnRpY2xlJ10sICRzdWJbJ2VtYWlsJ10sICRzdWJbJ2NvZGUnXSkuJyI+VW5zdWJz Y3JpYmU8L2E+PC90ZD4KCQkJCTwvdHI+JzsKCQllY2hvICc8L3RhYmxlPic7CgoJCSRzdWJz Y3JpYmVycyA9IHNhZmVfcm93cygnYXJ0aWNsZSwgZW1haWwsIGNvZGUnLCAncGhxX3N1YnNj cmliZScsICdgc3Vic2NyaWJlZGAgPSBmYWxzZScpOwoJCWVjaG8gJzxoMT5Ob3QgY29uZmly bWVkIHN1YnNjcmlwdGlvbnM8L2gxPjx0YWJsZT48dHI+PHRoPkFydGljbGU8L3RoPjx0aD5F bWFpbDwvdGg+PHRoPlN1YnNjcmliZTwvdGg+PHRoPlJlbW92ZTwvdGg+PC90cj4nOwoJCWZv cmVhY2goJHN1YnNjcmliZXJzIGFzICRzdWIpCgkJCWVjaG8gJzx0cj4KCQkJCTx0ZD4nLmh0 bWxlbnRpdGllcygkc3ViWydhcnRpY2xlJ10pLic8L3RkPgoJCQkJPHRkPicuaHRtbGVudGl0 aWVzKCRzdWJbJ2VtYWlsJ10pLic8L3RkPgoJCQkJPHRkPjxhIGhyZWY9IicucGhxX3N1YnNj cmliZV9hZG1pbl9zdWJfdXJsKCRzdWJbJ2FydGljbGUnXSwgJHN1YlsnZW1haWwnXSwgJHN1 YlsnY29kZSddKS4nIj5TdWJzY3JpYmU8L2E+PC90ZD4KCQkJCTx0ZD48YSBocmVmPSInLnBo cV9zdWJzY3JpYmVfYWRtaW5fdW5zdWJfdXJsKCRzdWJbJ2FydGljbGUnXSwgJHN1YlsnZW1h aWwnXSwgJHN1YlsnY29kZSddKS4nIj5VbnN1YnNjcmliZTwvYT48L3RkPgoJCQkJPC90cj4n OwoJCWVjaG8gJzwvdGFibGU+JzsKCX0KfQoiO3M6MzoibWQ1IjtzOjMyOiJiZWMyM2Q0ZWQ5 OWUyMDdmODE1NDljNWIyYzdlNTY1MCI7fQ==