# Name: smd_thumbnail v0.14 # Type: Admin/Public side plugin # Multiple image thumbnails of arbitrary dimensions # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfdGh1bWJuYWlsIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjE0IjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjM4NDUzOiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfc3R5bGVzOw0KDQoJJHNt ZF90aHVtYl9ldmVudCA9ICdzbWRfdGh1bWJuYWlsJzsNCgkkc21kX3RodW1iX3ByaXZzID0g JzEsMiwzJzsNCg0KCSRzbWRfdGh1bWJfc3R5bGVzID0gYXJyYXkoDQoJCSdlZGl0JyA9Pg0K ICAgICAgICAgJy5zbWRfc2VsZWN0ZWQgeyBib3JkZXI6MXB4IHNvbGlkIHJlZDsgYmFja2dy b3VuZDpyZWQ7IH0NCiAgICAgICAgICAjc21kX3RodW1icyBpbWcgeyBwYWRkaW5nOjJweDsg bWFyZ2luOjFweDsgYm9yZGVyOjFweCBzb2xpZCBibGFjazsgfQ0KICAgICAgICAgIC50aHVt Ym5haWwtYWx0ZXIgeyBkaXNwbGF5Om5vbmU7IH0nLA0KCQkncHJvZmlsZScgPT4NCiAgICAg ICAgICcuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgfQ0KICAgICAgICAgICNzbWRfdGh1 bWJfcHJvZmlsZXMgeyB3aWR0aDo3MDBweDsgbWFyZ2luOjAgYXV0byAxOHB4OyBwb3NpdGlv bjpyZWxhdGl2ZTsgfQ0KICAgICAgICAgICNzbWRfdGh1bWJfYmF0Y2ggeyBmbG9hdDpyaWdo dDsgfQ0KICAgICAgICAgIC5zbWRfaW5hY3RpdmUgeyBvcGFjaXR5Oi4zOyB9DQogICAgICAg ICAgLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZSB7IGN1cnNvcjpwb2ludGVyOyB9DQogICAg ICAgICAgI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0geyBwYWRkaW5nLXRvcDo4cHg7IH0NCiAg ICAgICAgICBmb3JtI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGQgeyBib3JkZXI6IDA7IH0N CiAgICAgICAgICAuc21kX3RodW1iX2Vycm9yIHsgcG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0 OjEwMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyOjFweCBzb2xpZCByZWQ7IGJhY2tn cm91bmQ6I2ZmYzsgcGFkZGluZzozcHg7IH0nLA0KCSk7DQoNCglhZGRfcHJpdnMoJHNtZF90 aHVtYl9ldmVudCwgJHNtZF90aHVtYl9wcml2cyk7DQoJYWRkX3ByaXZzKCdzbWRfdGh1bWJf cHJvZmlsZXMnLCAkc21kX3RodW1iX3ByaXZzKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVm cy4nLiRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfcHJpdnMpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGh1bWJfd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF90 aHVtYl9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9wcm9maWxlcycs ICdpbWFnZV91aScsICdleHRlbmRfY29udHJvbHMnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RodW1icycsICdpbWFnZV91aScsICd0aHVtYm5haWwnKTsNCglyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3RodW1iX2VkaXQnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsX2VkaXQnKTsN CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2NyZWF0ZScsICdpbWFnZV91aScsICd0 aHVtYm5haWxfY3JlYXRlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9nZW5l cmF0ZScsICdpbWFnZV91cGxvYWRlZCcsICdpbWFnZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfdGh1bWJfZGVsZXRlJywgJ2ltYWdlX2RlbGV0ZWQnLCAnaW1hZ2UnKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2NyZWF0ZV9vbmUnLCAnaW1hZ2UnLCAnc21kX3Ro dW1iX2NyZWF0ZV9vbmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX3N3aXRj aF9hY3RpdmUnLCAnaW1hZ2UnLCAnc21kX3RodW1iX3N3aXRjaF9hY3RpdmUnKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX3N3aXRjaF9wcmVmJywgJ2ltYWdlJywgJ3NtZF90 aHVtYl9zd2l0Y2hfcHJlZicpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfaW5z ZXJ0JywgJ2ltYWdlJywgJ3NtZF90aHVtYm5haWxfaW5zZXJ0JywgMSk7DQoNCn0gZWxzZSB7 DQoJZ2xvYmFsICRwYXRoX3RvX3NpdGUsICRpbWdfZGlyOw0KCWlmICghZGVmaW5lZCgnSU1Q QVRIJykpIHsNCgkJZGVmaW5lKCJJTVBBVEgiLCRwYXRoX3RvX3NpdGUuRFMuJGltZ19kaXIu RFMpOw0KCX0NCn0NCg0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUInKSkgew0KCWRlZmluZSgi U01EX1RIVU1CIiwgJ3NtZF90aHVtYm5haWwnKTsNCn0NCmlmICghZGVmaW5lZCgnU01EX1RI VU1CX0FDVElWRScpKSB7DQoJZGVmaW5lKCJTTURfVEhVTUJfQUNUSVZFIiwgMSk7DQp9DQpp ZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9DUk9QJykpIHsNCglkZWZpbmUoIlNNRF9USFVNQl9D Uk9QIiwgMik7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9TSEFSUCcpKSB7DQoJZGVm aW5lKCJTTURfVEhVTUJfU0hBUlAiLCA0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RodW1iX3dlbGNvbWUoJGV2dCwgJHN0cCkgew0KCXN3aXRjaCAoJHN0cCkgew0KCQlj YXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX3RodW1iX3RhYmxlX2luc3RhbGwoKTsNCgkJCWJy ZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF90aHVtYl90YWJsZV9yZW1vdmUoKTsN CgkJCWJyZWFrOw0KCX0NCglyZXR1cm47DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gRGlzcGxheSB0aGUgZGVzaWduYXRlZCBkZWZhdWx0IHRodW1ibmFpbCBvbiB0 aGUgbGlzdCBwYWdlDQpmdW5jdGlvbiBzbWRfdGh1bWJzKCRldnQsICRzdHAsICRkZmx0LCAk Y3VycmltZykgew0KCWV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScsICdzb3J0JywgJ2Rpcics ICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOw0KDQoJaWYgKHNtZF90aHVtYl90YWJsZV9l eGlzdCgpKSB7DQoJCSRkZWZhdWx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3By b2ZpbGUnLCAnJywgMSk7DQoJCWlmICgkZGVmYXVsdCkgew0KCQkJJHJvdyA9IHNhZmVfcm93 KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5zYW5pdGl6ZUZvclVybCgkZGVmYXVsdCkuIici KTsNCgkJCWlmICgkcm93KSB7DQoJCQkJJGVkaXRfdXJsID0gJz9ldmVudD1pbWFnZScuYS4n c3RlcD1pbWFnZV9lZGl0Jy5hLidpZD0nLiRjdXJyaW1nWydpZCddLmEuJ3NvcnQ9Jy4kc29y dC4NCgkJCQkJCWEuJ2Rpcj0nLiRkaXIuYS4ncGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRo b2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidjcml0PScuJGNyaXQ7DQoJCQkJJG91dCA9IHNtZF90 aHVtYl9pbWcoJHJvdywgJGN1cnJpbWcpOw0KCQkJCXJldHVybiAoJG91dCkgPyBocmVmKCRv dXQsICRlZGl0X3VybCkgOiBnVHh0KCdubycpOw0KCQkJfSBlbHNlIHsNCgkJCQlyZXR1cm4g Z1R4dCgnbm8nKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXJldHVybiBnVHh0KCdubycpOw0K CQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERvbid0IHdh bnQgdGhlICdjcmVhdGUnIGNvbnRyb2xzIGFzIHRoZXkncmUgaGFuZGxlZCBpbiB0aGUgZWRp dCBwb3J0aW9uIG9mIHRoZSBzY3JlZW4NCmZ1bmN0aW9uIHNtZF90aHVtYl9jcmVhdGUoJGV2 dCwgJHN0cCwgJGRmbHQsICRjdXJyaW1nKSB7DQoJcmV0dXJuICcgJzsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBXaXRoIGEgbG90IG9mIGltYWdlcyBpbiB0aGUg ZGF0YWJhc2UsIGRvaW5nIGl0IGFsbCBpbiBvbmUgaGl0IHdvdWxkIHRpbWUgb3V0Lg0KLy8g U28gaXQncyBkb25lIHZpYSBhamF4OyBvbmUgcmVxdWVzdCBwZXIgaW1hZ2UNCmZ1bmN0aW9u IHNtZF90aHVtYl9jcmVhdGVfYWxsKCkgew0KCSRpbWFnZXMgPSBzYWZlX2NvbHVtbignaWQn LCAndHhwX2ltYWdlJywgJzE9MScpOw0KCSRjb3VudCA9IGNvdW50KCRpbWFnZXMpOw0KDQoJ ZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7DQoJZWNobyAidmFyIGJj dHIgPSAwOyB2YXIgYnRvdCA9IHskY291bnR9OyI7DQoJZWNobyAnalF1ZXJ5KGZ1bmN0aW9u KCkgeyc7DQoJZWNobyAnalF1ZXJ5KCIjc21kX3RodW1iX2J0b3QiKS50ZXh0KCIvJy4kY291 bnQuJyIpOyc7DQoJZm9yZWFjaCAoJGltYWdlcyBhcyAkaW1nKSB7DQoJCWVjaG8gPDw8RU9K Uw0KCQlzZW5kQXN5bmNFdmVudCgNCgkJew0KCQkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50 LA0KCQkJc3RlcDogJ3NtZF90aHVtYl9jcmVhdGVfb25lJywNCgkJCXNtZF90aHVtYl9pbWdp ZDogeyRpbWd9DQoJCX0sIHNtZF9jcmVhdGVfYWxsX2ZlZWRiYWNrKTsNCkVPSlM7DQoJfQ0K CWVjaG8gJ30pOyc7DQoJZWNobyA8PDxFT0pTDQoJZnVuY3Rpb24gc21kX2NyZWF0ZV9hbGxf ZmVlZGJhY2soKSB7DQoJCWJjdHIrKzsNCgkJalF1ZXJ5KCcjc21kX3RodW1iX2JjdXJyJyku dGV4dChiY3RyKTsNCgkJaWYgKGJjdHIgPj0gYnRvdCkgew0KCQkJalF1ZXJ5KCcjc21kX3Ro dW1iX2JjdXJyLCNzbWRfdGh1bWJfYnRvdCcpLmVtcHR5KCk7DQoJCX0NCgl9DQpFT0pTOw0K CWVjaG8gJzwvc2NyaXB0Pic7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3RodW1iX2NyZWF0ZV9vbmUoKSB7DQoJJGN1cnJpbWcgPSBncHMoJ3Nt ZF90aHVtYl9pbWdpZCcpOw0KCWFzc2VydF9pbnQoJGN1cnJpbWcpOw0KDQoJJHJzID0gc2Fm ZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xIEFORCBmbGFncyAmICcuU01EX1RIVU1CX0FD VElWRSk7DQoJJGN1cnIgPSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQ9Ii5kb1Ns YXNoKCRjdXJyaW1nKSk7DQoJaWYgKCRycykgew0KCQlzbWRfdGh1bWJfbWFrZSgkcnMsICRj dXJyKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmUoKSB7DQoJ JG5hbWUgPSBkb1NsYXNoKGdwcygnc21kX3RodW1iX3Byb2ZpbGUnKSk7DQoJaWYgKCRuYW1l KSB7DQoJCXNhZmVfdXBkYXRlKFNNRF9USFVNQiwgJ2ZsYWdzID0gZmxhZ3MgXiAnLlNNRF9U SFVNQl9BQ1RJVkUsICJuYW1lPSckbmFtZSciKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoYXJy YXkoJ3NtZF90aHVtYl9wcm9maWxlJyA9PiAkbmFtZSkpOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX3ByZWYoKSB7 DQoJJG5hbWUgPSBkb1NsYXNoKGdwcygnc21kX3RodW1iX3R4cHR5cGUnKSk7DQoJJHN0YXRl ID0gZG9TbGFzaChncHMoJ3NtZF90aHVtYl9zdGF0ZScpKTsNCglpZiAoJG5hbWUpIHsNCgkJ c2V0X3ByZWYoJ3NtZF90aHVtYl8nLiRuYW1lLCAkc3RhdGUsICdzbWRfdGh1bWInLCBQUkVG X0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQlzZW5kX3htbF9y ZXNwb25zZSgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfdGh1bWJfZ2VuZXJhdGUoJGV2dCwgJHN0cCkgew0KCSRpZCA9IGRvU2xhc2go Z3BzKCdpZCcpKTsNCg0KCSRpZCA9ICgkaWQpID8gJGlkIDogJEdMT0JBTFNbJ0lEJ107DQoJ JHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xIEFORCBmbGFncyAmICcuU01E X1RIVU1CX0FDVElWRSk7DQoNCglzbWRfdGh1bWJfbWFrZSgkcnMsICRpZCk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2RlbGV0ZSgk ZXZ0LCAkc3RwKSB7DQoJJGlkcyA9IGdwcygnc2VsZWN0ZWQnKTsNCgkkcnMgPSBzYWZlX3Jv d3MoJyonLCBTTURfVEhVTUIsICcxPTEnKTsNCg0KCSRpbWFnZXMgPSBzYWZlX3Jvd3MoJyon LCAndHhwX2ltYWdlJywgJ2lkIElOICgnIC4gam9pbignLCcscXVvdGVfbGlzdCgkaWRzKSkg LiAnKScpOw0KCWZvcmVhY2ggKCRpbWFnZXMgYXMgJGltZykgew0KCQlzbWRfdGh1bWJfdW5t YWtlKCRycywgJGltZyk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90aHVtYl9tYWtlKCRycywgJGN1cnJpbWcpIHsNCgkvLyBXcmFwcGVy IGZvciB3ZXRfdGh1bWIgdG8gYWxsb3cgbXVsdGlwbGUgdGh1bWJuYWlscw0KCSRtc2cgPSAn JzsNCglpZiAoIWNsYXNzX2V4aXN0cygnc21kX3RodW1iJykpIHsNCgkJY2xhc3Mgc21kX3Ro dW1iIGV4dGVuZHMgd2V0X3RodW1iIHsNCgkJCXZhciAkbV9leHQ7DQoJCQl2YXIgJG1faWQ7 DQoJCQl2YXIgJG1fZGlyOw0KCQkJdmFyICRtX2RmbHQ7DQoJCQl2YXIgJHdpZHRoOw0KCQkJ dmFyICRoZWlnaHQ7DQoNCgkJCS8vIENvbnN0cnVjdG9yDQoJCQlmdW5jdGlvbiBzbWRfdGh1 bWIgKCRpZCwgJGRpciwgJGltZ19yb3csICRpc19kZWZhdWx0PWZhbHNlLCAkcHJvX3c9Jycs ICRwcm9faD0nJykgew0KCQkJCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkJCQlpZiAoJGlt Z19yb3cpIHsNCgkJCQkJZXh0cmFjdCgkaW1nX3Jvdyk7DQoJCQkJCSR0aGlzLT5tX2lkID0g JGlkOw0KCQkJCQkkdGhpcy0+bV9leHQgPSAkZXh0Ow0KCQkJCQkkdGhpcy0+bV9kaXIgPSAk ZGlyOw0KCQkJCQkkdGhpcy0+d2lkdGggPSAkcHJvX3c7DQoJCQkJCSR0aGlzLT5oZWlnaHQg PSAkcHJvX2g7DQoJCQkJCSR0aGlzLT5tX2RmbHQgPSAkaXNfZGVmYXVsdDsNCgkJCQl9DQoJ CQkJJHRoaXMtPndldF90aHVtYigpOyAvLyBjb25zdHJ1Y3QgYmFzZSBjbGFzcyBpbnN0YW5j ZQ0KCQkJfQ0KDQoJCQlmdW5jdGlvbiB3cml0ZSgpIHsNCgkJCQlpZiAoICFpc3NldCgkdGhp cy0+bV9leHQpICkgcmV0dXJuIGZhbHNlOw0KDQoJCQkJJGluZmlsZSA9IElNUEFUSC4kdGhp cy0+bV9pZC4kdGhpcy0+bV9leHQ7DQoJCQkJJG91dGZpbGUgPSBJTVBBVEguJHRoaXMtPm1f ZGlyLkRTLiR0aGlzLT5tX2lkLiR0aGlzLT5tX2V4dDsNCg0KCQkJCS8vIElmIHRoaXMgaXMg dGhlIGRlZmF1bHQgcHJvZmlsZSBhbmQgdGhlIHByZWYgaW5kaWNhdGVzLCB3cml0ZSBhIFRY UCB0aHVtYiB0b28NCgkJCQlpZiAoKCR0aGlzLT5tX2RmbHQgPT0gdHJ1ZSkgJiYgKGdldF9w cmVmKCdzbWRfdGh1bWJfdHhwX2NyZWF0ZScsICcwJykpKSB7DQoJCQkJCSR0eHBfdGh1bWIg PSBJTVBBVEguJHRoaXMtPm1faWQuJ3QnLiR0aGlzLT5tX2V4dDsNCgkJCQkJaWYgKCBwYXJl bnQ6OndyaXRlICggJGluZmlsZSwgJHR4cF90aHVtYiApICkgew0KCQkJCQkJc2FmZV91cGRh dGUoJ3R4cF9pbWFnZScsICJ0aHVtYm5haWwgPSAxLCB0aHVtYl93ID0gJHRoaXMtPndpZHRo LCB0aHVtYl9oID0gJHRoaXMtPmhlaWdodCIsICdpZCA9ICcuJHRoaXMtPm1faWQpOw0KCQkJ CQkJQGNobW9kKCRvdXRmaWxlLCAwNjQ0KTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgg cGFyZW50Ojp3cml0ZSAoICRpbmZpbGUsICRvdXRmaWxlICkgKSB7DQoJCQkJCUBjaG1vZCgk b3V0ZmlsZSwgMDY0NCk7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBJZiBwYXNzZWQgb25seSBhbiBJRCwgbG9v ayB1cCB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YQ0KCWlmICghaXNfYXJyYXkoJGN1cnJp bWcpKSB7DQoJCWFzc2VydF9pbnQoJGN1cnJpbWcpOw0KCQkkY3VycmltZyA9IHNhZmVfcm93 KCcqJywgJ3R4cF9pbWFnZScsICdpZD0nLiRjdXJyaW1nKTsNCgl9DQoNCgkvLyBDcmVhdGUg ZWFjaCB0aHVtYm5haWwNCgkkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1 bHRfcHJvZmlsZScsICcnKTsNCglmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkvLyBTYW5p dGl6ZSBhIGxpdHRsZQ0KCQkkd2lkdGggPSAoaW50KSAkcm93Wyd3aWR0aCddOw0KCQkkaGVp Z2h0ID0gKGludCkgJHJvd1snaGVpZ2h0J107DQoJCWlmICgkd2lkdGggPT0gMCkgJHdpZHRo ID0gJyc7DQoJCWlmICgkaGVpZ2h0ID09IDApICRoZWlnaHQgPSAnJzsNCgkJaWYgKCR3aWR0 aCA9PT0gJycgJiYgJGhlaWdodCA9PT0gJycpIGNvbnRpbnVlOw0KCQkkYWN0aXZlID0gKCRy b3dbJ2ZsYWdzJ10gJiBTTURfVEhVTUJfQUNUSVZFKSA/IDEgOiAwOw0KCQkkY3JvcCA9ICgk cm93WydmbGFncyddICYgU01EX1RIVU1CX0NST1ApID8gMSA6IDA7DQoJCSRzaGFycGVuID0g KCRyb3dbJ2ZsYWdzJ10gJiBTTURfVEhVTUJfU0hBUlApID8gMSA6IDA7DQoJCSRpZCA9ICRj dXJyaW1nWydpZCddOw0KCQkkaXNfZGZsdCA9ICgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0 KSA/IHRydWUgOiBmYWxzZTsNCg0KCQkkdCA9IG5ldyBzbWRfdGh1bWIoJGlkLCBzYW5pdGl6 ZUZvclVybCgkcm93WyduYW1lJ10pLCAkY3VycmltZywgJGlzX2RmbHQpOw0KCQkkdC0+ZXh0 cmFwb2xhdGUgPSB0cnVlOyAvLyBBbGxvdyBiaWdnZXIgdGh1bWJzIHRoYW4gb3JpZ2luYWwg aW1hZ2UNCgkJJHQtPmNyb3AgPSAoJGNyb3AgPT0gJzEnKTsNCgkJJHQtPnNoYXJwZW4gPSAo JHNoYXJwZW4gPT0gJzEnKTsNCgkJJHQtPmhpbnQgPSAnMCc7DQoJCSR0LT53aWR0aCA9ICR3 aWR0aDsNCgkJJHQtPmhlaWdodCA9ICRoZWlnaHQ7DQoJCSR0LT5xdWFsaXR5ID0gJHJvd1sn cXVhbGl0eSddOw0KCQlpZiAoJHQtPndyaXRlKCkpIHsNCgkJCSRtc2cgPSBnVHh0KCd0aHVt Ym5haWxfc2F2ZWQnLCBhcnJheSgne2lkfScgPT4gJGlkKSk7DQoJCX0gZWxzZSB7DQoJCQkk bXNnID0gYXJyYXkoZ1R4dCgndGh1bWJuYWlsX25vdF9zYXZlZCcsIGFycmF5KCd7aWR9JyA9 PiAkaWQpKSwgRV9FUlJPUik7DQoJCX0NCgl9DQoJcmV0dXJuICRtc2c7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX3VubWFrZSgkcnMs ICRjdXJyaW1nKSB7DQoJJGlkID0gJGN1cnJpbWdbJ2lkJ107DQoJJGV4dCA9ICRjdXJyaW1n WydleHQnXTsNCgkkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJv ZmlsZScsICcnKTsNCgkkdHhwX2RlbCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2RlbGV0 ZScsICcwJyk7DQoNCglmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkkcGF0aCA9IElNUEFU SC5zYW5pdGl6ZUZvclVybCgkcm93WyduYW1lJ10pLkRTLiRpZC4kZXh0Ow0KCQlpZiAoZmls ZV9leGlzdHMoJHBhdGgpKSB7DQoJCQl1bmxpbmsoJHBhdGgpOw0KCQl9DQoNCgkJLy8gQWxz byByZW1vdmUgVFhQJ3MgYnVpbHQtaW4gdGh1bWI/DQoJCWlmICgoJHJvd1snbmFtZSddID09 ICRwcm9fZGZsdCkgJiYgKCR0eHBfZGVsID09ICcxJykpIHsNCgkJCSRwYXRoID0gSU1QQVRI LiRpZC4ndCcuJGV4dDsNCgkJCWlmIChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJCQlzYWZl X3VwZGF0ZSgndHhwX2ltYWdlJywgInRodW1ibmFpbCA9IDAsIHRodW1iX3cgPSAwLCB0aHVt Yl9oID0gMCIsICdpZCA9ICcuJGlkKTsNCgkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJfQ0KCQl9 DQoJfQ0KCXJldHVybiAnJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfdGh1bWJfaW5zZXJ0KCkgew0KCWdsb2JhbCAkdHhwY2ZnLCR0eHBfdXNl ciwkaW1nX2RpciwkcGF0aF90b19zaXRlLCAkcGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAk c2VhcmNoX21ldGhvZDsNCg0KCWlmICghZGVmaW5lZCgnSU1QQVRIJykpIHsNCgkJZGVmaW5l KCdJTVBBVEgnLCRwYXRoX3RvX3NpdGUuRFMuJGltZ19kaXIuRFMpOw0KCX0NCg0KCWV4dHJh Y3QoZ3BzYShhcnJheSgncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9t ZXRob2QnKSkpOw0KDQoJaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi90eHBsaWJfbWlzYy5w aHAnOw0KDQoJZXh0cmFjdCgkdHhwY2ZnKTsNCgkkaWQgPSBhc3NlcnRfaW50KGdwcygnaWQn KSk7DQoJJHByb2ZpbGUgPSBncHMoJ3NtZF90aHVtYl9wcm9maWxlJyk7DQoJJHRodW1iX2V4 dCA9IGdwcygnc21kX3RodW1iX2V4dCcpOw0KDQoJJGF1dGhvciA9IGZldGNoKCdhdXRob3In LCAndHhwX2ltYWdlJywgJ2lkJywgJGlkKTsNCglpZiAoIWhhc19wcml2cygnaW1hZ2UuZWRp dCcpICYmICEoJGF1dGhvciA9PSAkdHhwX3VzZXIgJiYgaGFzX3ByaXZzKCdpbWFnZS5lZGl0 Lm93bicpKSkgew0KCQlyZXR1cm47DQoJfQ0KDQoJJGZpbGUgPSAkX0ZJTEVTWyd0aGVmaWxl J11bJ3RtcF9uYW1lJ107DQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsN Cg0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJGZpbGUpOw0KDQoJaWYgKGVtcHR5KCRm aWxlKSkNCgl7DQoJCXJldHVybjsNCgl9DQoNCglsaXN0KCR3LCAkaCwgJGV4dGVuc2lvbikg PSBnZXRpbWFnZXNpemUoJGZpbGUpOw0KCSR2YWxpZF9leHRzID0gYXJyYXkoDQoJCUlNQUdF VFlQRV9HSUYgID0+ICcuZ2lmJywNCgkJSU1BR0VUWVBFX0pQRUcgPT4gJy5qcGcnLA0KCQlJ TUFHRVRZUEVfUE5HICA9PiAnLnBuZycsDQoJCUlNQUdFVFlQRV9TV0YgID0+ICcuc3dmJywN CgkpOw0KCSRleHQgPSBpc3NldCgkdmFsaWRfZXh0c1skZXh0ZW5zaW9uXSkgPyAkdmFsaWRf ZXh0c1skZXh0ZW5zaW9uXSA6ICcnOw0KDQoJaWYgKCgkZmlsZSAhPT0gZmFsc2UpICYmICRw cm9maWxlICYmICRleHQpIHsNCgkJJG5ld3BhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwo JHByb2ZpbGUpLkRTLiRpZC4kZXh0Ow0KCQlpZiAoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmls ZSwgJG5ld3BhdGgpID09IGZhbHNlKSB7DQoJCX0gZWxzZSB7DQoJCQlAY2htb2QoJG5ld3Bh dGgsIDA2NDQpOw0KCQkJJG1lc3NhZ2UgPSBnVHh0KCdpbWFnZV91cGxvYWRlZCcsIGFycmF5 KCd7bmFtZX0nID0+ICRuYW1lKSk7DQoJCX0NCgl9DQoNCgkvLyBTaW5jZSB0aGUgaGVhZGVy cyBoYXZlIGJlZW4gc2VudCwgcmVzb3J0IHRvIGpzIHRvIHJlZnJlc2ggdGhlIHBhZ2UNCgkk dXJsID0gJz9ldmVudD1pbWFnZSZzdGVwPWltYWdlX2VkaXQmaWQ9Jy4kaWQuJyZzb3J0PScu JHNvcnQuJyZkaXI9Jy4kZGlyLicmcGFnZT0nLiRwYWdlLicmc2VhcmNoX21ldGhvZD0nLiRz ZWFyY2hfbWV0aG9kLicmY3JpdD0nLiRjcml0Ow0KCWVjaG8gPDw8RU9TDQo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0ieyR1cmx9IjsN Cjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29u dGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCglleGl0Ow0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9lZGl0 KCRldnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCWdsb2JhbCAkc3RlcCwgJGZpbGVf bWF4X3VwbG9hZF9zaXplLCAkdHhwX3VzZXIsICRzbWRfdGh1bWJfc3R5bGVzOw0KDQoJZXh0 cmFjdChncHNhKGFycmF5KCdpZCcsICdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAn c2VhcmNoX21ldGhvZCcsICdzbWRfdGh1bWJuYWlsX3NpemUnLCAnc21kX3RodW1ibmFpbF9j aG9zZW5fc2l6ZScsICdzbWRfdGh1bWJuYWlsX2RlbGV0ZScsICdzbWRfc3RlcCcpKSk7DQoN CgkkaWQgPSAoJGlkKSA/ICRpZCA6ICRHTE9CQUxTWydJRCddOw0KDQoJLy8gVG9nZ2xlIHBy b2ZpbGUgcGFuZWwNCglpZiAoJHN0ZXAgPT0gJ3NhdmVfcGFuZV9zdGF0ZScpIHsNCgkJc21k X3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKTsNCgkJcmV0dXJuOw0KCX0NCg0KCS8vIENy ZWF0ZS9kZWxldGUgdGhlIHNlbGVjdGVkIHRodW1icyBkZXBlbmRpbmcgb24gdGhlIGJ1dHRv biBwcmVzc2VkDQoJaWYgKCRzbWRfc3RlcCA9PSAnc21kX3RodW1ibmFpbF9tYW5hZ2UnKSB7 DQoJCS8vIFZhbGlkYXRlIHVzZXINCgkJJGF1dGhvciA9IGZldGNoKCdhdXRob3InLCAndHhw X2ltYWdlJywgJ2lkJywgJGlkKTsNCgkJaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAm JiAhKCRhdXRob3IgPT0gJHR4cF91c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24n KSkpDQoJCXsNCgkJCWltYWdlX2xpc3QoZ1R4dCgncmVzdHJpY3RlZF9hcmVhJykpOw0KCQkJ cmV0dXJuOw0KCQl9DQoNCgkJLy8gR3JhYiB0aGUgdGh1bWJuYWlscyB0byB3b3JrIG9uDQoJ CSR3aGVyZSA9ICgkc21kX3RodW1ibmFpbF9zaXplPT0nYWxsJykgPyAnMT0xIEFORCBmbGFn cyAmICcuU01EX1RIVU1CX0FDVElWRSA6ICJuYW1lPSciLmRvU2xhc2goJHNtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUpLiInIjsNCgkJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1C LCAkd2hlcmUpOw0KDQoJCS8vIERvIGl0DQoJCWlmKCRzbWRfdGh1bWJuYWlsX2RlbGV0ZSkg ew0KCQkJJG1zZyA9IHNtZF90aHVtYl91bm1ha2UoJHJzLCAkY3VycmltZyk7DQoJCX0gZWxz ZSB7DQoJCQkkbXNnID0gc21kX3RodW1iX21ha2UoJHJzLCAkY3VycmltZyk7DQoJCX0NCgl9 DQoNCgkkZXh0ID0gJGN1cnJpbWdbJ2V4dCddOw0KCWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzbWRfdGh1bWJfc2VsZWN0b3Ioc2Vs KSB7DQoJdmFyIGlkeCA9IDA7DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1 bmN0aW9uKCkgew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKHNlbCkpIHsNCgkJCWpR dWVyeSh0aGlzKS50b2dnbGVDbGFzcygnc21kX3NlbGVjdGVkJyk7DQoJCQlpZiAoalF1ZXJ5 KHRoaXMpLmhhc0NsYXNzKCdzbWRfc2VsZWN0ZWQnKSkgew0KCQkJCWpRdWVyeSgiI3NtZF91 cGxvYWRfdGh1bWJuYWlsIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7DQoJCQkJalF1ZXJ5 KCIjc21kX3RodW1iX3Byb2ZpbGUiKS52YWwoc2VsKTsNCgkJCQlpZHggPSBqUXVlcnkoIiNz bWRfdGh1bWJuYWlsX3NpemUgb3B0aW9uW3ZhbHVlPSciK3NlbCsiJ10iKS5pbmRleCgpOw0K CQkJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwoc2VsKTsNCgkJ CX0gZWxzZSB7DQoJCQkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdk aXNhYmxlZCcsIHRydWUpOw0KCQkJCWpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFs KCcnKTsNCgkJCQlqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKCcn KTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygnc21k X3NlbGVjdGVkJyk7DQoJCX0NCgl9KTsNCglqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX3NpemUi KS5hdHRyKCJzZWxlY3RlZEluZGV4IiwgaWR4KTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9z ZWxlY3RfY2hhbmdlZCgpIHsNCglvYmogPSBqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX3NpemUi KTsNCglpZiAob2JqLmF0dHIoInNlbGVjdGVkSW5kZXgiKSA9PSAwKSB7DQoJCWpRdWVyeSgi I3NtZF91cGxvYWRfdGh1bWJuYWlsIikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsNCgkJalF1 ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGUiKS52YWwoJycpOw0KCQlqUXVlcnkoIiNzbWRfdGh1 bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKCcnKTsNCgl9IGVsc2Ugew0KCQlqUXVlcnkoIiNz bWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgZmFsc2UpOw0KCQlqUXVl cnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbChvYmoudmFsKCkpOw0KCQlqUXVlcnkoIiNz bWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKG9iai52YWwoKSk7DQoJfQ0KCWpRdWVy eSgiI3NtZF90aHVtYnMgaW1nIikuZWFjaChmdW5jdGlvbigpIHsNCgkJaWYgKGpRdWVyeSh0 aGlzKS5oYXNDbGFzcyhvYmoudmFsKCkpKSB7DQoJCQlqUXVlcnkodGhpcykuYWRkQ2xhc3Mo J3NtZF9zZWxlY3RlZCcpOw0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNs YXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJfQ0KCX0pOw0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkg ew0KCWpRdWVyeSgiI3NtZF90aHVtYnMgaW1nIikuZWFjaChmdW5jdGlvbigpIHsNCgkJdmFy IGNscyA9IGpRdWVyeSh0aGlzKS5hdHRyKCdjbGFzcycpOw0KCQlqUXVlcnkodGhpcykuY2xp Y2soZnVuY3Rpb24oKSB7DQoJCQlzbWRfdGh1bWJfc2VsZWN0b3IoY2xzKTsNCgkJfSk7DQoJ fSk7DQoJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcs IHRydWUpOw0KCWpRdWVyeSgiLnRodW1ibmFpbC11cGxvYWQiKS5wcmVwZW5kKCc8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJzbWRfdGh1bWJfaW1naWQiIHZhbHVlPSJ7JGlkfSIgLz48 aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ic21kX3RodW1iX3Byb2ZpbGUiIG5hbWU9InNtZF90 aHVtYl9wcm9maWxlIiB2YWx1ZT0iIiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzbWRf dGh1bWJfZXh0IiBuYW1lPSJzbWRfdGh1bWJfZXh0IiB2YWx1ZT0ieyRleHR9IiAvPicpOw0K fSk7DQo8L3NjcmlwdD4NCkVPQzsNCg0KCS8vIEluamVjdCBzdHlsZXMNCgllY2hvICc8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RodW1iX3N0eWxlc1snZWRpdCddIC4gJzwv c3R5bGU+JzsNCg0KCS8vIEFkZCB0aHVtYm5haWxzIGFuZCBjcmVhdGlvbiBjb250cm9scw0K CWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkkcnMgPSBzYWZlX3Jvd3MoJyon LCBTTURfVEhVTUIsICcxPTEgT1JERVIgQlkgbmFtZScpOw0KCQlpZiAoJHJzKSB7DQoJCQkk cHJvZmlsZXMgPSBhcnJheSgnYWxsJyA9PiBzbWRfdGh1bWJfZ1R4dCgnYWxsX3NpemVzJykp Ow0KCQkJJHRodW1ic1tdID0gJzxkaXYgaWQ9InNtZF90aHVtYnMiPic7DQoJCQlmb3JlYWNo ICgkcnMgYXMgJHJvdykgew0KCQkJCWlmICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FD VElWRSkgew0KCQkJCQkkcHJvZmlsZXNbJHJvd1snbmFtZSddXSA9ICRyb3dbJ25hbWUnXTsN CgkJCQl9DQoJCQkJJHRodW1ic1tdID0gc21kX3RodW1iX2ltZygkcm93LCAkY3VycmltZyk7 DQoJCQl9DQoJCQkkdGh1bWJzW10gPSAnPC9kaXY+JzsNCgkJCSRxcyA9IGFycmF5KA0KCQkJ CSJldmVudCIgPT4gJ2ltYWdlJywNCgkJCQkic3RlcCIgPT4gJ2ltYWdlX2VkaXQnLA0KCQkJ CSJpZCIgPT4gJGlkLA0KCQkJCSJwYWdlIiA9PiAkcGFnZSwNCgkJCQkic29ydCIgPT4gJHNv cnQsDQoJCQkJImRpciIgPT4gJGRpciwNCgkJCQkiY3JpdCIgPT4gJGNyaXQsDQoJCQkJInNl YXJjaF9tZXRob2QiID0+ICRzZWFyY2hfbWV0aG9kLA0KCQkJKTsNCg0KCQkJJG91dFtdID0g JzxkaXYgaWQ9InNtZF90aHVtYm5haWxfY29udHJvbCI+PHNwYW4gY2xhc3M9InBsYWluIGxl dmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbHNfdmlzaWJsZScpID8gJyBleHBh bmRlZCcgOiAnJykuJyI+PGEgaHJlZj0iI3NtZF90aHVtYm5haWxzIj4nLnNtZF90aHVtYl9n VHh0KCd0aHVtYm5haWxfaGVhZGluZycpLic8L2E+PC9zcGFuPjxkaXYgaWQ9InNtZF90aHVt Ym5haWxzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFu ZV9zbWRfdGh1bWJuYWlsc192aXNpYmxlJykgPyAnYmxvY2snIDogJ25vbmUnKS4nIj4nOw0K CQkJJG91dFtdID0gJzxmb3JtIG5hbWU9InNtZF90aHVtYm5haWxfY3JlYXRlIiBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkJCSRvdXRbXSA9IGZJbnB1 dCgnaGlkZGVuJywgJ3NtZF9zdGVwJywgJ3NtZF90aHVtYm5haWxfbWFuYWdlJyk7DQoJCQkk b3V0W10gPSBmSW5wdXQoJ2hpZGRlbicsICdzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplJywg JycsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUnKTsN CgkJCSRvdXRbXSA9IHNlbGVjdElucHV0KCdzbWRfdGh1bWJuYWlsX3NpemUnLCAkcHJvZmls ZXMsICcnLCAnJywgJ29uY2hhbmdlPSJyZXR1cm4gc21kX3RodW1iX3NlbGVjdF9jaGFuZ2Vk KCkiOycsICdzbWRfdGh1bWJuYWlsX3NpemUnKTsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnc3Vi bWl0JywgJycsIGdUeHQoJ2NyZWF0ZScpLCAnc21hbGxlcmJveCcpOw0KCQkJJG91dFtdID0g ZklucHV0KCdzdWJtaXQnLCAnc21kX3RodW1ibmFpbF9kZWxldGUnLCBnVHh0KCdkZWxldGUn KSwgJ3NtYWxsZXJib3gnKTsNCgkJCSRvdXRbXSA9IGpvaW4oJycsICR0aHVtYnMpOw0KCQkJ JG91dFtdID0gJzwvZm9ybT4nOw0KCQkJJG91dFtdID0gdXBsb2FkX2Zvcm0oc21kX3RodW1i X2dUeHQoJ3VwbG9hZCcpLCAndXBsb2FkX3RodW1ibmFpbCcsICdzbWRfdGh1bWJuYWlsX2lu c2VydCcsICdpbWFnZScsICRpZCwgJGZpbGVfbWF4X3VwbG9hZF9zaXplLCAnc21kX3VwbG9h ZF90aHVtYm5haWwnLCAndGh1bWJuYWlsLXVwbG9hZCcpOw0KCQkJJG91dFtdID0gJzwvZGl2 Pic7DQoJCQlyZXR1cm4gam9pbignJywgJG91dCk7DQoJCX0NCgl9DQoJcmV0dXJuICcgJzsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJf aW1nKCRyb3csICRjdXJyaW1nLCAkbWV0YT1hcnJheSgpKSB7DQoJZ2xvYmFsICRpbWdfZGly LCAkcHJlZnM7DQoNCgkkZGlyID0gc2FuaXRpemVGb3JVcmwoJHJvd1snbmFtZSddKTsNCgkk aWQgPSAkY3VycmltZ1snaWQnXTsNCgkkZXh0ID0gJGN1cnJpbWdbJ2V4dCddOw0KDQoJJHBh dGggPSBJTVBBVEguJGRpci5EUy4kaWQuJGV4dDsNCg0KCWlmIChmaWxlX2V4aXN0cygkcGF0 aCkpIHsNCgkJJGV4dHJhcyA9ICcnOw0KCQlpZiAoaXNzZXQoJG1ldGFbJ2ZvcmNldyddKSB8 fCBpc3NldCgkbWV0YVsnZm9yY2VoJ10pKSB7DQoJCQkkZGltcyA9IGdldGltYWdlc2l6ZSgk cGF0aCk7DQoJCQlpZiAoaXNzZXQoJG1ldGFbJ2ZvcmNldyddKSAmJiAhJHJvd1snd2lkdGgn XSkgew0KCQkJCSRyb3dbJ3dpZHRoJ10gPSAkZGltc1swXTsNCgkJCX0NCgkJCWlmIChpc3Nl dCgkbWV0YVsnZm9yY2VoJ10pICYmICEkcm93WydoZWlnaHQnXSkgew0KCQkJCSRyb3dbJ2hl aWdodCddID0gJGRpbXNbMV07DQoJCQl9DQoJCQl1bnNldCgkbWV0YVsnZm9yY2V3J10pOw0K CQkJdW5zZXQoJG1ldGFbJ2ZvcmNlaCddKTsNCgkJfQ0KCQkkdyA9ICgkcm93Wyd3aWR0aCdd KSA/ICcgd2lkdGg9IicuJHJvd1snd2lkdGgnXS4nIic6ICcnOw0KCQkkaCA9ICgkcm93Wydo ZWlnaHQnXSkgPyAnIGhlaWdodD0iJy4kcm93WydoZWlnaHQnXS4nIic6ICcnOw0KDQoJCSR1 RGF0ZSA9ICcnOw0KCQlpZiAoIWlzc2V0KCRtZXRhWydzdGFtcCddKSkgew0KCQkJJHVEYXRl ID0gJz8nLmZpbGVtdGltZSgkcGF0aCk7DQoJCX0NCgkJdW5zZXQoJG1ldGFbJ3N0YW1wJ10p Ow0KDQoJCWlmICghaXNzZXQoJG1ldGFbJ2NsYXNzJ10pKSB7DQoJCQkkbWV0YVsnY2xhc3Mn XSA9ICRkaXI7DQoJCX0NCg0KCQlmb3JlYWNoICgkbWV0YSBhcyAka2V5ID0+ICR2YWwpIHsN CgkJCSRleHRyYXMgLj0gJyAnLiRrZXkuJz0iJy4kdmFsLiciJzsNCgkJfQ0KCQlyZXR1cm4g JzxpbWcgc3JjPSInLmlodS4kaW1nX2Rpci4nLycuJGRpci4nLycuJGlkLiRleHQuJHVEYXRl LiciJy4kdy4kaC4kZXh0cmFzLicgLz4nOw0KCX0NCg0KCXJldHVybiAnJzsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfcHJvZmlsZXMo JGV2dCwgJHN0cCwgJGRmbHQsICRpbWdsaXN0KSB7DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZl bnQsICRwcmVmcywgJHN0ZXAsICRzbWRfdGh1bWJfc3R5bGVzOw0KDQoJaWYgKCFoYXNfcHJp dnMoX19GVU5DVElPTl9fKSkgew0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChncHNhKGFy cmF5KA0KCQkncGFnZScsDQoJCSdzb3J0JywNCgkJJ2RpcicsDQoJCSdjcml0JywNCgkJJ3Nl YXJjaF9tZXRob2QnLA0KCQknc21kX3RodW1iX2FkZCcsDQoJCSdzbWRfdGh1bWJfY2FuY2Vs JywNCgkJJ3NtZF90aHVtYl9zYXZlJywNCgkJJ3NtZF90aHVtYl9uYW1lJywNCgkJJ3NtZF90 aHVtYl9uZXduYW1lJywNCgkJJ3NtZF90aHVtYl93aWR0aCcsDQoJCSdzbWRfdGh1bWJfaGVp Z2h0JywNCgkJJ3NtZF90aHVtYl9xdWFsaXR5JywNCgkJJ3NtZF90aHVtYl9hY3RpdmUnLA0K CQknc21kX3RodW1iX2FjdGl2ZV9uZXcnLA0KCQknc21kX3RodW1iX2Nyb3AnLA0KCQknc21k X3RodW1iX3NoYXJwZW4nLA0KCQknc21kX3RodW1iX2RlZmF1bHQnKSkpOw0KDQoJLy8gU2Fu aXRpemUNCgkkcXVhbGl0eSA9IChpc19udW1lcmljKCRzbWRfdGh1bWJfcXVhbGl0eSkpID8g KCgkc21kX3RodW1iX3F1YWxpdHk8MCkgPyA3NSA6ICgoJHNtZF90aHVtYl9xdWFsaXR5PjEw MCkgPyA3NSA6ICRzbWRfdGh1bWJfcXVhbGl0eSkgKSA6IDc1Ow0KCSR3aWR0aCA9IChpc19u dW1lcmljKCRzbWRfdGh1bWJfd2lkdGgpKSA/ICRzbWRfdGh1bWJfd2lkdGggOiAwOw0KCSRo ZWlnaHQgPSAoaXNfbnVtZXJpYygkc21kX3RodW1iX2hlaWdodCkpID8gJHNtZF90aHVtYl9o ZWlnaHQgOiAwOw0KCSRuZXduYW1lID0gc2FuaXRpemVGb3JVcmwoJHNtZF90aHVtYl9uZXdu YW1lKTsNCgkkbXNnID0gJyc7DQoNCgkvLyBUYWJsZSBjb250cm9sDQoJaWYgKGdwcygncmVt b3ZlJykpIHsNCgkJc21kX3RodW1iX3RhYmxlX3JlbW92ZSgpOw0KCX0gZWxzZSB7DQoJCWlm ICghc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCXNtZF90aHVtYl90YWJsZV9pbnN0 YWxsKCk7DQoJCX0NCgl9DQoNCgkvLyBUb2dnbGUgcHJvZmlsZSBwYW5lbA0KCWlmICgkc3Rl cCA9PSAnc2F2ZV9wYW5lX3N0YXRlJykgew0KCQlzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9z dGF0ZSgpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfY3Jl YXRlX2FsbCcpIHsNCgkJc21kX3RodW1iX2NyZWF0ZV9hbGwoKTsNCgl9DQoNCgkvLyBTYXZl IHByb2ZpbGUNCglpZiAoJHN0ZXAgPT0gJ3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSB7DQoJ CWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkJaWYgKCRzbWRfdGh1bWJfY2Fu Y2VsKSB7DQoJCQkJLy8gRG8gbm90aGluZw0KCQkJfSBlbHNlIGlmICgkc21kX3RodW1iX2Fk ZCkgew0KCQkJCS8vIENyZWF0ZSBuZXcgcHJvZmlsZQ0KCQkJCSRleGlzdHMgPSBzYWZlX3Jv dygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciKTsNCgkJ CQlpZiAoJGV4aXN0cykgew0KCQkJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3Byb2ZpbGVf ZXhpc3RzJywgYXJyYXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmV3bmFtZSkpKTsNCgkJCQl9 IGVsc2Ugew0KCQkJCQlpZiAoJG5ld25hbWUpIHsNCgkJCQkJCSRmbGFncyA9IDA7DQoJCQkJ CQkkZmxhZ3MgPSAoJHNtZF90aHVtYl9hY3RpdmVfbmV3KSA/ICRmbGFncyB8IFNNRF9USFVN Ql9BQ1RJVkUgOiAkZmxhZ3M7DQoJCQkJCQkkZmxhZ3MgPSAoJHNtZF90aHVtYl9jcm9wKSA/ ICRmbGFncyB8IFNNRF9USFVNQl9DUk9QIDogJGZsYWdzOw0KCQkJCQkJJGZsYWdzID0gKCRz bWRfdGh1bWJfc2hhcnBlbikgPyAkZmxhZ3MgfCBTTURfVEhVTUJfU0hBUlAgOiAkZmxhZ3M7 DQoNCgkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9USFVNQiwNCgkJCQkJCQkibmFtZT0nIi5kb1Ns YXNoKCRuZXduYW1lKS4iJyIuDQoJCQkJCQkJIiwgd2lkdGg9JyIuZG9TbGFzaCgkd2lkdGgp LiInIi4NCgkJCQkJCQkiLCBoZWlnaHQ9JyIuZG9TbGFzaCgkaGVpZ2h0KS4iJyIuDQoJCQkJ CQkJIiwgcXVhbGl0eT0nIi5kb1NsYXNoKCRxdWFsaXR5KS4iJyIuDQoJCQkJCQkJIiwgZmxh Z3M9JyIuZG9TbGFzaCgkZmxhZ3MpLiInIg0KCQkJCQkJKTsNCg0KCQkJCQkJLy8gQWx0ZXIg dGhlIGRlZmF1bHQgdGh1bWJuYWlsDQoJCQkJCQlpZiAoJHNtZF90aHVtYl9kZWZhdWx0KSB7 DQoJCQkJCQkJc2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAkbmV3bmFt ZSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOKTsNCgkJCQkJCX0NCg0KCQkJCQkJLy8gQ3Jl YXRlIHRoZSB0aHVtYm5haWwgZGlyZWN0b3J5DQoJCQkJCQlAbWtkaXIoSU1QQVRILiRuZXdu YW1lKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJLy8gVXBkYXRlIGV4aXN0 aW5nIHByb2ZpbGUNCgkJCQkkbmFtZSA9IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmFt ZSk7DQoJCQkJJGV4aXN0cyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5k b1NsYXNoKCRuZXduYW1lKS4iJyIpOw0KCQkJCWlmICgkZXhpc3RzICYmIHN0cnRvbG93ZXIo JG5ld25hbWUpICE9IHN0cnRvbG93ZXIoJG5hbWUpKSB7DQoJCQkJCSRtc2cgPSBzbWRfdGh1 bWJfZ1R4dCgncHJvZmlsZV9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiBkb1NsYXNoKCRu ZXduYW1lKSkpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmICgkbmV3bmFtZSkgew0KCQkJCQkJ JGZsYWdzID0gMDsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX2FjdGl2ZSkgPyAkZmxh Z3MgfCBTTURfVEhVTUJfQUNUSVZFIDogJGZsYWdzOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRf dGh1bWJfY3JvcCkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQ1JPUCA6ICRmbGFnczsNCgkJCQkJ CSRmbGFncyA9ICgkc21kX3RodW1iX3NoYXJwZW4pID8gJGZsYWdzIHwgU01EX1RIVU1CX1NI QVJQIDogJGZsYWdzOw0KDQoJCQkJCQlzYWZlX3VwZGF0ZSgNCgkJCQkJCQlTTURfVEhVTUIs DQoJCQkJCQkJIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciDQoJCQkJCQkJCS4iLCB3 aWR0aD0nIi5kb1NsYXNoKCR3aWR0aCkuIiciDQoJCQkJCQkJCS4iLCBoZWlnaHQ9JyIuZG9T bGFzaCgkaGVpZ2h0KS4iJyINCgkJCQkJCQkJLiIsIHF1YWxpdHk9JyIuZG9TbGFzaCgkcXVh bGl0eSkuIiciDQoJCQkJCQkJCS4iLCBmbGFncz0nIi5kb1NsYXNoKCRmbGFncykuIiciDQoJ CQkJCQkJLCAibmFtZT0nIi5kb1NsYXNoKCRuYW1lKS4iJyINCgkJCQkJCSk7DQoNCgkJCQkJ CS8vIEFsdGVyIHRoZSBkZWZhdWx0IHRodW1ibmFpbA0KCQkJCQkJaWYgKCRzbWRfdGh1bWJf ZGVmYXVsdCkgew0KCQkJCQkJCXNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxl JywgJG5ld25hbWUsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQl9IGVsc2Ug ew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgZGVmYXVsdCBmbGFnIGlmIHRoaXMgdXNlZCB0byBi ZSB0aGUgZGVmYXVsdA0KCQkJCQkJCWlmIChnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRf cHJvZmlsZScpID09IGRvU2xhc2goJG5hbWUpKSB7DQoJCQkJCQkJCXNldF9wcmVmKCdzbWRf dGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7 DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KDQoJCQkJCQkvLyBBZGp1c3QgdGhlIHRodW1ibmFpbCBk aXJlY3RvcnkgaWYgdGhlIG5hbWUgaGFzIGNoYW5nZWQNCgkJCQkJCWlmICgkbmV3bmFtZSAh PSAkbmFtZSkgew0KCQkJCQkJCXJlbmFtZShJTVBBVEguJG5hbWUsIElNUEFUSC4kbmV3bmFt ZSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkkbXNn ID0gc21kX3RodW1iX2dUeHQoJ3RhYmxlc19ub3RfaW5zdGFsbGVkJyk7DQoJCX0NCgl9DQoN CgkvLyBEZWxldGUgcHJvZmlsZQ0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX3Byb2ZpbGVf ZGVsZXRlJykgew0KCQlpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCSR0eHBf ZGVsID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfZGVsZXRlJyk7DQoJCQkkdGhlX2RmbHQg PSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJ aWYgKCFlbXB0eSgkc21kX3RodW1iX25hbWUpKSB7DQoJCQkJJG5hbWUgPSBzYW5pdGl6ZUZv clVybCgkc21kX3RodW1iX25hbWUpOw0KCQkJCSRyZXQgPSBzYWZlX2RlbGV0ZShTTURfVEhV TUIsICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIik7DQoJCQkJaWYgKCRyZXQpIHsNCgkJ CQkJc21kX3RodW1iX3JtZGlyKElNUEFUSC4kbmFtZSk7DQoNCgkJCQkJLy8gRGVsZXRlIGFs bCBUWFAgdGh1bWJzIHRvbz8NCgkJCQkJaWYgKCgkbmFtZSA9PSAkdGhlX2RmbHQpICYmICgk dHhwX2RlbCA9PSAnMScpKSB7DQoJCQkJCQkkcnMgPSBzYWZlX3Jvd3MoJ2lkLCBleHQnLCAn dHhwX2ltYWdlJywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJCWZvcmVhY2ggKCRycyBhcyAk cm93KSB7DQoJCQkJCQkJJHBhdGggPSBJTVBBVEguJHJvd1snaWQnXS4ndCcuJHJvd1snZXh0 J107DQoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJCQkJCQl1bmxpbmso JHBhdGgpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCXNhZmVfdXBkYXRlKCd0eHBfaW1h Z2UnLCAndGh1bWJuYWlsID0gMCwgdGh1bWJfdyA9IDAsIHRodW1iX2ggPSAwJywgJ3RodW1i bmFpbCA9IDEnKTsNCgkJCQkJfQ0KDQoJCQkJCS8vIFJlbW92ZSB0aGUgZGVmYXVsdCBmbGFn IGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQlpZiAoZ2V0X3ByZWYoJ3Nt ZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSA9PSBkb1NsYXNoKCRuYW1lKSkgew0KCQkJCQkJ c2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgJ3NtZF90aHVtYics IFBSRUZfSElEREVOKTsNCgkJCQkJfQ0KDQoJCQkJCSRtc2cgPSBzbWRfdGh1bWJfZ1R4dCgn cHJvZmlsZV9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmFtZSkpKTsN CgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAn aW1hZ2UnLA0KCQkicGFnZSIgPT4gJHBhZ2UsDQoJCSJzb3J0IiA9PiAkc29ydCwNCgkJImRp ciIgPT4gJGRpciwNCgkJImNyaXQiID0+ICRjcml0LA0KCQkic2VhcmNoX21ldGhvZCIgPT4g JHNlYXJjaF9tZXRob2QsDQoJKTsNCg0KCSRlZGl0Rm9jdXMgPSAoJHN0ZXAgPT0gJ3NtZF90 aHVtYl9wcm9maWxlX2VkaXQnKSA/ICdqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZV9lZGl0 ZWQgaW5wdXRbbmFtZT1cJ3NtZF90aHVtYl9uZXduYW1lXCddIikuZm9jdXMoKTsnIDogJyc7 DQoNCgllY2hvIDw8PEVPQw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVu Y3Rpb24gc21kX3RodW1iX3RvZ2dsZW5ldygpIHsNCglib3ggPSBqUXVlcnkoIiNzbWRfdGh1 bWJfcHJvZmlsZV9jcmVhdGUiKTsNCglpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJub25l Iikgew0KCQlib3guc2hvdygpOw0KCX0gZWxzZSB7DQoJCWJveC5oaWRlKCk7DQoJfQ0KCWpR dWVyeSgiaW5wdXQuc21kX2ZvY3VzIikuZm9jdXMoKTsNCglyZXR1cm4gZmFsc2U7DQp9DQpm dW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZShuYW1lKSB7DQoJc2VuZEFzeW5jRXZl bnQoDQoJew0KCQlldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsDQoJCXN0ZXA6ICdzbWRfdGh1 bWJfc3dpdGNoX2FjdGl2ZScsDQoJCXNtZF90aHVtYl9wcm9maWxlOiBuYW1lDQoJfSwgc21k X3RodW1iX3N3aXRjaF9hY3RpdmVfZG9uZSk7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dp dGNoX2FjdGl2ZV9kb25lKGRhdGEpIHsNCgl2YXIgc21kX3RodW1iX3Byb2ZpbGUgPSBqUXVl cnkoJyNzbWRfdGh1bWJfcHJvZmlsZV8nK2pRdWVyeShkYXRhKS5maW5kKCdzbWRfdGh1bWJf cHJvZmlsZScpLmF0dHIoJ3ZhbHVlJykpOw0KCXNtZF90aHVtYl9wcm9maWxlLnRvZ2dsZUNs YXNzKCdzbWRfaW5hY3RpdmUnKTsNCglpZiAoc21kX3RodW1iX3Byb2ZpbGUuaGFzQ2xhc3Mo J3NtZF9pbmFjdGl2ZScpKSB7DQoJCXNtZF90aHVtYl9wcm9maWxlLmZpbmQoJ2lucHV0OmNo ZWNrYm94JykucmVtb3ZlQXR0cignY2hlY2tlZCcpOw0KCX0gZWxzZSB7DQoJCXNtZF90aHVt Yl9wcm9maWxlLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcsICdjaGVj a2VkJyk7DQogIAkJCX0NCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfcHJlZihvYmos IG5hbWUpIHsNCgl2YXIgc3RhdGUgPSAoalF1ZXJ5KG9iaikuYXR0cignY2hlY2tlZCcpKSA/ IDEgOiAwOw0KCXNlbmRBc3luY0V2ZW50KA0KCXsNCgkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2 ZW50LA0KCQlzdGVwOiAnc21kX3RodW1iX3N3aXRjaF9wcmVmJywNCgkJc21kX3RodW1iX3R4 cHR5cGU6IG5hbWUsDQoJCXNtZF90aHVtYl9zdGF0ZTogc3RhdGUNCgl9KTsNCn0NCg0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScp LmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkoJy5zbWRfdGh1bWJfcm93IGlucHV0OmNo ZWNrYm94JykuZWFjaChmdW5jdGlvbigpIHsNCgkJCXNtZF90aHVtYl9zd2l0Y2hfYWN0aXZl KGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdjbGFzcycpKTsNCgkJfSk7DQoJfSk7DQoJ eyRlZGl0Rm9jdXN9DQp9KTsNCjwvc2NyaXB0Pg0KRU9DOw0KDQoJLy8gSW5qZWN0IHN0eWxl cw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGh1bWJfc3R5bGVz Wydwcm9maWxlJ10gLiAnPC9zdHlsZT4nOw0KDQoJJG5ld2J0biA9ICc8YSBzdHlsZT0ibWFy Z2luLWxlZnQ6LTVweDsiIGNsYXNzPSJuYXZsaW5rIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1 cm4gc21kX3RodW1iX3RvZ2dsZW5ldygpOyI+Jy5zbWRfdGh1bWJfZ1R4dCgnbmV3JykuJzwv YT4mbmJzcDsnOw0KCSRhbGxidG4gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Iicuam9p bl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX2NyZWF0ZV9hbGwiIG9uY2xpY2s9InJl dHVybiBjb25maXJtKFwnJy5zbWRfdGh1bWJfZ1R4dCgnY3JlYXRlX2FsbF9jb25maXJtJyku J1wnKTsiPicuc21kX3RodW1iX2dUeHQoJ2FsbF90aHVtYnMnKS4nPC9hPic7DQoNCgkkaGVh ZGluZ3MgPSBuLnRyKA0KCQluLmNvbHVtbl9oZWFkKCduYW1lJywgJ25hbWUnLCAnaW1hZ2Un LCBmYWxzZSwgJ2FzYycpLg0KCQljb2x1bW5faGVhZCgndGh1bWJfd2lkdGgnLCAnd2lkdGgn LCAnaW1hZ2UnLCBmYWxzZSkuDQoJCWNvbHVtbl9oZWFkKCd0aHVtYl9oZWlnaHQnLCAnaGVp Z2h0JywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgn cXVhbGl0eScpLCAncXVhbGl0eScsICdpbWFnZScsIGZhbHNlKS4NCgkJY29sdW1uX2hlYWQo J2tlZXBfc3F1YXJlX3BpeGVscycsICdjcm9wJywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1 bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgnc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScs IGZhbHNlKS4NCgkJY29sdW1uX2hlYWQoJ2FjdGl2ZScsICdhY3RpdmUnLCAnaW1hZ2UnLCBm YWxzZSwgJycsICcnLCAnJywgJ3NtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLg0KCQljb2x1 bW5faGVhZCgnZGVmYXVsdCcsICdkZWZhdWx0JywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1 bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgnYWN0aW9ucycpLCAnYWN0aW9ucycsICdpbWFnZScs IGZhbHNlKQ0KCSk7DQoNCgkkb3V0W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJv ZmlsZXMiPjxsZWdlbmQgY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21k X3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48 YSBocmVmPSIjc21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy5zbWRfdGh1bWJfZ1R4dCgncHJv ZmlsZV9oZWFkaW5nJykuJzwvYT48L2xlZ2VuZD48ZGl2IGlkPSJzbWRfdGh1bWJfYmF0Y2gi PjxzcGFuIGlkPSJzbWRfdGh1bWJfYmN1cnIiPjwvc3Bhbj48c3BhbiBpZD0ic21kX3RodW1i X2J0b3QiPjwvc3Bhbj48L2Rpdj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBj bGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1 bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJ JG91dFtdID0gJG1zZyA/ICc8ZGl2IGNsYXNzPSJzbWRfdGh1bWJfZXJyb3IiPicuJG1zZy4n PC9kaXY+JyA6ICcnOw0KDQoJLy8gTWFpbiBsaXN0IG9mIHByb2ZpbGVzDQoJJG91dFtdID0g Jzxmb3JtIG1ldGhvZD0icG9zdCIgbmFtZT0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIgaWQ9 InNtZF90aHVtYl9wcm9maWxlX2Zvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsN Cgkkb3V0W10gPSBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJJG91dFtdID0gdHIodGRhKCRuZXdi dG4uJGFsbGJ0biwgJyBjb2xzcGFuPSI4IicpKTsNCgkkb3V0W10gPSAkaGVhZGluZ3M7DQoN CglpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJJHJzID0gc2FmZV9yb3dzKCcq JywgU01EX1RIVU1CLCAnMT0xIE9SREVSIEJZIG5hbWUnKTsNCgkJJHByb19kZmx0ID0gZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgMSk7DQoNCgkJLy8gTmV3 IFByb2ZpbGUgcm93DQoJCSRvdXRbXT0gJzx0ciBpZD0ic21kX3RodW1iX3Byb2ZpbGVfY3Jl YXRlIiBjbGFzcz0ic21kX2hpZGRlbiI+JzsNCgkJJG91dFtdID0gdGQoc0lucHV0KCdzbWRf dGh1bWJfcHJvZmlsZV9zYXZlJykuZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9uZXduYW1l JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRfdGh1bWJfbmFt ZSA6ICcnKSwgJ3NtZF9mb2N1cycpKQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1 bWJfd2lkdGgnLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHdpZHRo IDogJycpLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRf dGh1bWJfaGVpZ2h0JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRo ZWlnaHQgOiAnJyksICcnLCAnJywgJycsICc0JykpDQoJCQkudGQoZklucHV0KCd0ZXh0Jywg J3NtZF90aHVtYl9xdWFsaXR5JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUn KSA/ICRxdWFsaXR5IDogJycpLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJLnRkKGNoZWNrYm94 KCdzbWRfdGh1bWJfY3JvcCcsICcxJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3Nh dmUnKSA/ICRzbWRfdGh1bWJfY3JvcCA6IDApKSkNCgkJCS50ZChjaGVja2JveCgnc21kX3Ro dW1iX3NoYXJwZW4nLCAnMScsICgoJHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykg PyAkc21kX3RodW1iX3NoYXJwZW4gOiAwKSkpDQoJCQkudGQoY2hlY2tib3goJ3NtZF90aHVt Yl9hY3RpdmVfbmV3JywgJzEnLCAxKSkNCgkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2Rl ZmF1bHQnLCAnMScsIDApKQ0KCQkJLnRkKGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9h ZGQnLCBnVHh0KCdhZGQnKSwgJ3NtYWxsZXJib3gnKSk7DQoJCSRvdXRbXT0gJzwvdHI+JzsN Cg0KCQkvLyBSZW1haW5pbmcgcm93cw0KCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ JGxpbmtfZWR0ID0gam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX3Byb2ZpbGVf ZWRpdCYjMzg7c21kX3RodW1iX25hbWU9Jy4kcm93WyduYW1lJ107DQoJCQkkbGlua19kZWwg PSBqb2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9kZWxldGUmIzM4 O3NtZF90aHVtYl9uYW1lPScuJHJvd1snbmFtZSddOw0KCQkJJGJ0bkVkdCA9ICc8YSBocmVm PSInLiRsaW5rX2VkdC4nIj5bJyAuIGdUeHQoJ2VkaXQnKSAuICddPC9hPic7DQoJCQkkYnRu RGVsID0gJzxhIGhyZWY9IicuJGxpbmtfZGVsLiciIG9uY2xpY2s9InJldHVybiBjb25maXJt KFwnJy5zbWRfdGh1bWJfZ1R4dCgnZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgie25hbWV9IiA9 PiAkcm93WyduYW1lJ10pKS4nXCcpOyI+WycgLiBnVHh0KCdkZWxldGUnKSAuICddPC9hPic7 DQoJCQkkYWN0aXZlID0gKCRyb3dbJ2ZsYWdzJ10gJiBTTURfVEhVTUJfQUNUSVZFKSA/IDEg OiAwOw0KCQkJJGNyb3AgPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEg OiAwOw0KCQkJJHNoYXJwZW4gPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9TSEFSUCkg PyAxIDogMDsNCg0KCQkJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9lZGl0JyAm JiAkcm93WyduYW1lJ10gPT0gJHNtZF90aHVtYl9uYW1lKSB7DQoJCQkJJGJ0blNhdmUgPSBm SW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJfc2F2ZScsIGdUeHQoJ1NhdmUnKSwgJ3NtYWxs ZXJib3gnKTsNCgkJCQkkYnRuQ2FuY2VsID0gZklucHV0KCdzdWJtaXQnLCAnc21kX3RodW1i X2NhbmNlbCcsIGdUeHQoJ0NhbmNlbCcpLCAnc21hbGxlcmJveCcpOw0KCQkJCSRvdXRbXSA9 IHRyKA0KCQkJCQl0ZChoSW5wdXQoJ3NtZF90aHVtYl9uYW1lJywgJHJvd1snbmFtZSddKS5m SW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX25ld25hbWUnLCAkcm93WyduYW1lJ10pKQ0KCQkJ CQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl93aWR0aCcsICRyb3dbJ3dpZHRoJ10s ICcnLCAnJywgJycsICc0JykpDQoJCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1i X2hlaWdodCcsICRyb3dbJ2hlaWdodCddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCQkudGQo ZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9xdWFsaXR5JywgJHJvd1sncXVhbGl0eSddLCAn JywgJycsICcnLCAnNCcpKQ0KCQkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9jcm9wJywg JzEnLCAkY3JvcCkpDQoJCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX3NoYXJwZW4nLCAn MScsICRzaGFycGVuKSkNCgkJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfYWN0aXZlJywg JzEnLCAkYWN0aXZlKSwgJycsICRyb3dbJ25hbWUnXSkNCgkJCQkJLnRkKGNoZWNrYm94KCdz bWRfdGh1bWJfZGVmYXVsdCcsICcxJywgKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/ IDEgOiAwKSkpDQoJCQkJCS50ZCgkYnRuU2F2ZS4kYnRuQ2FuY2VsKQ0KCQkJCSwgJyBpZD0i c21kX3RodW1iX3Byb2ZpbGVfZWRpdGVkIicpOw0KCQkJfSBlbHNlIHsNCgkJCQkkb3V0W10g PSB0cigNCgkJCQkJdGQoaHJlZigkcm93WyduYW1lJ10sICRsaW5rX2VkdCkpLg0KCQkJCQl0 ZCgkcm93Wyd3aWR0aCddKS4NCgkJCQkJdGQoJHJvd1snaGVpZ2h0J10pLg0KCQkJCQl0ZCgk cm93WydxdWFsaXR5J10pLg0KCQkJCQl0ZCgoJGNyb3ApID8gZ1R4dCgneWVzJykgOiBnVHh0 KCdubycpKS4NCgkJCQkJdGQoKCRzaGFycGVuKSA/IGdUeHQoJ3llcycpIDogZ1R4dCgnbm8n KSkuDQoJCQkJCXRkKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl9h Y3RpdmVfJy4kcm93WyduYW1lJ10uJyIgdmFsdWU9IjEiJy4oKCRhY3RpdmUpID8gJyIgY2hl Y2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNzPSJjaGVja2JveCIgb25jaGFuZ2U9InNt ZF90aHVtYl9zd2l0Y2hfYWN0aXZlKFwnJy4kcm93WyduYW1lJ10uJ1wnKTsiIC8+JywgJycs ICRyb3dbJ25hbWUnXSkuDQoJCQkJCXRkKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/ IGdUeHQoJ3llcycpIDogZ1R4dCgnbm8nKSkuDQoJCQkJCXRkKCRidG5EZWwpDQoJCQkJLCAn IGlkPSJzbWRfdGh1bWJfcHJvZmlsZV8nLiRyb3dbJ25hbWUnXS4nIiBjbGFzcz0ic21kX3Ro dW1iX3JvdycgLiAoKCRhY3RpdmUpID8gJycgOiAnIHNtZF9pbmFjdGl2ZScpLiciJyk7DQoJ CQl9DQoJCX0NCgl9DQoNCglpZiAoJHByb19kZmx0KSB7DQoJCSR0eHBfYyA9IGdldF9wcmVm KCdzbWRfdGh1bWJfdHhwX2NyZWF0ZScpOw0KCQkkdHhwX2QgPSBnZXRfcHJlZignc21kX3Ro dW1iX3R4cF9kZWxldGUnKTsNCgkJJG91dFtdID0gdHIoDQoJCQl0ZCgnJm5ic3A7JykuDQoJ CQl0ZGNzKA0KCQkJCXNtZF90aHVtYl9nVHh0KCd0eHBfZGVmYXVsdF9zeW5jJykgLg0KCQkJ CSc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl90eHBfY3JlYXRlIiB2 YWx1ZT0iMSInLigoJHR4cF9jKSA/ICciIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4gJyBj bGFzcz0iY2hlY2tib3giIG9uY2hhbmdlPSJzbWRfdGh1bWJfc3dpdGNoX3ByZWYodGhpcywg XCd0eHBfY3JlYXRlXCcpOyIgLz4nLg0KCQkJCXNtZF90aHVtYl9nVHh0KCdjcmVhdGUnKS4N CgkJCQknPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzbWRfdGh1bWJfdHhwX2RlbGV0 ZSIgdmFsdWU9IjEiJy4oKCR0eHBfZCkgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAnJyku ICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRo aXMsIFwndHhwX2RlbGV0ZVwnKTsiIC8+Jy4NCgkJCQlzbWRfdGh1bWJfZ1R4dCgnZGVsZXRl JykNCgkJCSwgOCkpOw0KCX0NCg0KCSRvdXRbXSA9IGVuZFRhYmxlKCcnKTsNCgkkb3V0W10g PSAnPC9kaXY+PC9mb3JtPjwvZmllbGRzZXQ+JzsNCg0KCXJldHVybiBqb2luKCcnLCAkb3V0 KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEZWxldGUgYSB0aHVt Ym5haWwgZGlyZWN0b3J5IGFuZCBpdHMgY29udGVudHMNCmZ1bmN0aW9uIHNtZF90aHVtYl9y bWRpcigkZGlyKSB7DQoJaWYgKGlzX2RpcigkZGlyKSkgew0KCQkkb2JqZWN0cyA9IHNjYW5k aXIoJGRpcik7DQoJCWZvcmVhY2ggKCRvYmplY3RzIGFzICRvYmplY3QpIHsNCgkJCWlmICgk b2JqZWN0ICE9ICIuIiAmJiAkb2JqZWN0ICE9ICIuLiIpIHsNCgkJCQlpZiAoZmlsZXR5cGUo JGRpci5EUy4kb2JqZWN0KSA9PSAiZGlyIikgc21kX3RodW1iX3JtZGlyKCRkaXIuRFMuJG9i amVjdCk7IGVsc2UgdW5saW5rKCRkaXIuRFMuJG9iamVjdCk7DQoJCQl9DQoJCX0NCgkJcmVz ZXQoJG9iamVjdHMpOw0KCQlybWRpcigkZGlyKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gQWRkIHRodW1ibmFpbCB0YWJsZSBpZiBub3QgYWxyZWFkeSBp bnN0YWxsZWQNCi8vIEZsYWdzOiBCaXQgMD1BY3RpdmUgLyAxPUNyb3AgLyAyID0gU2hhcnBl bg0KZnVuY3Rpb24gc21kX3RodW1iX3RhYmxlX2luc3RhbGwoKSB7DQoJJEdMT0JBTFNbJ3R4 cF9lcnJfY291bnQnXSA9IDA7DQoJJHJldCA9ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRz cWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RIVU1CLiJg ICgNCgkJYG5hbWVgIHZhcmNoYXIoMzIpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCWB3aWR0 aGAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQlgaGVpZ2h0YCBpbnQoNCkgTk9U IE5VTEwgZGVmYXVsdCAnMCcsDQoJCWBxdWFsaXR5YCB0aW55aW50KDIpIE5VTEwgZGVmYXVs dCAnNzUnLA0KCQlgZmxhZ3NgIHRpbnlpbnQoMikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJ CVBSSU1BUlkgS0VZIChgbmFtZWApDQoJKSBFTkdJTkU9TXlJU0FNIjsNCg0KCWlmKGdwcygn ZGVidWcnKSkgew0KCQlkbXAoJHNxbCk7DQoJfQ0KCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkg ew0KCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0K CQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJZWNobyAiPGI+Ii4kR0xPQkFM U1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsN CgkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQl9DQoJfQ0KDQoJLy8gQmFja3Vw IHRoZSBjdXJyZW50IHRodW1iIHByZWZzDQoJJGV4aXN0cyA9IHNhZmVfcm93KCcqJywgJ3R4 cF9wcmVmcycsICJuYW1lPSdzbWRfdGh1bWJfYmFja3VwX3cnIik7DQoJaWYgKCEkZXhpc3Rz KSB7DQoJCXNldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX3cnLCBnZXRfcHJlZigndGh1bWJf dycpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCk7DQoJCXNl dF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX2gnLCBnZXRfcHJlZigndGh1bWJfaCcpLCAnc21k X3RodW1iJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMSk7DQoJCXNldF9wcmVmKCdz bWRfdGh1bWJfYmFja3VwX2MnLCBnZXRfcHJlZigndGh1bWJfY3JvcCcpLCAnc21kX3RodW1i JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMik7DQoNCgkJLy8gRXJhc2UgdGhlIGN1 cnJlbnQgdGh1bWIgcHJlZnMNCgkJc2V0X3ByZWYoJ3RodW1iX3cnLCAnJywgJ2ltYWdlJywg UFJFRl9ISURERU4pOw0KCQlzZXRfcHJlZigndGh1bWJfaCcsICcnLCAnaW1hZ2UnLCBQUkVG X0hJRERFTik7DQoJCXNldF9wcmVmKCd0aHVtYl9jcm9wJywgJycsICdpbWFnZScsIFBSRUZf SElEREVOKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJv cCB0YWJsZSBpZiBpbiBkYXRhYmFzZQ0KZnVuY3Rpb24gc21kX3RodW1iX3RhYmxlX3JlbW92 ZSgpIHsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9l cnJfY291bnQnXSA9IDA7DQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRz cWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5QRlguU01EX1RIVU1CLiAiOyAiOw0K CQlpZihncHMoJ2RlYnVnJykpIHsNCgkJCWRtcCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgk c3FsIGFzICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRy ZXQ9PT1mYWxzZSkgew0KCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQll Y2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJy b3IoKS4iPGJyIC8+XG4iOw0KCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJ fQ0KCQl9DQoJfQ0KDQoJLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgdGh1bWIgcHJlZnMNCgkk ZXhpc3RzID0gc2FmZV9yb3coJyonLCAndHhwX3ByZWZzJywgIm5hbWU9J3NtZF90aHVtYl9i YWNrdXBfdyciKTsNCglpZiAoJGV4aXN0cykgew0KCQlzZXRfcHJlZigndGh1bWJfdycsIGdl dF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX3cnKSwgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0K CQlzZXRfcHJlZigndGh1bWJfaCcsIGdldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX2gnKSwg J2ltYWdlJywgUFJFRl9ISURERU4pOw0KCQlzZXRfcHJlZigndGh1bWJfY3JvcCcsIGdldF9w cmVmKCdzbWRfdGh1bWJfYmFja3VwX2MnKSwgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KDQoJ fQ0KCS8vIEVyYXNlIHRoZSBiYWNrdXAgdGh1bWIgcHJlZnMNCglzYWZlX2RlbGV0ZSgndHhw X3ByZWZzJywgIm5hbWUgSU4oJ3NtZF90aHVtYl9iYWNrdXBfdycsICdzbWRfdGh1bWJfYmFj a3VwX2gnLCAnc21kX3RodW1iX2JhY2t1cF9jJywgJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2Zp bGUnLCAncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnLCAncGFuZV9zbWRf dGh1bWJuYWlsc192aXNpYmxlJykiKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfdGFibGVfZXhpc3QoJGFsbD0nJykgew0KCWlmICgk YWxsKSB7DQoJCSR0YmxzID0gYXJyYXkoU01EX1RIVU1CID0+IDUpOw0KCQkkb3V0ID0gY291 bnQoJHRibHMpOw0KCQlmb3JlYWNoICgkdGJscyBhcyAkdGJsID0+ICRjb2xzKSB7DQoJCQlp ZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJCQkJZWNobyAiKysgVEFCTEUgIi4kdGJsLiIgSEFTICIu Y291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsICR0YmwpKS4iIENPTFVNTlM7IFJFUVVJUkVT ICIuJGNvbHMuIiArKyIuYnI7DQoJCQl9DQoJCQlpZiAoY291bnQoQHNhZmVfc2hvdygnY29s dW1ucycsICR0YmwpKSA9PSAkY29scykgew0KCQkJCSRvdXQtLTsNCgkJCX0NCgkJfQ0KCQly ZXR1cm4gKCRvdXQ9PT0wKSA/IDEgOiAwOw0KCX0gZWxzZSB7DQoJCWlmIChncHMoJ2RlYnVn JykpIHsNCgkJCWVjaG8gIisrIFRBQkxFICIuU01EX1RIVU1CLiIgSEFTICIuY291bnQoQHNh ZmVfc2hvdygnY29sdW1ucycsIFNNRF9USFVNQikpLiIgQ09MVU1OUzsiOw0KCQl9DQoJCXJl dHVybihAc2FmZV9zaG93KCdjb2x1bW5zJywgU01EX1RIVU1CKSk7DQoJfQ0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpIHsNCgkk cGFuZXMgPSBhcnJheSgnc21kX3RodW1ibmFpbF9wcm9maWxlcycsICdzbWRfdGh1bWJuYWls cycpOw0KCSRwYW5lID0gZ3BzKCdwYW5lJyk7DQoJaWYgKGluX2FycmF5KCRwYW5lLCAkcGFu ZXMpKQ0KCXsNCgkJc2V0X3ByZWYoInBhbmVfeyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlz aWJsZScpID09ICd0cnVlJyA/ICcxJyA6ICcwJyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERF TiwgJ3llc25vcmFkaW8nLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQlzZW5kX3htbF9yZXNwb25z ZSgpOw0KCX0gZWxzZSB7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdodHRwLXN0YXR1 cycgPT4gJzQwMCBCYWQgUmVxdWVzdCcpKTsNCgl9DQp9DQoNCi8vKioqKioqKioqKioqKioq KioNCi8vIFBVQkxJQyBTSURFIFRBR1MNCi8vKioqKioqKioqKioqKioqKioNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1ibmFpbCgkYXR0cykgew0K CWdsb2JhbCAkdGhpc2ltYWdlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUn ICAgICAgID0+IEBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpLA0KCQkn aWQnICAgICAgICAgPT4gJycsDQoJCSduYW1lJyAgICAgICA9PiAnJywNCgkJJ2VzY2FwZScg ICAgID0+ICdodG1sJywNCgkJJ3dyYXB0YWcnICAgID0+ICcnLA0KCQknY2xhc3MnICAgICAg PT4gJycsDQoJCSdodG1sX2lkJyAgICA9PiAnJywNCgkJJ3N0eWxlJyAgICAgID0+ICcnLA0K CQknbGluaycgICAgICAgPT4gJycsDQoJCSdsaW5rX3JlbCcgICA9PiAnJywNCgkJJ3BvcGxp bmsnICAgID0+IDAsDQoJCSdhZGRfc3RhbXAnICA9PiAwLA0KCQknZm9yY2Vfc2l6ZScgPT4g JycsDQoJKSwkYXR0cykpOw0KDQoJaWYgKCRuYW1lKSB7DQoJCSRuYW1lID0gZG9TbGFzaCgk bmFtZSk7DQoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICJuYW1lID0gJyRu YW1lJyBsaW1pdCAxIik7DQoJfSBlbHNlaWYgKCRpZCkgew0KCQkkaWQgPSAoaW50KSAkaWQ7 DQoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICJpZCA9ICRpZCBsaW1pdCAx Iik7DQoJfSBlbHNlaWYgKCR0aGlzaW1hZ2UpIHsNCgkJJGlkID0gKGludCkgJHRoaXNpbWFn ZVsnaWQnXTsNCgkJJHJzID0gJHRoaXNpbWFnZTsNCgl9IGVsc2Ugew0KCQl0cmlnZ2VyX2Vy cm9yKGdUeHQoJ3Vua25vd25faW1hZ2UnKSk7DQoJCXJldHVybjsNCgl9DQoNCglpZiAoJHJz KSB7DQoJCWV4dHJhY3QoJHJzKTsNCgkJJHRodW1iaW5mbyA9IHNhZmVfcm93KCcqJywgU01E X1RIVU1CLCAibmFtZT0nIi5kb1NsYXNoKCR0eXBlKS4iJyIpOw0KCQlpZiAoJHRodW1iaW5m bykgew0KCQkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHRodW1iaW5mb1snbmFt ZSddKS5EUy4kaWQuJGV4dDsNCgkJCWlmIChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJCQlp ZiAoJGVzY2FwZSA9PSAnaHRtbCcpIHsNCgkJCQkJJGFsdCA9IGh0bWxzcGVjaWFsY2hhcnMo JGFsdCk7DQoJCQkJCSRjYXB0aW9uID0gaHRtbHNwZWNpYWxjaGFycygkY2FwdGlvbik7DQoJ CQkJfQ0KDQoJCQkJJG1ldGFbJ2FsdCddID0gJGFsdDsNCgkJCQkkZm9yY2Vfc2l6ZSA9IGRv X2xpc3QoJGZvcmNlX3NpemUpOw0KCQkJCWlmIChpbl9hcnJheSgnd2lkdGgnLCAkZm9yY2Vf c2l6ZSkpIHsNCgkJCQkJJG1ldGFbJ2ZvcmNldyddID0gMTsNCgkJCQl9DQoJCQkJaWYgKGlu X2FycmF5KCdoZWlnaHQnLCAkZm9yY2Vfc2l6ZSkpIHsNCgkJCQkJJG1ldGFbJ2ZvcmNlaCdd ID0gMTsNCgkJCQl9DQoJCQkJaWYgKCRhZGRfc3RhbXAgPT0gMCkgeyAkbWV0YVsnc3RhbXAn XSA9IDE7IH0gLy8gTmVnYXRpdmUgbG9naWMgc2luY2Ugd2Ugd2FudCB0aGUgc3RhbXAgb24g YnkgZGVmYXVsdCBmb3IgdGhlIGFkbWluIHNpZGUNCgkJCQlpZiAoJGNhcHRpb24pIHsgJG1l dGFbJ3RpdGxlJ10gPSAkY2FwdGlvbjsgfQ0KCQkJCWlmICgkaHRtbF9pZCAmJiAhJHdyYXB0 YWcpIHsgJG1ldGFbJ2lkJ10gPSAkaHRtbF9pZDsgfQ0KCQkJCWlmICgkY2xhc3MgJiYgISR3 cmFwdGFnKSB7ICRtZXRhWydjbGFzcyddID0gJGNsYXNzOyB9IGVsc2UgeyAkY2xhc3M9JHR5 cGU7IH0NCgkJCQlpZiAoJHN0eWxlKSB7ICRtZXRhWydzdHlsZSddID0gJHN0eWxlOyB9DQoN CgkJCQkkb3V0ID0gc21kX3RodW1iX2ltZygkdGh1bWJpbmZvLCAkcnMsICRtZXRhKTsNCg0K CQkJCWlmICgkbGluaykgew0KCQkJCQkkb3V0ID0gaHJlZigkb3V0LCBpbWFnZXNyY3VybCgk aWQsICRleHQpLCAoIWVtcHR5KCRsaW5rX3JlbCkgPyAnIHJlbD0iJy4kbGlua19yZWwuJyIn IDogJycpLicgdGl0bGU9IicuJGNhcHRpb24uJyInKTsNCgkJCQl9IGVsc2VpZiAoJHBvcGxp bmspIHsNCgkJCQkJJG91dCA9ICc8YSBocmVmPSInLmltYWdlc3JjdXJsKCRpZCwgJGV4dCku JyInLg0KCQkJCQkJJyBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3 aW5kb3dcJywgJy4NCgkJCQkJCSdcJ3dpZHRoPScuJHcuJywgaGVpZ2h0PScuJGguJywgc2Ny b2xsYmFycywgcmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij4nLiRvdXQuJzwvYT4nOw0K CQkJCX0NCg0KCQkJCXJldHVybiAoJHdyYXB0YWcpID8gZG9UYWcoJG91dCwgJHdyYXB0YWcs ICRjbGFzcywgJycsICRodG1sX2lkKSA6ICRvdXQ7DQoJCQl9DQoJCX0NCgl9DQoNCgl0cmln Z2VyX2Vycm9yKGdUeHQoJ3Vua25vd25faW1hZ2UnKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2lmX3RodW1ibmFpbCgkYXR0cywgJHRoaW5n KSB7DQoJZ2xvYmFsICR0aGlzaW1hZ2U7DQoJYXNzZXJ0X2ltYWdlKCk7DQoNCglleHRyYWN0 KGxBdHRzKGFycmF5KA0KCQkndHlwZScgPT4gQGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVs dF9wcm9maWxlJyksDQoJKSwkYXR0cykpOw0KDQoJJHRodW1iaW5mbyA9IHNhZmVfcm93KCcq JywgU01EX1RIVU1CLCAibmFtZT0nIi5kb1NsYXNoKCR0eXBlKS4iJyIpOw0KCSRyZXQgPSBm YWxzZTsNCglpZiAoJHRodW1iaW5mbykgew0KCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZv clVybCgkdGh1bWJpbmZvWyduYW1lJ10pLkRTLiR0aGlzaW1hZ2VbJ2lkJ10uJHRoaXNpbWFn ZVsnZXh0J107DQoJCSRyZXQgPSBmaWxlX2V4aXN0cygkcGF0aCk7DQoJfQ0KCXJldHVybiBw YXJzZShFdmFsRWxzZSgkdGhpbmcsICRyZXQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxv Y2FsaXNlIGFzIHJlcXVpcmVkDQovLyBUT0RPOiBtYWtlIHRoZXNlIGludG8gYSB0ZXh0cGFj ayB3aGVuIHBsdWdpbiBjb21wb3NlciBzdXBwb3J0cyB0aGVtDQpmdW5jdGlvbiBzbWRfdGh1 bWJfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJ J2FjdGlvbnMnID0+ICdBY3Rpb25zJywNCgkJJ2FsbF9zaXplcycgPT4gJ0FsbCBzaXplcycs DQoJCSdhbGxfdGh1bWJzJyA9PiAnQ3JlYXRlIGFsbCcsDQoJCSdjcmVhdGUnID0+ICdDcmVh dGlvbicsDQoJCSdjcmVhdGVfYWxsX2NvbmZpcm0nID0+ICdSZWFsbHkgY3JlYXRlIHRodW1i bmFpbHMgZm9yIEFMTCBhY3RpdmUgcHJvZmlsZXM/IEFueSBleGlzdGluZyB0aHVtYnMgd2ls bCBiZSBvdmVyd3JpdHRlbi4nLA0KCQknZGVsZXRlJyA9PiAnRGVsZXRpb24nLA0KCQknZGVs ZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRlIHByb2ZpbGUge25hbWV9PyBJdCB3aWxs IGRlbGV0ZSBBTEwgdGh1bWJuYWlscyBvZiB0aGlzIHR5cGUuJywNCgkJJ25ldycgPT4gJ05l dyBwcm9maWxlJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3Rh bGxlZCcsDQoJCSdwcm9maWxlX2RlbGV0ZWQnID0+ICdQcm9maWxlICJ7bmFtZX0iIGRlbGV0 ZWQnLA0KCQkncHJvZmlsZV9leGlzdHMnID0+ICdQcm9maWxlICJ7bmFtZX0iIGFscmVhZHkg ZXhpc3RzJywNCgkJJ3Byb2ZpbGVfaGVhZGluZycgPT4gJ1RodW1ibmFpbCBwcm9maWxlcycs DQoJCSdxdWFsaXR5JyA9PiAnUXVhbGl0eSAoJSknLA0KCQknc2hhcnBlbicgPT4gJ1NoYXJw ZW4nLA0KCQkndGFibGVzX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZXMgbm90IGluc3RhbGxl ZDogdHJ5IHJlaW5zdGFsbGluZyB0aGUgcGx1Z2luJywNCgkJJ3RodW1ibmFpbF9oZWFkaW5n JyA9PiAnVGh1bWJuYWlscycsDQoJCSd0eHBfZGVmYXVsdF9zeW5jJyA9PiAnS2VlcCBUWFAg dGh1bWJuYWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlIG9uOiAnLA0KCQkndXBs b2FkJyA9PiAnUmVwbGFjZSBzZWxlY3RlZCB0aHVtYm5haWwnLA0KCSk7DQoJcmV0dXJuIHN0 cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToi b3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MTU0NDg6 IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+c21kX3RodW1ibmFpbDwvaDE+CgoJPGgyPkZl YXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkFzc2lnbiBhbnkgbnVtYmVyIG9mIHRodW1ibmFp bHMgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBpbWFnZXM8L2xp PgoJCTxsaT5CYXRjaCBhc3NpZ24gdGh1bWJuYWlscyB0byBhbGwgZXhpc3RpbmcgaW1hZ2Vz PC9saT4KCQk8bGk+U2V0IG9uZSB0aHVtYm5haWwgc2l6ZSBhcyBkZWZhdWx0PC9saT4KCQk8 bGk+RGlzcGxheSBhbnkgb2YgdGhlIHRodW1ibmFpbCBzaXplcyBvbiB5b3VyIHNpdGU8L2xp PgoJCTxsaT5LZWVwIHRodW1icyBpbiBzeW5jIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnMgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRp b25hbCB0aHVtYm5haWwgY2hlY2sgYXZhaWxhYmxlPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhv ciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gdGhl IGJldGEgdGVzdCBjcmV3IHdobyBvZmZlcmVkIGZlYXR1cmUgYW5kIHdvcmtmbG93IGFkdmlj ZSwgZXNwZWNpYWxseSB0aGVib21ic2l0ZSwgamFrb2IgYW5kIGpzdHViYnMuPC9wPgoKCTxo Mj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9y dGFudCI+UmVxdWlyZXMgUEhQNSsgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IDQuMy4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTg2L3NtZF90aHVtYm5haWwi PnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUs IGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0 cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTM0MzY3Ij5mb3J1 bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNz IG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIGRl bGV0ZSBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMj5Vc2Fn ZSAmIzgyMTI7IGFkbWluIHNpZGU8L2gyPgoKCTxwPlZpc2l0IHRoZSBDb250ZW50LSZndDtJ bWFnZXMgdGFiLiBBYm92ZSB0aGUgbGlzdCBvZiBpbWFnZXMgaXMgYW4gYXJlYSBsYWJlbGxl ZCA8ZW0+VGh1bWJuYWlsIFByb2ZpbGVzPC9lbT4uIENsaWNrIGl0IHRvIHJldmVhbCB0aGUg Y29udHJvbCBwYW5lbC4gWW91IGNhbiB0b2dnbGUgdGhpcyBwYW5lbCBvbiBhbmQgb2ZmIGJ5 IGNsaWNraW5nIHRoZSBoZWFkaW5nLjwvcD4KCgk8cD5Zb3UgbXVzdCBkZWZpbmUgYXQgbGVh c3Qgb25lIHByb2ZpbGUgdG8gYmVnaW4gd2l0aCwgc28gY2xpY2sgdGhlIDxlbT5OZXcgcHJv ZmlsZTwvZW0+IGJ1dHRvbi4gVGhpcyB3aWxsIHJldmVhbCBlZGl0IGJveGVzIHdoZXJlIHlv dSBjYW4gZW50ZXI6PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5OYW1lPC9zdHJvbmc+OiBz b21lIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoaXMgdGh1bWJuYWlsIGRpbWVuc2lvbi4gWW91 IGFyZSBsaW1pdGVkIHRvIHVzdWFsIG5vbi13ZWlyZCBjaGFyYWN0ZXJzIGluIHRoZSBuYW1l PC9saT4KCQk8bGk+PHN0cm9uZz5XaWR0aDwvc3Ryb25nPjogdGh1bWJuYWlsIHdpZHRoLCBp biBwaXhlbHMuIElmIGxlZnQgYmxhbmsgKG9yIHNldCB0byAwKSBhbmQgaGVpZ2h0IGlzIHNw ZWNpZmllZCwgdGhlIHdpZHRoIHdpbGwgYmUgY29tcHV0ZWQgaW4gcHJvcG9ydGlvbiB0byB0 aGUgaGVpZ2h0PC9saT4KCQk8bGk+PHN0cm9uZz5IZWlnaHQ8L3N0cm9uZz46IHRodW1ibmFp bCBoZWlnaHQsIGluIHBpeGVscy4gSWYgbGVmdCBibGFuayAob3Igc2V0IHRvIDApIGFuZCB3 aWR0aCBpcyBzcGVjaWZpZWQsIHRoZSBoZWlnaHQgd2lsbCBiZSBjb21wdXRlZCBpbiBwcm9w b3J0aW9uIHRvIHRoZSB3aWR0aDwvbGk+CgkJPGxpPjxzdHJvbmc+UXVhbGl0eSAoJSk8L3N0 cm9uZz46IFRoZSBxdWFsaXR5IG9mIHRoZSByZXN1bHRpbmcgdGh1bWJuYWlsLiBHZW5lcmFs bHkgb25seSBvZiB1c2UgZm9yIGpwZyBvciBwbmcoMjQpIGltYWdlcy4gVGhlIGhpZ2hlciB0 aGUgdmFsdWUgdGhlIGJldHRlciB0aGUgcXVhbGl0eSBhbmQgdGhlIGJpZ2dlciB0aGUgZmls ZSBzaXplLiBEZWZhdWx0OiA3NTwvbGk+CgkJPGxpPjxzdHJvbmc+Q3JvcDwvc3Ryb25nPjog d2hldGhlciB0byBjcm9wIHRoZSBpbWFnZSB3aGVuIHRoZSB0aHVtYm5haWwgaXMgY3JlYXRl ZCwgb3Igc2NhbGUgaXQgdG8gZml0PC9saT4KCQk8bGk+PHN0cm9uZz5TaGFycGVuPC9zdHJv bmc+OiB3aGV0aGVyIHRvIGFwcGx5IGEgc2hhcnBlbmluZyBmaWx0ZXIgdG8gdGhlIHRodW1i bmFpbCB3aGVuIGl0IGlzIGNyZWF0ZWQuIFVzZWZ1bCBmb3IgdmVyeSBzbWFsbCBpbWFnZXM8 L2xpPgoJCTxsaT48c3Ryb25nPkFjdGl2ZTwvc3Ryb25nPjogRW5hYmxlL2Rpc2FibGUgdGhp cyB0aHVtYm5haWwgc2l6ZSBzbyBpdCB3aWxsL3dvbiYjODIxNzt0IGJlIGF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIHdoZW4gdGhlIG5leHQgaW1hZ2UgaXMgdXBsb2FkZWQuIENsaWNrIHRo ZSBjaGVja2JveCB0byBpbnN0YW50bHkgc3dpdGNoIHRoZSBwcm9maWxlIG9uL29mZi4gQ2xp Y2sgdGhlICYjODIxNjtBY3RpdmUmIzgyMTc7IHdvcmQgaW4gdGhlIGhlYWRpbmcgcm93IHRv IHRvZ2dsZSB0aGUgc3RhdHVzIG9mIGFsbCBwcm9maWxlcy4gTm90ZSB0aGF0IHRoaXMgc2V0 dGluZyBnb3Zlcm5zIGhvdyB0aGUgPGEgaHJlZj0iI2NyZWF0ZSI+QWxsIHNpemVzPC9hPiBk cm9wZG93biBlbnRyeSBpbnRlcmFjdHMgd2l0aCB0aGUgPGVtPkNyZWF0ZTwvZW0+IGFuZCA8 ZW0+RGVsZXRlPC9lbT4gYnV0dG9uczwvbGk+CgkJPGxpPjxzdHJvbmc+RGVmYXVsdDwvc3Ry b25nPjogc2V0IHRoaXMgdGh1bWJuYWlsIHByb2ZpbGUgYXMgdGhlIGRlZmF1bHQuIFRoZSBk ZWZhdWx0IGltYWdlIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBJbWFnZXMgbGlzdCBhbmQg d2lsbCBhbHNvIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgc2l6ZSB0byBiZSBkaXNwbGF5ZWQg dXNpbmcgPGNvZGU+Jmx0O3R4cDpzbWRfdGh1bWJuYWlsLyZndDs8L2NvZGU+LiBJZiB0aGUg b3B0aW9uIHRvIDxhIGhyZWY9IiN0eHBfdGh1bWJzIj5zeW5jIHdpdGggPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnM8L2E+IGlzIG9uLCBpdCB3aWxsIGFs c28gYmVjb21lIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3Mgc3RhbmRh cmQgKGJ1aWx0LWluKSB0aHVtYm5haWwgc2l6ZSBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZDwv bGk+Cgk8L3VsPgoKCTxwPk9uY2UgeW91JiM4MjE3O3ZlIGNvbmZpZ3VyZWQgeW91ciBwcm9m aWxlLCBjbGljayBTYXZlIHRvIHN0b3JlIGl0LiBZb3UgY2FuIGFsd2F5cyBlZGl0IGl0IGFn YWluIGJ5IGNsaWNraW5nIGl0cyBuYW1lLiBHbyBhaGVhZCBhbmQgY3JlYXRlIHNvbWUgbW9y ZSBwcm9maWxlcyBmb3IgdGh1bWJuYWlscyBvZiBkaWZmZXJlbnQgc2l6ZXMvcGFyYW1ldGVy cy4gSWYgeW91IHdpc2ggdG8gZGVsZXRlIGEgcHJvZmlsZSwgaGl0IHRoZSA8ZW0+W0RlbGV0 ZV08L2VtPiBidXR0b24gYW5kIGNvbmZpcm0uIDxzdHJvbmc+QWxsIHRodW1ibmFpbHMgYXNz b2NpYXRlZCB3aXRoIHRoYXQgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQ8L3N0cm9uZz4uPC9w PgoKCTxwPkF0IHRoaXMgcG9pbnQsIG5vIHRodW1ibmFpbHMgaGF2ZSBiZWVuIGNyZWF0ZWQu IExldCYjODIxNztzIHJlY3RpZnkgdGhhdC48L3A+CgoJPGgzIGlkPSJjcmVhdGUiPkNyZWF0 aW5nIHRodW1ibmFpbHM8L2gzPgoKCTxwPlBpY2sgb25lIG9mIHlvdXIgaW1hZ2VzIGFuZCBj bGljayB0byBlZGl0IGl0LjwvcD4KCgk8cD5CZW5lYXRoIHRoZSBtYWluIHBpY3R1cmUgeW91 IHdpbGwgc2VlIGFuIGFyZWEgbGFiZWxsZWQgPGVtPlRodW1ibmFpbHM8L2VtPi4gWW91IGNh biB0b2dnbGUgdGhpcyBwYW5lbCBvbiBhbmQgb2ZmIGJ5IGNsaWNraW5nIHRoZSBoZWFkaW5n LjwvcD4KCgk8cD5JbnNpZGUgdGhlIHBhbmVsIGlzIGEgc2ltcGxlIHNlbGVjdCBsaXN0IGNv bnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIHRodW1ibmFpbCBwcm9maWxlIHlvdSBoYXZl IGNvbmZpZ3VyZWQsIHBsdXMgdGhlIHNwZWNpYWwgZW50cnkgPGVtPkFsbCBzaXplczwvZW0+ LiBZb3UgY2FuIHNlbGVjdCBvbmUgb2YgdGhlc2UgZW50cmllcyBhbmQgY2xpY2sgPGVtPkNy ZWF0ZTwvZW0+IHRvIGNyZWF0ZSB0aHVtYm5haWwocykgaW4gdGhlIHNlbGVjdGVkIHNpemUg b3IgaGl0IDxlbT5EZWxldGU8L2VtPiB0byByZW1vdmUgdGhlIHNlbGVjdGVkIHRodW1ibmFp bChzKS48L3A+CgoJPHA+T25jZSBjcmVhdGVkLCB0aGUgdGh1bWJuYWlscyBhcHBlYXIgaW4g dGhlIHBhbmVsOyByZW1lbWJlciB0aGV5IGNhbiBiZSB0dWNrZWQgYXdheSBpZiB5b3UgZG9u JiM4MjE3O3Qgd2FudCB0byBsb29rIGF0IHRoZW0uPC9wPgoKCTxwPklmIHlvdSBzZWxlY3Qg PGVtPkFsbCBzaXplczwvZW0+IGFuZCBoaXQgPGVtPkNyZWF0ZTwvZW0+LCB5b3Ugd2lsbCBn ZXQgb25lIHRodW1ibmFpbCBmb3IgZWFjaCBhY3RpdmUgcHJvZmlsZS4gU2ltaWxhcmx5LCBp ZiB5b3UgaGl0IDxlbT5EZWxldGU8L2VtPiBhbnkgdGh1bWJuYWlscyBzdG9yZWQgYWdhaW5z dCBhbiBhY3RpdmUgcHJvZmlsZSBmb3IgdGhlIGN1cnJlbnQgaW1hZ2Ugd2lsbCBiZSByZW1v dmVkLiBCeSB0b2dnbGluZyBjZXJ0YWluIHRodW1ibmFpbCBwcm9maWxlcyBvbi9vZmYgeW91 IGNhbiBjb250cm9sIHdoaWNoIG9uZXMgYXJlIGNyZWF0ZWQgb3IgZGVsZXRlZC48L3A+CgoJ PHA+V2hlbiB5b3UgdXBsb2FkIGEgbmV3IGltYWdlIG9yIHJlcGxhY2UgYW4gZXhpc3Rpbmcg aW1hZ2UsIHRodW1ibmFpbHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIGFu eSBhY3RpdmUgcHJvZmlsZXMuIE5vdGUgdGhhdCBpZiB5b3UgdXNlIHRoZSBtdWx0aS1lZGl0 IHRvb2wgdG8gZGVsZXRlIGltYWdlcywgPHN0cm9uZz5hbGw8L3N0cm9uZz4gY29ycmVzcG9u ZGluZyB0aHVtYm5haWxzIGZvciB0aGUgc2VsZWN0ZWQgaW1hZ2VzIChpbmNsdWRpbmcgaW5h Y3RpdmUgb25lcykgd2lsbCBiZSByZW1vdmVkLjwvcD4KCgk8aDMgaWQ9ImN1c3RvbSI+Q3Vz dG9tIHRodW1ibmFpbHM8L2gzPgoKCTxwPklmIHlvdSBwcmVmZXIgdG8gbWFrZSB5b3VyIG93 biB0aHVtYnMgaW4gYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgeW91IGNhbiBzdGlsbCBzZXQgdXAg dGhlIHByb2ZpbGVzIGFzIG5vcm1hbCBidXQgaW5zdGVhZCBvZiBjbGlja2luZyA8ZW0+Q3Jl YXRlPC9lbT4gaW4gdGhlIEltYWdlIEVkaXQgc2NyZWVuLCB5b3UgY2FuIHNlbGVjdCBhIHBy b2ZpbGUgc2l6ZSBmcm9tIHRoZSBkcm9wZG93biBhbmQgdXNlIHRoZSBCcm93c2UmIzgyMzA7 IGZhY2lsaXR5IHRvIGNob29zZSBhIHRodW1ibmFpbCBmcm9tIHlvdXIgaGFyZCBkcml2ZS4g V2hlbiB5b3UgY2xpY2sgPGVtPlVwbG9hZDwvZW0+IHRoZSBpbWFnZSB3aWxsIGJlIGluc2Vy dGVkIGFnYWluc3QgdGhlIHNlbGVjdGVkIHByb2ZpbGUuPC9wPgoKCTxwPkF0IGFueSB0aW1l IHlvdSBjYW4gY2xpY2sgb25lIG9mIHRoZSB0aHVtYm5haWxzIChvciBzZWxlY3QgYSBzaXpl IGZyb20gdGhlIGRyb3Bkb3duKSBhbmQgQnJvd3NlJiM4MjMwOyBmb3IgYW5vdGhlciBpbWFn ZSB0byByZXBsYWNlIHRoZSBleGlzdGluZyB0aHVtYm5haWwgJiM4MjEyOyBldmVuIG9uZXMg dGhhdCBoYXZlIGJlZW4gYXV0by1jcmVhdGVkLiBTb21lIHRoaW5ncyB0byBub3RlIGFib3V0 IHRoaXMgZmVhdHVyZTo8L3A+CgoJPHVsPgoJCTxsaT50aGUgdGh1bWJuYWlsIG11c3QgYmUg b2YgdGhlIHNhbWUgZmlsZSB0eXBlIGFzIHRoZSBvcmlnaW5hbCBpbWFnZSBvciB0aGUgdXBs b2FkIHdpbGwgYmUgaWdub3JlZDwvbGk+CgkJPGxpPnlvdSBjYW4gY2xpY2sgYSBoaWdobGln aHRlZCBpbWFnZSB0byBkZXNlbGVjdCBpdDwvbGk+CgkJPGxpPnlvdSBjYW5ub3QgQnJvd3Nl IGZvciBhbiBpbWFnZSB1bmxlc3MgeW91IGhhdmUgY2hvc2VuIG9uZSBwcm9maWxlPC9saT4K CTwvdWw+CgoJPGgzIGlkPSJiYXRjaCI+QmF0Y2ggdGh1bWJuYWlsIGNyZWF0aW9uPC9oMz4K Cgk8cD5Zb3UgY2FuIGFsc28gY3JlYXRlIHRodW1ibmFpbHMgZW4tbWFzc2UuIEZyb20gdGhl IG1haW4gPGVtPlRodW1ibmFpbCBwcm9maWxlczwvZW0+IHBhbmVsLCBpZiB5b3UgaGl0IDxl bT5DcmVhdGUgYWxsPC9lbT4gdGhlIHBsdWdpbiB3aWxsIGdvIGF3YXkgYW5kIGNyZWF0ZSB0 aHVtYm5haWxzIGZvciBldmVyeSBhY3RpdmUgcHJvZmlsZSBmb3IgYWxsIGN1cnJlbnRseSBp bnN0YWxsZWQgaW1hZ2VzLiBUaGlzIGlzIGEgcXVpY2sgd2F5IHRvIGdlbmVyYXRlIHRodW1i cyBmb3IgeW91ciBleGlzdGluZyBpbWFnZXMuPC9wPgoKCTxwPkJlY2F1c2Ugb2YgdGhlIG5h dHVyZSBvZiB0aGlzIHRvb2wgJiM4MjEyOyBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgaW1hZ2Ug cG9vbHMgJiM4MjEyOyB0aGUgcHJvY2VzcyBpcyBkb25lIGFzIGEgYmFja2dyb3VuZCB0YXNr IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bhbj4uIEFmdGVyIGNsaWNraW5nIHRo ZSA8ZW0+Q3JlYXRlIGFsbDwvZW0+IGJ1dHRvbiAoYW5kIGNvbmZpcm1pbmcgeW91IGFyZSBz dXJlKSBhIGNvdW50ZXIgd2lsbCBhcHBlYXIgaW4gdGhlIHRvcC1yaWdodCBvZiB0aGUgY29u dHJvbCBwYW5lbCBzaG93aW5nIGhvdyBtYW55IGltYWdlcyBpdCBoYXMgcHJvY2Vzc2VkIGFu ZCB0aGUgdG90YWwgbnVtYmVyIG9mIGltYWdlcyBpbnN0YWxsZWQuIFdoZW4gaXQmIzgyMTc7 cyBkb25lLCB0aGUgbnVtYmVycyB3aWxsIGRpc2FwcGVhci4gSWYgeW91IHRoZW4gcmVmcmVz aCB5b3VyIEltYWdlcyB0YWIgeW91IHdpbGwgc2VlIHlvdXIgY2hvc2VuIGRlZmF1bHQgdGh1 bWJuYWlscyBpbiB0aGUgbGlzdCAoYXNzdW1pbmcgeW91JiM4MjE3O3ZlIHNldCBvbmUgYXMg ZGVmYXVsdCEpPC9wPgoKCTxoMyBpZD0idHhwX3RodW1icyI+S2VlcCA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiB0aHVtYm5haWxzIGluIHN5bmMgd2l0aCBkZWZhdWx0IHByb2Zp bGU8L2gzPgoKCTxwPklmIHlvdSBoYXZlIHNldCBhIHByb2ZpbGUgYXMgZGVmYXVsdCwgdHdv IG90aGVyIGNoZWNrYm94ZXMgYmVjb21lIGF2YWlsYWJsZSBiZW5lYXRoIHRoZSBsaXN0IG9m IHByb2ZpbGVzLiBPcmRpbmFyaWx5LCBzbWRfdGh1bWJuYWlsIHdvcmtzIGluZGVwZW5kZW50 bHkgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnMuIElm IHlvdSBkaXNhYmxlIHRoZSBwbHVnaW4geW91JiM4MjE3O2xsIHNlZSB0aGF0IGV2ZXJ5dGhp bmcgZ29lcyBiYWNrIHRvIGhvdyBpdCB3YXMgYmVmb3JlIHlvdSBpbnN0YWxsZWQgaXQuIFRo aXMgaXMgZ3JlYXQgYmVjYXVzZSB5b3VyIGhhcmQtZ3JhZnQgaXNuJiM4MjE3O3QgbG9zdCBp ZiB5b3UgaGF2ZSB1cGxvYWRlZCB5b3VyIG93biB0aHVtYnMuPC9wPgoKCTxwPkJ1dCBpZiB5 b3Ugc3RhcnQgY3JlYXRpbmcgdGh1bWJzIHdpdGggdGhlIHBsdWdpbiB5b3Ugd2lsbCBub3Rp Y2UgdGhhdCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIGJ1aWx0IGlu IHRhZ3Mgc3VjaCBhcyA8Y29kZT4mbHQ7dHhwOmFydGljbGVfaW1hZ2UgdGh1bWJuYWlsPSZx dW90OzEmcXVvdDsgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOnRodW1ibmFpbCAv Jmd0OzwvY29kZT4gd29uJiM4MjE3O3Qgd29yayBmb3IgbmV3ZXIgdGh1bWJuYWlscy4gVGhp cyBtaWdodCBiZSBjb25mdXNpbmcgc28sIGlmIHlvdSBwcmVmZXIsIHlvdSBjYW4gb3B0IHRv IGhhdmUgc21kX3RodW1ibmFpbCB1cGRhdGUgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB0aHVtYm5haWxzIGF0IHRoZSBzYW1lIHRpbWUuPC9wPgoKCTxwPkJ5IHRpY2tp bmcgZWl0aGVyIG9mIHRoZSBjaGVja2JveGVzLCB0aGUgcGx1Z2luIHdpbGwgdHJhY2sgYW55 IGNoYW5nZXMgPHN0cm9uZz50byB0aGUgZGVmYXVsdCBwcm9maWxlPC9zdHJvbmc+IGFuZCBt aW1pYyB0aGVtIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0 aHVtYm5haWxzLiBUaGlzIGhhcyBhIGZldyBlZmZlY3RzIHdvcnRoIGhpZ2hsaWdodGluZy48 L3A+CgoJPHA+V2hlbiB0aGUgPGVtPkNyZWF0aW9uPC9lbT4gY2hlY2tib3ggaXMgdGlja2Vk OjwvcD4KCgk8b2w+CgkJPGxpPmlmIHlvdSA8ZW0+Q3JlYXRlIGFsbDwvZW0+IHRodW1icywg dXBsb2FkIGEgbmV3IGltYWdlLCBvciByZXBsYWNlIGFuIGV4aXN0aW5nIGltYWdlLCBhIG5l dyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0aHVtYm5haWwgd2lsbCBiZSBjcmVh dGVkIGF0IHRoZSBkZWZhdWx0IHNpemUuIEFueSBleGlzdGluZyB0aHVtYnMgd2lsbCBiZSBv dmVyd3JpdHRlbjwvbGk+CgkJPGxpPmlmIHlvdSBjaGFuZ2UgZGVmYXVsdCBwcm9maWxlLCBh bnkgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlscyB0aGF0IGhhdmUg YmVlbiBjcmVhdGVkIHdpbGwgcmVtYWluIGF0IHRoZSBwcmV2aW91cyBzaXplLiBPbmx5IHdo ZW4geW91IHN0YXJ0IGNyZWF0aW5nLCB1cGxvYWRpbmcgb3IgcmVwbGFjaW5nIGltYWdlcyB3 aWxsIHRoZSBuZXcgdGh1bWJuYWlsIHNpemVzIGJlIGNyZWF0ZWQ8L2xpPgoJPC9vbD4KCgk8 cD5XaGVuIHRoZSA8ZW0+RGVsZXRpb248L2VtPiBjaGVja2JveCBpcyB0aWNrZWQ6PC9wPgoK CTxvbD4KCQk8bGk+aWYgeW91IGRlbGV0ZSBhIHNpbmdsZSB0aHVtYiB0aGF0IGNvcnJlc3Bv bmRzIHRvIHRoZSBkZWZhdWx0IHByb2ZpbGUsIGJvdGggdGhlIHByb2ZpbGUgdGh1bWIgYW5k IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgdGh1bWIgd2lsbCBiZSBk ZWxldGVkPC9saT4KCQk8bGk+aWYgeW91IGRlbGV0ZSBhbiBlbnRpcmUgcHJvZmlsZSwgYWxs IGl0cyB0aHVtYm5haWxzIDxzdHJvbmc+YW5kIGFsbCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiYjODIxNztzIHRodW1iczwvc3Ryb25nPiB3aWxsIGJlIHJlbW92ZWQ8L2xpPgoJ PC9vbD4KCgk8cD5GdXJ0aGVyOjwvcD4KCgk8b2w+CgkJPGxpPmlmIHlvdSByZW1vdmUgdGhl IGRlZmF1bHQgY2hlY2tib3ggZnJvbSB5b3VyIHByb2ZpbGVzLCB0aGUgY2hlY2tib3hlcyBk aXNhcHBlYXIgYW5kIHRoZSBzZXR0aW5ncyBoYXZlIG5vIGVmZmVjdC4gQ2hvb3NlIGEgZGVm YXVsdCBwcm9maWxlIHRvIHJlaW5zdGF0ZSB0aGUgYmVoYXZpb3VyPC9saT4KCQk8bGk+aWYg eW91IGRlYWN0aXZhdGUgdGhlIGRlZmF1bHQgcHJvZmlsZSB0aGUgY2hlY2tib3hlcyBoYXZl IG5vIGVmZmVjdCA8c3Ryb25nPnVubGVzczwvc3Ryb25nPiB5b3UgZGVsZXRlIHRoZSBwcm9m aWxlIChzaW5jZSB5b3UmIzgyMTc7cmUgZGVsZXRpbmcgaXQsIGl0cyBzdGF0dXMgaXMgJiM4 MjE2O2xvc3QmIzgyMTc7IGFuZCB0aGVyZWZvcmUgdGhlIGNoZWNrYm94ZXMgZnVuY3Rpb24g YXMgbm9ybWFsKS4gSWYgdGhlcmUmIzgyMTc7cyBhbnkgZG91YnQsIHVuY2hlY2sgdGhlIDxl bT5EZWxldGlvbjwvZW0+IGNoZWNrYm94IGZpcnN0ITwvbGk+Cgk8L29sPgoKCTxoMiBpZD0i dXNhZ2UiPlVzYWdlICYjODIxMjsgcHVibGljIHNpZGU8L2gyPgoKCTxwPlR3byBuZXcgdGFn cyBhcmUgYXZhaWxhYmxlIHRvIGRpc3BsYXkgeW91ciB0aHVtYm5haWxzLjwvcD4KCgk8aDMg aWQ9InNtZF90aHVtYiI+PGNvZGU+Jmx0O3R4cDpzbWRfdGh1bWJuYWlsLyZndDs8L2NvZGU+ PC9oMz4KCgk8cD5BIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIGJ1aWx0IGluIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9dGh1bWJu YWlsIj50eHA6dGh1bWJuYWlsPC9hPiB0YWcgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGZ1bmN0 aW9uYWxpdHkgYW5kIGF0dHJpYnV0ZXMgYXBhcnQgZnJvbSB0aGVzZSBleGNlcHRpb25zOjwv cD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPiA6IHVzZSB0 aGlzIGF0dHJpYnV0ZSB0byBkaXNwbGF5IHRodW1ibmFpbHMgb2YgdGhlIGdpdmVuIHByb2Zp bGUgbmFtZS4gZS5nLiA8Y29kZT50eXBlPSZxdW90O2xhcmdlJnF1b3Q7PC9jb2RlPi4gSWYg eW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmlidXRlLCB0aGUgZGVmYXVsdCBwcm9maWxl IHdpbGwgYmUgdXNlZC4gSWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBwcm9maWxlIHlvdSYjODIx NztsbCBzZWUgd2FybmluZyBtZXNzYWdlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5jbGFzczwvc3Bhbj4gOiBpZiBvbWl0dGVkLCB0aGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB3 aWxsIGJlIHVzZWQgYXMgYSBjbGFzcyBuYW1lIGZvciB0aGUgaW1nIHRhZy4gSWYgeW91IHNw ZWNpZnkgYSB3cmFwdGFnIGFuZCBvbWl0IHRoZSBjbGFzcywgdGhlIHByb2ZpbGUgbmFtZSB3 aWxsIGJlIHVzZWQgYXMgYSBjbGFzcyBvbiBib3RoIHRoZSBjb250YWluZXIgYW5kIHRoZSBp bWcgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmFsaWduPC9zcGFuPiA6IHRo aXMgYXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+YWRkX3N0YW1wPC9zcGFuPiA6IGFkZHMgdGhlIGltYWdlIGZpbGUgbW9kaWZpY2F0 aW9uIHRpbWUgdG8gdGhlIGVuZCBvZiB0aGUgdGh1bWJuYWlsJiM4MjE3O3MgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4uIFVzZSA8Y29kZT5hZGRfc3RhbXA9JnF1b3Q7MSZxdW90 OzwvY29kZT4gdG8gc3dpdGNoIHRoaXMgZmVhdHVyZSBvbi4gVGhpcyBoZWxwcyBwcmV2ZW50 IHN0YWxlIGltYWdlcywgYnV0IG1heSBwcmV2ZW50IGJyb3dzZXJzIGZyb20gY2FjaGVpbmcg dGhlIHRodW1icyBwcm9wZXJseSB0aHVzIGluY3JlYXNpbmcgYmFuZHdpZHRoIHVzYWdlLiBE ZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcmNlX3NpemU8L3Nw YW4+IDogdXN1YWxseSB3aGVuIHlvdSBzZXQgb25lIG9yIG90aGVyIHdpZHRoL2hlaWdodCB0 byAwIGluIGEgcHJvZmlsZSwgdGhlIGJyb3dzZXIgc2NhbGVzIHRoZSBtaXNzaW5nIGRpbWVu c2lvbiBhdXRvbWF0aWNhbGx5LiBJdCBkb2VzIHRoaXMgYnkgb21pdHRpbmcgdGhlIDxjb2Rl PndpZHRoPTwvY29kZT4gb3IgPGNvZGU+aGVpZ2h0PTwvY29kZT4gYXR0cmlidXRlIGluIHRo ZSA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnLiBUaGlzIG1heSBjYXVzZSB2aXN1YWwg YXJ0ZWZhY3RzIGFzIHRoZSBwYWdlIGlzIHJlbmRlcmVkIGFuZCB0aGUgYnJvd3NlciBjYWxj dWxhdGVzIHRoZSBzaXplcy4gSWYgeW91IHdpc2ggdGhlIHBsdWdpbiB0byBhZGQgdGhlIGFj dHVhbCBkaW1lbnNpb24gdG8gdGhlIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcgKHRo ZSBzaXplIGF0IHRoZSB0aW1lIHRoZSB0aHVtYm5haWwgd2FzIGNyZWF0ZWQpLCB0ZWxsIHRo ZSBwbHVnaW4gd2l0aCB0aGlzIGF0dHJpYnV0ZS4gQ2hvb3NlIG9uZSBvciBib3RoIG9mIDxj b2RlPndpZHRoPC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ8L2NvZGU+LiBDb21tYS1zZXBhcmF0 ZSBhcyByZXF1aXJlZC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJPC91bD4KCgk8cD5UaGUgdGFn IHdvcmtzIGluc2lkZSA8Y29kZT4mbHQ7dHhwOmltYWdlX2xpc3QmZ3Q7PC9jb2RlPiBvciBj YW4gYmUgdXNlZCBzdGFuZGFsb25lIGJ5IHNwZWNpZnlpbmcgdGhlIDxjb2RlPmlkPC9jb2Rl PiBvciA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUuPC9wPgoKCTxoMyBpZD0ic21kX2lm X3RodW1iIj48Y29kZT4mbHQ7dHhwOnNtZF9pZl90aHVtYm5haWwvJmd0OzwvY29kZT48L2gz PgoKCTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGNvZGU+Jmx0 O3R4cDppZl90aHVtYm5haWwgLyZndDs8L2NvZGU+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNh bWUgZnVuY3Rpb25hbGl0eS4gSXQgaGFzIG9uZSBhdHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMgYXR0cmlidXRl IHRvIGNoZWNrIGZvciB0aHVtYm5haWxzIG9mIHRoZSBnaXZlbiBwcm9maWxlIG5hbWUuIGUu Zy4gPGNvZGU+dHlwZT0mcXVvdDtNZWRpdW0mcXVvdDs8L2NvZGU+LiBJZiB5b3UgZG8gbm90 IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2lsbCBiZSB0 ZXN0ZWQuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJvZmlsZSB0aGUgdGFnIHdpbGwgYWx3 YXlzIHJlbmRlciB0aGUgPGNvZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPiBwb3J0aW9u PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJob3dfaXRfd29ya3MiPkhvdyBpdCB3b3JrczwvaDI+ CgoJPHA+Rm9yIHJlZmVyZW5jZSwgd2hlbiB5b3UgY3JlYXRlIGEgcHJvZmlsZSBhIGRpcmVj dG9yeSBpcyBjcmVhdGVkIHdpdGggdGhhdCBuYW1lIGluc2lkZSB5b3VyIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IDxjb2RlPmltYWdlczwvY29kZT4gZm9sZGVyLiBJbnNpZGUg dGhpcyBmb2xkZXIgeW91IHdpbGwgZmluZCBpbWFnZXMgb2YgdGhlIGZvcm1hdCA8Y29kZT5p ZC5leHQ8L2NvZGU+OiB3aGVyZSA8Y29kZT5pZDwvY29kZT4gYW5kIDxjb2RlPmV4dDwvY29k ZT4gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgaW1hZ2UgSURzIGluIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZS4gVGhhdCYjODIxNztzIHByZXR0eSBtdWNo IGl0LjwvcD4KCgk8cD5Zb3UgY2FuIGRlbGV0ZSB0aHVtYm5haWwgZmlsZXMgbWFudWFsbHkg ZnJvbSBhbnkgb2YgdGhlc2UgZGlyZWN0b3JpZXMgYW5kIHRoZSBwbHVnaW4gd2lsbCBmaWd1 cmUgZXZlcnl0aGluZyBvdXQuIEJ1dCBpdCYjODIxNztzIHByb2JhYmx5IG5vdCBhZHZpc2Fi bGUgdG8gZGVsZXRlIHRoZSBkaXJlY3RvcmllcyB0aGVtc2VsdmVzICYjODIxMjsgdXNlIHRo ZSA8ZW0+W0RlbGV0ZV08L2VtPiBidXR0b25zIGluIHRoZSBjb250cm9sIHBhbmVsIGZvciB0 aGF0LjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJ PGxpPjA2IEF1ZyAxMCB8IDAuMTBiZXRhIHwgSW5pdGlhbCBiZXRhIHJlbGVhc2U8L2xpPgoJ CTxsaT4wNCBPY3QgMTAgfCAwLjEwIHwgT2ZmaWNpYWwgcHVibGljIHJlbGVhc2U8L2xpPgoJ CTxsaT4wOSBOb3YgMTAgfCAwLjExIHwgQWRkZWQgPGNvZGU+Zm9yY2Vfc2l6ZTwvY29kZT4g YW5kIDxjb2RlPmFkZF9zdGFtcDwvY29kZT4gKGJvdGggdGhhbmtzIHplcm8pIDsgcmVtb3Zl ZCB1bm5lY2Vzc2FyeSBEQiBjYWxsPC9saT4KCQk8bGk+MTAgTm92IDEwIHwgMC4xMiB8IEFk ZGVkIGFiaWxpdHkgdG8gc3luYyBkZWZhdWx0IHByb2ZpbGUgdGh1bWJzIHdpdGggdGhlIGNv cnJlc3BvbmRpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlscyAo dGhhbmtzIHplcm8pPC9saT4KCQk8bGk+MTAgTm92IDEwIHwgMC4xMyB8IEFkZGVkIGNvbmZp cm1hdGlvbiBvbiA8ZW0+Q3JlYXRlIGFsbDwvZW0+IDsgcmVsYWJlbGxlZCB1cGxvYWQgYm94 ICh0aGFuayB1bGkpIDsgdGFtZWQgc3R5bGVzIDsgc2lsZW5jZWQgY2htb2Qgd2FybmluZ3Mg KHRoYW5rcyB6ZXJvKTwvbGk+CgkJPGxpPjIxIE5vdiAxMCB8IDAuMTQgfCBQZXJtaXR0ZWQg dGh1bWJzIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCBpbWFnZXMgKHRoYW5rcyBt YW5pcXVpKSA7IGZpeGVkIGNhbGxiYWNrcyBmb3IgaW1hZ2UgdXBsb2FkaW5nIGFuZCBkZWxl dGluZzwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioq IC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDox LjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEz MCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9y OiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7 IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRp c3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNz bWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2Vy aWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJv cmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6 ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMg eyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBs ZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1 cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBm b250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7 IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9o ZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMzZDsgfQojc21kX2hlbHAg Lm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3Nt ZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJv dHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xp ZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlw ZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQge2NvbG9yOnJlZDt9CiNzbWRfaGVs cCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsg bWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioq IC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI5M2Y0NTA3MmVkMTdlMjNjODRiZGFjODM2ODM5NGJk NyI7fQ==