# Name: smd_thumbnail v0.20 # 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 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIwIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjQ1NjkzOiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfc3R5bGVzLCAkc21kX3Ro dW1iX3ByZXZzOw0KDQoJJHNtZF90aHVtYl9ldmVudCA9ICdzbWRfdGh1bWJuYWlsJzsNCgkk c21kX3RodW1iX3ByaXZzID0gJzEsMiwzJzsgLy8gUGx1Z2luIHByaXZzDQoJJHNtZF90aHVt Yl9wcmV2cyA9IGFycmF5KCcxJyk7IC8vIFByaXZzIGZvciBwcmVmcw0KDQoJJHNtZF90aHVt Yl9zdHlsZXMgPSBhcnJheSgNCgkJJ2VkaXQnID0+DQogICAgICAgICAnLnNtZF9zZWxlY3Rl ZCB7IGJvcmRlcjoxcHggc29saWQgcmVkOyBiYWNrZ3JvdW5kOnJlZDsgfQ0KICAgICAgICAg ICNzbWRfdGh1bWJzIGltZyB7IHBhZGRpbmc6MnB4OyBtYXJnaW46MXB4OyBib3JkZXI6MXB4 IHNvbGlkIGJsYWNrOyB9DQogICAgICAgICAgLnRodW1ibmFpbC1hbHRlciB7IGRpc3BsYXk6 bm9uZTsgfScsDQoJCSdwcm9maWxlJyA9Pg0KICAgICAgICAgJy5zbWRfaGlkZGVuIHsgZGlz cGxheTpub25lOyB9DQogICAgICAgICAgI3NtZF90aHVtYl9wcm9maWxlcyB7IHdpZHRoOjcw MHB4OyBtYXJnaW46MCBhdXRvIDE4cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB9DQogICAgICAg ICAgI3NtZF90aHVtYl9iYXRjaCB7IGZsb2F0OnJpZ2h0OyB9DQogICAgICAgICAgLnNtZF9p bmFjdGl2ZSB7IG9wYWNpdHk6LjM7IH0NCiAgICAgICAgICAuc21kX3RodW1iX2hlYWRpbmdf YWN0aXZlIHsgY3Vyc29yOnBvaW50ZXI7IH0NCiAgICAgICAgICAjc21kX3RodW1iX3Byb2Zp bGVfZm9ybSB7IHBhZGRpbmctdG9wOjhweDsgfQ0KICAgICAgICAgIGZvcm0jc21kX3RodW1i X3Byb2ZpbGVfZm9ybSB0ZCB7IGJvcmRlcjogMDsgfQ0KICAgICAgICAgIC5wcmVmLWxhYmVs IHsgdGV4dC1hbGlnbjogcmlnaHQhaW1wb3J0YW50OyB9DQogICAgICAgICAgLnNtZF90aHVt Yl9idG4geyBwb3NpdGlvbjphYnNvbHV0ZTsgcmlnaHQ6MTBweDsgdG9wOi0xMnB4OyB0ZXh0 LWFsaWduOmNlbnRlcjsgcGFkZGluZzozcHg7IH0nLA0KCSk7DQoNCglhZGRfcHJpdnMoJHNt ZF90aHVtYl9ldmVudCwgJHNtZF90aHVtYl9wcml2cyk7DQoJYWRkX3ByaXZzKCdzbWRfdGh1 bWJfcHJvZmlsZXMnLCAkc21kX3RodW1iX3ByaXZzKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RodW1iX3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS4nLiRzbWRfdGh1bWJfZXZl bnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfcHJvZmlsZXMnLCAnaW1hZ2Vf dWknLCAnZXh0ZW5kX2NvbnRyb2xzJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVt YnMnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF90aHVtYl9lZGl0JywgJ2ltYWdlX3VpJywgJ3RodW1ibmFpbF9lZGl0Jyk7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9jcmVhdGUnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWls X2NyZWF0ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfZ2VuZXJhdGUnLCAn aW1hZ2VfdXBsb2FkZWQnLCAnaW1hZ2UnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Ro dW1iX2RlbGV0ZScsICdpbWFnZV9kZWxldGVkJywgJ2ltYWdlJyk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90aHVtYl9jcmVhdGVfb25lJywgJ2ltYWdlJywgJ3NtZF90aHVtYl9jcmVh dGVfb25lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZl JywgJ2ltYWdlJywgJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZlJyk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfcHJlZicsICdpbWFnZScsICdzbWRfdGh1bWJfc3dp dGNoX3ByZWYnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2luc2VydCcsICdp bWFnZScsICdzbWRfdGh1bWJuYWlsX2luc2VydCcsIDEpOw0KDQp9IGVsc2Ugew0KCWdsb2Jh bCAkcGF0aF90b19zaXRlLCAkaW1nX2RpcjsNCglpZiAoIWRlZmluZWQoJ0lNUEFUSCcpKSB7 DQoJCWRlZmluZSgiSU1QQVRIIiwkcGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLkRTKTsNCgl9 DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX1RIVU1CJykpIHsNCglkZWZpbmUoIlNNRF9USFVN QiIsICdzbWRfdGh1bWJuYWlsJyk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9BQ1RJ VkUnKSkgew0KCWRlZmluZSgiU01EX1RIVU1CX0FDVElWRSIsIDEpOw0KfQ0KaWYgKCFkZWZp bmVkKCdTTURfVEhVTUJfQ1JPUCcpKSB7DQoJZGVmaW5lKCJTTURfVEhVTUJfQ1JPUCIsIDIp Ow0KfQ0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUJfU0hBUlAnKSkgew0KCWRlZmluZSgiU01E X1RIVU1CX1NIQVJQIiwgNCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVt Yl93ZWxjb21lKCRldnQsICRzdHApIHsNCglzd2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAnaW5z dGFsbGVkJzoNCgkJCXNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7DQoJCQkvLyBSZW1vdmUg cGVyLXVzZXIgcHJlZnMgb24gdXBncmFkZSBmcm9tIHYwLjF4IHRvIHYwLjIwDQoJCQlzYWZl X2RlbGV0ZSAoJ3R4cF9wcmVmcycsICJuYW1lIElOICgnc21kX3RodW1iX3R4cF9jcmVhdGUn LCAnc21kX3RodW1iX3R4cF9kZWxldGUnLCAnc21kX3RodW1iX2F1dG9fcmVwbGFjZScpIEFO RCB1c2VyX25hbWUgIT0gJyciKTsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJ CXNtZF90aHVtYl90YWJsZV9yZW1vdmUoKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm47DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGlzcGxheSB0aGUgZGVzaWdu YXRlZCBkZWZhdWx0IHRodW1ibmFpbCBvbiB0aGUgbGlzdCBwYWdlDQpmdW5jdGlvbiBzbWRf dGh1bWJzKCRldnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCWV4dHJhY3QoZ3BzYShh cnJheSgncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkp Ow0KDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRkZWZhdWx0ID0gZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgMSk7DQoJCWlmICgkZGVm YXVsdCkgew0KCQkJJHJvdyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5z YW5pdGl6ZUZvclVybCgkZGVmYXVsdCkuIiciKTsNCgkJCWlmICgkcm93KSB7DQoJCQkJJGVk aXRfdXJsID0gJz9ldmVudD1pbWFnZScuYS4nc3RlcD1pbWFnZV9lZGl0Jy5hLidpZD0nLiRj dXJyaW1nWydpZCddLmEuJ3NvcnQ9Jy4kc29ydC4NCgkJCQkJCWEuJ2Rpcj0nLiRkaXIuYS4n cGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidjcml0 PScuJGNyaXQ7DQoJCQkJJG91dCA9IHNtZF90aHVtYl9pbWcoJHJvdywgJGN1cnJpbWcpOw0K CQkJCXJldHVybiAoJG91dCkgPyBocmVmKCRvdXQsICRlZGl0X3VybCkgOiBnVHh0KCdubycp Ow0KCQkJfSBlbHNlIHsNCgkJCQlyZXR1cm4gZ1R4dCgnbm8nKTsNCgkJCX0NCgkJfSBlbHNl IHsNCgkJCXJldHVybiBnVHh0KCdubycpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIERvbid0IHdhbnQgdGhlICdjcmVhdGUnIGNvbnRyb2xzIGFz IHRoZXkncmUgaGFuZGxlZCBpbiB0aGUgZWRpdCBwb3J0aW9uIG9mIHRoZSBzY3JlZW4NCmZ1 bmN0aW9uIHNtZF90aHVtYl9jcmVhdGUoJGV2dCwgJHN0cCwgJGRmbHQsICRjdXJyaW1nKSB7 DQoJcmV0dXJuICcgJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBX aXRoIGEgbG90IG9mIGltYWdlcyBpbiB0aGUgZGF0YWJhc2UsIGRvaW5nIGl0IGFsbCBpbiBv bmUgaGl0IHdvdWxkIHRpbWUgb3V0Lg0KLy8gU28gaXQncyBkb25lIHZpYSBhamF4OyBvbmUg cmVxdWVzdCBwZXIgaW1hZ2UNCmZ1bmN0aW9uIHNtZF90aHVtYl9jcmVhdGVfZ3JvdXAoJHR5 cGUsICRsc3Q9JycpIHsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgJ2FsbCc6DQoJCQkk d2hlcmUgPSAnMT0xJzsNCgkJCWJyZWFrOw0KCQljYXNlICdzZWwnOg0KCQkJJHdoZXJlID0g KCRsc3QpID8gJ2lkIElOICgnLmRvU2xhc2goJGxzdCkuJyknIDogJzE9MCc7DQoJCQlicmVh azsNCgkJY2FzZSAnY2F0JzoNCgkJCSR3aGVyZSA9ICJjYXRlZ29yeSBpbiAoJyIuZG9TbGFz aCgkbHN0KS4iJykiOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Vzcic6DQoJCQkkd2hlcmUgPSAi YXV0aG9yIGluICgnIi5kb1NsYXNoKCRsc3QpLiInKSI7DQoJCQlicmVhazsNCgl9DQoNCgkk aW1hZ2VzID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4cF9pbWFnZScsICR3aGVyZSk7DQoJJGNv dW50ID0gY291bnQoJGltYWdlcyk7DQoNCgllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+JzsNCgllY2hvICJ2YXIgYmN0ciA9IDA7IHZhciBidG90ID0geyRjb3VudH07 IjsNCgllY2hvICdqUXVlcnkoZnVuY3Rpb24oKSB7JzsNCgllY2hvICdqUXVlcnkoIiNzbWRf dGh1bWJfYnRvdCIpLnRleHQoIi8nLiRjb3VudC4nIik7JzsNCglmb3JlYWNoICgkaW1hZ2Vz IGFzICRpbWcpIHsNCgkJZWNobyA8PDxFT0pTDQoJCXNlbmRBc3luY0V2ZW50KA0KCQl7DQoJ CQlldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsDQoJCQlzdGVwOiAnc21kX3RodW1iX2NyZWF0 ZV9vbmUnLA0KCQkJc21kX3RodW1iX2ltZ2lkOiB7JGltZ30NCgkJfSwgc21kX2NyZWF0ZV9n cm91cF9mZWVkYmFjayk7DQpFT0pTOw0KCX0NCgllY2hvICd9KTsnOw0KCWVjaG8gPDw8RU9K Uw0KCWZ1bmN0aW9uIHNtZF9jcmVhdGVfZ3JvdXBfZmVlZGJhY2soKSB7DQoJCWJjdHIrKzsN CgkJalF1ZXJ5KCcjc21kX3RodW1iX2JjdXJyJykudGV4dChiY3RyKTsNCi8vCQlpZiAoYmN0 ciA+PSBidG90KSB7DQovLwkJCWpRdWVyeSgnI3NtZF90aHVtYl9iY3Vyciwjc21kX3RodW1i X2J0b3QnKS5lbXB0eSgpOw0KLy8JCX0NCgl9DQpFT0pTOw0KCWVjaG8gJzwvc2NyaXB0Pic7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1i X2NyZWF0ZV9vbmUoKSB7DQoJJGN1cnJpbWcgPSBncHMoJ3NtZF90aHVtYl9pbWdpZCcpOw0K CWFzc2VydF9pbnQoJGN1cnJpbWcpOw0KDQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RI VU1CLCAnMT0xIEFORCBmbGFncyAmICcuU01EX1RIVU1CX0FDVElWRSk7DQoJJGN1cnIgPSBz YWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQ9Ii5kb1NsYXNoKCRjdXJyaW1nKSk7DQoJ aWYgKCRycykgew0KCQlzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyLCAxKTsNCgkJc2VuZF94 bWxfcmVzcG9uc2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmUoKSB7DQoJJG5hbWUgPSBkb1NsYXNo KGdwcygnc21kX3RodW1iX3Byb2ZpbGUnKSk7DQoJaWYgKCRuYW1lKSB7DQoJCXNhZmVfdXBk YXRlKFNNRF9USFVNQiwgJ2ZsYWdzID0gZmxhZ3MgXiAnLlNNRF9USFVNQl9BQ1RJVkUsICJu YW1lPSckbmFtZSciKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ3NtZF90aHVtYl9w cm9maWxlJyA9PiAkbmFtZSkpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX3ByZWYoKSB7DQoJJG5hbWUgPSBkb1Ns YXNoKGdwcygnc21kX3RodW1iX3R4cHR5cGUnKSk7DQoJJHN0YXRlID0gZG9TbGFzaChncHMo J3NtZF90aHVtYl9zdGF0ZScpKTsNCglpZiAoJG5hbWUpIHsNCgkJc2V0X3ByZWYoJ3NtZF90 aHVtYl8nLiRuYW1lLCAkc3RhdGUsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2dlbmVyYXRlKCRldnQsICRz dHApIHsNCgkkaWQgPSBkb1NsYXNoKGdwcygnaWQnKSk7DQoNCgkkaWQgPSAoJGlkKSA/ICRp ZCA6ICRHTE9CQUxTWydJRCddOw0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwg JzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkUpOw0KDQoJc21kX3RodW1iX21h a2UoJHJzLCAkaWQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF90aHVtYl9kZWxldGUoJGV2dCwgJHN0cCkgew0KCSRpZHMgPSBncHMoJ3NlbGVj dGVkJyk7DQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xJyk7DQoNCgkk aW1hZ2VzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9pbWFnZScsICdpZCBJTiAoJyAuIGpvaW4o JywnLHF1b3RlX2xpc3QoJGlkcykpIC4gJyknKTsNCglmb3JlYWNoICgkaW1hZ2VzIGFzICRp bWcpIHsNCgkJc21kX3RodW1iX3VubWFrZSgkcnMsICRpbWcpOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfbWFrZSgkcnMsICRj dXJyaW1nLCAkZm9yY2U9MCkgew0KCS8vIFdyYXBwZXIgZm9yIHdldF90aHVtYiB0byBhbGxv dyBtdWx0aXBsZSB0aHVtYm5haWxzDQoJJG1zZyA9ICcnOw0KCWlmICghY2xhc3NfZXhpc3Rz KCdzbWRfdGh1bWInKSkgew0KCQljbGFzcyBzbWRfdGh1bWIgZXh0ZW5kcyB3ZXRfdGh1bWIg ew0KCQkJdmFyICRtX2V4dDsNCgkJCXZhciAkbV9pZDsNCgkJCXZhciAkbV9kaXI7DQoJCQl2 YXIgJG1fZGZsdDsNCgkJCXZhciAkd2lkdGg7DQoJCQl2YXIgJGhlaWdodDsNCgkJCXZhciAk Zm9yY2U7DQoNCgkJCS8vIENvbnN0cnVjdG9yDQoJCQlmdW5jdGlvbiBzbWRfdGh1bWIgKCRp ZCwgJGRpciwgJGltZ19yb3csICRpc19kZWZhdWx0PWZhbHNlLCAkcHJvX3c9JycsICRwcm9f aD0nJywgJGZvcmNlPTApIHsNCgkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJaWYg KCRpbWdfcm93KSB7DQoJCQkJCWV4dHJhY3QoJGltZ19yb3cpOw0KCQkJCQkkdGhpcy0+bV9p ZCA9ICRpZDsNCgkJCQkJJHRoaXMtPm1fZXh0ID0gJGV4dDsNCgkJCQkJJHRoaXMtPm1fZGly ID0gJGRpcjsNCgkJCQkJJHRoaXMtPmZvcmNlID0gJGZvcmNlOw0KCQkJCQkkdGhpcy0+d2lk dGggPSAkcHJvX3c7DQoJCQkJCSR0aGlzLT5oZWlnaHQgPSAkcHJvX2g7DQoJCQkJCSR0aGlz LT5tX2RmbHQgPSAkaXNfZGVmYXVsdDsNCgkJCQl9DQoJCQkJJHRoaXMtPndldF90aHVtYigp OyAvLyBjb25zdHJ1Y3QgYmFzZSBjbGFzcyBpbnN0YW5jZQ0KCQkJfQ0KDQoJCQlmdW5jdGlv biB3cml0ZSgpIHsNCgkJCQlpZiAoICFpc3NldCgkdGhpcy0+bV9leHQpICkgcmV0dXJuIGZh bHNlOw0KDQoJCQkJJGF1dG9yID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9hdXRvX3JlcGxhY2Un LCAnMCcpOw0KCQkJCSRpbmZpbGUgPSBJTVBBVEguJHRoaXMtPm1faWQuJHRoaXMtPm1fZXh0 Ow0KCQkJCSRvdXRmaWxlID0gSU1QQVRILiR0aGlzLT5tX2Rpci5EUy4kdGhpcy0+bV9pZC4k dGhpcy0+bV9leHQ7DQoNCgkJCQlpZiAoIWZpbGVfZXhpc3RzKCRvdXRmaWxlKSB8fCAkYXV0 b3IgfHwgJHRoaXMtPmZvcmNlKSB7DQoJCQkJCS8vIElmIHRoaXMgaXMgdGhlIGRlZmF1bHQg cHJvZmlsZSBhbmQgdGhlIHByZWYgaW5kaWNhdGVzLCB3cml0ZSBhIFRYUCB0aHVtYiB0b28N CgkJCQkJaWYgKCgkdGhpcy0+bV9kZmx0ID09IHRydWUpICYmIChnZXRfcHJlZignc21kX3Ro dW1iX3R4cF9jcmVhdGUnLCAnMCcpKSkgew0KCQkJCQkJJHR4cF90aHVtYiA9IElNUEFUSC4k dGhpcy0+bV9pZC4ndCcuJHRoaXMtPm1fZXh0Ow0KCQkJCQkJaWYgKCBwYXJlbnQ6OndyaXRl ICggJGluZmlsZSwgJHR4cF90aHVtYiApICkgew0KCQkJCQkJCXNhZmVfdXBkYXRlKCd0eHBf aW1hZ2UnLCAidGh1bWJuYWlsID0gMSwgdGh1bWJfdyA9ICR0aGlzLT53aWR0aCwgdGh1bWJf aCA9ICR0aGlzLT5oZWlnaHQiLCAnaWQgPSAnLiR0aGlzLT5tX2lkKTsNCgkJCQkJCQlAY2ht b2QoJG91dGZpbGUsIDA2NDQpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJDQoJCQkJCWlmICggcGFy ZW50Ojp3cml0ZSAoICRpbmZpbGUsICRvdXRmaWxlICkgKSB7DQoJCQkJCQlAY2htb2QoJG91 dGZpbGUsIDA2NDQpOw0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJ cmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gSWYgcGFzc2VkIG9ubHkgYW4g SUQsIGxvb2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGENCglpZiAoIWlzX2FycmF5 KCRjdXJyaW1nKSkgew0KCQlhc3NlcnRfaW50KCRjdXJyaW1nKTsNCgkJJGN1cnJpbWcgPSBz YWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAnaWQ9Jy4kY3VycmltZyk7DQoJfQ0KDQoJLy8g Q3JlYXRlIGVhY2ggdGh1bWJuYWlsDQoJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVt Yl9kZWZhdWx0X3Byb2ZpbGUnLCAnJyk7DQoJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJ Ly8gU2FuaXRpemUgYSBsaXR0bGUNCgkJJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsN CgkJJGhlaWdodCA9IChpbnQpICRyb3dbJ2hlaWdodCddOw0KCQlpZiAoJHdpZHRoID09IDAp ICR3aWR0aCA9ICcnOw0KCQlpZiAoJGhlaWdodCA9PSAwKSAkaGVpZ2h0ID0gJyc7DQoJCWlm ICgkd2lkdGggPT09ICcnICYmICRoZWlnaHQgPT09ICcnKSBjb250aW51ZTsNCgkJJGNyb3Ag PSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkkc2hhcnBl biA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOw0KCQkkaWQg PSAkY3VycmltZ1snaWQnXTsNCgkJJGlzX2RmbHQgPSAoJHJvd1snbmFtZSddID09ICRwcm9f ZGZsdCkgPyB0cnVlIDogZmFsc2U7DQoNCgkJJHQgPSBuZXcgc21kX3RodW1iKCRpZCwgc2Fu aXRpemVGb3JVcmwoJHJvd1snbmFtZSddKSwgJGN1cnJpbWcsICRpc19kZmx0LCAkd2lkdGgs ICRoZWlnaHQsICRmb3JjZSk7DQoJCSR0LT5leHRyYXBvbGF0ZSA9IHRydWU7IC8vIEFsbG93 IGJpZ2dlciB0aHVtYnMgdGhhbiBvcmlnaW5hbCBpbWFnZQ0KCQkkdC0+Y3JvcCA9ICgkY3Jv cCA9PSAnMScpOw0KCQkkdC0+c2hhcnBlbiA9ICgkc2hhcnBlbiA9PSAnMScpOw0KCQkkdC0+ aGludCA9ICcwJzsNCgkJJHQtPndpZHRoID0gJHdpZHRoOw0KCQkkdC0+aGVpZ2h0ID0gJGhl aWdodDsNCgkJJHQtPnF1YWxpdHkgPSAkcm93WydxdWFsaXR5J107DQoNCgkJaWYgKCR0LT53 cml0ZSgpKSB7DQoJCQkkbXNnID0gZ1R4dCgndGh1bWJuYWlsX3NhdmVkJywgYXJyYXkoJ3tp ZH0nID0+ICRpZCkpOw0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IGFycmF5KGdUeHQoJ3RodW1i bmFpbF9ub3Rfc2F2ZWQnLCBhcnJheSgne2lkfScgPT4gJGlkKSksIEVfRVJST1IpOw0KCQl9 DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90aHVtYl91bm1ha2UoJHJzLCAkY3VycmltZykgew0KCSRpZCA9ICRj dXJyaW1nWydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJJHByb19kZmx0ID0g Z2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJyk7DQoJJHR4cF9kZWwg PSBnZXRfcHJlZignc21kX3RodW1iX3R4cF9kZWxldGUnLCAnMCcpOw0KDQoJZm9yZWFjaCAo JHJzIGFzICRyb3cpIHsNCgkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHJvd1sn bmFtZSddKS5EUy4kaWQuJGV4dDsNCgkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJ dW5saW5rKCRwYXRoKTsNCgkJfQ0KDQoJCS8vIEFsc28gcmVtb3ZlIFRYUCdzIGJ1aWx0LWlu IHRodW1iPw0KCQlpZiAoKCRyb3dbJ25hbWUnXSA9PSAkcHJvX2RmbHQpICYmICgkdHhwX2Rl bCA9PSAnMScpKSB7DQoJCQkkcGF0aCA9IElNUEFUSC4kaWQuJ3QnLiRleHQ7DQoJCQlpZiAo ZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICJ0 aHVtYm5haWwgPSAwLCB0aHVtYl93ID0gMCwgdGh1bWJfaCA9IDAiLCAnaWQgPSAnLiRpZCk7 DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJyc7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2luc2Vy dCgpIHsNCglnbG9iYWwgJHR4cGNmZywkdHhwX3VzZXIsJGltZ19kaXIsJHBhdGhfdG9fc2l0 ZSwgJHBhZ2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2Q7DQoNCglpZiAo IWRlZmluZWQoJ0lNUEFUSCcpKSB7DQoJCWRlZmluZSgnSU1QQVRIJywkcGF0aF90b19zaXRl LkRTLiRpbWdfZGlyLkRTKTsNCgl9DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAn c29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCWluY2x1ZGVf b25jZSB0eHBhdGguJy9saWIvdHhwbGliX21pc2MucGhwJzsNCg0KCWV4dHJhY3QoJHR4cGNm Zyk7DQoJJGlkID0gYXNzZXJ0X2ludChncHMoJ2lkJykpOw0KCSRwcm9maWxlID0gZ3BzKCdz bWRfdGh1bWJfcHJvZmlsZScpOw0KCSR0aHVtYl9leHQgPSBncHMoJ3NtZF90aHVtYl9leHQn KTsNCg0KCSRhdXRob3IgPSBmZXRjaCgnYXV0aG9yJywgJ3R4cF9pbWFnZScsICdpZCcsICRp ZCk7DQoJaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4 cF91c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24nKSkpIHsNCgkJcmV0dXJuOw0K CX0NCg0KCSRmaWxlID0gJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddOw0KCSRuYW1l ID0gJF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ107DQoNCgkkZmlsZSA9IGdldF91cGxvYWRl ZF9maWxlKCRmaWxlKTsNCg0KCWlmIChlbXB0eSgkZmlsZSkpDQoJew0KCQlyZXR1cm47DQoJ fQ0KDQoJbGlzdCgkdywgJGgsICRleHRlbnNpb24pID0gZ2V0aW1hZ2VzaXplKCRmaWxlKTsN CgkkdmFsaWRfZXh0cyA9IGFycmF5KA0KCQlJTUFHRVRZUEVfR0lGICA9PiAnLmdpZicsDQoJ CUlNQUdFVFlQRV9KUEVHID0+ICcuanBnJywNCgkJSU1BR0VUWVBFX1BORyAgPT4gJy5wbmcn LA0KCQlJTUFHRVRZUEVfU1dGICA9PiAnLnN3ZicsDQoJKTsNCgkkZXh0ID0gaXNzZXQoJHZh bGlkX2V4dHNbJGV4dGVuc2lvbl0pID8gJHZhbGlkX2V4dHNbJGV4dGVuc2lvbl0gOiAnJzsN Cg0KCWlmICgoJGZpbGUgIT09IGZhbHNlKSAmJiAkcHJvZmlsZSAmJiAkZXh0KSB7DQoJCSRu ZXdwYXRoID0gSU1QQVRILnNhbml0aXplRm9yVXJsKCRwcm9maWxlKS5EUy4kaWQuJGV4dDsN CgkJaWYgKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdwYXRoKSA9PSBmYWxzZSkg ew0KCQl9IGVsc2Ugew0KCQkJQGNobW9kKCRuZXdwYXRoLCAwNjQ0KTsNCg0KCQkJLy8gSWYg dGhlIHByZWYgaW5kaWNhdGVzLCBkdXBsaWNhdGUgYXMgYSBUWFAgdGh1bWIgdG9vDQoJCQlp ZiAoZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfY3JlYXRlJywgJzAnKSA9PSAxKSB7DQoJCQkJ JHR4cF90aHVtYiA9IElNUEFUSC4kaWQuJ3QnLiRleHQ7DQoJCQkJaWYgKCBjb3B5ICggJG5l d3BhdGgsICR0eHBfdGh1bWIgKSApIHsNCgkJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScs ICJ0aHVtYm5haWwgPSAxLCB0aHVtYl93ID0gJHcsIHRodW1iX2ggPSAkaCIsICdpZCA9ICcu JGlkKTsNCgkJCQkJQGNobW9kKCR0eHBfdGh1bWIsIDA2NDQpOw0KCQkJCX0NCgkJCX0NCgkJ CSRtZXNzYWdlID0gZ1R4dCgnaW1hZ2VfdXBsb2FkZWQnLCBhcnJheSgne25hbWV9JyA9PiAk bmFtZSkpOw0KCQl9DQoJfQ0KDQoJLy8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNl bnQsIHJlc29ydCB0byBqcyB0byByZWZyZXNoIHRoZSBwYWdlDQoJJHVybCA9ICc/ZXZlbnQ9 aW1hZ2Umc3RlcD1pbWFnZV9lZGl0JmlkPScuJGlkLicmc29ydD0nLiRzb3J0LicmZGlyPScu JGRpci4nJnBhZ2U9Jy4kcGFnZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4n JmNyaXQ9Jy4kY3JpdDsNCgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPg0Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxu b3NjcmlwdD4NCjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXsk dXJsfSIgLz4NCjwvbm9zY3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfZWRpdCgkZXZ0LCAkc3RwLCAk ZGZsdCwgJGN1cnJpbWcpIHsNCglnbG9iYWwgJHN0ZXAsICRmaWxlX21heF91cGxvYWRfc2l6 ZSwgJHR4cF91c2VyLCAkc21kX3RodW1iX3N0eWxlczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJh eSgNCgkJJ2lkJywNCgkJJ3BhZ2UnLA0KCQknc29ydCcsDQoJCSdkaXInLA0KCQknY3JpdCcs DQoJCSdzZWFyY2hfbWV0aG9kJywNCgkJJ3NtZF90aHVtYm5haWxfc2l6ZScsDQoJCSdzbWRf dGh1bWJuYWlsX2Nob3Nlbl9zaXplJywNCgkJJ3NtZF90aHVtYm5haWxfZGVsZXRlJywNCgkJ J3NtZF9zdGVwJw0KCSkpKTsNCg0KCSRpZCA9ICgkaWQpID8gJGlkIDogJEdMT0JBTFNbJ0lE J107DQoNCgkvLyBUb2dnbGUgcHJvZmlsZSBwYW5lbA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9w YW5lX3N0YXRlJykgew0KCQlzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQly ZXR1cm47DQoJfQ0KDQoJLy8gQ3JlYXRlL2RlbGV0ZSB0aGUgc2VsZWN0ZWQgdGh1bWJzIGRl cGVuZGluZyBvbiB0aGUgYnV0dG9uIHByZXNzZWQNCglpZiAoJHNtZF9zdGVwID09ICdzbWRf dGh1bWJuYWlsX21hbmFnZScpIHsNCgkJLy8gVmFsaWRhdGUgdXNlcg0KCQkkYXV0aG9yID0g ZmV0Y2goJ2F1dGhvcicsICd0eHBfaW1hZ2UnLCAnaWQnLCAkaWQpOw0KCQlpZiAoIWhhc19w cml2cygnaW1hZ2UuZWRpdCcpICYmICEoJGF1dGhvciA9PSAkdHhwX3VzZXIgJiYgaGFzX3By aXZzKCdpbWFnZS5lZGl0Lm93bicpKSkNCgkJew0KCQkJaW1hZ2VfbGlzdChnVHh0KCdyZXN0 cmljdGVkX2FyZWEnKSk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBHcmFiIHRoZSB0aHVt Ym5haWxzIHRvIHdvcmsgb24NCgkJJHdoZXJlID0gKCRzbWRfdGh1bWJuYWlsX3NpemU9PSdh bGwnKSA/ICcxPTEgQU5EIGZsYWdzICYgJy5TTURfVEhVTUJfQUNUSVZFIDogIm5hbWU9JyIu ZG9TbGFzaCgkc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZSkuIiciOw0KCQkkcnMgPSBzYWZl X3Jvd3MoJyonLCBTTURfVEhVTUIsICR3aGVyZSk7DQoNCgkJLy8gRG8gaXQNCgkJaWYoJHNt ZF90aHVtYm5haWxfZGVsZXRlKSB7DQoJCQkkbXNnID0gc21kX3RodW1iX3VubWFrZSgkcnMs ICRjdXJyaW1nKTsNCgkJfSBlbHNlIHsNCgkJCSRtc2cgPSBzbWRfdGh1bWJfbWFrZSgkcnMs ICRjdXJyaW1nLCAxKTsNCgkJfQ0KCX0NCg0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJ ZWNobyA8PDxFT0MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9u IHNtZF90aHVtYl9zZWxlY3RvcihzZWwpIHsNCgl2YXIgaWR4ID0gMDsNCglqUXVlcnkoIiNz bWRfdGh1bWJzIGltZyIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmIChqUXVlcnkodGhpcyku aGFzQ2xhc3Moc2VsKSkgew0KCQkJalF1ZXJ5KHRoaXMpLnRvZ2dsZUNsYXNzKCdzbWRfc2Vs ZWN0ZWQnKTsNCgkJCWlmIChqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3NtZF9zZWxlY3RlZCcp KSB7DQoJCQkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxl ZCcsIGZhbHNlKTsNCgkJCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbChzZWwp Ow0KCQkJCWlkeCA9IGpRdWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSBvcHRpb25bdmFsdWU9 JyIrc2VsKyInXSIpLmluZGV4KCk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1ibmFpbF9jaG9z ZW5fc2l6ZSIpLnZhbChzZWwpOw0KCQkJfSBlbHNlIHsNCgkJCQlqUXVlcnkoIiNzbWRfdXBs b2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJCQkJalF1ZXJ5KCIj c21kX3RodW1iX3Byb2ZpbGUiKS52YWwoJycpOw0KCQkJCWpRdWVyeSgiI3NtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5 KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJfQ0KCX0pOw0KCWpRdWVy eSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpLmF0dHIoInNlbGVjdGVkSW5kZXgiLCBpZHgpOw0K fQ0KZnVuY3Rpb24gc21kX3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkgew0KCW9iaiA9IGpRdWVy eSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpOw0KCWlmIChvYmouYXR0cigic2VsZWN0ZWRJbmRl eCIpID09IDApIHsNCgkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdk aXNhYmxlZCcsIHRydWUpOw0KCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbCgn Jyk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0K CX0gZWxzZSB7DQoJCWpRdWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWlsIikuYXR0cignZGlz YWJsZWQnLCBmYWxzZSk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFsKG9i ai52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwo b2JqLnZhbCgpKTsNCgl9DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0 aW9uKCkgew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKG9iai52YWwoKSkpIHsNCgkJ CWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX3NlbGVjdGVkJyk7DQoJCX0gZWxzZSB7DQoJ CQlqUXVlcnkodGhpcykucmVtb3ZlQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpOw0KCQl9DQoJfSk7 DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5l YWNoKGZ1bmN0aW9uKCkgew0KCQl2YXIgY2xzID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2NsYXNz Jyk7DQoJCWpRdWVyeSh0aGlzKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCXNtZF90aHVtYl9z ZWxlY3RvcihjbHMpOw0KCQl9KTsNCgl9KTsNCglqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1i bmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJalF1ZXJ5KCIudGh1bWJuYWlsLXVw bG9hZCIpLnByZXBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNtZF90aHVtYl9p bWdpZCIgdmFsdWU9InskaWR9IiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzbWRfdGh1 bWJfcHJvZmlsZSIgbmFtZT0ic21kX3RodW1iX3Byb2ZpbGUiIHZhbHVlPSIiIC8+PGlucHV0 IHR5cGU9ImhpZGRlbiIgaWQ9InNtZF90aHVtYl9leHQiIG5hbWU9InNtZF90aHVtYl9leHQi IHZhbHVlPSJ7JGV4dH0iIC8+Jyk7DQp9KTsNCjwvc2NyaXB0Pg0KRU9DOw0KDQoJLy8gSW5q ZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGh1 bWJfc3R5bGVzWydlZGl0J10gLiAnPC9zdHlsZT4nOw0KDQoJLy8gQWRkIHRodW1ibmFpbHMg YW5kIGNyZWF0aW9uIGNvbnRyb2xzDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7 DQoJCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBPUkRFUiBCWSBuYW1l Jyk7DQoJCWlmICgkcnMpIHsNCgkJCSRwcm9maWxlcyA9IGFycmF5KCdhbGwnID0+IHNtZF90 aHVtYl9nVHh0KCdzbWRfdGh1bWJfYWxsX3NpemVzJykpOw0KCQkJJHRodW1ic1tdID0gJzxk aXYgaWQ9InNtZF90aHVtYnMiPic7DQoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ CWlmICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FDVElWRSkgew0KCQkJCQkkcHJvZmls ZXNbJHJvd1snbmFtZSddXSA9ICRyb3dbJ25hbWUnXTsNCgkJCQl9DQoJCQkJJHRodW1ic1td ID0gc21kX3RodW1iX2ltZygkcm93LCAkY3VycmltZyk7DQoJCQl9DQoJCQkkdGh1bWJzW10g PSAnPC9kaXY+JzsNCgkJCSRxcyA9IGFycmF5KA0KCQkJCSJldmVudCIgPT4gJ2ltYWdlJywN CgkJCQkic3RlcCIgPT4gJ2ltYWdlX2VkaXQnLA0KCQkJCSJpZCIgPT4gJGlkLA0KCQkJCSJw YWdlIiA9PiAkcGFnZSwNCgkJCQkic29ydCIgPT4gJHNvcnQsDQoJCQkJImRpciIgPT4gJGRp ciwNCgkJCQkiY3JpdCIgPT4gJGNyaXQsDQoJCQkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFy Y2hfbWV0aG9kLA0KCQkJKTsNCg0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYm5h aWxfY29udHJvbCI+PHNwYW4gY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVf c21kX3RodW1ibmFpbHNfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJl Zj0iI3NtZF90aHVtYm5haWxzIj4nLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfdGh1bWJu YWlsX2hlYWRpbmcnKS4nPC9hPjwvc3Bhbj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlscyIgY2xh c3M9InRvZ2dsZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1i bmFpbHNfdmlzaWJsZScpID8gJ2Jsb2NrJyA6ICdub25lJykuJyI+JzsNCgkJCSRvdXRbXSA9 ICc8Zm9ybSBuYW1lPSJzbWRfdGh1bWJuYWlsX2NyZWF0ZSIgbWV0aG9kPSJwb3N0IiBhY3Rp b249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ2hpZGRlbics ICdzbWRfc3RlcCcsICdzbWRfdGh1bWJuYWlsX21hbmFnZScpOw0KCQkJJG91dFtdID0gZklu cHV0KCdoaWRkZW4nLCAnc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZScsICcnLCAnJywgJycs ICcnLCAnJywgJycsICdzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplJyk7DQoJCQkkb3V0W10g PSBzZWxlY3RJbnB1dCgnc21kX3RodW1ibmFpbF9zaXplJywgJHByb2ZpbGVzLCAnJywgJycs ICdvbmNoYW5nZT0icmV0dXJuIHNtZF90aHVtYl9zZWxlY3RfY2hhbmdlZCgpIjsnLCAnc21k X3RodW1ibmFpbF9zaXplJyk7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBn VHh0KCdjcmVhdGUnKSwgJ3NtYWxsZXJib3gnKTsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnc3Vi bWl0JywgJ3NtZF90aHVtYm5haWxfZGVsZXRlJywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVy Ym94Jyk7DQoJCQkkb3V0W10gPSBqb2luKCcnLCAkdGh1bWJzKTsNCgkJCSRvdXRbXSA9ICc8 L2Zvcm0+JzsNCgkJCSRvdXRbXSA9IHVwbG9hZF9mb3JtKHNtZF90aHVtYl9nVHh0KCdzbWRf dGh1bWJfdXBsb2FkJyksICd1cGxvYWRfdGh1bWJuYWlsJywgJ3NtZF90aHVtYm5haWxfaW5z ZXJ0JywgJ2ltYWdlJywgJGlkLCAkZmlsZV9tYXhfdXBsb2FkX3NpemUsICdzbWRfdXBsb2Fk X3RodW1ibmFpbCcsICd0aHVtYm5haWwtdXBsb2FkJyk7DQoJCQkkb3V0W10gPSAnPC9kaXY+ JzsNCgkJCXJldHVybiBqb2luKCcnLCAkb3V0KTsNCgkJfQ0KCX0NCglyZXR1cm4gJyAnOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9p bWcoJHJvdywgJGN1cnJpbWcsICRtZXRhPWFycmF5KCkpIHsNCglnbG9iYWwgJGltZ19kaXIs ICRwcmVmczsNCg0KCSRkaXIgPSBzYW5pdGl6ZUZvclVybCgkcm93WyduYW1lJ10pOw0KCSRp ZCA9ICRjdXJyaW1nWydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoNCgkkcGF0 aCA9IElNUEFUSC4kZGlyLkRTLiRpZC4kZXh0Ow0KDQoJaWYgKGZpbGVfZXhpc3RzKCRwYXRo KSkgew0KCQkkZXh0cmFzID0gJyc7DQoJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pIHx8 IGlzc2V0KCRtZXRhWydmb3JjZWgnXSkpIHsNCgkJCSRkaW1zID0gZ2V0aW1hZ2VzaXplKCRw YXRoKTsNCgkJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pICYmICEkcm93Wyd3aWR0aCdd KSB7DQoJCQkJJHJvd1snd2lkdGgnXSA9ICRkaW1zWzBdOw0KCQkJfQ0KCQkJaWYgKGlzc2V0 KCRtZXRhWydmb3JjZWgnXSkgJiYgISRyb3dbJ2hlaWdodCddKSB7DQoJCQkJJHJvd1snaGVp Z2h0J10gPSAkZGltc1sxXTsNCgkJCX0NCgkJCXVuc2V0KCRtZXRhWydmb3JjZXcnXSk7DQoJ CQl1bnNldCgkbWV0YVsnZm9yY2VoJ10pOw0KCQl9DQoJCSR3ID0gKCRyb3dbJ3dpZHRoJ10p ID8gJyB3aWR0aD0iJy4kcm93Wyd3aWR0aCddLiciJzogJyc7DQoJCSRoID0gKCRyb3dbJ2hl aWdodCddKSA/ICcgaGVpZ2h0PSInLiRyb3dbJ2hlaWdodCddLiciJzogJyc7DQoNCgkJJHVE YXRlID0gJyc7DQoJCWlmICghaXNzZXQoJG1ldGFbJ3N0YW1wJ10pKSB7DQoJCQkkdURhdGUg PSAnPycuZmlsZW10aW1lKCRwYXRoKTsNCgkJfQ0KCQl1bnNldCgkbWV0YVsnc3RhbXAnXSk7 DQoNCgkJaWYgKCFpc3NldCgkbWV0YVsnY2xhc3MnXSkpIHsNCgkJCSRtZXRhWydjbGFzcydd ID0gJGRpcjsNCgkJfQ0KDQoJCWZvcmVhY2ggKCRtZXRhIGFzICRrZXkgPT4gJHZhbCkgew0K CQkJJGV4dHJhcyAuPSAnICcuJGtleS4nPSInLiR2YWwuJyInOw0KCQl9DQoJCXJldHVybiAn PGltZyBzcmM9IicuaWh1LiRpbWdfZGlyLicvJy4kZGlyLicvJy4kaWQuJGV4dC4kdURhdGUu JyInLiR3LiRoLiRleHRyYXMuJyAvPic7DQoJfQ0KDQoJcmV0dXJuICcnOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9wcm9maWxlcygk ZXZ0LCAkc3RwLCAkZGZsdCwgJGltZ2xpc3QpIHsNCglnbG9iYWwgJHNtZF90aHVtYl9ldmVu dCwgJHByZWZzLCAkc3RlcCwgJHNtZF90aHVtYl9zdHlsZXMsICRzbWRfdGh1bWJfcHJldnMs ICR0eHBfdXNlcjsNCg0KCWlmICghaGFzX3ByaXZzKF9fRlVOQ1RJT05fXykpIHsNCgkJcmV0 dXJuOw0KCX0NCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgNCgkJJ3BhZ2UnLA0KCQknc29ydCcs DQoJCSdkaXInLA0KCQknY3JpdCcsDQoJCSdzZWFyY2hfbWV0aG9kJywNCgkJJ3NtZF90aHVt Yl9hZGQnLA0KCQknc21kX3RodW1iX2NhbmNlbCcsDQoJCSdzbWRfdGh1bWJfc2F2ZScsDQoJ CSdzbWRfdGh1bWJfbmFtZScsDQoJCSdzbWRfdGh1bWJfbmV3bmFtZScsDQoJCSdzbWRfdGh1 bWJfd2lkdGgnLA0KCQknc21kX3RodW1iX2hlaWdodCcsDQoJCSdzbWRfdGh1bWJfcXVhbGl0 eScsDQoJCSdzbWRfdGh1bWJfYWN0aXZlJywNCgkJJ3NtZF90aHVtYl9hY3RpdmVfbmV3JywN CgkJJ3NtZF90aHVtYl9jcm9wJywNCgkJJ3NtZF90aHVtYl9zaGFycGVuJywNCgkJJ3NtZF90 aHVtYl9kZWZhdWx0JywNCgkJJ3NtZF90aHVtYl9zZWxlY3RlZCcsDQoJCSdzbWRfdGh1bWJf Y2F0X3NlbGVjdGVkJywNCgkJJ3NtZF90aHVtYl91c3Jfc2VsZWN0ZWQnLA0KCQknc21kX3Ro dW1iX2dyb3VwX3R5cGUnLA0KCSkpKTsNCg0KCS8vIFNhbml0aXplDQoJJHF1YWxpdHkgPSAo aXNfbnVtZXJpYygkc21kX3RodW1iX3F1YWxpdHkpKSA/ICgoJHNtZF90aHVtYl9xdWFsaXR5 PDApID8gNzUgOiAoKCRzbWRfdGh1bWJfcXVhbGl0eT4xMDApID8gNzUgOiAkc21kX3RodW1i X3F1YWxpdHkpICkgOiA3NTsNCgkkd2lkdGggPSAoaXNfbnVtZXJpYygkc21kX3RodW1iX3dp ZHRoKSkgPyAkc21kX3RodW1iX3dpZHRoIDogMDsNCgkkaGVpZ2h0ID0gKGlzX251bWVyaWMo JHNtZF90aHVtYl9oZWlnaHQpKSA/ICRzbWRfdGh1bWJfaGVpZ2h0IDogMDsNCgkkbmV3bmFt ZSA9IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmV3bmFtZSk7DQoJJG1zZyA9ICcnOw0K DQoJLy8gVGFibGUgY29udHJvbA0KCWlmIChncHMoJ3JlbW92ZScpKSB7DQoJCXNtZF90aHVt Yl90YWJsZV9yZW1vdmUoKTsNCgl9IGVsc2Ugew0KCQlpZiAoIXNtZF90aHVtYl90YWJsZV9l eGlzdCgpKSB7DQoJCQlzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpOw0KCQl9DQoJfQ0KDQoJ Ly8gVG9nZ2xlIHByb2ZpbGUgcGFuZWwNCglpZiAoJHN0ZXAgPT0gJ3NhdmVfcGFuZV9zdGF0 ZScpIHsNCgkJc21kX3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKTsNCgkJcmV0dXJuOw0K CX0NCg0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX2NyZWF0ZV9ncm91cCcpIHsNCgkJc3dp dGNoICgkc21kX3RodW1iX2dyb3VwX3R5cGUpIHsNCgkJCWNhc2UgJ2FsbCc6DQoJCQkJc21k X3RodW1iX2NyZWF0ZV9ncm91cCgnYWxsJyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdzZWwn Og0KCQkJCXNtZF90aHVtYl9jcmVhdGVfZ3JvdXAoJ3NlbCcsIHJ0cmltKCRzbWRfdGh1bWJf c2VsZWN0ZWQsICcsJykpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnY2F0JzoNCgkJCQlzbWRf dGh1bWJfY3JlYXRlX2dyb3VwKCdjYXQnLCAkc21kX3RodW1iX2NhdF9zZWxlY3RlZCk7DQoJ CQkJYnJlYWs7DQoJCQljYXNlICd1c3InOg0KCQkJCXNtZF90aHVtYl9jcmVhdGVfZ3JvdXAo J3VzcicsICRzbWRfdGh1bWJfdXNyX3NlbGVjdGVkKTsNCgkJCQlicmVhazsNCgkJfQ0KCQlz ZXRfcHJlZigncGFuZV9zbWRfdGh1bWJfZ3JvdXBfdHlwZScsICRzbWRfdGh1bWJfZ3JvdXBf dHlwZSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZf UFJJVkFURSk7DQoJCSRzdGVwID0gJ3NtZF90aHVtYl9wcmVmcyc7DQoJfQ0KDQoJLy8gU2F2 ZSBwcm9maWxlDQoJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgew0K CQlpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCWlmICgkc21kX3RodW1iX2Nh bmNlbCkgew0KCQkJCS8vIERvIG5vdGhpbmcNCgkJCX0gZWxzZSBpZiAoJHNtZF90aHVtYl9h ZGQpIHsNCgkJCQkvLyBDcmVhdGUgbmV3IHByb2ZpbGUNCgkJCQkkZXhpc3RzID0gc2FmZV9y b3coJyonLCBTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIik7DQoJ CQkJaWYgKCRleGlzdHMpIHsNCgkJCQkJJG1zZyA9IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1 bWJfcHJvZmlsZV9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiBkb1NsYXNoKCRuZXduYW1l KSkpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmICgkbmV3bmFtZSkgew0KCQkJCQkJJGZsYWdz ID0gMDsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX2FjdGl2ZV9uZXcpID8gJGZsYWdz IHwgU01EX1RIVU1CX0FDVElWRSA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3Ro dW1iX2Nyb3ApID8gJGZsYWdzIHwgU01EX1RIVU1CX0NST1AgOiAkZmxhZ3M7DQoJCQkJCQkk ZmxhZ3MgPSAoJHNtZF90aHVtYl9zaGFycGVuKSA/ICRmbGFncyB8IFNNRF9USFVNQl9TSEFS UCA6ICRmbGFnczsNCg0KCQkJCQkJc2FmZV9pbnNlcnQoU01EX1RIVU1CLA0KCQkJCQkJCSJu YW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIi4NCgkJCQkJCQkiLCB3aWR0aD0nIi5kb1Ns YXNoKCR3aWR0aCkuIiciLg0KCQkJCQkJCSIsIGhlaWdodD0nIi5kb1NsYXNoKCRoZWlnaHQp LiInIi4NCgkJCQkJCQkiLCBxdWFsaXR5PSciLmRvU2xhc2goJHF1YWxpdHkpLiInIi4NCgkJ CQkJCQkiLCBmbGFncz0nIi5kb1NsYXNoKCRmbGFncykuIiciDQoJCQkJCQkpOw0KDQoJCQkJ CQkvLyBBbHRlciB0aGUgZGVmYXVsdCB0aHVtYm5haWwNCgkJCQkJCWlmICgkc21kX3RodW1i X2RlZmF1bHQpIHsNCgkJCQkJCQlzZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmls ZScsICRuZXduYW1lLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4pOw0KCQkJCQkJfQ0KDQoJ CQkJCQkvLyBDcmVhdGUgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkNCgkJCQkJCUBta2RpcihJ TVBBVEguJG5ld25hbWUpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBV cGRhdGUgZXhpc3RpbmcgcHJvZmlsZQ0KCQkJCSRuYW1lID0gc2FuaXRpemVGb3JVcmwoJHNt ZF90aHVtYl9uYW1lKTsNCgkJCQkkZXhpc3RzID0gc2FmZV9yb3coJyonLCBTTURfVEhVTUIs ICJuYW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIik7DQoJCQkJaWYgKCRleGlzdHMgJiYg c3RydG9sb3dlcigkbmV3bmFtZSkgIT0gc3RydG9sb3dlcigkbmFtZSkpIHsNCgkJCQkJJG1z ZyA9IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcHJvZmlsZV9leGlzdHMnLCBhcnJheSgn e25hbWV9JyA9PiBkb1NsYXNoKCRuZXduYW1lKSkpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlm ICgkbmV3bmFtZSkgew0KCQkJCQkJJGZsYWdzID0gMDsNCgkJCQkJCSRmbGFncyA9ICgkc21k X3RodW1iX2FjdGl2ZSkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQUNUSVZFIDogJGZsYWdzOw0K CQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfY3JvcCkgPyAkZmxhZ3MgfCBTTURfVEhVTUJf Q1JPUCA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX3NoYXJwZW4pID8g JGZsYWdzIHwgU01EX1RIVU1CX1NIQVJQIDogJGZsYWdzOw0KDQoJCQkJCQlzYWZlX3VwZGF0 ZSgNCgkJCQkJCQlTTURfVEhVTUIsDQoJCQkJCQkJIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFt ZSkuIiciDQoJCQkJCQkJCS4iLCB3aWR0aD0nIi5kb1NsYXNoKCR3aWR0aCkuIiciDQoJCQkJ CQkJCS4iLCBoZWlnaHQ9JyIuZG9TbGFzaCgkaGVpZ2h0KS4iJyINCgkJCQkJCQkJLiIsIHF1 YWxpdHk9JyIuZG9TbGFzaCgkcXVhbGl0eSkuIiciDQoJCQkJCQkJCS4iLCBmbGFncz0nIi5k b1NsYXNoKCRmbGFncykuIiciDQoJCQkJCQkJLCAibmFtZT0nIi5kb1NsYXNoKCRuYW1lKS4i JyINCgkJCQkJCSk7DQoNCgkJCQkJCS8vIEFsdGVyIHRoZSBkZWZhdWx0IHRodW1ibmFpbA0K CQkJCQkJaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgew0KCQkJCQkJCXNldF9wcmVmKCdzbWRf dGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJG5ld25hbWUsICdzbWRfdGh1bWInLCBQUkVGX0hJ RERFTik7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgZGVmYXVsdCBm bGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQkJCWlmIChnZXRfcHJl Zignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpID09IGRvU2xhc2goJG5hbWUpKSB7DQoJ CQkJCQkJCXNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsICdzbWRf dGh1bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KDQoJCQkJCQkvLyBB ZGp1c3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkgaWYgdGhlIG5hbWUgaGFzIGNoYW5nZWQN CgkJCQkJCWlmICgkbmV3bmFtZSAhPSAkbmFtZSkgew0KCQkJCQkJCXJlbmFtZShJTVBBVEgu JG5hbWUsIElNUEFUSC4kbmV3bmFtZSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9 DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl90YWJs ZXNfbm90X2luc3RhbGxlZCcpOw0KCQl9DQoJCSRzdGVwID0gJ3NtZF90aHVtYl9wcm9maWxl JzsNCgl9DQoNCgkvLyBEZWxldGUgcHJvZmlsZQ0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1i X3Byb2ZpbGVfZGVsZXRlJykgew0KCQlpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsN CgkJCSR0eHBfZGVsID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfZGVsZXRlJyk7DQoJCQkk dGhlX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAx KTsNCg0KCQkJaWYgKCFlbXB0eSgkc21kX3RodW1iX25hbWUpKSB7DQoJCQkJJG5hbWUgPSBz YW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUpOw0KCQkJCSRyZXQgPSBzYWZlX2RlbGV0 ZShTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIik7DQoJCQkJaWYgKCRy ZXQpIHsNCgkJCQkJc21kX3RodW1iX3JtZGlyKElNUEFUSC4kbmFtZSk7DQoNCgkJCQkJLy8g RGVsZXRlIGFsbCBUWFAgdGh1bWJzIHRvbz8NCgkJCQkJaWYgKCgkbmFtZSA9PSAkdGhlX2Rm bHQpICYmICgkdHhwX2RlbCA9PSAnMScpKSB7DQoJCQkJCQkkcnMgPSBzYWZlX3Jvd3MoJ2lk LCBleHQnLCAndHhwX2ltYWdlJywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJCWZvcmVhY2gg KCRycyBhcyAkcm93KSB7DQoJCQkJCQkJJHBhdGggPSBJTVBBVEguJHJvd1snaWQnXS4ndCcu JHJvd1snZXh0J107DQoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJCQkJ CQl1bmxpbmsoJHBhdGgpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCXNhZmVfdXBkYXRl KCd0eHBfaW1hZ2UnLCAndGh1bWJuYWlsID0gMCwgdGh1bWJfdyA9IDAsIHRodW1iX2ggPSAw JywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJfQ0KDQoJCQkJCS8vIFJlbW92ZSB0aGUgZGVm YXVsdCBmbGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQlpZiAoZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSA9PSBkb1NsYXNoKCRuYW1lKSkg ew0KCQkJCQkJc2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgJ3Nt ZF90aHVtYicsIFBSRUZfSElEREVOKTsNCgkJCQkJfQ0KDQoJCQkJCSRtc2cgPSBzbWRfdGh1 bWJfZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ IGRvU2xhc2goJG5hbWUpKSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRzdGVwID0gJ3NtZF90 aHVtYl9wcm9maWxlJzsNCgl9DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAnaW1h Z2UnLA0KCQkicGFnZSIgPT4gJHBhZ2UsDQoJCSJzb3J0IiA9PiAkc29ydCwNCgkJImRpciIg PT4gJGRpciwNCgkJImNyaXQiID0+ICRjcml0LA0KCQkic2VhcmNoX21ldGhvZCIgPT4gJHNl YXJjaF9tZXRob2QsDQoJKTsNCg0KCS8vIEluamVjdCBzdHlsZXMNCgllY2hvICc8c3R5bGUg dHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RodW1iX3N0eWxlc1sncHJvZmlsZSddIC4gJzwv c3R5bGU+JzsNCgkkcHJpdnMgPSBzYWZlX2ZpZWxkKCdwcml2cycsICd0eHBfdXNlcnMnLCAi bmFtZSA9ICciLmRvU2xhc2goJHR4cF91c2VyKS4iJyIpOw0KCSRyaWdodHMgPSBpbl9hcnJh eSgkcHJpdnMsICRzbWRfdGh1bWJfcHJldnMpID8gdHJ1ZSA6IGZhbHNlOw0KDQoJaWYgKCRz dGVwID09ICdzbWRfdGh1bWJfcHJlZnMnKSB7DQoNCgkJLy8gKiogVEhVTUJOQUlMIFBSRUZT ICoqDQoNCgkJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCQkkcHJvX2RmbHQg PSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJ Ly8gU3Vic2VsZWN0IGxpc3RzIGZvciB0eXBlICdjYXQnIGFuZCAndXNyJw0KCQkJJHJzID0g Z2V0VHJlZSgncm9vdCcsICdpbWFnZScpOw0KCQkJJGFsbENhdHMgPSAkcnMgPyB0cmVlU2Vs ZWN0SW5wdXQoJ3NtZF90aHVtYl9jYXRfc2VsZWN0ZWQnLCAkcnMsICcnKSA6ICcnOw0KCQkJ JGFsbENhdHMgPSAiPHNwYW4+Ii5zdHJfcmVwbGFjZShhcnJheSgiXG4iLCAnLScpLCBhcnJh eSgnJywgJyYjNDU7JyksIHN0cl9yZXBsYWNlKCc8LycsICc8XC8nLCBhZGRzbGFzaGVzKCRh bGxDYXRzKSkpLiI8XC9zcGFuPiI7DQoJCQkkcnMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0 eHBfdXNlcnMnLCAicHJpdnMgbm90IGluKDAsNikgb3JkZXIgYnkgbmFtZSBhc2MiKTsNCgkJ CSRhbGxVc3JzID0gJHJzID8gc2VsZWN0SW5wdXQoJ3NtZF90aHVtYl91c3Jfc2VsZWN0ZWQn LCAkcnMsICcnLCB0cnVlKSA6ICcnOw0KCQkJJGFsbFVzcnMgPSAiPHNwYW4+Ii5zdHJfcmVw bGFjZShhcnJheSgiXG4iLCAnLScpLCBhcnJheSgnJywgJyYjNDU7JyksIHN0cl9yZXBsYWNl KCc8LycsICc8XC8nLCBhZGRzbGFzaGVzKCRhbGxVc3JzKSkpLiI8XC9zcGFuPiI7DQoNCgkJ CWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlv biBzbWRfdGh1bWJfc3dpdGNoX3ByZWYob2JqLCBuYW1lKSB7DQoJdmFyIHN0YXRlID0gKGpR dWVyeShvYmopLmF0dHIoJ2NoZWNrZWQnKSkgPyAxIDogMDsNCglzZW5kQXN5bmNFdmVudCgN Cgl7DQoJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJc3RlcDogJ3NtZF90aHVtYl9z d2l0Y2hfcHJlZicsDQoJCXNtZF90aHVtYl90eHB0eXBlOiBuYW1lLA0KCQlzbWRfdGh1bWJf c3RhdGU6IHN0YXRlDQoJfSk7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfY29weV9zZWxlY3Rl ZCgpIHsNCglqUXVlcnkoIiNpbWFnZXNfZm9ybSB0Ym9keSAubXVsdGktZWRpdCBpbnB1dDpj aGVja2VkIikuZWFjaChmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCIjc21kX3RodW1iX3NlbGVj dGVkIikudmFsKGpRdWVyeSgiI3NtZF90aHVtYl9zZWxlY3RlZCIpLnZhbCgpICsgalF1ZXJ5 KHRoaXMpLnZhbCgpICsgJywnKTsNCgl9KTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zdWJz ZWwob2JqKSB7DQoJb2JqID0galF1ZXJ5KG9iaik7DQoJZGVzdCA9IGpRdWVyeSgnI3NtZF90 aHVtYl9zdWJzZWwnKTsNCglpdGVtID0gb2JqLnZhbCgpOw0KCXN3aXRjaCAoaXRlbSkgew0K CQljYXNlICdhbGwnOg0KCQljYXNlICdzZWwnOg0KCQkJZGVzdC5lbXB0eSgpOw0KCQkJYnJl YWs7DQoJCWNhc2UgJ2NhdCc6DQoJCQlkZXN0LmVtcHR5KCkucHJlcGVuZCgneyRhbGxDYXRz fScpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Vzcic6DQoJCQlkZXN0LmVtcHR5KCkucHJlcGVu ZCgneyRhbGxVc3JzfScpOw0KCQkJYnJlYWs7DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkg ew0KCWpRdWVyeSgnI3NtZF90aHVtYl9ncm91cF90eXBlJykuY2hhbmdlKCk7DQp9KTsNCjwv c2NyaXB0Pg0KRU9DOw0KDQoJCQkkcG5sYnRuID0gJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVm PSI/ZXZlbnQ9aW1hZ2Umc29ydD0nLiRzb3J0LicmZGlyPScuJGRpci4nJnBhZ2U9Jy4kcGFn ZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4nJmNyaXQ9Jy4kY3JpdC4nIj4n LnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnRuX3BubCcpLic8L2E+JzsNCgkJCSRncnBi dG4gPSAnPGJ1dHRvbiBjbGFzcz0ibmF2bGluayIgdHlwZT0ic3VibWl0IiBvbmNsaWNrPSJz bWRfdGh1bWJfY29weV9zZWxlY3RlZCgpOyByZXR1cm4gY29uZmlybShcJycuc21kX3RodW1i X2dUeHQoJ3NtZF90aHVtYl9jcmVhdGVfZ3JvdXBfY29uZmlybScpLidcJyk7Ij4nLnNtZF90 aHVtYl9nVHh0KCdzbWRfdGh1bWJfYWxsX3RodW1icycpLic8L2J1dHRvbj4nOw0KCQkJJGdy cFR5cGVzID0gYXJyYXkoDQoJCQkJJ3NlbCcgPT4gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVt Yl9ieVNlbCcpLA0KCQkJCSdjYXQnID0+IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnlD YXQnKSwNCgkJCQkndXNyJyA9PiBzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2J5VXNyJyks DQoJCQkJJ2FsbCcgPT4gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9ieUFsbCcpLA0KCQkJ KTsNCg0KCQkJJGdycE9wdHMgPSBzZWxlY3RJbnB1dCgnc21kX3RodW1iX2dyb3VwX3R5cGUn LCAkZ3JwVHlwZXMsIGdldF9wcmVmKCdwYW5lX3NtZF90aHVtYl9ncm91cF90eXBlJywgJ2Fs bCcsIDEpLCAnJywgJ29uY2hhbmdlPSJzbWRfdGh1bWJfc3Vic2VsKHRoaXMpOyInLCAnc21k X3RodW1iX2dyb3VwX3R5cGUnKS4nPHNwYW4gaWQ9InNtZF90aHVtYl9zdWJzZWwiPjwvc3Bh bj4nOw0KDQoJCQkkb3V0W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJvZmlsZXMi PjxsZWdlbmQgY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1i bmFpbF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVm PSIjc21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy4oKCRyaWdodHMpID8gc21kX3RodW1iX2dU eHQoJ3NtZF90aHVtYl9wcm9maWxlX3ByZWZ0b29sX2hlYWRpbmcnKSA6IHNtZF90aHVtYl9n VHh0KCdzbWRfdGh1bWJfcHJvZmlsZV90b29sX2hlYWRpbmcnKSkuJzwvYT48L2xlZ2VuZD48 ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0i ZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2li bGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCQkkb3V0W10gPSAnPGRpdiBjbGFz cz0ic21kX3RodW1iX2J0biI+Jy4kcG5sYnRuLic8L2Rpdj4nOw0KDQoJCQkkb3V0W10gPSAn PGZpZWxkc2V0PjxsZWdlbmQ+Jy5zbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2JhdGNoX2xl Z2VuZCcpLic8L2xlZ2VuZD4nOw0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYl9i YXRjaCI+PHNwYW4gaWQ9InNtZF90aHVtYl9iY3VyciI+PC9zcGFuPjxzcGFuIGlkPSJzbWRf dGh1bWJfYnRvdCI+PC9zcGFuPjwvZGl2Pic7DQoJCQkkb3V0W10gPSAnPGZvcm0gbWV0aG9k PSJwb3N0IiBuYW1lPSJzbWRfdGh1bWJfbXVsdGlfZWRpdCIgaWQ9InNtZF90aHVtYl9tdWx0 aV9lZGl0IiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkkb3V0W10gPSBzdGFy dFRhYmxlKCdzbWRfY29udHJvbCcpOw0KCQkJJG91dFtdID0gZklucHV0KCdoaWRkZW4nLCAn c21kX3RodW1iX3NlbGVjdGVkJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF90aHVt Yl9zZWxlY3RlZCcpOw0KCQkJJG91dFtdID0gZUlucHV0KCRzbWRfdGh1bWJfZXZlbnQpOw0K CQkJJG91dFtdID0gc0lucHV0KCdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwJyk7DQoJCQkkb3V0 W10gPSB0cih0ZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2JhdGNoX3ByZWFtYmxlJyku JGdycGJ0bi4kZ3JwT3B0cykpOw0KCQkJJG91dFtdID0gZW5kVGFibGUoKTsNCgkJCSRvdXRb XSA9ICc8L2Zvcm0+JzsNCgkJCSRvdXRbXSA9ICc8L2ZpZWxkc2V0Pic7DQoNCgkJCWlmICgk cmlnaHRzKSB7DQoJCQkJJG91dFtdID0gJzxmaWVsZHNldD48bGVnZW5kPicuc21kX3RodW1i X2dUeHQoJ3NtZF90aHVtYl9wcmVmcycpLic8L2xlZ2VuZD4nOw0KCQkJCSRvdXRbXSA9ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9InNtZF90aHVtYl9wcmVmcyIgaWQ9InNtZF90aHVt Yl9wcmVmc19mb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkJJG91dFtd ID0gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQ0KCQkJCWlmICgkcHJvX2RmbHQpIHsNCgkJCQkJ JHR4cF9jID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfY3JlYXRlJyk7DQoJCQkJCSR0eHBf ZCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2RlbGV0ZScpOw0KCQkJCQkkb3V0W10gPSB0 cigNCgkJCQkJCXRkYShzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3R4cF9kZWZhdWx0X3N5 bmMnKSwgJyBjbGFzcz0icHJlZi1sYWJlbCInKSAuDQoJCQkJCQl0ZGEoDQoJCQkJCQkJJzxp bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3RodW1iX3R4cF9jcmVhdGUiIHZhbHVl PSIxIicuKCgkdHhwX2MpID8gJyIgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNz PSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfcHJlZih0aGlzLCBcJ3R4 cF9jcmVhdGVcJyk7IiAvPicuDQoJCQkJCQkJc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9j cmVhdGUnKS4NCgkJCQkJCQknPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzbWRfdGh1 bWJfdHhwX2RlbGV0ZSIgdmFsdWU9IjEiJy4oKCR0eHBfZCkgPyAnIiBjaGVja2VkPSJjaGVj a2VkIicgOiAnJykuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3 aXRjaF9wcmVmKHRoaXMsIFwndHhwX2RlbGV0ZVwnKTsiIC8+Jy4NCgkJCQkJCQlzbWRfdGh1 bWJfZ1R4dCgnc21kX3RodW1iX2RlbGV0ZScpDQoJCQkJCQkpKTsNCgkJCQl9DQoJCQkJJHR4 cF9hciA9IGdldF9wcmVmKCdzbWRfdGh1bWJfYXV0b19yZXBsYWNlJyk7DQoJCQkJJG91dFtd ID0gdHIoDQoJCQkJCXRkYShzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3R4cF9hdXRvX3Jl cGxhY2UnKSwgJyBjbGFzcz0icHJlZi1sYWJlbCInKSAuDQoJCQkJCXRkYSgNCgkJCQkJCSc8 aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl9hdXRvX3JlcGxhY2UiIHZh bHVlPSIxIicuKCgkdHhwX2FyKSA/ICciIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4gJyBj bGFzcz0iY2hlY2tib3giIG9uY2hhbmdlPSJzbWRfdGh1bWJfc3dpdGNoX3ByZWYodGhpcywg XCdhdXRvX3JlcGxhY2VcJyk7IiAvPicNCgkJCQkJKSk7DQoJCQkJJG91dFtdID0gZW5kVGFi bGUoKTsNCgkJCQkkb3V0W10gPSAnPC9mb3JtPjwvZmllbGRzZXQ+JzsNCgkJCX0NCgkJCSRv dXRbXSA9ICc8L2Rpdj48L2ZpZWxkc2V0Pic7DQoJCX0NCgl9IGVsc2Ugew0KDQoJCS8vICoq IFRIVU1CTkFJTCBQUk9GSUxFUyAqKg0KDQoJCSRlZGl0Rm9jdXMgPSAoJHN0ZXAgPT0gJ3Nt ZF90aHVtYl9wcm9maWxlX2VkaXQnKSA/ICdqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZV9l ZGl0ZWQgaW5wdXRbbmFtZT1cJ3NtZF90aHVtYl9uZXduYW1lXCddIikuZm9jdXMoKTsnIDog Jyc7DQoNCgkJZWNobyA8PDxFT0MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CmZ1bmN0aW9uIHNtZF90aHVtYl90b2dnbGVuZXcoKSB7DQoJYm94ID0galF1ZXJ5KCIjc21k X3RodW1iX3Byb2ZpbGVfY3JlYXRlIik7DQoJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAi bm9uZSIpIHsNCgkJYm94LnNob3coKTsNCgl9IGVsc2Ugew0KCQlib3guaGlkZSgpOw0KCX0N CglqUXVlcnkoImlucHV0LnNtZF9mb2N1cyIpLmZvY3VzKCk7DQoJcmV0dXJuIGZhbHNlOw0K fQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmUobmFtZSkgew0KCXNlbmRBc3lu Y0V2ZW50KA0KCXsNCgkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQlzdGVwOiAnc21k X3RodW1iX3N3aXRjaF9hY3RpdmUnLA0KCQlzbWRfdGh1bWJfcHJvZmlsZTogbmFtZQ0KCX0s IHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlX2RvbmUpOw0KfQ0KZnVuY3Rpb24gc21kX3RodW1i X3N3aXRjaF9hY3RpdmVfZG9uZShkYXRhKSB7DQoJdmFyIHNtZF90aHVtYl9wcm9maWxlID0g alF1ZXJ5KCcjc21kX3RodW1iX3Byb2ZpbGVfJytqUXVlcnkoZGF0YSkuZmluZCgnc21kX3Ro dW1iX3Byb2ZpbGUnKS5hdHRyKCd2YWx1ZScpKTsNCglzbWRfdGh1bWJfcHJvZmlsZS50b2dn bGVDbGFzcygnc21kX2luYWN0aXZlJyk7DQoJaWYgKHNtZF90aHVtYl9wcm9maWxlLmhhc0Ns YXNzKCdzbWRfaW5hY3RpdmUnKSkgew0KCQlzbWRfdGh1bWJfcHJvZmlsZS5maW5kKCdpbnB1 dDpjaGVja2JveCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsNCgl9IGVsc2Ugew0KCQlzbWRf dGh1bWJfcHJvZmlsZS5maW5kKCdpbnB1dDpjaGVja2JveCcpLmF0dHIoJ2NoZWNrZWQnLCAn Y2hlY2tlZCcpOw0KCX0NCn0NCg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnLnNt ZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnko Jy5zbWRfdGh1bWJfcm93IGlucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbigpIHsNCgkJ CXNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdj bGFzcycpKTsNCgkJfSk7DQoJfSk7DQoJeyRlZGl0Rm9jdXN9DQp9KTsNCjwvc2NyaXB0Pg0K RU9DOw0KDQoJCSRuZXdidG4gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9IiMiIG9uY2xp Y2s9InJldHVybiBzbWRfdGh1bWJfdG9nZ2xlbmV3KCk7Ij4nLnNtZF90aHVtYl9nVHh0KCdz bWRfdGh1bWJfbmV3JykuJzwvYT4mbmJzcDsnOw0KCQkkcHJlZmJ0biA9ICc8YSBjbGFzcz0i bmF2bGluayIgaHJlZj0iP2V2ZW50PWltYWdlJnN0ZXA9c21kX3RodW1iX3ByZWZzJnNvcnQ9 Jy4kc29ydC4nJmRpcj0nLiRkaXIuJyZwYWdlPScuJHBhZ2UuJyZzZWFyY2hfbWV0aG9kPScu JHNlYXJjaF9tZXRob2QuJyZjcml0PScuJGNyaXQuJyI+Jy4oKCRyaWdodHMpID8gc21kX3Ro dW1iX2dUeHQoJ3NtZF90aHVtYl9idG5fdG9vbHNfcHJlZnMnKSA6IHNtZF90aHVtYl9nVHh0 KCdzbWRfdGh1bWJfYnRuX3Rvb2xzJykpLic8L2E+JzsNCg0KCQkkaGVhZGluZ3MgPSBuLic8 dGhlYWQ+Jy50cih0ZGNzKCRuZXdidG4sIDkpKS50cigNCgkJCW4uY29sdW1uX2hlYWQoJ25h bWUnLCAnbmFtZScsICdpbWFnZScsIGZhbHNlLCAnYXNjJykuDQoJCQljb2x1bW5faGVhZCgn dGh1bWJfd2lkdGgnLCAnd2lkdGgnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVh ZCgndGh1bWJfaGVpZ2h0JywgJ2hlaWdodCcsICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVt bl9oZWFkKHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcXVhbGl0eScpLCAncXVhbGl0eScs ICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVtbl9oZWFkKCdrZWVwX3NxdWFyZV9waXhlbHMn LCAnY3JvcCcsICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVtbl9oZWFkKHNtZF90aHVtYl9n VHh0KCdzbWRfdGh1bWJfc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScsIGZhbHNlKS4N CgkJCWNvbHVtbl9oZWFkKCdhY3RpdmUnLCAnYWN0aXZlJywgJ2ltYWdlJywgZmFsc2UsICcn LCAnJywgJycsICdzbWRfdGh1bWJfaGVhZGluZ19hY3RpdmUnKS4NCgkJCWNvbHVtbl9oZWFk KCdkZWZhdWx0JywgJ2RlZmF1bHQnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVh ZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2FjdGlvbnMnKSwgJ2FjdGlvbnMnLCAnaW1h Z2UnLCBmYWxzZSkNCgkJKS4nPC90aGVhZD4nOw0KDQoJCSRvdXRbXSA9ICc8ZmllbGRzZXQg aWQ9InNtZF90aHVtYl9wcm9maWxlcyI+PGxlZ2VuZCBjbGFzcz0icGxhaW4gbGV2ZXInLihn ZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnKSA/ICcgZXhw YW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIj4nLnNt ZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcHJvZmlsZV9oZWFkaW5nJykuJzwvYT48L2xlZ2Vu ZD48ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHls ZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zp c2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCSRvdXRbXSA9ICc8ZGl2IGNs YXNzPSJzbWRfdGh1bWJfYnRuIj4nLiRwcmVmYnRuLic8L2Rpdj4nOw0KDQoJCS8vIE1haW4g bGlzdCBvZiBwcm9maWxlcw0KCQkkb3V0W10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1l PSJzbWRfdGh1bWJfcHJvZmlsZV9mb3JtIiBpZD0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIg YWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCQkkb3V0W10gPSBzdGFydFRhYmxlKCds aXN0Jyk7DQoJCSRvdXRbXSA9ICRoZWFkaW5nczsNCg0KCQlpZiAoc21kX3RodW1iX3RhYmxl X2V4aXN0KCkpIHsNCgkJCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBP UkRFUiBCWSBuYW1lJyk7DQoJCQkkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2Rl ZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJLy8gTmV3IFByb2ZpbGUgcm93DQoJCQkk b3V0W109ICc8dHIgaWQ9InNtZF90aHVtYl9wcm9maWxlX2NyZWF0ZSIgY2xhc3M9InNtZF9o aWRkZW4iPic7DQoJCQkkb3V0W10gPSB0ZChzSW5wdXQoJ3NtZF90aHVtYl9wcm9maWxlX3Nh dmUnKS5mSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX25ld25hbWUnLCAoKCRzdGVwPT0nc21k X3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVtYl9uYW1lIDogJycpLCAnc21kX2Zv Y3VzJykpDQoJCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfd2lkdGgnLCAoKCRz dGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHdpZHRoIDogJycpLCAnJywgJycs ICcnLCAnNCcpKQ0KCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX2hlaWdodCcs ICgoJHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgPyAkaGVpZ2h0IDogJycpLCAn JywgJycsICcnLCAnNCcpKQ0KCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX3F1 YWxpdHknLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHF1YWxpdHkg OiAnJyksICcnLCAnJywgJycsICc0JykpDQoJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJf Y3JvcCcsICcxJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRf dGh1bWJfY3JvcCA6IDApKSkNCgkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9zaGFycGVu JywgJzEnLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVt Yl9zaGFycGVuIDogMCkpKQ0KCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2FjdGl2ZV9u ZXcnLCAnMScsIDEpKQ0KCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2RlZmF1bHQnLCAn MScsIDApKQ0KCQkJCS50ZChmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJfYWRkJywgZ1R4 dCgnYWRkJyksICdzbWFsbGVyYm94JykpOw0KCQkJJG91dFtdPSAnPC90cj4nOw0KDQoJCQkv LyBSZW1haW5pbmcgcm93cw0KCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkbGlu a19lZHQgPSBqb2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9lZGl0 JiMzODtzbWRfdGh1bWJfbmFtZT0nLiRyb3dbJ25hbWUnXTsNCgkJCQkkbGlua19kZWwgPSBq b2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9kZWxldGUmIzM4O3Nt ZF90aHVtYl9uYW1lPScuJHJvd1snbmFtZSddOw0KCQkJCSRidG5FZHQgPSAnPGEgaHJlZj0i Jy4kbGlua19lZHQuJyI+WycgLiBnVHh0KCdlZGl0JykgLiAnXTwvYT4nOw0KCQkJCSRidG5E ZWwgPSAnPGEgaHJlZj0iJy4kbGlua19kZWwuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0o XCcnLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgi e25hbWV9IiA9PiAkcm93WyduYW1lJ10pKS4nXCcpOyI+WycgLiBnVHh0KCdkZWxldGUnKSAu ICddPC9hPic7DQoJCQkJJGFjdGl2ZSA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FD VElWRSkgPyAxIDogMDsNCgkJCQkkY3JvcCA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1C X0NST1ApID8gMSA6IDA7DQoJCQkJJHNoYXJwZW4gPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9U SFVNQl9TSEFSUCkgPyAxIDogMDsNCg0KCQkJCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX3By b2ZpbGVfZWRpdCcgJiYgJHJvd1snbmFtZSddID09ICRzbWRfdGh1bWJfbmFtZSkgew0KCQkJ CQkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9zYXZlJywgZ1R4dCgn U2F2ZScpLCAnc21hbGxlcmJveCcpOw0KCQkJCQkkYnRuQ2FuY2VsID0gZklucHV0KCdzdWJt aXQnLCAnc21kX3RodW1iX2NhbmNlbCcsIGdUeHQoJ0NhbmNlbCcpLCAnc21hbGxlcmJveCcp Ow0KCQkJCQkkb3V0W10gPSB0cigNCgkJCQkJCXRkKGhJbnB1dCgnc21kX3RodW1iX25hbWUn LCAkcm93WyduYW1lJ10pLmZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfbmV3bmFtZScsICRy b3dbJ25hbWUnXSkpDQoJCQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl93aWR0 aCcsICRyb3dbJ3dpZHRoJ10sICcnLCAnJywgJycsICc0JykpDQoJCQkJCQkudGQoZklucHV0 KCd0ZXh0JywgJ3NtZF90aHVtYl9oZWlnaHQnLCAkcm93WydoZWlnaHQnXSwgJycsICcnLCAn JywgJzQnKSkNCgkJCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX3F1YWxpdHkn LCAkcm93WydxdWFsaXR5J10sICcnLCAnJywgJycsICc0JykpDQoJCQkJCQkudGQoY2hlY2ti b3goJ3NtZF90aHVtYl9jcm9wJywgJzEnLCAkY3JvcCkpDQoJCQkJCQkudGQoY2hlY2tib3go J3NtZF90aHVtYl9zaGFycGVuJywgJzEnLCAkc2hhcnBlbikpDQoJCQkJCQkudGQoY2hlY2ti b3goJ3NtZF90aHVtYl9hY3RpdmUnLCAnMScsICRhY3RpdmUpLCAnJywgJHJvd1snbmFtZSdd KQ0KCQkJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfZGVmYXVsdCcsICcxJywgKCgkcm93 WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IDEgOiAwKSkpDQoJCQkJCQkudGQoJGJ0blNhdmUu JGJ0bkNhbmNlbCkNCgkJCQkJLCAnIGlkPSJzbWRfdGh1bWJfcHJvZmlsZV9lZGl0ZWQiJyk7 DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFtdID0gdHIoDQoJCQkJCQl0ZChocmVmKCRyb3db J25hbWUnXSwgJGxpbmtfZWR0KSkuDQoJCQkJCQl0ZCgkcm93Wyd3aWR0aCddKS4NCgkJCQkJ CXRkKCRyb3dbJ2hlaWdodCddKS4NCgkJCQkJCXRkKCRyb3dbJ3F1YWxpdHknXSkuDQoJCQkJ CQl0ZCgoJGNyb3ApID8gZ1R4dCgneWVzJykgOiBnVHh0KCdubycpKS4NCgkJCQkJCXRkKCgk c2hhcnBlbikgPyBnVHh0KCd5ZXMnKSA6IGdUeHQoJ25vJykpLg0KCQkJCQkJdGQoJzxpbnB1 dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3RodW1iX2FjdGl2ZV8nLiRyb3dbJ25hbWUn XS4nIiB2YWx1ZT0iMSInLigoJGFjdGl2ZSkgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAn JykuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9hY3Rp dmUoXCcnLiRyb3dbJ25hbWUnXS4nXCcpOyIgLz4nLCAnJywgJHJvd1snbmFtZSddKS4NCgkJ CQkJCXRkKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IGdUeHQoJ3llcycpIDogZ1R4 dCgnbm8nKSkuDQoJCQkJCQl0ZCgkYnRuRGVsKQ0KCQkJCQksICcgaWQ9InNtZF90aHVtYl9w cm9maWxlXycuJHJvd1snbmFtZSddLiciIGNsYXNzPSJzbWRfdGh1bWJfcm93JyAuICgoJGFj dGl2ZSkgPyAnJyA6ICcgc21kX2luYWN0aXZlJykuJyInKTsNCgkJCQl9DQoJCQl9DQoJCX0N Cg0KCQkkb3V0W10gPSBlbmRUYWJsZSgpOw0KCQkkb3V0W10gPSAnPC9mb3JtPjwvZGl2Pjwv ZmllbGRzZXQ+JzsNCgl9DQoNCglyZXR1cm4gam9pbignJywgJG91dCk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGVsZXRlIGEgdGh1bWJuYWlsIGRpcmVjdG9y eSBhbmQgaXRzIGNvbnRlbnRzDQpmdW5jdGlvbiBzbWRfdGh1bWJfcm1kaXIoJGRpcikgew0K CWlmIChpc19kaXIoJGRpcikpIHsNCgkJJG9iamVjdHMgPSBzY2FuZGlyKCRkaXIpOw0KCQlm b3JlYWNoICgkb2JqZWN0cyBhcyAkb2JqZWN0KSB7DQoJCQlpZiAoJG9iamVjdCAhPSAiLiIg JiYgJG9iamVjdCAhPSAiLi4iKSB7DQoJCQkJaWYgKGZpbGV0eXBlKCRkaXIuRFMuJG9iamVj dCkgPT0gImRpciIpIHNtZF90aHVtYl9ybWRpcigkZGlyLkRTLiRvYmplY3QpOyBlbHNlIHVu bGluaygkZGlyLkRTLiRvYmplY3QpOw0KCQkJfQ0KCQl9DQoJCXJlc2V0KCRvYmplY3RzKTsN CgkJcm1kaXIoJGRpcik7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIEFkZCB0aHVtYm5haWwgdGFibGUgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkDQovLyBG bGFnczogQml0IDA9QWN0aXZlIC8gMT1Dcm9wIC8gMiA9IFNoYXJwZW4NCmZ1bmN0aW9uIHNt ZF90aHVtYl90YWJsZV9pbnN0YWxsKCkgew0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10g PSAwOw0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkc3FsW10gPSAiQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZYLlNNRF9USFVNQi4iYCAoDQoJCWBuYW1lYCB2 YXJjaGFyKDMyKSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQlgd2lkdGhgIGludCg0KSBOT1Qg TlVMTCBkZWZhdWx0ICcwJywNCgkJYGhlaWdodGAgaW50KDQpIE5PVCBOVUxMIGRlZmF1bHQg JzAnLA0KCQlgcXVhbGl0eWAgdGlueWludCgyKSBOVUxMIGRlZmF1bHQgJzc1JywNCgkJYGZs YWdzYCB0aW55aW50KDIpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQlQUklNQVJZIEtFWSAo YG5hbWVgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCglpZihncHMoJ2RlYnVnJykpIHsNCgkJ ZG1wKCRzcWwpOw0KCX0NCglmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJJHJldCA9IHNh ZmVfcXVlcnkoJHFyeSk7DQoJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10rKzsNCgkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291 bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQllY2hvICI8IS0t XG4gJHFyeSBcbi0tPlxuIjsNCgkJfQ0KCX0NCg0KCS8vIEJhY2t1cCB0aGUgY3VycmVudCB0 aHVtYiBwcmVmcw0KCSRleGlzdHMgPSBzYWZlX3JvdygnKicsICd0eHBfcHJlZnMnLCAibmFt ZT0nc21kX3RodW1iX2JhY2t1cF93JyIpOw0KCWlmICghJGV4aXN0cykgew0KCQlzZXRfcHJl Zignc21kX3RodW1iX2JhY2t1cF93JywgZ2V0X3ByZWYoJ3RodW1iX3cnKSwgJ3NtZF90aHVt YicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDApOw0KCQlzZXRfcHJlZignc21kX3Ro dW1iX2JhY2t1cF9oJywgZ2V0X3ByZWYoJ3RodW1iX2gnKSwgJ3NtZF90aHVtYicsIFBSRUZf SElEREVOLCAndGV4dF9pbnB1dCcsIDEpOw0KCQlzZXRfcHJlZignc21kX3RodW1iX2JhY2t1 cF9jJywgZ2V0X3ByZWYoJ3RodW1iX2Nyb3AnKSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVO LCAndGV4dF9pbnB1dCcsIDIpOw0KDQoJCS8vIEVyYXNlIHRoZSBjdXJyZW50IHRodW1iIHBy ZWZzDQoJCXNldF9wcmVmKCd0aHVtYl93JywgJycsICdpbWFnZScsIFBSRUZfSElEREVOKTsN CgkJc2V0X3ByZWYoJ3RodW1iX2gnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KCQlz ZXRfcHJlZigndGh1bWJfY3JvcCcsICcnLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3AgdGFibGUgaWYgaW4g ZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF90aHVtYl90YWJsZV9yZW1vdmUoKSB7DQoJJHJldCA9 ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAw Ow0KCWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBU QUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9USFVNQi4gIjsgIjsNCgkJaWYoZ3BzKCdkZWJ1 ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7 DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsN CgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xP QkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxu IjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCg0K CS8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRodW1iIHByZWZzDQoJJGV4aXN0cyA9IHNhZmVf cm93KCcqJywgJ3R4cF9wcmVmcycsICJuYW1lPSdzbWRfdGh1bWJfYmFja3VwX3cnIik7DQoJ aWYgKCRleGlzdHMpIHsNCgkJc2V0X3ByZWYoJ3RodW1iX3cnLCBnZXRfcHJlZignc21kX3Ro dW1iX2JhY2t1cF93JyksICdpbWFnZScsIFBSRUZfSElEREVOKTsNCgkJc2V0X3ByZWYoJ3Ro dW1iX2gnLCBnZXRfcHJlZignc21kX3RodW1iX2JhY2t1cF9oJyksICdpbWFnZScsIFBSRUZf SElEREVOKTsNCgkJc2V0X3ByZWYoJ3RodW1iX2Nyb3AnLCBnZXRfcHJlZignc21kX3RodW1i X2JhY2t1cF9jJyksICdpbWFnZScsIFBSRUZfSElEREVOKTsNCg0KCX0NCgkvLyBFcmFzZSB0 aGUgYmFja3VwIHRodW1iIHByZWZzDQoJc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1l IElOKCdzbWRfdGh1bWJfYmFja3VwX3cnLCAnc21kX3RodW1iX2JhY2t1cF9oJywgJ3NtZF90 aHVtYl9iYWNrdXBfYycsICdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJ3BhbmVfc21k X3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJywgJ3BhbmVfc21kX3RodW1ibmFpbHNfdmlz aWJsZScpIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RodW1iX3RhYmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkgew0KCQkkdGJs cyA9IGFycmF5KFNNRF9USFVNQiA9PiA1KTsNCgkJJG91dCA9IGNvdW50KCR0YmxzKTsNCgkJ Zm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGdwcygnZGVidWcn KSkgew0KCQkJCWVjaG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBzYWZlX3No b3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xzLiIgKysi LmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkg PT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09 MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJCQllY2hv ICIrKyBUQUJMRSAiLlNNRF9USFVNQi4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVt bnMnLCBTTURfVEhVTUIpKS4iIENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVfc2hv dygnY29sdW1ucycsIFNNRF9USFVNQikpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKSB7DQoJJHBhbmVzID0gYXJyYXko J3NtZF90aHVtYm5haWxfcHJvZmlsZXMnLCAnc21kX3RodW1ibmFpbHMnKTsNCgkkcGFuZSA9 IGdwcygncGFuZScpOw0KCWlmIChpbl9hcnJheSgkcGFuZSwgJHBhbmVzKSkNCgl7DQoJCXNl dF9wcmVmKCJwYW5lX3skcGFuZX1fdmlzaWJsZSIsIChncHMoJ3Zpc2libGUnKSA9PSAndHJ1 ZScgPyAnMScgOiAnMCcpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd5ZXNub3JhZGlv JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9IGVsc2Ug ew0KCQlzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFk IFJlcXVlc3QnKSk7DQoJfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqDQovLyBQVUJMSUMg U0lERSBUQUdTDQovLyoqKioqKioqKioqKioqKioqDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYm5haWwoJGF0dHMpIHsNCglnbG9iYWwgJHRoaXNp bWFnZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyAgICAgICA9PiBAZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSwNCgkJJ2lkJyAgICAgICAgID0+ ICcnLA0KCQknbmFtZScgICAgICAgPT4gJycsDQoJCSdlc2NhcGUnICAgICA9PiAnaHRtbCcs DQoJCSd3cmFwdGFnJyAgICA9PiAnJywNCgkJJ2NsYXNzJyAgICAgID0+ICcnLA0KCQknaHRt bF9pZCcgICAgPT4gJycsDQoJCSdzdHlsZScgICAgICA9PiAnJywNCgkJJ2xpbmsnICAgICAg ID0+ICcnLA0KCQknbGlua19yZWwnICAgPT4gJycsDQoJCSdwb3BsaW5rJyAgICA9PiAwLA0K CQknYWRkX3N0YW1wJyAgPT4gMCwNCgkJJ2ZvcmNlX3NpemUnID0+ICcnLA0KCSksJGF0dHMp KTsNCg0KCWlmICgkbmFtZSkgew0KCQkkbmFtZSA9IGRvU2xhc2goJG5hbWUpOw0KCQkkcnMg PSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAibmFtZSA9ICckbmFtZScgbGltaXQgMSIp Ow0KCX0gZWxzZWlmICgkaWQpIHsNCgkJJGlkID0gKGludCkgJGlkOw0KCQkkcnMgPSBzYWZl X3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQgPSAkaWQgbGltaXQgMSIpOw0KCX0gZWxzZWlm ICgkdGhpc2ltYWdlKSB7DQoJCSRpZCA9IChpbnQpICR0aGlzaW1hZ2VbJ2lkJ107DQoJCSRy cyA9ICR0aGlzaW1hZ2U7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihnVHh0KCd1bmtu b3duX2ltYWdlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCRycykgew0KCQlleHRyYWN0 KCRycyk7DQoJCSR0aHVtYmluZm8gPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9 JyIuZG9TbGFzaCgkdHlwZSkuIiciKTsNCgkJaWYgKCR0aHVtYmluZm8pIHsNCgkJCSRwYXRo ID0gSU1QQVRILnNhbml0aXplRm9yVXJsKCR0aHVtYmluZm9bJ25hbWUnXSkuRFMuJGlkLiRl eHQ7DQoJCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJaWYgKCRlc2NhcGUgPT0g J2h0bWwnKSB7DQoJCQkJCSRhbHQgPSBodG1sc3BlY2lhbGNoYXJzKCRhbHQpOw0KCQkJCQkk Y2FwdGlvbiA9IGh0bWxzcGVjaWFsY2hhcnMoJGNhcHRpb24pOw0KCQkJCX0NCg0KCQkJCSRt ZXRhWydhbHQnXSA9ICRhbHQ7DQoJCQkJJGZvcmNlX3NpemUgPSBkb19saXN0KCRmb3JjZV9z aXplKTsNCgkJCQlpZiAoaW5fYXJyYXkoJ3dpZHRoJywgJGZvcmNlX3NpemUpKSB7DQoJCQkJ CSRtZXRhWydmb3JjZXcnXSA9IDE7DQoJCQkJfQ0KCQkJCWlmIChpbl9hcnJheSgnaGVpZ2h0 JywgJGZvcmNlX3NpemUpKSB7DQoJCQkJCSRtZXRhWydmb3JjZWgnXSA9IDE7DQoJCQkJfQ0K CQkJCWlmICgkYWRkX3N0YW1wID09IDApIHsgJG1ldGFbJ3N0YW1wJ10gPSAxOyB9IC8vIE5l Z2F0aXZlIGxvZ2ljIHNpbmNlIHdlIHdhbnQgdGhlIHN0YW1wIG9uIGJ5IGRlZmF1bHQgZm9y IHRoZSBhZG1pbiBzaWRlDQoJCQkJaWYgKCRjYXB0aW9uKSB7ICRtZXRhWyd0aXRsZSddID0g JGNhcHRpb247IH0NCgkJCQlpZiAoJGh0bWxfaWQgJiYgISR3cmFwdGFnKSB7ICRtZXRhWydp ZCddID0gJGh0bWxfaWQ7IH0NCgkJCQlpZiAoJGNsYXNzICYmICEkd3JhcHRhZykgeyAkbWV0 YVsnY2xhc3MnXSA9ICRjbGFzczsgfSBlbHNlIHsgJGNsYXNzPSR0eXBlOyB9DQoJCQkJaWYg KCRzdHlsZSkgeyAkbWV0YVsnc3R5bGUnXSA9ICRzdHlsZTsgfQ0KDQoJCQkJJG91dCA9IHNt ZF90aHVtYl9pbWcoJHRodW1iaW5mbywgJHJzLCAkbWV0YSk7DQoNCgkJCQlpZiAoJGxpbmsp IHsNCgkJCQkJJG91dCA9IGhyZWYoJG91dCwgaW1hZ2VzcmN1cmwoJGlkLCAkZXh0KSwgKCFl bXB0eSgkbGlua19yZWwpID8gJyByZWw9IicuJGxpbmtfcmVsLiciJyA6ICcnKS4nIHRpdGxl PSInLiRjYXB0aW9uLiciJyk7DQoJCQkJfSBlbHNlaWYgKCRwb3BsaW5rKSB7DQoJCQkJCSRv dXQgPSAnPGEgaHJlZj0iJy5pbWFnZXNyY3VybCgkaWQsICRleHQpLiciJy4NCgkJCQkJCScg b25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsICcuDQoJ CQkJCQknXCd3aWR0aD0nLiR3LicsIGhlaWdodD0nLiRoLicsIHNjcm9sbGJhcnMsIHJlc2l6 YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+Jy4kb3V0Lic8L2E+JzsNCgkJCQl9DQoNCgkJCQly ZXR1cm4gKCR3cmFwdGFnKSA/IGRvVGFnKCRvdXQsICR3cmFwdGFnLCAkY2xhc3MsICcnLCAk aHRtbF9pZCkgOiAkb3V0Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJdHJpZ2dlcl9lcnJvcihnVHh0 KCd1bmtub3duX2ltYWdlJykpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9pZl90aHVtYm5haWwoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAk dGhpc2ltYWdlOw0KCWFzc2VydF9pbWFnZSgpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ3R5cGUnID0+IEBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpLA0K CSksJGF0dHMpKTsNCg0KCSR0aHVtYmluZm8gPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwg Im5hbWU9JyIuZG9TbGFzaCgkdHlwZSkuIiciKTsNCgkkcmV0ID0gZmFsc2U7DQoJaWYgKCR0 aHVtYmluZm8pIHsNCgkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHRodW1iaW5m b1snbmFtZSddKS5EUy4kdGhpc2ltYWdlWydpZCddLiR0aGlzaW1hZ2VbJ2V4dCddOw0KCQkk cmV0ID0gZmlsZV9leGlzdHMoJHBhdGgpOw0KCX0NCglyZXR1cm4gcGFyc2UoRXZhbEVsc2Uo JHRoaW5nLCAkcmV0KSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g UGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1 aXJlZA0KLy8gVE9ETzogbWFrZSB0aGVzZSBpbnRvIGEgdGV4dHBhY2sgd2hlbiBwbHVnaW4g Y29tcG9zZXIgc3VwcG9ydHMgdGhlbQ0KZnVuY3Rpb24gc21kX3RodW1iX2dUeHQoJHdoYXQs ICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdzbWRfdGh1bWJfYWN0 aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknc21kX3RodW1iX2FsbF9zaXplcycgPT4gJ0FsbCBz aXplcycsDQoJCSdzbWRfdGh1bWJfYWxsX3RodW1icycgPT4gJ0NyZWF0ZScsDQoJCSdzbWRf dGh1bWJfYmF0Y2hfbGVnZW5kJyA9PiAnQ3JlYXRlIC8gcmVjcmVhdGUgdGh1bWJuYWlscycs DQoJCSdzbWRfdGh1bWJfYmF0Y2hfcHJlYW1ibGUnID0+ICdGb3IgYWxsIGFjdGl2ZSBwcm9m aWxlczogJywNCgkJJ3NtZF90aHVtYl9idG5fcG5sJyA9PiAnUHJvZmlsZXMnLA0KCQknc21k X3RodW1iX2J0bl90b29sc19wcmVmcycgPT4gJ1Rvb2xzIC8gUHJlZnMnLA0KCQknc21kX3Ro dW1iX2J0bl90b29scycgPT4gJ1Rvb2xzJywNCgkJJ3NtZF90aHVtYl9ieUFsbCcgPT4gJ0Fs bCcsDQoJCSdzbWRfdGh1bWJfYnlVc3InID0+ICdCeSBhdXRob3InLA0KCQknc21kX3RodW1i X2J5Q2F0JyA9PiAnQnkgY2F0ZWdvcnknLA0KCQknc21kX3RodW1iX2J5U2VsJyA9PiAnV2l0 aCBzZWxlY3RlZCcsDQoJCSdzbWRfdGh1bWJfY3JlYXRlJyA9PiAnQ3JlYXRpb24nLA0KCQkn c21kX3RodW1iX2NyZWF0ZV9ncm91cF9jb25maXJtJyA9PiAnUmVhbGx5IGNyZWF0ZSB0aHVt Ym5haWxzIGZvciBBTEwgYWN0aXZlIHByb2ZpbGVzPyBBbnkgZXhpc3RpbmcgdGh1bWJzIHdp bGwgYmUgb3ZlcndyaXR0ZW4uJywNCgkJJ3NtZF90aHVtYl9kZWxldGUnID0+ICdEZWxldGlv bicsDQoJCSdzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRlIHBy b2ZpbGUge25hbWV9PyBJdCB3aWxsIGRlbGV0ZSBBTEwgdGh1bWJuYWlscyBvZiB0aGlzIHR5 cGUuJywNCgkJJ3NtZF90aHVtYl9uZXcnID0+ICdOZXcgcHJvZmlsZScsDQoJCSdzbWRfdGh1 bWJfcHJlZnMnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdzbWRfdGh1bWJfcHJvZmlsZV9kZWxl dGVkJyA9PiAnUHJvZmlsZSAie25hbWV9IiBkZWxldGVkJywNCgkJJ3NtZF90aHVtYl9wcm9m aWxlX2V4aXN0cycgPT4gJ1Byb2ZpbGUgIntuYW1lfSIgYWxyZWFkeSBleGlzdHMnLA0KCQkn c21kX3RodW1iX3Byb2ZpbGVfaGVhZGluZycgPT4gJ1RodW1ibmFpbCBwcm9maWxlcycsDQoJ CSdzbWRfdGh1bWJfcHJvZmlsZV9wcmVmdG9vbF9oZWFkaW5nJyA9PiAnVGh1bWJuYWlsIHRv b2xzIGFuZCBwcmVmcycsDQoJCSdzbWRfdGh1bWJfcHJvZmlsZV90b29sX2hlYWRpbmcnID0+ ICdUaHVtYm5haWwgdG9vbHMnLA0KCQknc21kX3RodW1iX3F1YWxpdHknID0+ICdRdWFsaXR5 ICglKScsDQoJCSdzbWRfdGh1bWJfc2hhcnBlbicgPT4gJ1NoYXJwZW4nLA0KCQknc21kX3Ro dW1iX3RhYmxlc19ub3RfaW5zdGFsbGVkJyA9PiAnVGFibGVzIG5vdCBpbnN0YWxsZWQ6IHRy eSByZWluc3RhbGxpbmcgdGhlIHBsdWdpbicsDQoJCSdzbWRfdGh1bWJfdGh1bWJuYWlsX2hl YWRpbmcnID0+ICdUaHVtYm5haWxzJywNCgkJJ3NtZF90aHVtYl90eHBfYXV0b19yZXBsYWNl JyA9PiAnUmVjcmVhdGUgdGh1bWJuYWlscyBvbiByZS11cGxvYWQgb2YgbWFpbiBpbWFnZTog JywNCgkJJ3NtZF90aHVtYl90eHBfZGVmYXVsdF9zeW5jJyA9PiAnS2VlcCBUWFAgdGh1bWJu YWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlIG9uOiAnLA0KCQknc21kX3RodW1i X3VwbG9hZCcgPT4gJ1JlcGxhY2Ugc2VsZWN0ZWQgdGh1bWJuYWlsJywNCgkpOw0KCXJldHVy biBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtz OjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMiI7czo0OiJoZWxwIjtzOjE4 NTM3OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF90aHVtYm5haWw8L2gxPgoKCTxo Mj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5Bc3NpZ24gYW55IG51bWJlciBvZiB0aHVt Ym5haWxzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgaW1hZ2Vz PC9saT4KCQk8bGk+QmF0Y2ggYXNzaWduIHRodW1ibmFpbHMgdG8gZXhpc3RpbmcgaW1hZ2Vz PC9saT4KCQk8bGk+U2V0IG9uZSB0aHVtYm5haWwgc2l6ZSBhcyBkZWZhdWx0PC9saT4KCQk8 bGk+RGlzcGxheSBhbnkgb2YgdGhlIHRodW1ibmFpbCBzaXplcyBvbiB5b3VyIHNpdGU8L2xp PgoJCTxsaT5LZWVwIHRodW1icyBpbiBzeW5jIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnMgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRp b25hbCB0aHVtYm5haWwgY2hlY2sgYXZhaWxhYmxlPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhv ciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gdGhl IGJldGEgdGVzdCBjcmV3IHdobyBvZmZlcmVkIGZlYXR1cmUgYW5kIHdvcmtmbG93IGFkdmlj ZSwgZXNwZWNpYWxseSB0aGVib21ic2l0ZSwgamFrb2IsIGpzdHViYnMgYW5kIG1hbmlxdWku PC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1cGdyYWRpbmcgLyB1bmluc3RhbGxhdGlvbjwv aDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgUEhQNSsgYW5kIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMy4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1 Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lu cy8xMTg2L3NtZF90aHVtYm5haWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0 ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1p biAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBW aXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9w aWMucGhwP2lkPTM0MzY3Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8g cmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4K Cgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5XaGVuIHVwZ3JhZGluZyBmcm9pbSB2MC4xeCB0byB2 MC4yMCwgeW91ciBwcmVmZXJlbmNlcyBmb3IgPGVtPktlZXAgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gdGh1bWJuYWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlPC9l bT4gd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgdmlzaXQgdGhlIDxlbT5Ub29scy9QcmVmczwv ZW0+IGFyZWEgdG8gcmVpbnN0YXRlIHRoZSBiZWhhdmlvdXIgeW91IGRlc2lyZS48L3A+CgoJ PHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBw YWdlLjwvcD4KCgk8aDI+VXNhZ2UgJiM4MjEyOyBhZG1pbiBzaWRlPC9oMj4KCgk8cD5WaXNp dCB0aGUgQ29udGVudC0mZ3Q7SW1hZ2VzIHRhYi4gQWJvdmUgdGhlIGxpc3Qgb2YgaW1hZ2Vz IGlzIGFuIGFyZWEgbGFiZWxsZWQgPGVtPlRodW1ibmFpbCBQcm9maWxlczwvZW0+LiBDbGlj ayBpdCB0byByZXZlYWwgdGhlIGNvbnRyb2wgcGFuZWwuIFlvdSBjYW4gdG9nZ2xlIHRoaXMg cGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVhZGluZy48L3A+CgoJPHA+WW91 IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBwcm9maWxlIHRvIGJlZ2luIHdpdGgsIHNvIGNs aWNrIHRoZSA8ZW0+TmV3IHByb2ZpbGU8L2VtPiBidXR0b24uIFRoaXMgd2lsbCByZXZlYWwg ZWRpdCBib3hlcyB3aGVyZSB5b3UgY2FuIGVudGVyOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJv bmc+TmFtZTwvc3Ryb25nPjogc29tZSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGlzIHRodW1i bmFpbCBkaW1lbnNpb24uIFlvdSBhcmUgbGltaXRlZCB0byB1c3VhbCBub24td2VpcmQgY2hh cmFjdGVycyBpbiB0aGUgbmFtZTwvbGk+CgkJPGxpPjxzdHJvbmc+V2lkdGg8L3N0cm9uZz46 IHRodW1ibmFpbCB3aWR0aCwgaW4gcGl4ZWxzLiBJZiBsZWZ0IGJsYW5rIChvciBzZXQgdG8g MCkgYW5kIGhlaWdodCBpcyBzcGVjaWZpZWQsIHRoZSB3aWR0aCB3aWxsIGJlIGNvbXB1dGVk IGluIHByb3BvcnRpb24gdG8gdGhlIGhlaWdodDwvbGk+CgkJPGxpPjxzdHJvbmc+SGVpZ2h0 PC9zdHJvbmc+OiB0aHVtYm5haWwgaGVpZ2h0LCBpbiBwaXhlbHMuIElmIGxlZnQgYmxhbmsg KG9yIHNldCB0byAwKSBhbmQgd2lkdGggaXMgc3BlY2lmaWVkLCB0aGUgaGVpZ2h0IHdpbGwg YmUgY29tcHV0ZWQgaW4gcHJvcG9ydGlvbiB0byB0aGUgd2lkdGg8L2xpPgoJCTxsaT48c3Ry b25nPlF1YWxpdHkgKCUpPC9zdHJvbmc+OiBUaGUgcXVhbGl0eSBvZiB0aGUgcmVzdWx0aW5n IHRodW1ibmFpbC4gR2VuZXJhbGx5IG9ubHkgb2YgdXNlIGZvciBqcGcgb3IgcG5nKDI0KSBp bWFnZXMuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBiZXR0ZXIgdGhlIHF1YWxpdHkgYW5k IHRoZSBiaWdnZXIgdGhlIGZpbGUgc2l6ZS4gRGVmYXVsdDogNzU8L2xpPgoJCTxsaT48c3Ry b25nPkNyb3A8L3N0cm9uZz46IHdoZXRoZXIgdG8gY3JvcCB0aGUgaW1hZ2Ugd2hlbiB0aGUg dGh1bWJuYWlsIGlzIGNyZWF0ZWQsIG9yIHNjYWxlIGl0IHRvIGZpdDwvbGk+CgkJPGxpPjxz dHJvbmc+U2hhcnBlbjwvc3Ryb25nPjogd2hldGhlciB0byBhcHBseSBhIHNoYXJwZW5pbmcg ZmlsdGVyIHRvIHRoZSB0aHVtYm5haWwgd2hlbiBpdCBpcyBjcmVhdGVkLiBVc2VmdWwgZm9y IHZlcnkgc21hbGwgaW1hZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5BY3RpdmU8L3N0cm9uZz46 IEVuYWJsZS9kaXNhYmxlIHRoaXMgdGh1bWJuYWlsIHNpemUgc28gaXQgd2lsbC93b24mIzgy MTc7dCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aGVuIHRoZSBuZXh0IGltYWdlIGlz IHVwbG9hZGVkLiBDbGljayB0aGUgY2hlY2tib3ggdG8gaW5zdGFudGx5IHN3aXRjaCB0aGUg cHJvZmlsZSBvbi9vZmYuIENsaWNrIHRoZSAmIzgyMTY7QWN0aXZlJiM4MjE3OyB3b3JkIGlu IHRoZSBoZWFkaW5nIHJvdyB0byB0b2dnbGUgdGhlIHN0YXR1cyBvZiBhbGwgcHJvZmlsZXMu IE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgZ292ZXJucyBob3cgdGhlIDxhIGhyZWY9IiNzbWRf dGh1bWJfY3JlYXRlIj5BbGwgc2l6ZXM8L2E+IGRyb3Bkb3duIGVudHJ5IGludGVyYWN0cyB3 aXRoIHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYW5kIDxlbT5EZWxldGU8L2VtPiBidXR0b25zPC9s aT4KCQk8bGk+PHN0cm9uZz5EZWZhdWx0PC9zdHJvbmc+OiBzZXQgdGhpcyB0aHVtYm5haWwg cHJvZmlsZSBhcyB0aGUgZGVmYXVsdC4gVGhlIGRlZmF1bHQgaW1hZ2Ugd2lsbCBiZSBkaXNw bGF5ZWQgaW4gdGhlIEltYWdlcyBsaXN0IGFuZCB3aWxsIGFsc28gYmUgdXNlZCBhcyB0aGUg ZGVmYXVsdCBzaXplIHRvIGJlIGRpc3BsYXllZCB1c2luZyA8Y29kZT4mbHQ7dHhwOnNtZF90 aHVtYm5haWwvJmd0OzwvY29kZT4uIElmIHRoZSBvcHRpb24gdG8gPGEgaHJlZj0iI3NtZF90 aHVtYl9wcmVmcyI+c3luYyB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4 MjE3O3MgdGh1bWJzPC9hPiBpcyBvbiwgaXQgd2lsbCBhbHNvIGJlY29tZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHN0YW5kYXJkIChidWlsdC1pbikgdGh1bWJu YWlsIHNpemUgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQ8L2xpPgoJPC91bD4KCgk8cD5PbmNl IHlvdSYjODIxNzt2ZSBjb25maWd1cmVkIHlvdXIgcHJvZmlsZSwgY2xpY2sgU2F2ZSB0byBz dG9yZSBpdC4gWW91IGNhbiBhbHdheXMgZWRpdCBpdCBhZ2FpbiBieSBjbGlja2luZyBpdHMg bmFtZS4gR28gYWhlYWQgYW5kIGNyZWF0ZSBzb21lIG1vcmUgcHJvZmlsZXMgZm9yIHRodW1i bmFpbHMgb2YgZGlmZmVyZW50IHNpemVzL3BhcmFtZXRlcnMuIElmIHlvdSB3aXNoIHRvIGRl bGV0ZSBhIHByb2ZpbGUsIGhpdCB0aGUgPGVtPltEZWxldGVdPC9lbT4gYnV0dG9uIGFuZCBj b25maXJtLiA8c3Ryb25nPkFsbCB0aHVtYm5haWxzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBy b2ZpbGUgd2lsbCBiZSBkZWxldGVkPC9zdHJvbmc+LjwvcD4KCgk8cD5BdCB0aGlzIHBvaW50 LCBubyB0aHVtYm5haWxzIGhhdmUgYmVlbiBjcmVhdGVkLiBMZXQmIzgyMTc7cyByZWN0aWZ5 IHRoYXQuPC9wPgoKCTxoMyBpZD0ic21kX3RodW1iX2NyZWF0ZSI+Q3JlYXRpbmcgdGh1bWJu YWlsczwvaDM+CgoJPHA+UGljayBvbmUgb2YgeW91ciBpbWFnZXMgYW5kIGNsaWNrIHRvIGVk aXQgaXQuPC9wPgoKCTxwPkJlbmVhdGggdGhlIG1haW4gcGljdHVyZSB5b3Ugd2lsbCBzZWUg YW4gYXJlYSBsYWJlbGxlZCA8ZW0+VGh1bWJuYWlsczwvZW0+LiBZb3UgY2FuIHRvZ2dsZSB0 aGlzIHBhbmVsIG9uIGFuZCBvZmYgYnkgY2xpY2tpbmcgdGhlIGhlYWRpbmcuPC9wPgoKCTxw Pkluc2lkZSB0aGUgcGFuZWwgaXMgYSBzaW1wbGUgc2VsZWN0IGxpc3QgY29udGFpbmluZyBv bmUgZW50cnkgZm9yIGVhY2ggdGh1bWJuYWlsIHByb2ZpbGUgeW91IGhhdmUgY29uZmlndXJl ZCwgcGx1cyB0aGUgc3BlY2lhbCBlbnRyeSA8ZW0+QWxsIHNpemVzPC9lbT4uIFlvdSBjYW4g c2VsZWN0IG9uZSBvZiB0aGVzZSBlbnRyaWVzIGFuZCBjbGljayA8ZW0+Q3JlYXRlPC9lbT4g dG8gY3JlYXRlIHRodW1ibmFpbChzKSBpbiB0aGUgc2VsZWN0ZWQgc2l6ZSBvciBoaXQgPGVt PkRlbGV0ZTwvZW0+IHRvIHJlbW92ZSB0aGUgc2VsZWN0ZWQgdGh1bWJuYWlsKHMpLjwvcD4K Cgk8cD5PbmNlIGNyZWF0ZWQsIHRoZSB0aHVtYm5haWxzIGFwcGVhciBpbiB0aGUgcGFuZWw7 IHJlbWVtYmVyIHRoZXkgY2FuIGJlIHR1Y2tlZCBhd2F5IGlmIHlvdSBkb24mIzgyMTc7dCB3 YW50IHRvIGxvb2sgYXQgdGhlbS48L3A+CgoJPHA+SWYgeW91IHNlbGVjdCA8ZW0+QWxsIHNp emVzPC9lbT4gYW5kIGhpdCA8ZW0+Q3JlYXRlPC9lbT4sIHlvdSB3aWxsIGdldCBvbmUgdGh1 bWJuYWlsIGZvciBlYWNoIGFjdGl2ZSBwcm9maWxlLiBTaW1pbGFybHksIGlmIHlvdSBoaXQg PGVtPkRlbGV0ZTwvZW0+IGFueSB0aHVtYm5haWxzIHN0b3JlZCBhZ2FpbnN0IGFuIGFjdGl2 ZSBwcm9maWxlIGZvciB0aGUgY3VycmVudCBpbWFnZSB3aWxsIGJlIHJlbW92ZWQuIEJ5IHRv Z2dsaW5nIGNlcnRhaW4gdGh1bWJuYWlsIHByb2ZpbGVzIG9uL29mZiB5b3UgY2FuIGNvbnRy b2wgd2hpY2ggb25lcyBhcmUgY3JlYXRlZCBvciBkZWxldGVkLjwvcD4KCgk8cD5CeSBkZWZh dWx0OjwvcD4KCgk8dWw+CgkJPGxpPndoZW4geW91IHVwbG9hZCBhIG5ldyBpbWFnZSwgdGh1 bWJuYWlscyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgYW55IGFjdGl2ZSBw cm9maWxlczwvbGk+CgkJPGxpPndoZW4geW91IHJlcGxhY2UgYW4gZXhpc3RpbmcgaW1hZ2Us IHRodW1ibmFpbHMgd2lsbCBvbmx5IGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgYWN0 aXZlIHByb2ZpbGVzIGlmIHRodW1icyA8ZW0+ZG8gbm90PC9lbT4gYWxyZWFkeSBleGlzdC4g VGhpcyBvcHRpb24gY2FuIGJlIGFsdGVyZWQgd2l0aCB0aGUgPGEgaHJlZj0iI3NtZF90aHVt Yl9wcmVmcyI+cHJlZnM8L2E+PC9saT4KCTwvdWw+CgoJPHA+Tm90ZSB0aGF0IGlmIHlvdSB1 c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBtdWx0aS1lZGl0IHRv b2wgdG8gZGVsZXRlIGltYWdlcywgPHN0cm9uZz5hbGw8L3N0cm9uZz4gY29ycmVzcG9uZGlu ZyB0aHVtYm5haWxzIGZvciB0aGUgc2VsZWN0ZWQgaW1hZ2VzIChpbmNsdWRpbmcgaW5hY3Rp dmUgb25lcykgd2lsbCBiZSByZW1vdmVkLjwvcD4KCgk8aDMgaWQ9InNtZF90aHVtYl9jdXN0 b20iPkN1c3RvbSB0aHVtYm5haWxzPC9oMz4KCgk8cD5JZiB5b3UgcHJlZmVyIHRvIG1ha2Ug eW91ciBvd24gdGh1bWJzIGluIGFuIGV4dGVybmFsIHByb2dyYW0sIHlvdSBjYW4gc3RpbGwg c2V0IHVwIHRoZSBwcm9maWxlcyBhcyBub3JtYWwgYnV0IGluc3RlYWQgb2YgY2xpY2tpbmcg PGVtPkNyZWF0ZTwvZW0+IGluIHRoZSBJbWFnZSBFZGl0IHNjcmVlbiwgeW91IGNhbiBwaWNr IGEgcHJvZmlsZSBzaXplIGZyb20gdGhlIGRyb3Bkb3duIGFuZCB1c2UgdGhlIGZpbGUgcGlj a2VyIGZhY2lsaXR5IChCcm93c2UmIzgyMzA7IC8gQ2hvb3NlJiM4MjMwOykgdG8gc2VsZWN0 IGEgdGh1bWJuYWlsIGZyb20geW91ciBoYXJkIGRyaXZlLiBXaGVuIHlvdSBjbGljayA8ZW0+ VXBsb2FkPC9lbT4gdGhlIGltYWdlIHdpbGwgYmUgaW5zZXJ0ZWQgYWdhaW5zdCB0aGUgc2Vs ZWN0ZWQgcHJvZmlsZS48L3A+CgoJPHA+QXQgYW55IHRpbWUgeW91IGNhbiBjbGljayBvbmUg b2YgdGhlIHRodW1ibmFpbHMgKG9yIHNlbGVjdCBhIHNpemUgZnJvbSB0aGUgZHJvcGRvd24p IGFuZCBjaG9vc2UgZm9yIGFub3RoZXIgaW1hZ2UgdG8gcmVwbGFjZSB0aGUgZXhpc3Rpbmcg dGh1bWJuYWlsICYjODIxMjsgZXZlbiBvbmVzIHRoYXQgaGF2ZSBiZWVuIGF1dG8tY3JlYXRl ZC4gU29tZSB0aGluZ3MgdG8gbm90ZSBhYm91dCB0aGlzIGZlYXR1cmU6PC9wPgoKCTx1bD4K CQk8bGk+dGhlIHRodW1ibmFpbCBtdXN0IGJlIG9mIHRoZSBzYW1lIGZpbGUgdHlwZSBhcyB0 aGUgb3JpZ2luYWwgaW1hZ2Ugb3IgdGhlIHVwbG9hZCB3aWxsIGJlIGlnbm9yZWQ8L2xpPgoJ CTxsaT55b3UgY2FuIGNsaWNrIGEgaGlnaGxpZ2h0ZWQgaW1hZ2UgdG8gZGVzZWxlY3QgaXQ8 L2xpPgoJCTxsaT55b3UgY2Fubm90IEJyb3dzZSBmb3IgYW4gaW1hZ2UgKHRoZSBmaWxlIHVw bG9hZCBib3ggaXMgZ3JleWVkIG91dCkgdW5sZXNzIHlvdSBoYXZlIGNob3NlbiBvbmUgcHJv ZmlsZTwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0ic21kX3RodW1iX2JhdGNoIj5CYXRjaCB0aHVt Ym5haWwgY3JlYXRpb248L2gzPgoKCTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgdGh1bWJuYWls cyBlbi1tYXNzZS4gQ2xpY2sgdGhlIDxlbT5Ub29sczwvZW0+IGJ1dHRvbiAobGFiZWxsZWQg JiM4MjE2OzxlbT5Ub29scyAvIFByZWZzPC9lbT4mIzgyMTc7IGlmIHlvdSBoYXZlIHN1ZmZp Y2llbnQgcmlnaHRzKSBpbiB0aGUgdG9wLXJpZ2h0IGhhbmQgY29ybmVyIG9mIHRoZSBzbWRf dGh1bWJuYWlsIGNvbnRyb2wgcGFuZWwuIEZyb20gdGhlcmUgeW91IHdpbGwgc2VlIGFuIGFy ZWEgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSB0aHVtYm5haWxzIGZvcjo8L3A+CgoJPHVs PgoJCTxsaT5Pbmx5IHRoZSBzZWxlY3RlZCBpbWFnZXMgKHRoZSBjaGVja2JveGVzIG5leHQg dG8gZWFjaCBpbWFnZSk8L2xpPgoJCTxsaT5BbGwgaW1hZ2VzIG9mIGEgcGFydGljdWxhciBj YXRlZ29yeTwvbGk+CgkJPGxpPkFsbCBpbWFnZXMgdXBsb2FkZWQgYnkgYSBwYXJ0aWN1bGFy IHVzZXI8L2xpPgoJCTxsaT5BbGwgaW1hZ2VzPC9saT4KCTwvdWw+CgoJPHA+QWZ0ZXIgc2Vs ZWN0aW5nIHRoZSBkZXNpcmVkIG9wdGlvbiAoYW5kIGlmIHlvdSBjaG9vc2UgY2F0ZWdvcnkg b3IgYXV0aG9yLCBzZWxlY3Qgb25lIG9mIHRoZSBlbnRyaWVzIGZyb20gdGhlIHNlY29uZGFy eSBsaXN0IHRoYXQgYXBlYXJzKSwgaGl0IDxlbT5DcmVhdGU8L2VtPi4gT25jZSB5b3UgY29u ZmlybSB5b3VyIGFjdGlvbiwgdGhlIHBsdWdpbiB3aWxsIGdvIGF3YXkgYW5kIGNyZWF0ZSB0 aHVtYm5haWxzIGZvciBldmVyeSBhY3RpdmUgcHJvZmlsZSBmb3IgYWxsIGltYWdlcyB0aGF0 IG1hdGNoIHlvdXIgY3JpdGVyaWEuIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gZ2VuZXJhdGUg dGh1bWJzIGZvciB5b3VyIGV4aXN0aW5nIGltYWdlcy4gTm90ZSB0aGF0IGlmIHlvdSBjaG9v c2UgdGhlIGZpcnN0IChlbXB0eSkgY2F0ZWdvcnkgZW50cnksIHRoZW4gYWxsIGltYWdlcyB0 aGF0IGhhdmUgbm90IGJlZW4gYXNzaWduZWQgYSBjYXRlZ29yeSBhcmUgbWFuaXB1bGF0ZWQu PC9wPgoKCTxwPkJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGlzIHRvb2wgJiM4MjEyOyBl c3BlY2lhbGx5IHdpdGggbGFyZ2UgaW1hZ2UgcG9vbHMgJiM4MjEyOyB0aGUgcHJvY2VzcyBp cyBkb25lIGFzIGEgYmFja2dyb3VuZCB0YXNrIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpB WDwvc3Bhbj4uIEFmdGVyIGNsaWNraW5nIHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYnV0dG9uIChh bmQgY29uZmlybWluZyB5b3UgYXJlIHN1cmUpIGEgY291bnRlciB3aWxsIGFwcGVhciBpbiB0 aGUgdG9wLXJpZ2h0IG9mIHRoZSBwcmVmcyBwYW5lbCBzaG93aW5nIGhvdyBtYW55IGltYWdl cyBpdCBoYXMgcHJvY2Vzc2VkIG91dCBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGltYWdlcyBp biB0aGUgc2V0LiBXaGVuIGl0JiM4MjE3O3MgZG9uZSwgaWYgeW91IHRoZW4gcmVmcmVzaCB5 b3VyIEltYWdlcyB0YWIgKGUuZy4gY2xpY2sgdG8gdGhlIDxlbT5Qcm9maWxlczwvZW0+IHBh bmUpIHlvdSB3aWxsIHNlZSB5b3VyIGNob3NlbiBkZWZhdWx0IHRodW1ibmFpbHMgaW4gdGhl IGxpc3QgJiM4MjEyOyBhc3N1bWluZyB5b3UmIzgyMTc7dmUgc2V0IG9uZSBhcyBkZWZhdWx0 LjwvcD4KCgk8aDMgaWQ9InNtZF90aHVtYl9wcmVmcyI+UHJlZmVyZW5jZXM8L2gzPgoKCTxw PklmIHlvdSBoYXZlIHN1ZmZpY2llbnQgcHJpdmlsZWdlcywgaW4gdGhlIGxvd2VyIHBvcnRp b24gb2YgdGhlIDxlbT5Ub29sczwvZW0+IHBhbmVsIGFyZSBzb21lIG9wdGlvbnMgdGhhdCBn b3Zlcm4gaG93IHRodW1ibmFpbHMgYXJlIGNyZWF0ZWQgZm9yIGFsbCB1c2Vycy4gVGhlcmUg aXMgbm8gJiM4MjE2O1NhdmUmIzgyMTc7IGFjdGlvbiBoZXJlOiB0aGUgY2hlY2ttYXJrcyBh cmUgc3RvcmVkIGluIHJlYWwtdGltZSBhbmQgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQg c3RhdGUuPC9wPgoKCTxoND5LZWVwIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRo dW1ibmFpbHMgaW4gc3luYyB3aXRoIGRlZmF1bHQgcHJvZmlsZTwvaDQ+CgoJPHA+KFRoaXMg b3B0aW9uIG9ubHkgYXBwZWFycyBpZiB5b3UgaGF2ZSBzZXQgYSBwcm9maWxlIGFzIGRlZmF1 bHQpPC9wPgoKCTxwPk9yZGluYXJpbHksIHNtZF90aHVtYm5haWwgd29ya3MgaW5kZXBlbmRl bnRseSBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRodW1icy4g SWYgeW91IGRpc2FibGUgdGhlIHBsdWdpbiB5b3UmIzgyMTc7bGwgc2VlIHRoYXQgZXZlcnl0 aGluZyBnb2VzIGJhY2sgdG8gaG93IGl0IHdhcyBiZWZvcmUgeW91IGluc3RhbGxlZCBpdC4g VGhpcyBpcyBncmVhdCBiZWNhdXNlIHlvdXIgaGFyZC1ncmFmdCBpc24mIzgyMTc7dCBsb3N0 IGlmIHlvdSBoYXZlIHVwbG9hZGVkIHlvdXIgb3duIHRodW1icy48L3A+CgoJPHA+QnV0IGlm IHlvdSBzdGFydCBjcmVhdGluZyB0aHVtYnMgd2l0aCB0aGUgcGx1Z2luIHlvdSB3aWxsIG5v dGljZSB0aGF0IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgYnVpbHQg aW4gdGFncyBzdWNoIGFzIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZV9pbWFnZSB0aHVtYm5haWw9 JnF1b3Q7MSZxdW90OyAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6dGh1bWJuYWls IC8mZ3Q7PC9jb2RlPiB3b24mIzgyMTc7dCB3b3JrIGZvciBuZXdlciB0aHVtYm5haWxzLiBU aGlzIG1pZ2h0IGJlIGNvbmZ1c2luZyBzbywgaWYgeW91IHByZWZlciwgeW91IGNhbiBvcHQg dG8gaGF2ZSBzbWRfdGh1bWJuYWlsIHVwZGF0ZSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IHRodW1ibmFpbHMgYXQgdGhlIHNhbWUgdGltZS48L3A+CgoJPHA+QnkgdGlj a2luZyBlaXRoZXIgb2YgdGhlIGNoZWNrYm94ZXMsIHRoZSBwbHVnaW4gd2lsbCB0cmFjayBh bnkgY2hhbmdlcyA8c3Ryb25nPnRvIHRoZSBkZWZhdWx0IHByb2ZpbGU8L3N0cm9uZz4gYW5k IG1pbWljIHRoZW0gd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztz IHRodW1ibmFpbHMuIFRoaXMgaGFzIGEgZmV3IGVmZmVjdHMgd29ydGggaGlnaGxpZ2h0aW5n LjwvcD4KCgk8cD5XaGVuIHRoZSA8ZW0+Q3JlYXRpb248L2VtPiBjaGVja2JveCBpcyB0aWNr ZWQ6PC9wPgoKCTxvbD4KCQk8bGk+aWYgeW91IGJhdGNoIGNyZWF0ZSB0aHVtYnMsIHVwbG9h ZCBhIG5ldyBpbWFnZSwgb3IgcmVwbGFjZSBhbiBleGlzdGluZyBpbWFnZSwgYSBuZXcgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlsIHdpbGwgYmUgY3JlYXRlZCBh dCB0aGUgZGVmYXVsdCBzaXplLiBBbnkgZXhpc3RpbmcgdGh1bWJzIHdpbGwgYmUgb3Zlcndy aXR0ZW48L2xpPgoJCTxsaT5pZiB5b3UgY2hhbmdlIGRlZmF1bHQgcHJvZmlsZSwgYW55IDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRodW1ibmFpbHMgdGhhdCBoYXZlIGJlZW4g Y3JlYXRlZCB3aWxsIHJlbWFpbiBhdCB0aGUgcHJldmlvdXMgc2l6ZS4gT25seSB3aGVuIHlv dSBzdGFydCBjcmVhdGluZywgdXBsb2FkaW5nIG9yIHJlcGxhY2luZyBpbWFnZXMgd2lsbCB0 aGUgbmV3IHRodW1ibmFpbCBzaXplcyBiZSBjcmVhdGVkPC9saT4KCTwvb2w+CgoJPHA+V2hl biB0aGUgPGVtPkRlbGV0aW9uPC9lbT4gY2hlY2tib3ggaXMgdGlja2VkOjwvcD4KCgk8b2w+ CgkJPGxpPmlmIHlvdSBkZWxldGUgYSBzaW5nbGUgdGh1bWIgdGhhdCBjb3JyZXNwb25kcyB0 byB0aGUgZGVmYXVsdCBwcm9maWxlLCBib3RoIHRoZSBwcm9maWxlIHRodW1iIGFuZCA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRodW1iIHdpbGwgYmUgZGVsZXRl ZDwvbGk+CgkJPGxpPmlmIHlvdSBkZWxldGUgYW4gZW50aXJlIHByb2ZpbGUsIGFsbCBpdHMg dGh1bWJuYWlscyA8c3Ryb25nPmFuZCBhbGwgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4mIzgyMTc7cyB0aHVtYnM8L3N0cm9uZz4gd2lsbCBiZSByZW1vdmVkPC9saT4KCTwvb2w+ CgoJPHA+RnVydGhlcjo8L3A+CgoJPG9sPgoJCTxsaT5pZiB5b3UgaGF2ZSBubyBkZWZhdWx0 IHByb2ZpbGUsIHRoZSBjaGVja2JveGVzIGRpc2FwcGVhciBhbmQgdGhlIHNldHRpbmdzIGhh dmUgbm8gZWZmZWN0LiBDaG9vc2UgYSBkZWZhdWx0IHByb2ZpbGUgdG8gcmVpbnN0YXRlIHRo ZSBiZWhhdmlvdXI8L2xpPgoJCTxsaT5pZiB5b3UgZGVhY3RpdmF0ZSB0aGUgZGVmYXVsdCBw cm9maWxlIHRoZSBjaGVja2JveGVzIGhhdmUgbm8gZWZmZWN0IDxzdHJvbmc+dW5sZXNzPC9z dHJvbmc+IHlvdSBkZWxldGUgdGhlIHByb2ZpbGUgKHNpbmNlIHlvdSYjODIxNztyZSBkZWxl dGluZyBpdCwgaXRzIHN0YXR1cyBpcyAmIzgyMTY7bG9zdCYjODIxNzsgYW5kIHRoZXJlZm9y ZSB0aGUgY2hlY2tib3hlcyBmdW5jdGlvbiBhcyBub3JtYWwpLiBJZiB0aGVyZSYjODIxNztz IGFueSBkb3VidCwgdW5jaGVjayB0aGUgPGVtPkRlbGV0aW9uPC9lbT4gY2hlY2tib3ggZmly c3QhPC9saT4KCTwvb2w+CgoJPGg0PlJlY3JlYXRlIHRodW1ibmFpbHMgb24gcmUtdXBsb2Fk IG9mIG1haW4gaW1hZ2U8L2g0PgoKCTxwPldoZW4gdGhpcyBjaGVja2JveCBpcyBjbGVhcmVk IGFuZCB5b3UgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+IGEgbWFpbiBpbWFnZSAoZnJvbSB0 aGUgSW1hZ2UgRWRpdCBzY3JlZW4pIGFueSB0aHVtYm5haWxzIHRoYXQgaGF2ZSBhbHJlYWR5 IGJlZW4gYXNzaWduZWQgdG8gdGhlIGltYWdlIGFyZSBsZWZ0IGFzIHRoZXkgYXJlICYjODIx Mjsgb25seSBtaXNzaW5nIHRodW1ibmFpbHMgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIG1h aW4gaW1hZ2UuIENvbnZlcnNlbHksIGlmIHlvdSBzZXQgdGhpcyBjaGVja2JveCwgd2hlbiB5 b3UgdXBsb2FkIHRoZSByZXBsYWNlbWVudCBpbWFnZSA8c3Ryb25nPjxzcGFuIGNsYXNzPSJj YXBzIj5BTEw8L3NwYW4+IHNtZF90aHVtYm5haWxzIGZvciBhY3RpdmUgcHJvZmlsZXMgd2ls bCBiZSAocmUpY3JlYXRlZCBmcm9tIHRoZSBtYWluIGltYWdlPC9zdHJvbmc+LjwvcD4KCgk8 cD5Ob3RlIG9uZSBpbXBvcnRhbnQgZXhjZXB0aW9uOiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB0aHVtYm5haWxzIGFyZSA8c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5OT1Q8 L3NwYW4+PC9zdHJvbmc+IGNvdmVyZWQgYnkgdGhpcyBvcHRpb24gJiM4MjEyOyB0aGV5IGFy ZSBnb3Zlcm5lZCBieSB0aGUgPGVtPktlZXAgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gdGh1bWJzIGluIHN5bmM8L2VtPiYjODIxNztzICYjODIxNjtDcmVhdGlvbiYjODIxNzsg Y2hlY2tib3guIFRodXMsIGlmIHlvdSB1cGxvYWQgYSByZXBsYWNlbWVudCBpbWFnZSBhbmQg dGhlICYjODIxNjtDcmVhdGlvbiYjODIxNzsgY2hlY2tib3ggaXMgb24sIHlvdSB3aWxsIHJl cGxhY2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYiByZWdh cmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZSA8ZW0+UmVjcmVhdGUgdGh1bWJuYWlscyYj ODIzMDs8L2VtPiBvcHRpb24uPC9wPgoKCTxoMiBpZD0ic21kX3RodW1iX3VzYWdlIj5Vc2Fn ZSAmIzgyMTI7IHB1YmxpYyBzaWRlPC9oMj4KCgk8cD5Ud28gbmV3IHRhZ3MgYXJlIGF2YWls YWJsZSB0byBkaXNwbGF5IHlvdXIgdGh1bWJuYWlscy48L3A+CgoJPGgzIGlkPSJzbWRfdGh1 bWJuYWlsIj48Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWwvJmd0OzwvY29kZT48L2gzPgoK CTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGEgaHJlZj0iaHR0 cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT10aHVtYm5haWwiPnR4 cDp0aHVtYm5haWw8L2E+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb25hbGl0 eSBhbmQgYXR0cmlidXRlcyBhcGFydCBmcm9tIHRoZXNlIGV4Y2VwdGlvbnM6PC9wPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMgYXR0 cmlidXRlIHRvIGRpc3BsYXkgdGh1bWJuYWlscyBvZiB0aGUgZ2l2ZW4gcHJvZmlsZSBuYW1l LiBlLmcuIDxjb2RlPnR5cGU9JnF1b3Q7bGFyZ2UmcXVvdDs8L2NvZGU+LiBJZiB5b3UgZG8g bm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2lsbCBi ZSB1c2VkLiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHByb2ZpbGUgeW91JiM4MjE3O2xsIHNl ZSB3YXJuaW5nIG1lc3NhZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNz PC9zcGFuPiA6IGlmIG9taXR0ZWQsIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHdpbGwgYmUg dXNlZCBhcyBhIGNsYXNzIG5hbWUgZm9yIHRoZSBpbWcgdGFnLiBJZiB5b3Ugc3BlY2lmeSBh IHdyYXB0YWcgYW5kIG9taXQgdGhlIGNsYXNzLCB0aGUgcHJvZmlsZSBuYW1lIHdpbGwgYmUg dXNlZCBhcyBhIGNsYXNzIG9uIGJvdGggdGhlIGNvbnRhaW5lciBhbmQgdGhlIGltZyB0YWc8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YWxpZ248L3NwYW4+IDogdGhpcyBhdHRy aWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5h ZGRfc3RhbXA8L3NwYW4+IDogYWRkcyB0aGUgaW1hZ2UgZmlsZSBtb2RpZmljYXRpb24gdGlt ZSB0byB0aGUgZW5kIG9mIHRoZSB0aHVtYm5haWwmIzgyMTc7cyA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPi4gVXNlIDxjb2RlPmFkZF9zdGFtcD0mcXVvdDsxJnF1b3Q7PC9jb2Rl PiB0byBzd2l0Y2ggdGhpcyBmZWF0dXJlIG9uLiBUaGlzIGhlbHBzIHByZXZlbnQgc3RhbGUg aW1hZ2VzLCBidXQgbWF5IHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoZWluZyB0aGUgdGh1 bWJzIHByb3Blcmx5IHRodXMgaW5jcmVhc2luZyBiYW5kd2lkdGggdXNhZ2UuIERlZmF1bHQ6 IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9yY2Vfc2l6ZTwvc3Bhbj4gOiB1 c3VhbGx5IHdoZW4geW91IHNldCBvbmUgb3Igb3RoZXIgd2lkdGgvaGVpZ2h0IHRvIDAgaW4g YSBwcm9maWxlLCB0aGUgYnJvd3NlciBzY2FsZXMgdGhlIG1pc3NpbmcgZGltZW5zaW9uIGF1 dG9tYXRpY2FsbHkuIEl0IGRvZXMgdGhpcyBieSBvbWl0dGluZyB0aGUgPGNvZGU+d2lkdGg9 PC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ9PC9jb2RlPiBhdHRyaWJ1dGUgaW4gdGhlIDxjb2Rl PiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcuIFRoaXMgbWF5IGNhdXNlIHZpc3VhbCBhcnRlZmFj dHMgYXMgdGhlIHBhZ2UgaXMgcmVuZGVyZWQgYW5kIHRoZSBicm93c2VyIGNhbGN1bGF0ZXMg dGhlIHNpemVzLiBJZiB5b3Ugd2lzaCB0aGUgcGx1Z2luIHRvIGFkZCB0aGUgYWN0dWFsIGRp bWVuc2lvbiB0byB0aGUgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZyAodGhlIHNpemUg YXQgdGhlIHRpbWUgdGhlIHRodW1ibmFpbCB3YXMgY3JlYXRlZCksIHRlbGwgdGhlIHBsdWdp biB3aXRoIHRoaXMgYXR0cmlidXRlLiBDaG9vc2Ugb25lIG9yIGJvdGggb2YgPGNvZGU+d2lk dGg8L2NvZGU+IG9yIDxjb2RlPmhlaWdodDwvY29kZT4uIENvbW1hLXNlcGFyYXRlIGFzIHJl cXVpcmVkLiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8L3VsPgoKCTxwPlRoZSB0YWcgd29ya3Mg aW5zaWRlIDxjb2RlPiZsdDt0eHA6aW1hZ2VfbGlzdCZndDs8L2NvZGU+IG9yIGNhbiBiZSB1 c2VkIHN0YW5kYWxvbmUgYnkgc3BlY2lmeWluZyB0aGUgPGNvZGU+aWQ8L2NvZGU+IG9yIDxj b2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJPGgzIGlkPSJzbWRfaWZfdGh1bWJu YWlsIj48Y29kZT4mbHQ7dHhwOnNtZF9pZl90aHVtYm5haWwvJmd0OzwvY29kZT48L2gzPgoK CTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGNvZGU+Jmx0O3R4 cDppZl90aHVtYm5haWwgLyZndDs8L2NvZGU+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUg ZnVuY3Rpb25hbGl0eS4gSXQgaGFzIG9uZSBhdHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMgYXR0cmlidXRlIHRv IGNoZWNrIGZvciB0aHVtYm5haWxzIG9mIHRoZSBnaXZlbiBwcm9maWxlIG5hbWUuIGUuZy4g PGNvZGU+dHlwZT0mcXVvdDtNZWRpdW0mcXVvdDs8L2NvZGU+LiBJZiB5b3UgZG8gbm90IHNw ZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2lsbCBiZSB0ZXN0 ZWQuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJvZmlsZSB0aGUgdGFnIHdpbGwgYWx3YXlz IHJlbmRlciB0aGUgPGNvZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPiBwb3J0aW9uPC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfdGh1bWJfaG93X2l0X3dvcmtzIj5Ib3cgaXQgd29y a3M8L2gyPgoKCTxwPkZvciByZWZlcmVuY2UsIHdoZW4geW91IGNyZWF0ZSBhIHByb2ZpbGUg YSBkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRoYXQgbmFtZSBpbnNpZGUgeW91ciA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8Y29kZT5pbWFnZXM8L2NvZGU+IGZvbGRlci4g SW5zaWRlIHRoaXMgZm9sZGVyIHlvdSB3aWxsIGZpbmQgaW1hZ2VzIG9mIHRoZSBmb3JtYXQg PGNvZGU+aWQuZXh0PC9jb2RlPjogd2hlcmUgPGNvZGU+aWQ8L2NvZGU+IGFuZCA8Y29kZT5l eHQ8L2NvZGU+IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGltYWdlIElEcyBpbiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZGF0YWJhc2UuIFRoYXQmIzgyMTc7cyBwcmV0 dHkgbXVjaCBpdC48L3A+CgoJPHA+WW91IGNhbiBkZWxldGUgdGh1bWJuYWlsIGZpbGVzIG1h bnVhbGx5IGZyb20gYW55IG9mIHRoZXNlIGRpcmVjdG9yaWVzIGFuZCB0aGUgcGx1Z2luIHdp bGwgZmlndXJlIGV2ZXJ5dGhpbmcgb3V0LiBCdXQgaXQmIzgyMTc7cyBwcm9iYWJseSBub3Qg YWR2aXNhYmxlIHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3JpZXMgdGhlbXNlbHZlcyAmIzgyMTI7 IHVzZSB0aGUgPGVtPltEZWxldGVdPC9lbT4gYnV0dG9ucyBpbiB0aGUgY29udHJvbCBwYW5l bCBmb3IgdGhhdC48L3A+CgoJPGgyIGlkPSJzbWRfdGh1bWJfY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gyPgoKCTx1bD4KCQk8bGk+MDYgQXVnIDEwIHwgMC4xMGJldGEgfCBJbml0aWFsIGJl dGEgcmVsZWFzZTwvbGk+CgkJPGxpPjA0IE9jdCAxMCB8IDAuMTAgfCBPZmZpY2lhbCBwdWJs aWMgcmVsZWFzZTwvbGk+CgkJPGxpPjA5IE5vdiAxMCB8IDAuMTEgfCBBZGRlZCA8Y29kZT5m b3JjZV9zaXplPC9jb2RlPiBhbmQgPGNvZGU+YWRkX3N0YW1wPC9jb2RlPiAoYm90aCB0aGFu a3MgemVybykgOyByZW1vdmVkIHVubmVjZXNzYXJ5IERCIGNhbGw8L2xpPgoJCTxsaT4xMCBO b3YgMTAgfCAwLjEyIHwgQWRkZWQgYWJpbGl0eSB0byBzeW5jIGRlZmF1bHQgcHJvZmlsZSB0 aHVtYnMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiB0aHVtYm5haWxzICh0aGFua3MgemVybyk8L2xpPgoJCTxsaT4xMCBOb3YgMTAgfCAw LjEzIHwgQWRkZWQgY29uZmlybWF0aW9uIG9uIDxlbT5DcmVhdGUgYWxsPC9lbT4gOyByZWxh YmVsbGVkIHVwbG9hZCBib3ggKHRoYW5rIHVsaSkgOyB0YW1lZCBzdHlsZXMgOyBzaWxlbmNl ZCBjaG1vZCB3YXJuaW5ncyAodGhhbmtzIHplcm8pPC9saT4KCQk8bGk+MjEgTm92IDEwIHwg MC4xNCB8IFBlcm1pdHRlZCB0aHVtYnMgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFs IGltYWdlcyAodGhhbmtzIG1hbmlxdWkpIDsgZml4ZWQgY2FsbGJhY2tzIGZvciBpbWFnZSB1 cGxvYWRpbmcgYW5kIGRlbGV0aW5nPC9saT4KCQk8bGk+MjYgSmFuIDExIHwgMC4yMCB8IFRv b2xzIC8gcHJlZnMgc2VwYXJhdGVkIGZyb20gcHJvZmlsZSBsaXN0IDsgcGVybWl0dGVkIGJh dGNoIGNyZWF0aW9uIHZpYSAxKSBzZWxlY3RlZCBpbWFnZXMgMikgY2F0ZWdvcnkgMykgYXV0 aG9yICh0aGFua3MganBkdXBvbnQpIDsgYWRkZWQgc21kX3RodW1iX2F1dG9fcmVwbGFjZSBv cHRpb24gYW5kIGFsdGVyZWQgZGVmYXVsdCBiZWhhdmlvdXIgKHRoYW5rcyBtYW5pcXVpKSA7 IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRodW1ibmFpbCBjcmVhdGlv biBvbiB0aHVtYm5haWwgcmVwbGFjZSBhbmQgbWFkZSBwcmVmcyBnbG9iYWwgJiM4MjEyOyBh bmQgb25seSBhdmFpbGFibGUgdG8gc2l0ZSBhZG1pbnMgKGFsbCB0aGFua3MganN0dWJicykg OyBmaXhlZCBOZXcgUHJvZmlsZSBidXR0b24gd3JhcHBpbmcgKHRoYW5rcyBqcGR1cG9udCk8 L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4K PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9 CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJD b3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2Yw ZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0 Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2lu OjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDog MjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRl cjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBh ZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21k X2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1z cGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxp bmU7IH0KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlm OyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoj c21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5 OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9y ZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBs aXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6 cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21k X2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5E IFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI2MzQxZDRmOWQ0NDEyM2Qz YzIwNTZiZDg3ZTljZWNkMiI7fQ==