# mem_moderation_link v0.2 # Moderation plugin that allows links to be submitted to the moderation queue. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE5OiJtZW1fbW9kZXJhdGlvbl9saW5rIjtzOjc6InZlcnNp b24iO3M6MzoiMC4yIjtzOjY6ImF1dGhvciI7czoxNDoiTWljaGFlbCBNYW5mcmUiO3M6MTA6 ImF1dGhvcl91cmkiO3M6MTg6Imh0dHA6Ly9tYW5mcmUubmV0LyI7czoxMToiZGVzY3JpcHRp b24iO3M6NzY6Ik1vZGVyYXRpb24gcGx1Z2luIHRoYXQgYWxsb3dzIGxpbmtzIHRvIGJlIHN1 Ym1pdHRlZCB0byB0aGUgbW9kZXJhdGlvbiBxdWV1ZS4iO3M6NDoidHlwZSI7czoxOiIxIjtz OjQ6ImhlbHAiO3M6MTI0NzoiCTxoMSBjbGFzcz0idGl0bGUiPm1lbV9tb2RlcmF0aW9uX2xp bmsgcGx1Z2luPC9oMT4KCgk8aDIgY2xhc3M9InNlY3Rpb24gc3VtbWFyeSI+U3VtbWFyeTwv aDI+CgoJPHA+VGhpcyBtb2RlcmF0aW9uIHBsdWdpbiBhbGxvd3MgdXNlcnMgdG8gc3VibWl0 IGxpbmtzIHRvIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLjwvcD4KCgk8aDIgY2xhc3M9InNlY3Rp b24gY29udGFjdCI+QXV0aG9yIENvbnRhY3Q8L2gyPgoKCTxwPjxhIGhyZWY9Im1haWx0bzpt bWFuZnJlQGdtYWlsLmNvbT9zdWJqZWN0PVRleHRwYXR0ZXJuJTIwbWVtX21vZGVyYXRpb25f bGluayUyMHBsdWdpbiI+TWljaGFlbCBNYW5mcmU8L2E+PGJyIC8+CjxhIGhyZWY9Imh0dHA6 Ly9tYW5mcmUubmV0Ij5odHRwOi8vbWFuZnJlLm5ldDwvYT48L3A+CgoJPGgyIGNsYXNzPSJz ZWN0aW9uIGxpY2Vuc2UiPkxpY2Vuc2U8L2gyPgoKCTxwPlRoaXMgcGx1Z2luIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2xp Y2Vuc2VzL2luZm8vR1BMdjIuaHRtbCI+R1BMdjI8L2E+LjwvcD4KCgk8aDIgY2xhc3M9InNl Y3Rpb24gaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2gyPgoKCTxwPjxhIGhyZWY9Ii4v aW5kZXgucGhwP2V2ZW50PWxpbmtfbW9kZXJhdGUmYW1wO3N0ZXA9cHJlaW5zdGFsbCI+U3Rh cnQgSW5zdGFsbCBXaXphcmQ8L2E+PC9wPgoKCTxwPkluc3RhbGxzIHR3byBmb3JtczogbW9k X2xpbmtfc3VibWl0X2Zvcm0gYW5kIG1vZF9saW5rX3N1Y2Nlc3MuPC9wPgoKCTxoMiBjbGFz cz0ic2VjdGlvbiB0YWdzIj5UYWdzPC9oMj4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9t b2RlcmF0aW9uX2xpbmtfZm9ybSI+bWVtX21vZGVyYXRpb25fbGlua19mb3JtPC9oMz4KCgk8 cCBjbGFzcz0idGFnLXN1bW1hcnkiPm1lbV9mb3JtIGhlbHBlciB0YWcgZm9yIGxpbmsgc3Vi bWlzc2lvbi9lZGl0IGZvcm0uPC9wPgoKCTxwPlRha2VzIHRoZSBzYW1lIGF0dHJpYnV0ZXMg YXMgbWVtX2Zvcm0uIFNlZSBtZW1fZm9ybSBmb3IgdGFnIGF0dHJpYnV0ZXMgYW5kIHVzYWdl LjwvcD4KCgk8cD5FeGFtcGxlOiA8Y29kZT4mbHQ7dHhwOm1lbV9tb2RlcmF0aW9uX2xpbmtf Zm9ybSBmb3JtPSZxdW90O21vZF9saW5rX3N1Ym1pdF9mb3JtJnF1b3Q7IHRoYW5rc19mb3Jt PSZxdW90O21vZF9saW5rX3N1Y2Nlc3MmcXVvdDsgbGFiZWw9JnF1b3Q7TGluayBEZXRhaWxz JnF1b3Q7IC8mZ3Q7PC9jb2RlPjwvcD4iO3M6NDoiY29kZSI7czoxMjI2NToiCi8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwov LyBQbHVnaW4gbWVtX21vZGVyYXRpb25fbGluawovLyBBdXRob3I6IE1pY2hhZWwgTWFuZnJl IChodHRwOi8vbWFuZnJlLm5ldC8pCi8vIFJldmlzaW9uczoKLy8KLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmdsb2JhbCAk ZXZlbnQsICRzdGVwLCAkbWVtX2xpbmtfdmFycywgJG1lbV9saW5rX2RlbGV0ZV92YXJzOwoK cmVxdWlyZV9wbHVnaW4oJ21lbV9tb2RlcmF0aW9uJyk7CgovLyBsaW5rL2xpbmstZWRpdCB2 YXJzCiRtZW1fbGlua192YXJzID0gYXJyYXkoJ25vdGUnLCd1c2VyJywnZW1haWwnLCdtb2Rp ZCcsJ2lkJywnbGlua2lkJywnZGF0ZScsJ2NhdGVnb3J5JywndXJsJywnbGlua25hbWUnLCds aW5rc29ydCcsJ2Rlc2NyaXB0aW9uJyk7Ci8vIGxpbmstZGVsZXRlIHZhcnMKJG1lbV9saW5r X2RlbGV0ZV92YXJzID0gYXJyYXkoJ3VzZXInLCdlbWFpbCcsJ2xpbmtpZCcsJ3RpdGxlJyk7 CgoKCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCgkvLyBnaXZlIHB1Ymxpc2hl ciBpbnN0YWxsIGFjY2VzcwoJYWRkX3ByaXZzKCdtb2RlcmF0ZS5saW5rJywnMScpOwovLwlh ZGRfcHJpdnMoJ21vZGVyYXRlLmxpbmsnLCcxLDIsMyw0LDUsNicpOwoKCS8vIHJlZ2lzdGVy IGV2ZW50IHdpdGggdHhwCglyZWdpc3Rlcl9jYWxsYmFjaygnbGlua19tb2RlcmF0ZScsJ2xp bmtfbW9kZXJhdGUnLCcnLCAxKTsKCgkvLyB3aXJlIHVwIG1vZGVyYXRpb24gdHlwZXMKCW1l bV9tb2RlcmF0aW9uX3JlZ2lzdGVyKCdsaW5rJywkbWVtX2xpbmtfdmFycywnbGlua19tb2Rl cmF0ZV9wcmVzZW50ZXInLCdsaW5rX21vZGVyYXRlX2FwcHJvdmVyJywnJyk7CgltZW1fbW9k ZXJhdGlvbl9yZWdpc3RlcignbGluay1lZGl0JywkbWVtX2xpbmtfdmFycywnbGlua19tb2Rl cmF0ZV9wcmVzZW50ZXInLCdsaW5rX21vZGVyYXRlX2FwcHJvdmVyJywnJyk7CgltZW1fbW9k ZXJhdGlvbl9yZWdpc3RlcignbGluay1kZWxldGUnLCRtZW1fbGlua192YXJzLCdsaW5rX21v ZGVyYXRlX3ByZXNlbnRlcicsJ2xpbmtfbW9kZXJhdGVfYXBwcm92ZXInLCcnKTsKCgoJaWYg KCRldmVudD09J2xpbmtfbW9kZXJhdGUnKQoJewoJCS8qIEV2ZW50IGhhbmRsZXIgKi8KCQlm dW5jdGlvbiBsaW5rX21vZGVyYXRlKCRldmVudCwgJHN0ZXApCgkJewoJCQkkbXNnPScnOwoK CQkJaWYgKCRzdGVwPT0nbGlua19zYXZlJyBvciAkc3RlcD09J2xpbmtfcG9zdCcpCgkJCXsK CQkJCS8vIHNhdmUgY2hhbmdlcwoJCQkJJG1zZyA9IGxpbmtfbW9kZXJhdGVfc2F2ZSgkc3Rl cCk7CgkJCX0KCQkJZWxzZSBpZiAoJHN0ZXA9PSdwcmVpbnN0YWxsJyBvciAkc3RlcD09J2lu c3RhbGwnKQoJCQl7CgkJCQkvLyBuZWVkIHRhYiBkdXJpbmcgaW5zdGFsbAoJCQkJcmVnaXN0 ZXJfdGFiKCdleHRlbnNpb25zJywnbGlua19tb2RlcmF0ZScsJ2xpbmtfbW9kZXJhdGUnKTsK CQkJCWVjaG8gcGFnZVRvcCgnTGluayBNb2RlcmF0aW9uJywnJyk7CgoJCQkJZWNobyBsaW5r X2luc3RhbGwoKTsKCgkJCQlyZXR1cm47CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoJHN0 ZXApCgkJCQl7CgkJCQkJLy8gJG1zZyA9ICJTdGVwIGlzICckc3RlcCciOwoJCQkJCXRyaWdn ZXJfZXJyb3IoZ1R4dCgndW5rbm93bl9zdGVwJykpOwoJCQkJfQoJCQl9CgoJCQlwYWdlVG9w KCdMaW5rIE1vZGVyYXRpb24nLCRtc2cpOwoKCQkJZWNobyBsaW5rX21vZGVyYXRlX2Zvcm0o KTsKCQl9CgoJCS8qKiBJbnN0YWxsIGRlZmF1bHQgZm9ybXMsIHByZWZzLCBldGMuICovCgkJ ZnVuY3Rpb24gbGlua19pbnN0YWxsKCkKCQl7CgkJCSRsb2cgPSBhcnJheSgpOwoKCQkJLy8g ZGVmYXVsdCBhcnRpY2xlIGVkaXQgZm9ybQoJCQkkZm9ybSA9IGZldGNoKCdGb3JtJywndHhw X2Zvcm0nLCduYW1lJywnbW9kX2xpbmtfc3VibWl0X2Zvcm0nKTsKCQkJaWYgKCEkZm9ybSkK CQkJewoJCQkJJGZvcm1faHRtbCA9IDw8PEVPRgo8ZGl2Pjx0eHA6bWVtX2Zvcm1fdGV4dCBu YW1lPSJsaW5rbmFtZSIgcmVxdWlyZWQ9IjEiIGxhYmVsPSJMaW5rIFRpdGxlIiBicmVhaz0i IiAvPjwvZGl2Pgo8ZGl2Pjx0eHA6bWVtX2Zvcm1fdGV4dCBuYW1lPSJ1cmwiIHJlcXVpcmVk PSIxIiBsYWJlbD0iVVJMIChpbmNsLiBodHRwOi8vKSIgYnJlYWs9IiIgLz48L2Rpdj4KPGRp dj48dHhwOm1lbV9mb3JtX3RleHRhcmVhIG5hbWU9ImRlc2NyaXB0aW9uIiByZXF1aXJlZD0i MSIgbGFiZWw9IkRlc2NyaXB0aW9uIiBicmVhaz0iIiAvPjwvZGl2PgoKPGRpdj48dHhwOm1l bV9mb3JtX3RleHRhcmVhIG5hbWU9Im5vdGUiIGNsYXNzPSJ0eHRhcmVhX21lZGl1bSIgbGFi ZWw9Ik5vdGVzIGZvciB0aGUgTW9kZXJhdG9yIChvcHRpb25hbCkiIGJyZWFrPSIiIHJlcXVp cmVkPSIwIiAvPjwvZGl2PgoKPHR4cDptZW1fZm9ybV9zdWJtaXQgYnV0dG9uPSIxIiBuYW1l PSJhY3Rpb24iPjxzcGFuPlN1Ym1pdCBMaW5rIHN1Z2dlc3Rpb248L3NwYW4+PC90eHA6bWVt X2Zvcm1fc3VibWl0PgpFT0Y7CgkJCQkkZm9ybV9odG1sID0gZG9TbGFzaCgkZm9ybV9odG1s KTsKCQkJCWlmIChzYWZlX2luc2VydCgndHhwX2Zvcm0nLCJuYW1lPSdtb2RfbGlua19zdWJt aXRfZm9ybScsdHlwZT0nbWlzYycsRm9ybT0neyRmb3JtX2h0bWx9JyIpKQoJCQkJCSRsb2db XSA9ICJDcmVhdGVkIGZvcm0gJ21vZF9saW5rX3N1Ym1pdF9mb3JtJyI7CgkJCQllbHNlCgkJ CQkJJGxvZ1tdID0gIkZhaWxlZCB0byBjcmVhdGUgZm9ybSAnbW9kX2xpbmtfc3VibWl0X2Zv cm0nLiAiIC4gbXlzcWxfZXJyb3IoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRsb2dbXSA9 ICJGb3JtICdtb2RfbGlua19zdWJtaXRfZm9ybScgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5n IGluc3RhbGxhdGlvbiBvZiBkZWZhdWx0IGZvcm0uIjsKCQkJfQoKCQkJLy8gZGVmYXVsdCBh cnRpY2xlIHN1Y2Nlc3MgZm9ybQoJCQkkZm9ybSA9IGZldGNoKCdGb3JtJywndHhwX2Zvcm0n LCduYW1lJywnbW9kX2xpbmtfc3VjY2VzcycpOwoJCQlpZiAoISRmb3JtKQoJCQl7CgkJCQkk Zm9ybV9odG1sID0gPDw8RU9GCjx0eHA6bWVtX2lmX3N0ZXAgbmFtZT0ibGlua19kZWxldGUi PgoJPGgyPkxpbmsgZGVsZXRlZDwvaDI+Cgk8cD5Zb3VyIHN1Ym1pc3Npb24gaGFzIGJlZW4g ZGVsZXRlZCBhbmQgd2lsbCBub3QgYmUgcG9zdGVkIG9uIHRoaXMgc2l0ZS48L3A+Cjx0eHA6 ZWxzZSAvPgoJPGgyPkxpbmsgc3VibWl0dGVkPC9oMj4KCTxwPlRoYW5rIHlvdSBmb3Igc3Vi bWl0dGluZyB5b3VyIGxpbmsuIEl0IHdpbGwgYmUgcmV2aWV3ZWQgYnkgYSBtb2RlcmF0b3Ig YmVmb3JlIGJlaW5nIHBvc3RlZCB0byB0aGUgc2l0ZS48L3A+CjwvdHhwOm1lbV9pZl9zdGVw PgpFT0Y7CgkJCQkkZm9ybV9odG1sID0gZG9TbGFzaCgkZm9ybV9odG1sKTsKCQkJCWlmIChz YWZlX2luc2VydCgndHhwX2Zvcm0nLCJuYW1lPSdtb2RfbGlua19zdWNjZXNzJyx0eXBlPSdt aXNjJyxGb3JtPSd7JGZvcm1faHRtbH0nIikpCgkJCQkJJGxvZ1tdID0gIkNyZWF0ZWQgZm9y bSAnbW9kX2xpbmtfc3VjY2VzcyciOwoJCQkJZWxzZQoJCQkJCSRsb2dbXSA9ICJGYWlsZWQg dG8gY3JlYXRlIGZvcm0gJ21vZF9saW5rX3N1Y2Nlc3MnLiAiIC4gbXlzcWxfZXJyb3IoKTsK CQkJfQoJCQllbHNlCgkJCXsKCQkJCSRsb2dbXSA9ICJGb3JtICdtb2RfbGlua19zdWNjZXNz JyBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgaW5zdGFsbGF0aW9uIG9mIGRlZmF1bHQgZm9y bS4iOwoJCQl9CgoJCQlyZXR1cm4gdGFnKCJJbnN0YWxsIExvZyIsJ2gyJykuZG9XcmFwKCRs b2csJ3VsJywnbGknKTsKCQl9Cgl9IC8vIGlmIGxpbmtfbW9kZXJhdGUKfSAvLyBpZiBhZG1p bgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBsaW5rX21vZGVyYXRlX2Zvcm0oKQp7CglnbG9iYWwg JHN0ZXAsJG1lbV9saW5rX3ZhcnM7CgoJaWYgKCRtZW1fbGlua192YXJzKSBleHRyYWN0KGdw c2EoJG1lbV9saW5rX3ZhcnMpKTsKCglpZigkaWQgJiYgJHN0ZXA9PSdsaW5rX2VkaXQnKSB7 CgkJZXh0cmFjdChzYWZlX3JvdygiKiIsICJ0eHBfbGluayIsICJpZCA9ICRpZCIpKTsKCX0K CglpZiAoJHN0ZXA9PSdsaW5rX3NhdmUnIG9yICRzdGVwPT0nbGlua19wb3N0Jyl7CgkJZm9y ZWFjaCgkdmFycyBhcyAkdmFyKSB7CgkJCSQkdmFyID0gJyc7CgkJfQoJfQoKCSR0ZXh0YXJl YSA9ICc8dGV4dGFyZWEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbHM9IjQwIiByb3dzPSI3IiB0 YWJpbmRleD0iNCI+Jy4KCQkkZGVzY3JpcHRpb24uJzwvdGV4dGFyZWE+JzsKCSRzZWxlY3Rz ID0gZXZlbnRfY2F0ZWdvcnlfcG9wdXAoImxpbmsiLCAkY2F0ZWdvcnkpOwoJJGVkaXRsaW5r ID0gJyc7IC8vJyBbJy5lTGluaygnY2F0ZWdvcnknLCdsaXN0JywnJywnJyxnVHh0KCdlZGl0 JykpLiddJzsKCgkkb3V0ID0KCQlzdGFydFRhYmxlKCAnZWRpdCcgKSAuCgkJCXRyKCBmTGFi ZWxDZWxsKCAndGl0bGUnICkgLiBmSW5wdXRDZWxsKCAnbGlua25hbWUnLCAkbGlua25hbWUs IDEsIDMwICkpIC4KCQkJdHIoIGZMYWJlbENlbGwoICdzb3J0X3ZhbHVlJykgLmZJbnB1dENl bGwoICdsaW5rc29ydCcsICRsaW5rc29ydCwgMiwgMTUgKSkgLgoJCQl0ciggZkxhYmVsQ2Vs bCggJ3VybCcsJ2xpbmtfdXJsJykgLiBmSW5wdXRDZWxsKCAndXJsJywgJHVybCwgMywgMzAp ICkgLgoJCQl0ciggZkxhYmVsQ2VsbCggJ2xpbmtfY2F0ZWdvcnknLCAnbGlua19jYXRlZ29y eScgKSAuIHRkKCAkc2VsZWN0cyAuICRlZGl0bGluayApICkgLgoJCQl0ciggZkxhYmVsQ2Vs bCggJ2Rlc2NyaXB0aW9uJywgJ2xpbmtfZGVzY3JpcHRpb24nICkgLiB0ZGEoICR0ZXh0YXJl YSwgJyB2YWxpZ249InRvcCInICkgKSAuCgkJCXRyKCB0ZCgpIC4gdGQoIGZJbnB1dCggInN1 Ym1pdCIsICcnLCBnVHh0KCAnc2F2ZScgKSwgInB1Ymxpc2giICkgKSApIC4KCQllbmRUYWJs ZSgpIC4KCgkJZUlucHV0KCAnbGlua19tb2RlcmF0ZScgKSAuIHNJbnB1dCggKCAkc3RlcD09 J2xpbmtfZWRpdCcgKSA/ICdsaW5rX3NhdmUnIDogJ2xpbmtfcG9zdCcgKSAuCgkJaElucHV0 KCAnaWQnLCAkaWQgKTsKCglyZXR1cm4gZm9ybSggJG91dCApOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGxpbmtfbW9kZXJhdGVfc2F2ZSgkc3RlcCkKewoJZ2xvYmFsICR0eHBjZmcsJHR4 cGFjLCRtZW1fbGlua192YXJzLCR0eHBfdXNlcjsKCSR2YXJyYXkgPSBncHNhKCRtZW1fbGlu a192YXJzKTsKCglpZigkdHhwYWNbJ3RleHRpbGVfbGlua3MnXSkgewoKCQlpbmNsdWRlX29u Y2UgJHR4cGNmZ1sndHhwYXRoJ10uJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CgkJJHRleHRp bGUgPSBuZXcgVGV4dGlsZSgpOwoKCQkkdmFycmF5WydkZXNjcmlwdGlvbiddID0gJHRleHRp bGUtPlRleHRpbGVUaGlzKCR2YXJyYXlbJ2Rlc2NyaXB0aW9uJ10sMSk7Cgl9CgoJaWYgKCEk dmFycmF5WydsaW5rc29ydCddKSAkdmFycmF5WydsaW5rc29ydCddID0gJHZhcnJheVsnbGlu a25hbWUnXTsKCgkkcmVzID0gJyc7CgoJaWYgKCRzdGVwPT0nbGlua19lZGl0JykgewoJCWlm ICh1cGRhdGVfbW9kZXJhdGVkX2NvbnRlbnQoJGlkLCR2YXJyYXlbJ2Rlc2NyaXB0aW9uJ10s JHZhcnJheSkpIHsKCQkJJHJlcyA9ICJVcGRhdGVkIGxpbmsgJyRpZCciOwoJCX0gZWxzZSB7 CgkJCSRyZXMgPSAiRmFpbGVkIHRvIHVwZGF0ZSBsaW5rICckaWQnIjsKCQl9Cgl9IGVsc2Ug ewoJCSRlbWFpbCA9IHNhZmVfZmllbGQoJ2VtYWlsJywndHhwX3VzZXJzJywibmFtZT0nJHR4 cF91c2VyJyIpOwoKCQlpZiAoJGVtYWlsIGFuZCAoJHJlcz1zdWJtaXRfbW9kZXJhdGVkX2Nv bnRlbnQoJ2xpbmsnLCRlbWFpbCwkdmFycmF5WydkZXNjcmlwdGlvbiddLCR2YXJyYXkpKSkg ewoJCQkkcmVzID0gIlN1Ym1pdHRlZCBsaW5rICckcmVzJyI7CgkJfSBlbHNlIHsKCQkJJHJl cyA9ICJGYWlsZWQgdG8gc3VibWl0IGxpbmsiOwoJCX0KCX0KCglyZXR1cm4gJHJlczsKfQoK ZnVuY3Rpb24gbGlua19tb2RlcmF0ZV9wcmVzZW50ZXIoJHR5cGUsJGRhdGEpIHsKCWlmICgk dHlwZT09J2xpbmsnKSB7CgkJJGRlc2NyaXB0aW9uPScnOwoJCSRsaW5rbmFtZT0nJzsKCQkk bGlua3NvcnQ9Jyc7CgkJJGNhdGVnb3J5PScnOwoJCSR1cmw9Jyc7CgkJaWYgKGlzX2FycmF5 KCRkYXRhKSkgZXh0cmFjdCgkZGF0YSk7CgoJCSRzZWxlY3RzID0gZXZlbnRfY2F0ZWdvcnlf cG9wdXAoImxpbmsiLCAkY2F0ZWdvcnkpOwoJCSR0ZXh0YXJlYSA9ICc8dGV4dGFyZWEgbmFt ZT0iZGVzY3JpcHRpb24iIGNvbHM9IjQwIiByb3dzPSI3IiB0YWJpbmRleD0iNCI+Jy4kZGVz Y3JpcHRpb24uJzwvdGV4dGFyZWE+JzsKCgkJcmV0dXJuIHN0YXJ0VGFibGUoICdlZGl0JyAp IC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAndGl0bGUnICkgLiBmSW5wdXRDZWxsKCAnbGlua25h bWUnLCAkbGlua25hbWUsIDEsIDMwICkpIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnc29ydF92 YWx1ZScpIC5mSW5wdXRDZWxsKCAnbGlua3NvcnQnLCAkbGlua3NvcnQsIDIsIDE1ICkpIC4K CQkJCXRyKCBmTGFiZWxDZWxsKCAndXJsJywnbGlua191cmwnKSAuIGZJbnB1dENlbGwoICd1 cmwnLCAkdXJsLCAzLCAzMCkgKSAuCgkJCQkoKCFlbXB0eSgkdXJsKSBhbmQgIWVtcHR5KCRs aW5rbmFtZSkpID8gdHIoIGZMYWJlbENlbGwoICd1cmwnICkgLiB0ZCggaHJlZigkbGlua25h bWUsJHVybCkgKSApIDogJycgKS4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnbGlua19jYXRlZ29y eScsICdsaW5rX2NhdGVnb3J5JyApIC4gdGQoICRzZWxlY3RzICkgKSAuCgkJCQl0ciggZkxh YmVsQ2VsbCggJ2Rlc2NyaXB0aW9uJywgJ2xpbmtfZGVzY3JpcHRpb24nICkgLiB0ZGEoICR0 ZXh0YXJlYSwgJyB2YWxpZ249InRvcCInICkgKTsKCQkJZW5kVGFibGUoKTsKCX0KCglyZXR1 cm4gJyc7Cn0KCmZ1bmN0aW9uIGxpbmtfbW9kZXJhdGVfYXBwcm92ZXIoJHR5cGUsJGRhdGEp CnsKCWlmICgkdHlwZT09J2xpbmsnICYmIGlzX2FycmF5KCRkYXRhKSkgewoJCWV4dHJhY3Qo JGRhdGEpOwoKCQkkcSA9IHNhZmVfaW5zZXJ0KCJ0eHBfbGluayIsCgkJICAgImNhdGVnb3J5 ICAgID0gJyRjYXRlZ29yeScsCgkJCWRhdGUgICAgICAgID0gbm93KCksCgkJCXVybCAgICAg ICAgID0gJyIudHJpbSgkdXJsKS4iJywKCQkJbGlua25hbWUgICAgPSAnJGxpbmtuYW1lJywK CQkJbGlua3NvcnQgICAgPSAnJGxpbmtzb3J0JywKCQkJZGVzY3JpcHRpb24gPSAnJGRlc2Ny aXB0aW9uJyIKCQkpOwoKCQlpZiAoISRxKQoJCQlyZXR1cm4gJ0ZhaWxlZCB0byBhcHByb3Zl IGxpbmsnOwoJfQp9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KLy8gUHVibGljIGZvcm0gbWV0aG9kcwoKLyoqIEhlbHBlciB0YWcg Zm9yIG1lbV9mb3JtICovCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2xpbmtfZm9ybSgkYXR0 cywgJHRoaW5nPScnKQp7CgkkYXR0c1sndHlwZSddID0gJ21lbV9tb2RlcmF0aW9uX2xpbmsn OwoKCXJldHVybiBtZW1fZm9ybSgkYXR0cywgJHRoaW5nKTsKfQoKLy8gcmVnaXN0ZXIgZnVu Y3Rpb25zIHdpdGggbWVtX2Zvcm0KcmVnaXN0ZXJfY2FsbGJhY2soJ21lbV9tb2RfbGlua19m b3JtX2RlZmF1bHRzJywgJ21lbV9mb3JtLmRlZmF1bHRzJyk7CnJlZ2lzdGVyX2NhbGxiYWNr KCdtZW1fbW9kX2xpbmtfZm9ybV9kaXNwbGF5JywgJ21lbV9mb3JtLmRpc3BsYXknKTsKcmVn aXN0ZXJfY2FsbGJhY2soJ21lbV9tb2RfbGlua19mb3JtX3N1Ym1pdHRlZCcsICdtZW1fZm9y bS5zdWJtaXQnKTsKCi8qKiBTZXQgZm9ybSBkZWZhdWx0cyAqLwpmdW5jdGlvbiBtZW1fbW9k X2xpbmtfZm9ybV9kZWZhdWx0cygpCnsKCWdsb2JhbCAkbWVtX2Zvcm0sICRtZW1fZm9ybV90 eXBlLCAkbWVtX2Zvcm1fZGVmYXVsdCwgJG1lbV9tb2RfaW5mbywgJG1lbV9tb2RsaW5rX2lu Zm87CgoJLy8gdHlwZSBjaGVjawoJaWYgKCRtZW1fZm9ybV90eXBlIT0nbWVtX21vZGVyYXRp b25fbGluaycpCgl7CgkJcmV0dXJuOwoJfQoKCWV4dHJhY3QoZ3BzYShhcnJheSgnbW9kaWQn LCdsaW5raWQnKSkpOwoKCS8vIGVkaXRpbmcgbW9kIGl0ZW0KCWlmICghZW1wdHkoJG1vZGlk KSkKCXsKCQkvLyBnZXQgbW9kIGRhdGEKCQkkbWVtX21vZF9pbmZvID0gc2FmZV9yb3coJyon LCd0eHBfbW9kZXJhdGlvbicsImBpZGA9JyIuZG9TbGFzaCgkbW9kaWQpLiInIik7CgoJCWlm ICgkbWVtX21vZF9pbmZvKQoJCXsKCQkJLy8gc2V0IGRlY29kZWQKCQkJJG1lbV9tb2RsaW5r X2luZm8gPSBtZW1fbW9kZXJhdGlvbl9kZWNvZGUoJG1lbV9tb2RfaW5mb1snZGF0YSddKTsK CQl9Cgl9CgkvLyBlZGl0aW5nIGxpbmsKCWVsc2UgaWYgKCFlbXB0eSgkbGlua2lkKSkKCXsK CQkkcnMgPSBzYWZlX3JvdygnKicsICd0eHBfbGluaycsImBpZGA9JyIuZG9TbGFzaCgkbGlu a2lkKS4iJyIpOwoKCQkvLyBzZXQgbW9kIGRhdGEKCQkkbWVtX21vZGxpbmtfaW5mbyA9IGFy cmF5KCk7CgkJZm9yZWFjaCgkcnMgYXMgJGsgPT4gJHYpCgkJewoJCQkkbWVtX21vZGxpbmtf aW5mb1tzdHJ0b2xvd2VyKCRrKV0gPSAkdjsKCQl9Cgl9CgoJaWYgKGlzX2FycmF5KCRtZW1f bW9kbGlua19pbmZvKSkKCXsKCQkvLyBzZXQgZGVmYXVsdHMKCQlmb3JlYWNoKCRtZW1fbW9k bGlua19pbmZvIGFzICRrZXkgPT4gJHZhbCkKCQl7CgkJCW1lbV9mb3JtX2RlZmF1bHQoJGtl eSwgJHZhbCk7CgkJfQoJfQp9CgpmdW5jdGlvbiBtZW1fbW9kX2xpbmtfZm9ybV9kaXNwbGF5 KCkKewoJZ2xvYmFsICRtZW1fZm9ybV90eXBlLCAkbWVtX2Zvcm1fbGFiZWxzLCAkbWVtX2Zv cm1fdmFsdWVzLCAkbWVtX21vZF9pbmZvLCAkbWVtX21vZGxpbmtfaW5mbzsKCgkvLyB0eXBl IGNoZWNrCglpZiAoJG1lbV9mb3JtX3R5cGUhPSdtZW1fbW9kZXJhdGlvbl9saW5rJykKCXsK CQlyZXR1cm47Cgl9CgoJJG91dCA9ICcnOwoKCWlmIChpc3NldCgkbWVtX21vZF9pbmZvKSkK CXsKCQkkb3V0IC49IG4uJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1vZGlkIiB2YWx1 ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRtZW1fbW9kX2luZm9bJ2lkJ10pLiciIC8+Jy4KCQkJ bi4nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9IicuIGh0bWxzcGVj aWFsY2hhcnMoJG1lbV9tb2RfaW5mb1sndHlwZSddKS4nIiAvPic7CgoJCWlmICgkbWVtX21v ZF9pbmZvWyd0eXBlJ10gPT0gJ2xpbmstZWRpdCcgJiYgaXNzZXQoJG1lbV9tb2RsaW5rX2lu Zm9bJ2xpbmtpZCddKSkKCQkJJG91dCAuPSBuLic8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1l PSJsaW5raWQiIHZhbHVlPSInLiRtZW1fbW9kbGlua19pbmZvWydsaW5raWQnXS4nIiAvPic7 CgoJCW1lbV9mb3JtX3N0b3JlKCdtb2RpZCcsICdtb2RpZCcsICRtZW1fbW9kX2luZm9bJ2lk J10pOwoJCW1lbV9mb3JtX3N0b3JlKCd0eXBlJywgJ3R5cGUnLCAkbWVtX21vZF9pbmZvWyd0 eXBlJ10pOwoJfQoJZWxzZSBpZiAoaXNzZXQoJG1lbV9tb2RsaW5rX2luZm8pKQoJewoJCSRv dXQgLj0gbi4nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibGlua2lkIiB2YWx1ZT0iJy5o dG1sc3BlY2lhbGNoYXJzKCRtZW1fbW9kbGlua19pbmZvWydsaW5raWQnXSkuJyIgLz4nLgoJ CQluLic8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eXBlIiB2YWx1ZT0ibGluayIgLz4n OwoJfQoKCXJldHVybiAkb3V0Owp9CgovKiogRm9ybSBzdWJtaXQgaGFuZGxlciAqLwpmdW5j dGlvbiBtZW1fbW9kX2xpbmtfZm9ybV9zdWJtaXR0ZWQoKQp7CglnbG9iYWwgJHByZWZzLCAk bWVtX2xpbmtfdmFycywgJG1lbV9mb3JtX3R5cGUsICR0eHBfdXNlciwgJGlnbl91c2VyLCAk bWVtX21vZF9pbmZvLCAkbWVtX21vZGxpbmtfaW5mbywgJG1lbV9mb3JtX3RoYW5rc19mb3Jt OwoKCWlmICgkbWVtX2Zvcm1fdHlwZSE9J21lbV9tb2RlcmF0aW9uX2xpbmsnKQoJewoJCXJl dHVybjsKCX0KCglleHRyYWN0KGdwc2EoYXJyYXkoJ21vZGlkJywnc3RlcCcsJ2lkJywnbGlu a2lkJykpKTsKCgkkbWVtX21vZGxpbmtfaW5mbyA9IGdwc2EoJG1lbV9saW5rX3ZhcnMpOwoJ JG91dCA9ICcnOwoKCSRpc19zYXZlID0gcHMoJ21lbV9tb2RlcmF0aW9uX3NhdmUnKTsKCSRp c19kZWxldGUgPSBwcygnbWVtX21vZGVyYXRpb25fZGVsZXRlJyk7CgkkaXNfdXBkYXRlID0g cHMoJ21lbV9tb2RlcmF0aW9uX3VwZGF0ZScpIHx8ICgkaXNfc2F2ZSAmJiBwcygnbW9kaWQn KSk7CgoJaWYgKGlzc2V0KCRpZ25fdXNlcikpICR0eHBfdXNlciA9ICRpZ25fdXNlcjsKCglp ZiAoIWVtcHR5KCRtb2RpZCkpICRpZCA9ICRtb2RpZDsKCgoJaWYgKCRpc19kZWxldGUpCgl7 CgkJaWYgKHJlbW92ZV9tb2RlcmF0ZWRfY29udGVudCgkbW9kaWQpKQoJCXsKCQkJJHJlcyA9 IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2xpbmtfZGVsZXRlZCcpOwoJCX0KCQllbHNlCgkJewoJ CQkkcmVzID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnbGlua19kZWxldGVfZmFpbGVkJyk7CgkJ fQoJfQoJZWxzZWlmICghZW1wdHkoJGxpbmtpZCkpCgl7CgkJJGxpbmtpZCA9IGRvU2xhc2go JGxpbmtpZCk7CgkJJHJzID0gc2FmZV9yb3dzKCIqLCB1bml4X3RpbWVzdGFtcChkYXRlKSBh cyB1ZGF0ZSIsInR4cF9saW5rIiwiYGlkYCA9ICRsaW5raWQiKTsKCgkJaWYgKCRycykKCQl7 CgkJCS8vIG1lcmdlIHRoZSBwYXNzZWQgaW4gdmFsdWVzIHRvIHRoZSBleGlzdGluZwoJCQlm b3JlYWNoKCRtZW1fbW9kbGlua19pbmZvIGFzICRrZXkgPT4gJHZhbCkKCQkJewoJCQkJJHJz WyRrZXldID0gJHZhbDsKCQkJfQoJCQkkcnNbJ2xpbmtpZCddID0gJGxpbmtpZDsKCgkJCWlm ICgkaXNfdXBkYXRlKQoJCQl7CgkJCQkkcmVzID0gdXBkYXRlX21vZGVyYXRlZF9jb250ZW50 KCRpZCwgJG1lbV9tb2RsaW5rX2luZm9bJ25vdGUnXSwgJG1lbV9tb2RsaW5rX2luZm8pOwoJ CQl9CgkJCWVsc2UKCQkJewoJCQkJJHJlcyA9IHN1Ym1pdF9tb2RlcmF0ZWRfY29udGVudCgn bGluay1lZGl0JywgJHVzZXJfZW1haWwsICRtZW1fbW9kbGlua19pbmZvWydub3RlJ10sICRt ZW1fbW9kbGlua19pbmZvLCAkbGlua2lkKTsKCgkJCQlpZiAoJHJlcykKCQkJCXsKCQkJCQkv LyBkZWxldGUgYWxsIG90aGVyIHBlbmRpbmcgbGluayBtb2RlcmF0aW9uIGFjdGlvbnMgYnkg dGhpcyB1c2VyIGZvciB0aGUgc2FtZSBpdGVtX2lkCgkJCQkJc2FmZV9kZWxldGUoJ3R4cF9t b2RlcmF0aW9uJywgImB0eXBlYCBMSUtFICdsaW5rJScgYW5kIHVzZXIgPSAnJHR4cF91c2Vy JyBhbmQgaXRlbV9pZCA9ICRsaW5raWQgYW5kIGlkICE9ICRyZXMgYW5kIGl0ZW1faWQgIT0g MCIpOwoJCQkJfQoJCQl9CgkJfSAvLyBpZiAkcnMKCX0KCWVsc2UKCXsKCQlpZiAoaXNzZXQo JGlkKSkgJG1lbV9tb2RsaW5rX2luZm9bJ2lkJ10gPSAkaWQ7CgoJCWlmICgkaXNfdXBkYXRl KQoJCXsKCQkJaWYgKGlzc2V0KCRtZW1fbW9kbGlua19pbmZvWydub3RlJ10pKQoJCQl7CgkJ CQkkbm90ZSA9ICRtZW1fbW9kbGlua19pbmZvWydub3RlJ107CgkJCX0KCQkJZWxzZQoJCQl7 CgkJCQkkbm90ZSA9ICRtZW1fbW9kX2luZm9bJ2Rlc2MnXTsKCQkJfQoKCQkJaWYgKHVwZGF0 ZV9tb2RlcmF0ZWRfY29udGVudCgkaWQsJG5vdGUsJG1lbV9tb2RsaW5rX2luZm8pKQoJCQl7 CgkJCQkkcmVzID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnbGlua191cGRhdGVkJyk7CgkJCX0K CQkJZWxzZQoJCQl7CgkJCQkkcmVzID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnbGlua191cGRh dGVfZmFpbGVkJyk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJaWYgKCFpc3NldCgkdXNlcikp CgkJCXsKCQkJCSRtZW1fbW9kbGlua19pbmZvWyd1c2VyJ10gPSAkdHhwX3VzZXI7CgkJCX0K CgkJCSRyZXMgPSBzdWJtaXRfbW9kZXJhdGVkX2NvbnRlbnQoJ2xpbmsnLCAnJywgJG1lbV9t b2RsaW5rX2luZm9bJ25vdGUnXSwgJG1lbV9tb2RsaW5rX2luZm8pOwoJCX0KCX0KCgkkbWVt X21vZGxpbmtfaW5mb1sncmVzdWx0J10gPSAkcmVzOwoKCSR0aGFua3NfZm9ybSA9IEBmZXRj aF9mb3JtKCRtZW1fZm9ybV90aGFua3NfZm9ybSk7CgoJaWYgKCFlbXB0eSgkdGhhbmtzX2Zv cm0pKQoJewoJCSRvdXQgPSBwYXJzZSgkdGhhbmtzX2Zvcm0pOwoJfQoKCS8vIGNsZWFudXAg Z2xvYmFsCgl1bnNldCgkbWVtX21vZGxpbmtfaW5mbyk7CgoJcmV0dXJuICRvdXQ7Cn0KCiI7 czo4OiJoZWxwX3JhdyI7czo5OTY6ImgxKHRpdGxlKS4gbWVtX21vZGVyYXRpb25fbGluayBw bHVnaW4KCmgyKHNlY3Rpb24gc3VtbWFyeSkuIFN1bW1hcnkKCnAuIFRoaXMgbW9kZXJhdGlv biBwbHVnaW4gYWxsb3dzIHVzZXJzIHRvIHN1Ym1pdCBsaW5rcyB0byB0aGUgbW9kZXJhdGlv biBxdWV1ZS4KCmgyKHNlY3Rpb24gY29udGFjdCkuIEF1dGhvciBDb250YWN0CgoiTWljaGFl bCBNYW5mcmUiOm1haWx0bzptbWFuZnJlQGdtYWlsLmNvbT9zdWJqZWN0PVRleHRwYXR0ZXJu JTIwbWVtX21vZGVyYXRpb25fbGluayUyMHBsdWdpbgoiaHR0cDovL21hbmZyZS5uZXQiOmh0 dHA6Ly9tYW5mcmUubmV0CgpoMihzZWN0aW9uIGxpY2Vuc2UpLiBMaWNlbnNlCgpwLiBUaGlz IHBsdWdpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgIkdQTHYyIjpodHRwOi8vd3d3LmZzZi5v cmcvbGljZW5zaW5nL2xpY2Vuc2VzL2luZm8vR1BMdjIuaHRtbC4KCmgyKHNlY3Rpb24gaW5z dGFsbGF0aW9uKS4gSW5zdGFsbGF0aW9uCgpwLiAiU3RhcnQgSW5zdGFsbCBXaXphcmQiOi4v aW5kZXgucGhwP2V2ZW50PWxpbmtfbW9kZXJhdGUmc3RlcD1wcmVpbnN0YWxsCgpwLiBJbnN0 YWxscyB0d28gZm9ybXM6IG1vZF9saW5rX3N1Ym1pdF9mb3JtIGFuZCBtb2RfbGlua19zdWNj ZXNzLgoKaDIoc2VjdGlvbiB0YWdzKS4gVGFncwoKaDModGFnI21lbV9tb2RlcmF0aW9uX2xp bmtfZm9ybSkuIG1lbV9tb2RlcmF0aW9uX2xpbmtfZm9ybQoKcCh0YWctc3VtbWFyeSkuIG1l bV9mb3JtIGhlbHBlciB0YWcgZm9yIGxpbmsgc3VibWlzc2lvbi9lZGl0IGZvcm0uCgpwLiBU YWtlcyB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFzIG1lbV9mb3JtLiBTZWUgbWVtX2Zvcm0gZm9y IHRhZyBhdHRyaWJ1dGVzIGFuZCB1c2FnZS4KCnAuIEV4YW1wbGU6IEA8dHhwOm1lbV9tb2Rl cmF0aW9uX2xpbmtfZm9ybSBmb3JtPSJtb2RfbGlua19zdWJtaXRfZm9ybSIgdGhhbmtzX2Zv cm09Im1vZF9saW5rX3N1Y2Nlc3MiIGxhYmVsPSJMaW5rIERldGFpbHMiIC8+QCI7czozOiJt ZDUiO3M6MzI6IjA1MjhhMDc2M2U1MDdmOWYwNGQwYzVlNDM5OGQ3ZjFjIjt9