# Name: smd_admin_themes v0.25 # Type: Admin side plugin # Admin-side theme manager and editor # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjI1IjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTQyNTA6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21k X2F0X3ByaXZzLA0KCQkkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3ByZWZzLCAkcHJlZnMs ICRzbWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvLA0KCQkkc21kX2F0X3N0eWxl czsNCg0KCSRzbWRfYXRfZXZlbnQgPSAnc21kX2F0JzsNCgkkc21kX2F0X2Z1bGxldiA9ICdz bWRfYWRtaW5fdGhlbWVzJzsNCgkkc21kX2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOw0K CSRzbWRfYXRfcHJpdnMgPSAnMSc7DQoJJHNtZF9hdF9mZWVkdXJsID0gJ2h0dHA6Ly90ZXh0 Z2FyZGVuLm9yZy9hZG1pbi10aGVtZXMtZmVlZCc7DQoJJHNtZF9hdF90aGVtZV9yZXBvID0g J2h0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbmlzdHJhdGlvbi10aGVtZXMnOw0KCSRzbWRf YXRfc3R5bGVzID0gYXJyYXkoDQoJCSdjb21tb24nID0+DQoJCSAgICAnLnNtZF9jbGVhciB7 IGNsZWFyOmJvdGg7IH0NCiAgICAgICAgICAgLnNtZF9zbWFsbHByaW50IHsgZm9udC1zaXpl Ojc1JTsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi10b3A6LTEycHg7IH0NCiAgICAgICAg ICAgLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IG1hcmdpbjo1cHg7IH0nLA0KCQknY29u dHJvbCcgPT4NCgkJICAgICcjc21kX2NvbnRyb2wgeyBtYXJnaW46MCBhdXRvOyB9DQogICAg ICAgICAgICNzbWRfY29udHJvbCB0ZCAucHVibGlzaCB7IG1hcmdpbi1sZWZ0OjUwcHg7IH0N CiAgICAgICAgICAgI3NtZF9jb250cm9sIC51cGxvYWQtZm9ybSB7IHBhZGRpbmc6MDsgfQ0K ICAgICAgICAgICAuc21kX2F0X3VwZGF0ZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiM5 OTAwMDA7IH0nLA0KCQknZWRpdCcgPT4NCiAgICAgICAgICAnI3NtZF9hdF9pbWFnZXMgeyBt YXJnaW46MHB4IDZweCAtNHB4IDA7IH0NCiAgICAgICAgICAgLnNtZF9za2luX2ZpbGV0eXBl cyB7IG1hcmdpbjoxMnB4IDA7IH0nLA0KCQknZ3JpZCcgPT4NCgkJICAgICcuc21kX2dyaWQg eyB3aWR0aDo5NjBweDsgbWFyZ2luOjAgYXV0bzsgfQ0KICAgICAgICAgICAuc21kX2NlbGwg eyBmbG9hdDpsZWZ0OyBwYWRkaW5nOjEwcHg7IG1hcmdpbjoxMHB4OyBib3JkZXI6MXB4IHJp ZGdlICNjY2M7IHdpZHRoOnt0d31weDsgaGVpZ2h0Ont0aH1weDsgfQ0KICAgICAgICAgICAu c21kX2NlbGwuYWN0aXZlIHsgYm9yZGVyOjFweCBzb2xpZCByZWQ7IH0NCiAgICAgICAgICAg LnNtZF9jZWxsOmhvdmVyIHsgYmFja2dyb3VuZDojZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9 DQogICAgICAgICAgIC5zbWRfY2VsbDpob3ZlciBhIHsgY29sb3I6YmxhY2s7IH0NCiAgICAg ICAgICAgLnNtZF9hdXRoLC5zbWRfYWN0aW9ucyB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJn aW46NXB4IDA7IH0nLA0KCQknbGlzdCcgPT4NCiAgICAgICAgICAnLnNtZF9hdF9saXN0IHRy LmFjdGl2ZSwgLnNtZF9hdF9saXN0IHRyLmFjdGl2ZSBhIHsgYmFja2dyb3VuZC1jb2xvcjoj ZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9JywNCgkJJ3NldHVwJyA9Pg0KICAgICAgICAgICcu c21kX2Zha2VidG4geyBjb2xvcjojNTU1OyBjdXJzb3I6cG9pbnRlcjsgfQ0KICAgICAgICAg ICAjc21kX2F0X3JhZGlvIGlucHV0IHsgZmxvYXQ6bGVmdDsgY2xlYXI6Ym90aDsgfQ0KICAg ICAgICAgICAjc21kX2F0X3JhZGlvIGxhYmVsIHsgZmxvYXQ6bGVmdDsgfScsDQoJKTsNCg0K CS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJJHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdj bGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRfcHJpdnMoJHNtZF9hdF9ldmVudCwgJHNtZF9h dF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwg JHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgJHNtZF9hdF9l dmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4k c21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdCcsICRzbWRfYXRf ZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUn LCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdw cmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF91 cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQuJ191aScsICd1cGxvYWRfZm9ybScpOw0KDQoJ aWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2cygkc21kX2F0X2FkbV9ldmVudCwgJzIsMyw0 LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFkbWluIiwgJHNtZF9hdF9hZG1fZXZlbnQsIHNt ZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0 JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0NCg0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlz IGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQg aXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1 dHVyZSAoZGVmYXVsdHMgYWxsIHNldCBlbXB0eSkNCgkkc21kX2F0X3ByZWZzID0gYXJyYXko DQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNlX3NvcnQnID0+ICcxJywNCgkJCSdzbWRfYXRf Y3J1c2gnID0+ICd6aXAnLA0KCQkJJ3NtZF9hdF90dycgPT4gJzI2MCcsDQoJCQknc21kX2F0 X3RoJyA9PiAnMTUwJywNCgkJCSdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JyA9PiAne3RoZW1l fScsDQoJCQknc21kX2F0X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ ICcwJywNCgkJCSdzbWRfYXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91 cF9saXN0JyA9PiAnJywNCgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJ YXJyYXkoDQoJCQknc21kX2F0X25vdF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRl dmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgN CgkJCSdzbWRfYXRfY2xvbmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9k ZWxldGVfaW1hZ2UnLA0KCQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywN CgkJCSdzbWRfYXRfaW1wb3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0 X3ByZWZzX2luc3RhbGwnLA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9h dF9wcmVmc191cGRhdGUnLA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZl JywNCgkJCSdzbWRfYXRfc2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9h dF91cGxvYWRfaW1hZ2UnLA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsN CgkJc21kX2F0X2xpc3QoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcn Ow0KCXN3aXRjaCAoJHN0ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9w cmVmc19pbnN0YWxsKDApOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21k X2F0X3ByZWZzX3JlbW92ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0N Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0 X2V2ZW50Ow0KCXJldHVybiBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZl bnQ9Jy4kc21kX2F0X2V2ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxl ZCB3aXRob3V0IGEgJG1lc3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlz bWRfYXRfbGlzdCgnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2xpc3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVu dCwgJHByZWZzLCAkc21kX2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRz bWRfYXRfZnVsbGV2LCAkc21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbywgJHNt ZF9hdF9zdHlsZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgll eHRyYWN0KGdwc2EoYXJyYXkoJ3N0ZXAnLCAncGFnZScsICdjcml0JywgJ3NlYXJjaF9tZXRo b2QnLCAnc2tpbicpKSk7DQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBn cHMoJ21lc3NhZ2UnKTsNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJHN0eWxlcnVs ZSA9ICgkbGF5b3V0PT0wKSA/ICdsaXN0JyA6ICdncmlkJzsNCgkkdHcgPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVm c1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJl ZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KCSRzdHlsZXJlcHMgPSBhcnJheSgNCgkJJ3t0 d30nID0+ICR0dywNCgkJJ3t0aH0nID0+ICR0aCwNCgkpOw0KCSRoZWxwTGluayA9ICI/ZXZl bnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX2F0X2Z1bGxldiN1c2FnZSI7 DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3BzKCdxdHknKSA6ICgoY3MoJ3NtZF9h dF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScpIDogMTUpOw0KCSRtYXhfZmlsZV9z aXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRyYXJ5IQ0KDQoJJGN1cnJfc2tpbiA9 IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8gJHRoZW1lLT5uYW1lIDogJ2NsYXNz aWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KCSRjcnVzaGVycyA9 IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJJHVuY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hf b3B0aW9ucygnaW1wb3J0Jyk7DQoJJGJhc2VzID0gYXJyYXkoKTsNCg0KCS8vIEdldCBhIGxp c3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVuZGVuY2llcykNCglmb3JlYWNoICgk c2tpbl9saXN0IGFzICRza2luYSkgew0KCQkkbWFuaWZlc3QgPSBzbWRfYXRfcmVhZF9za2lu Zm8oJHNraW5hKTsNCgkJaWYgKCRtYW5pZmVzdCkgew0KCQkJaWYgKCRtYW5pZmVzdFsnYmFz ZWRfb24nXSkgew0KCQkJCSRiYXNlc1tdID0gJG1hbmlmZXN0WydiYXNlZF9vbiddOw0KCQkJ fQ0KCQl9DQoJfQ0KCSRiYXNlcyA9IGFycmF5X3VuaXF1ZSgkYmFzZXMpOw0KDQoJcGFnZXRv cChzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCRtZXNzYWdlKTsNCg0KCS8vIEhhbmRsZSBw YWdpbmcNCgkkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0KTsNCgkkbGltaXQgPSBtYXgoQCRw YWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIo JHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCgkkc2tpbl9saXN0ID0gYXJyYXlfc2xpY2UoJHNr aW5fbGlzdCwgJG9mZnNldCwgJGxpbWl0KTsNCg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQi ID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJwYWdlIiA9PiAkcGFnZSwNCgkpOw0KDQoJZWNobyA8 PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzbWRf Z2V0Y3J1c2goc2tpbikgew0KCXNraW5IYW5kbGUgPSAiY3J1c2hfIitza2luOw0KCWpRdWVy eSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWJveCA9IGpRdWVyeSh0aGlz KTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5kbGUpIHsNCgkJCWlmIChib3gu Y3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94LnNsaWRlRG93bignZmFzdCcp Ow0KCQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVs c2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycr c2tpbkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0 dHIoImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrc2tpbisiJnN0ZXA9 c21kX2F0X2V4cG9ydCZjcnVzaD0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0W3R5 cGU9XCdyYWRpb1wnXTpjaGVja2VkJykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7DQoJfSk7 DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZ2V0dmFsKHNraW4sIHN0ZXAp IHsNCglza2luSGFuZGxlID0gInBvcF8iK3NraW47DQoJalF1ZXJ5KCcuc21kX3BvcHVwJyku ZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5KHRoaXMpOw0KCQlpZiAoYm94LmF0 dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9 PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdmYXN0Jyk7DQoJCQkJalF1ZXJ5KCcj Jytza2luSGFuZGxlKycgaW5wdXQnKS5mb2N1cygpOw0KCQkJfSBlbHNlIHsNCgkJCQlib3gu c2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zh c3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGEnKS5jbGljayhm dW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50PXskc21k X2F0X2V2ZW50fSZza2luPSIrKChza2luPT0nbmV3Jyk/ICcnIDogc2tpbikrIiZzdGVwPSIr c3RlcCsiJm5ld19za2luPSIralF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS52YWwo KSsiJnBhZ2U9Iit7JHBhZ2V9KTsNCgl9KTsNCg0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsn IGlucHV0Jykua2V5dXAoZnVuY3Rpb24gKCkgew0KCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1 ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9ceDdmLVx4ZmZdL2csJycpOw0KCQl3aGlsZSAodGhp cy52YWx1ZS5sZW5ndGggPiAwICYmIHRoaXMudmFsdWUuc3Vic3RyaW5nKDAsMSkubWF0Y2go L1swLTldLykpIHsNCgkJCXRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnN1YnN0cmluZygxKTsN CgkJfQ0KCX0pOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0KPC9zY3JpcHQ+DQpFT0pTOw0KDQoJ Ly8gSW5qZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgll Y2hvIHN0cnRyKCRzbWRfYXRfc3R5bGVzWydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWyRz dHlsZXJ1bGVdLm4uJHNtZF9hdF9zdHlsZXNbJ2NvbnRyb2wnXSwgJHN0eWxlcmVwcyk7DQoJ ZWNobyAnPC9zdHlsZT4nOw0KDQoJLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNraW5zDQoJZWNo byBzdGFydFRhYmxlKCdzbWRfY29udHJvbCcsJycsJycsNSk7DQoJZWNobyB0cigNCgkJdGRh KHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0KCdpbnN0YWxsX3NraW4nKSwgJycsICdzbWRfYXRf aW1wb3J0JywgJHNtZF9hdF9ldmVudCwgJycsICRtYXhfZmlsZV9zaXplKS5ici4nPGRpdiBj bGFzcz0ic21kX3NtYWxscHJpbnQiPicuc21kX2F0X2dUeHQoJ3N1cHBvcnRlZF9pbXBvcnQn LCBhcnJheSgne3R5cGVzfScgPT4gam9pbignLCAnLCAkdW5jcnVzaGVycykpKS4nPC9kaXY+ JywgJyBjb2xzcGFuPSIyIicpDQoJCS50ZGEoZm9ybShmSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBzbWRfYXRfZ1R4dCgnc2V0dXAnKSwgJ3B1Ymxpc2gnKS5zSW5wdXQoJ3NtZF9hdF9z ZXR1cCcpLmVJbnB1dCgkc21kX2F0X2V2ZW50KSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9y ZGVyOjA7aGVpZ2h0OjUwcHgiJykNCgkpOw0KCWVjaG8gZW5kVGFibGUoKTsNCgllY2hvICc8 Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBhY3Rpb249Iicuam9pbl9xcygk cXMpLiciPic7DQoJJG5ld2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9l dmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49IiBv bmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJ25ld1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsi Picuc21kX2F0X2dUeHQoJ25ldycpLic8L2E+Jw0KCQkuICc8ZGl2IGlkPSJwb3BfbmV3IiBj bGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19z a2luJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIg dmFsdWU9IiIgLz4gPGEgaHJlZj0iIyI+Wycuc21kX2F0X2dUeHQoJ2NvbmZpcm0nKS4nXTwv YT48L2Rpdj4nOw0KCSRyZXBvYnRuID0gJyAnLic8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0i Jy4kc21kX2F0X3RoZW1lX3JlcG8uJyI+Jy5zbWRfYXRfZ1R4dCgnZmluZF90aGVtZScpLic8 L2E+JzsNCgkkaGRyb3cgPSBoZWQoc21kX2F0X2dUeHQoJ2xpc3RfdGl0bGUnKS4gJyAnLiBz bWRfYXRfZ1R4dCgnaGVscF9saW5rJywgYXJyYXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSks IDMpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jywn Jywnc21kX2F0X2xpc3QnLDUpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRoZHJvdy4kcmVwb2J0 bi4kbmV3YnRuLCAnIGNvbHNwYW49IjciJykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hl YWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJ Z1R4dCgndmVyc2lvbicpLA0KCQkJCSdkZXNjcmlwdGlvbicsDQoJCQkJc21kX2F0X2dUeHQo J2FjdGlvbnMnKQ0KCQkJCSkNCgkJKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3JvdyI+Jy4kaGRyb3cuJHJlcG9idG4u JG5ld2J0bi4nPC9kaXY+JzsNCgl9DQoJaWYoIGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSAp DQoJCSR0cmFuc3BvcnQgPSAnZnNvY2snOw0KCWVsc2VpZiggaXNfY2FsbGFibGUoJ2N1cmxf aW5pdCcpICkgew0KCQkkdHJhbnNwb3J0ID0gJ2N1cmwnOw0KCX0gZWxzZSB7DQoJCSR0cmFu c3BvcnQgPSAnJzsNCgl9DQoNCgkkZmVlZCA9ICcnOw0KCXN3aXRjaCAoJHRyYW5zcG9ydCkg ew0KCQljYXNlICdjdXJsJzoNCgkJCSRjID0gY3VybF9pbml0KCk7DQoJCQljdXJsX3NldG9w dCgkYywgQ1VSTE9QVF9VUkwsICRzbWRfYXRfZmVlZHVybCk7DQoJCQljdXJsX3NldG9wdCgk YywgQ1VSTE9QVF9SRUZFUkVSLCBodSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9S RVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9WRVJC T1NFLCBmYWxzZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9USU1FT1VULCAxMCk7 DQoJCQkkZmVlZCA9IGN1cmxfZXhlYygkYyk7DQoJCQlicmVhazsNCgkJY2FzZSAnZnNvY2sn Og0KCQkJJHVybCA9IHBhcnNlX3VybCgkc21kX2F0X2ZlZWR1cmwpOw0KCQkJJGZwID0gQGZz b2Nrb3BlbiAoJHVybFsnaG9zdCddLCA4MCwgJGVycm5vLCAkZXJyc3RyLCA1KTsNCgkJCWlm ICgkZnApIHsNCgkJCQkkcXJ5ID0gJ0dFVCAnLiRzbWRfYXRfZmVlZHVybDsNCgkJCQkkcXJ5 IC49ICIgSFRUUC8xLjBcclxuXHJcbiI7DQoNCgkJCQlmcHV0cygkZnAsICRxcnkpOw0KCQkJ CXN0cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsNCgkJCQkkaW5mbyA9IHN0cmVhbV9nZXRf bWV0YV9kYXRhKCRmcCk7DQoNCgkJCQkkaGRycyA9IHRydWU7DQoJCQkJd2hpbGUgKCghZmVv ZigkZnApKSAmJiAoISRpbmZvWyd0aW1lZF9vdXQnXSkpIHsNCgkJCQkJJGxpbmUgPSBmZ2V0 cygkZnAsIDgxOTIpOw0KCQkJCQkkbGluZSA9IHByZWdfcmVwbGFjZSgiW1xyXG5dIiwgIiIs ICRsaW5lKTsNCgkJCQkJaWYgKCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCQkkZmVlZCAuPSAk bGluZS4iXG4iOw0KCQkJCQl9DQoJCQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJz ID0gZmFsc2U7DQoJCQkJfQ0KCQkJCWlmICgkaW5mb1sndGltZWRfb3V0J10pIHsNCgkJCQkJ JGZlZWQgPSAnJzsNCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9IGVsc2Ugew0KCQkJ CSRmZWVkID0gJyc7DQoJCQl9DQoJCQlicmVhazsNCgkJZGVmYXVsdDoNCgkJCSRmZWVkID0g Jyc7DQoJfQ0KDQoJJHNtZF9hdF92bGFzdCA9ICcnOw0KCSRmZWVkcyA9IGFycmF5KCk7DQoJ aWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3ZlcnNpb25zJ10pICYmIGlzc2V0KCRwcmVmc1sn c21kX2F0X3ZsYXN0J10pKSB7DQoJCWlmICh0aW1lKCkgLSAkcHJlZnNbJ3NtZF9hdF92bGFz dCddIDwgODY0MDApIHsNCgkJCS8vIExhc3QgdXBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgZGF5 LCBzbyByZWFkIHRoZSBjYWNoZWQgdmVyc2lvbiBudW1iZXJzDQoJCQkkZmVlZHMgPSB1bnNl cmlhbGl6ZSgkcHJlZnNbJ3NtZF9hdF92ZXJzaW9ucyddKTsNCgkJfQ0KCX0NCglpZiAoISRm ZWVkcyB8fCBncHMoJ3JlYWRfdmVyc2lvbnMnKSkgew0KCQkkZmVlZHMgPSBzbWRfYXRfZmVl ZCgkZmVlZCk7DQoJCSRpbnN0YWxsZWRfZmVlZCA9IGFycmF5KCk7DQoJCSRmZWVkcyA9IChp c19hcnJheSgkZmVlZHMpKSA/ICRmZWVkcyA6IGFycmF5KCk7DQoNCgkJLy8gT25seSByZWNv cmQgdGhlIHZlcnNpb24gaW5mbyBmcm9tIHRoZW1lcyB0aGF0IGFyZSBpbnN0YWxsZWQNCgkJ Zm9yZWFjaCgkc2tpbl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJCSRmZWVkX3NraW5fbmFt ZSA9IHN0cl9yZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSB0 aGUgdXJsX3RpdGxlDQoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkZmVlZF9za2luX25hbWUs ICRmZWVkcykpIHsNCgkJCQkkaW5zdGFsbGVkX2ZlZWRbJGZlZWRfc2tpbl9uYW1lXSA9ICRm ZWVkc1skZmVlZF9za2luX25hbWVdOw0KCQkJfQ0KCQl9DQoJCXNldF9wcmVmKCdzbWRfYXRf dmxhc3QnLCB0aW1lKCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQlzZXRfcHJlZignc21kX2F0X3ZlcnNpb25zJywgc2VyaWFsaXplKCRpbnN0YWxs ZWRfZmVlZCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0K CX0NCg0KCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkvLyBSZWFk IGVhY2ggbWFuaWZlc3QgYW5kIHNldCB1cCB0aGUgbGFiZWxzDQoJCSRza2luZm8gPSBzbWRf YXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCSRmZWVkX3NraW5fbmFtZSA9IHN0cl9y ZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSBmb3IgdXJsX3Rp dGxlIG1hdGNoaW5nDQoNCgkJJHRodW1ibmFpbCA9IHNtZF9hdF9nZXRfdGh1bWIoJHNraW5m bywgMSk7DQoJCSR0aGlzX3NraW4gPSAoJHNraW5mbykgPyAoKCRza2luX25hbWUgPT0gJGN1 cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbmZvWydkbmFtZSdd KSA6ICRza2luX25hbWU7DQoJCSRpc19nYmwgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRf Z2xvYmFsX3NraW4nXSkgJiYgJHNraW5fbmFtZSA9PSAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9i YWxfc2tpbiddKSA/IHNtZF9hdF9nVHh0KCdpc19nbG9iYWwnKSA6ICcnOw0KCQkkdGh1bXJv dyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3 aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2F0X2xpc3QnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEu J3BhZ2U9Jy4kcGFnZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLici PicuJHRoaXNfc2tpbi4kaXNfZ2JsLigoJHNraW5mbyAmJiAkc2tpbmZvWydiYXNlZF9vbidd KSA/IHNtZF9hdF9nVHh0KCdiYXNlZF9vbicsIGFycmF5KCd7c2tpbn0nID0+ICRza2luZm9b J2Jhc2VkX29uJ10pKSA6ICcnKS4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWls Lic8L2Rpdj4nIDogJycpLic8L2E+JzsNCgkJJGF1dGhyb3cgPSAoKCRza2luZm8gJiYgc3Ry cG9zKCRza2luZm9bJ2F1dGhvcl91cmknXSwgImh0dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJl Zj0iJy4kc2tpbmZvWydhdXRob3JfdXJpJ10uJyI+Jy4kc2tpbmZvWydhdXRob3InXS4nPC9h PicgOiAoKCRza2luZm8pID8gJHNraW5mb1snYXV0aG9yJ10gOiAnLScpKTsNCgkJJGFjdHJv dyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Vk aXQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciPlsnLmdUeHQoJ2VkaXQnKS4nXTwvYT4nDQoJ CQkuICcgJyAuKCgkc2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5hLidza2luPScuJHNraW5fbmFtZS4nIiBvbmNsaWNr PSJyZXR1cm4gc21kX2dldHZhbChcJycuJHNraW5fbmFtZS4nXCcsIFwnc21kX2F0X2Nsb25l XCcpOyI+Wycuc21kX2F0X2dUeHQoJ2Nsb25lJykuJ108L2E+JyA6ICcnKQ0KCQkJLiAnICcg LigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVw PXNtZF9hdF9leHBvcnQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9uY2xpY2s9InJldHVy biBzbWRfZ2V0Y3J1c2goXCcnLiRza2luX25hbWUuJ1wnKTsiPlsnLnNtZF9hdF9nVHh0KCdl eHBvcnQnKS4nXTwvYT4nIDogJycpDQoJCQkuICcgJyAuKChpbl9hcnJheSgkc2tpbl9uYW1l LCAkc21kX2NvcmVfdGhlbWVzKSB8fCBpbl9hcnJheSgkc2tpbl9uYW1lLCAkYmFzZXMpKSA/ ICcnIDogJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRf ZGVsZXRlJy5hLidza2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBhZ2UuJyIgb25jbGlj az0icmV0dXJuIGNvbmZpcm0oXCcnLnNtZF9hdF9nVHh0KCdkZWxldGVfY29uZmlybScsIGFy cmF5KCd7c2tpbn0nID0+ICRza2luX25hbWUpKS4nXCcpOyI+WycuZ1R4dCgnZGVsZXRlJyku J108L2E+JykNCgkJCS4gJzxkaXYgaWQ9InBvcF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNt ZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCduZXdfY2xvbmVza2lu JykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFs dWU9IiIgLz4gPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25m aXJtJykpLiddPC9hPjwvZGl2PicNCgkJCS4gJzxkaXYgaWQ9ImNydXNoXycuJHNraW5fbmFt ZS4nIiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQo J2NydXNoX2Zvcm1hdCcpLic8L3NwYW4+Jy5yYWRpb1NldCgkY3J1c2hlcnMsICRza2luX25h bWUuJ19jcnVzaCcsICgoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSkpID8gJGF0 X3ByZWZzWydzbWRfYXRfY3J1c2gnXSA6ICcnKSApLic8YSBocmVmPSIjIj4mbmJzcDtbJy5z dHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+JzsNCgkJJHZlcm93 ID0gKCRza2luZm8pID8gKChpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXSkgJiYgaXNz ZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSkgJiYgdmVyc2lvbl9jb21w YXJlKCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10sJHNraW5mb1sndmVyc2lv biddKT09PTEpID8gJzxhIGhyZWY9IicuJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ2xpbmsn XS4nIiBjbGFzcz0ic21kX2F0X3VwZGF0ZSI+Jy5zbWRfYXRfZ1R4dCgndmVyc2lvbicpLiRz a2luZm9bJ3ZlcnNpb24nXS4nPC9hPicgOiBzbWRfYXRfZ1R4dCgndmVyc2lvbicpLiRza2lu Zm9bJ3ZlcnNpb24nXSkgOiAnJzsNCg0KCQlpZiAoJGxheW91dD09MCkgew0KCQkJZWNobyB0 cigNCgkJCQl0ZCgkdGh1bXJvdykNCgkJCQkudGQoJGF1dGhyb3csIDEwMCkNCgkJCQkudGQo JHZlcm93KQ0KCQkJCS50ZCgoKCRza2luZm8pPyAkc2tpbmZvWydkZXNjcmlwdGlvbiddIDog Jy0nKS4oKCRza2luZm8gJiYgJHNraW5mb1snaGVscCddKSA/ICcgJy5ocmVmKCdbJy5nVHh0 KCdoZWxwJykuJ10nLCAkc2tpbmZvWydoZWxwJ10pIDogJycpLCAyNTApDQoJCQkJLnRkKCRh Y3Ryb3csMjYwKQ0KCQkJLCAoKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGNsYXNz PSJhY3RpdmUiJyA6ICcnKQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGFjdGl2ZScg OiAnJykuJyI+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRfZ1R4dCgnYnknKS4k YXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hY3Rpb25zIj4n LiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9DQoJfQ0KDQoJaWYg KCRsYXlvdXQ9PSIwIikgew0KCQllY2hvICc8L3RkPjwvdHI+JzsNCgkJZWNobyBlbmRUYWJs ZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+ PC9kaXY+JzsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBuLm5hdl9mb3JtKCRzbWRf YXRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOw0K CWVjaG8gbi5wYWdlYnlfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZWJ5KTsNCn0NCg0KZnVu Y3Rpb24gc21kX2F0X2ZlZWQoJGZlZWQpIHsNCglnbG9iYWwgJGZlZWRzOw0KDQoJJGZlZWQ9 cHJlZ19yZXBsYWNlKCIvPiIuIltbOnNwYWNlOl1dKyIuIjwvaSIsICI+PCIsICRmZWVkKTsg Ly8gS2lsbCB3aGl0ZXNwYWNlIGluIGZlZWQNCgkkeG1scGFyc2VyID0geG1sX3BhcnNlcl9j cmVhdGUoKTsNCgl4bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0 X2ZlZWRfc3RhcnRfdGFnIiwgInNtZF9hdF9mZWVkX2VuZF90YWciKTsNCgl4bWxfc2V0X2No YXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3RhZ19jb250 ZW50cyIpOw0KCXhtbF9wYXJzZSgkeG1scGFyc2VyLCAkZmVlZCk7DQoJeG1sX3BhcnNlcl9m cmVlKCR4bWxwYXJzZXIpOw0KDQoJcmV0dXJuICRmZWVkczsNCn0NCg0KZnVuY3Rpb24gc21k X2F0X2ZlZWRfc3RhcnRfdGFnKCRwYXJzZXIsICRuYW1lLCAkYXR0cmlicykgew0KCWdsb2Jh bCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnOw0KCWlmICgkbmFtZSA9PSAiRU5U UlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gdHJ1ZTsNCgl9DQoJaWYgKCRzbWRfYXRfZmVl ZGluKSB7DQoJCSRzbWRfYXRfZmVlZHRhZyA9ICRuYW1lOw0KCX0NCn0NCmZ1bmN0aW9uIHNt ZF9hdF9mZWVkX2VuZF90YWcoJHBhcnNlciwgJG5hbWUpIHsNCglnbG9iYWwgJHNtZF9hdF9m ZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZTsNCglpZiAoJG5hbWUg PT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9IGZhbHNlOw0KCQkkc21kX2F0X2Zl ZWRuYW1lID0gJyc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBzbWRfYXRfZmVlZF90YWdfY29udGVu dHMoJHBhcnNlciwgJGRhdGEpIHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRf ZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZSwgJGZlZWRzOw0KCWlmICgkc21kX2F0X2ZlZWRp bikgew0KCQlpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJOQU1FIikgew0KCQkJJGZlZWRzWyRk YXRhXSA9ICcnOw0KCQkJJHNtZF9hdF9mZWVkbmFtZSA9ICRkYXRhOw0KCQl9DQoJCWlmIChp c3NldCgkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV0pKSB7DQoJCQlpZiAoJHNtZF9hdF9mZWVk dGFnID09ICJUSVRMRSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJTVU1NQVJZIiB8fCAkc21k X2F0X2ZlZWR0YWcgPT0gIlVQREFURUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiSUQiIHx8 ICRzbWRfYXRfZmVlZHRhZyA9PSAiTElOSyIpIHsNCgkJCQkkZmVlZHNbJHNtZF9hdF9mZWVk bmFtZV1bc3RydG9sb3dlcigkc21kX2F0X2ZlZWR0YWcpXSA9ICRkYXRhOw0KCQkJfQ0KCQl9 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlbW92ZSBoYXJk IHNwYWNlcyBpbiB0aGUgdXBsb2FkX2Zvcm0gc28gT3BlcmEgYW5kIElFIHdyYXAgdGhlIGJ1 dHRvbnMNCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfZm9ybSgkZXZlbnQsICRzdGVwLCAkZGF0 YSwgJGFyZ3MpIHsNCglyZXR1cm4gc3RyX3JlcGxhY2UoJyYjMTYwOycsICcgJywgJGRhdGEp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9l ZGl0KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRzbWRfYXRfc3R5 bGVzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnbmV3X3NraW4n LCAnZmlsZScpKSkpOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRs YXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVm c1snc21kX2F0X2xheW91dCddIDogMTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAi Y3NzIiwgImpzIiwgInBocCIpOw0KCSRpbWFnYWJsZSA9IGFycmF5KCJqcGciLCAianBlZyIs ICJnaWYiLCAicG5nIik7DQoJJG1heF9maWxlX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7DQoN Cgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkkZmlsZSA9IChlbXB0 eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2luOw0KCSRmaWxlcyA9IHNtZF9hdF9s aXN0ZGlyKFRIRU1FLiRza2luKTsNCglzb3J0KCRmaWxlcyk7DQoNCgkvLyBTcGxpdCB0aGUg bGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzDQoJJGFsbGZpbGVzID0gYXJyYXkoKTsN Cglmb3JlYWNoICgkZmlsZXMgYXMgJGN1cnJmaWxlKSB7DQoJCSRmaWxlX2luZm8gPSBwYXRo aW5mbygkY3VycmZpbGUpOw0KCQkvLyBJZ25vcmUgYW55IHJvZ3VlIFN1YnZlcnNpb24gZmls ZXMNCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZvWydkaXJuYW1lJ10sICcvLnN2bicpID09PSBm YWxzZSkgew0KCQkJJGZpbGVfdHlwZSA9IChpc3NldCgkZmlsZV9pbmZvWydleHRlbnNpb24n XSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInOw0KCQkJJGFsbGZpbGVz WyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7DQoJCX0NCgl9DQoNCglpZiAoZ3BzKCdzbWRf YXRfZWRpdHMnKSkgew0KCQkkY29udGVudHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxu JywnDQonLGdwcygnc21kX2F0X2VkaXRzJykpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoJ fSBlbHNlIHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAmJiBmaWxlX2V4aXN0 cyhUSEVNRS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9IGZpbGUoVEhFTUUu JHNraW4uRFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwgJGNvbnRlbnRzKTsN CgkJfQ0KCX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0KCXBhZ2V0b3Aoc21k X2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyAnPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4nOw0KCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2VkaXQnXTsNCgllY2hvICc8 L3N0eWxlPic7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCS8v IHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1l IGluIHRoaXMgY2FzZQ0KCSRza2luc2VsID0gYXJyYXkoKTsNCglmb3JlYWNoKCRza2luX2xp c3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2lu X2xpc3RbJGtleTFdOw0KICAgfQ0KCSRza2luQ2hhbmdlID0gJzxmb3JtIG5hbWU9InNraW5j aGFuZ2UiIGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJCS4gZUlucHV0KCRzbWRfYXRfZXZlbnQp DQoJCS4gc0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJCS4gc2VsZWN0SW5wdXQoJ3NraW4nLCAk c2tpbnNlbCwgJHNraW4sIDAsIDEpDQoJCS4gJzwvZm9ybT4nOw0KDQoJJGZpbGVMaXN0ID0g aGVkKHNtZF9hdF9nVHh0KCdza2luX2ZpbGVzJyksMikNCgkJLiAkc2tpbkNoYW5nZQ0KCQku IHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdzbWRfc2tpbl9maWxldHlwZXMnKTsNCgkk ZmlsZUxpc3QgLj0gJzxiciAvPjxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25ld2ZpbGUnLmEuJ3NraW49Jy4kc2tpbi4n Ij4nLnNtZF9hdF9nVHh0KCduZXdfZmlsZScpLic8L2E+JzsNCgkkZmlsZUxpc3QgLj0gJyA8 YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNt ZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcp KS4nPC9hPjxiciAvPic7DQoJJG90aGVycyA9IGFycmF5KCk7DQoNCglmb3JlYWNoICgkZWRp dGFibGUgYXMgJGZpbGV0eXBlKSB7DQoJCWlmIChpc3NldCgkYWxsZmlsZXNbJGZpbGV0eXBl XSkpIHsNCgkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZmlsZXR5cGVdIGFzICRpZHggPT4gJGN1 cnJmaWxlKSB7DQoJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkkZmlsZUxpc3QgLj0gdHIo dGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSksMykpKTsNCgkJCQl9DQoJCQkJJGp1c3Rm aWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlm dChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNr aW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0 cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJJGRlbCA9ICgkYmFz ZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2Rl bGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkkZmls ZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJ CS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlpZiAoISRvdGhlcnMpIHsNCgkJCQlmb3Jl YWNoICgkYWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRmbHMpIHsNCgkJCQkJaWYgKCFpbl9hcnJh eSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGltYWdhYmxlKSkpIHsNCgkJCQkJ CWZvcmVhY2ggKCRhbGxmaWxlc1skZnR5cGVdIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJ CQkJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkJCQkkYmFzZWZp bGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJCQkJJGVk aXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9l ZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUg PT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7 DQoJCQkJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21k X2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tp bicsICRza2luKTsNCgkJCQkJCQkkb3RoZXJzW10gPSB0cih0ZCgkZWRpdCkudGQoJGRlbCkp Ow0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCSRmaWxlTGlzdCAu PSAoJG90aGVycykgPyB0cih0ZChoZWQoc21kX2F0X2dUeHQoJ290aGVyX2ZpbGVzJyksMykp KS4gam9pbihuLCAkb3RoZXJzKSA6ICcnOw0KCSRmaWxlTGlzdCAuPSBlbmRUYWJsZSgpOw0K DQoJLy8gTWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMgZm9yIHRoaXMgc2tpbg0KCSRxcyA9IGFy cmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJzdGVwIiA9PiAnc21kX2F0 X2RlbGV0ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBp ZD0ic21kX2F0X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2ltYWdlZm9ybSIgYWN0aW9uPSIn LmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfaW1h Z2VzIiBuYW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNsYXNzPSJsaXN0IiBzaXplPSIyNCIgbXVs dGlwbGU9Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6MTU0cHg7Ij4nOw0KDQoJaWYgKGRlZmlu ZWQoJ0dMT0JfQlJBQ0UnKSkgew0KCQkkaW1nID0gZ2xvYihUSEVNRS4kc2tpbi5EUy4neyou anBnLCouZ2lmLCoucG5nfScsIEdMT0JfQlJBQ0UpOw0KCX0gZWxzZSB7DQoJCSRpbWcgPSBh cnJheV9tZXJnZShnbG9iKFRIRU1FLiRza2luLkRTLicqLmpwZycpLGdsb2IoVEhFTUUuJHNr aW4uRFMuJyouZ2lmJyksZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5wbmcnKSk7DQoJfQ0KDQoJ aWYoaXNfYXJyYXkoJGltZykpIHsNCgkJZm9yZWFjaCAoJGltZyBhcyAkaW1nZmlsZSkgew0K CQkJJHNlbFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kaW1nZmlsZS4nIj4nLmJhc2VuYW1l KCRpbWdmaWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0KCX0NCgkkc2VsW10gPSAnPC9zZWxlY3Q+ JzsNCgkkc2VsW10gPSBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZV9pbWFn ZScsICdza2luJywgJHNraW4sIDEpOw0KCSRzZWxbXSA9ICc8L2Zvcm0+JzsNCgkkc2VsID0g am9pbignJywkc2VsKTsNCg0KCS8vIEltYWdlIHBvcnRpb24NCgkkaW1nYml0ID0gaGVkKHNt ZF9hdF9nVHh0KCdza2luX2ltYWdlcycpLCAyKSAuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVm dCcpOw0KCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkpOw0KCSRpbWdiaXQgLj0gdHIodGQodXBs b2FkX2Zvcm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9pbWFnZScpLCAnJywgJ3NtZF9hdF91cGxv YWRfaW1hZ2UnLCAkc21kX2F0X2V2ZW50LCAkc2tpbiwgJG1heF9maWxlX3NpemUsICcnLCAn JyksIDE1MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFibGUoKTsNCg0KCS8vIFJlbmRlciB0aGUg cmVzdCBvZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpLg0KCXRyKA0KCQl0 ZHRsKCRpbWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgoKCRza2luZm8pID8gJHNraW5mb1snZG5h bWUnXSA6ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJCQkJJzxpbnB1dCB0eXBlPSJ0ZXh0IiBu YW1lPSJuZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuJyIgY2xh c3M9ImVkaXQiIHNpemU9IjQwIiB0YWJpbmRleD0iMiIgc3R5bGU9Im1hcmdpbi1ib3R0b206 MTBweDsiIC8+Jy5icg0KCQkJCS4nPHRleHRhcmVhIGlkPSJzbWRfYXRfZWRpdHMiIGNsYXNz PSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2IiByb3dzPSIzMiI+Jy5odG1s c3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+Jy5icg0KCQkJCS5mSW5wdXQo J3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykNCgkJCQkuZUlucHV0KCRzbWRf YXRfZXZlbnQpLnNJbnB1dCgnc21kX2F0X3NhdmUnKQ0KCQkJCS5oSW5wdXQoJ3NraW4nLCRz a2luKQ0KCQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxlKQ0KCQkJKQ0KCQkpLg0KCQl0ZHRsKCRm aWxlTGlzdCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBKdXN0IGNsZWFyIG91dCB0aGUgdmFyIHNvIHRoZSBzYXZlIGZ1bmN0 aW9uIHRyZWF0cyB0aGUgY29udGVudCBhcyBhIG5ldyBmaWxlDQpmdW5jdGlvbiBzbWRfYXRf bmV3ZmlsZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9ICcnOw0KCSRtZXNzYWdlPScnOw0KCXNt ZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCg0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJykpKSk7DQoJJG1z Zz0nJzsNCg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2luKTsNCgkkbmV3X3NraW4gPSBy YXd1cmxlbmNvZGUoJG5ld19za2luKTsNCg0KCWlmIChlbXB0eSgkbmV3X3NraW4pKSB7DQoJ CSRtc2cgPSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0eScpOw0KCX0NCg0KCS8vIENoZWNrIHRo ZSBuZXcgbmFtZSBpc24ndCBhbHJlYWR5IGluIHVzZQ0KCSR0aGVtZXMgPSBzbWRfYXRfcmVh ZF9za2lucygpOw0KDQoJaWYgKGluX2FycmF5KCRuZXdfc2tpbiwgJHRoZW1lcykpIHsNCgkJ JG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICRu ZXdfc2tpbikpOw0KCX0NCg0KCS8vIE5vIGVycm9ycywgc28gbWFrZSBhIG5ldyBkaXIgYW5k IGNyZWF0ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1zZz09JycpIHsNCgkJJGNvbnRlbnQgPSAn JzsNCgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4uRFM7DQoJCSRyZXMgPSBta2Rpcigk ZGVzdGRpcik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJCWlmICgkc2tpbikgew0KCQkJLy8gQmFz ZWQgb24gYW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5lZWQgZm9yIGFueSBmdW5jdGlvbnMgb3Ro ZXIgdGhhbiBtYW5pZmVzdCgpDQoJCQkkYmFzZWQgPSAidGhlbWU6OmJhc2VkX29uKCciLiRz a2luLiInKTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tpbi4nX3RoZW1lJzsNCgkJCSRzcmNzcyA9 IFRIRU1FLiRza2luLkRTLid0ZXh0cGF0dGVybi5jc3MnOw0KCQkJaWYgKGZpbGVfZXhpc3Rz KCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsNCgkJCQkkaW1wb3J0ID0gam9p bignJywgZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGltcG9ydCA9ICdAaW1w b3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3MiKTsnOw0KCQkJfQ0KCQkJJGNv bnRlbnQgPSAneyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBCcmFuZCBzcGFua2luZyBuZXcgdGhl bWUuIENsb25lICdjbGFzc2ljJyBmdW5jdGlvbnMgdGhlbiBhZGQgbmV3IG1hbmlmZXN0KCkN CgkJCSRleHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRpbXBvcnQgPSAnJzsNCgkJCSRzcmMgPSB0 eHBhdGguRFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidjbGFzc2ljLnBocCc7DQoJCQkkZ3JhYiA9 IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgkc3JjKTsNCg0KCQkJZm9yZWFjaCgkZnAgYXMgJGxp bmUpIHsNCgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsNCgkJCQlpZiAoc3RycG9zKCRsaW5l LCAnZnVuY3Rpb24gbWFuaWZlc3QoKScpICE9PSBmYWxzZSkgew0KCQkJCQkkZ3JhYiA9IGZh bHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWlmICgkZ3Jh Yikgew0KCQkJCQkkY29udGVudCAuPSAkbGluZS5uOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9z KCRsaW5lLCAnY2xhc3MgY2xhc3NpY190aGVtZSBleHRlbmRzIHRoZW1lJykgIT09IGZhbHNl KSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBtYW5p ZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRfYXV0aG9yX25hbWUoJHR4cF91c2VyKTsN CgkJJG1hbnRpdGxlID0gdWN3b3JkcygkbmV3X3NraW4pOw0KDQoJCS8vIFdyaXRlIHRoZSBu ZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0KPD9waHANCg0KaWYgKCFkZWZpbmVkKCd0 eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMgdW5kZWZpbmVkLicpOw0KDQp7 JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19za2lufV90aGVtZSBleHRlbmRzIHskZXh0ZW5kc30N CnskY29udGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlmZXN0KCkNCgl7DQoJCXJldHVybiBhcnJh eSgNCgkJCSd0aXRsZScJIAkJPT4gJ3skbWFudGl0bGV9JywNCgkJCSdhdXRob3InIAkJPT4g J3skbWFudXNlcn0nLA0KCQkJJ2F1dGhvcl91cmknIAk9PiAnJywNCgkJCSd2ZXJzaW9uJyAJ CT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycsDQoJCQknaGVscCcgCQkJPT4g JycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0KCQkkZnAgPSBmb3BlbigkZGVzdGRpci4k bmV3X3NraW4uJy5waHAnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGJ1Zik7DQoJCWZjbG9z ZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUNCgkJJGZwID0gZm9wZW4oJGRl c3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycsICJ3YiIpOw0KCQlmd3JpdGUoJGZwLCAkaW1wb3J0 KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRza2luKSB7DQoJCQkkbXNnID0gc21kX2F0 X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0K CQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2NyZWF0ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJCX0NCg0KLy8JJG1zZyA9IHNtZF9hdF9n VHh0KCdza2luX25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7 Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NydXNoX29wdGlvbnMoJGRpcmVjdGlvbj0n ZXhwb3J0Jykgew0KCSRzbWRfY3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4 dCgnY190YXInKSk7DQoNCglpZiAoJGRpcmVjdGlvbiA9PSAnZXhwb3J0Jykgew0KCQlpZiAo ZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnem9w ZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVy c1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJJHNtZF9jcnVzaGVyc1sn emlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlpZiAoZnVuY3Rpb25fZXhp c3RzKCdiemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiem9wZW4nKSAmJiBmdW5j dGlvbl9leGlzdHMoJ2J6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snYnppcDInXSA9 IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBJbXBvcnQg ZnVuY3Rpb24gcmVxdWlyZW1lbnRzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0 ZScpKSB7DQoJCQkkc21kX2NydXNoZXJzWydnemlwJ10gPSBzbWRfYXRfZ1R4dCgnY19nemlw Jyk7DQoJCQkkc21kX2NydXNoZXJzWyd6aXAnXSA9IHNtZF9hdF9nVHh0KCdjX3ppcCcpOw0K CQl9DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7DQoJCQkkc21k X2NydXNoZXJzWydiemlwMiddID0gc21kX2F0X2dUeHQoJ2NfYnppcDInKTsNCgkJfQ0KCX0N CglyZXR1cm4gJHNtZF9jcnVzaGVyczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhwb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRf YXRfcHJlZnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNo JykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoJY2hkaXIoVEhFTUUpOw0KCSRza2luZm8gPSBzbWRf YXRfcmVhZF9za2luZm8oJHNraW4pOw0KCSRyZXBzID0gYXJyYXkoDQoJCSd7dGhlbWV9JyA9 PiAkc2tpbiwNCgkJJ3t2ZXJzaW9ufScgPT4gJHNraW5mb1sndmVyc2lvbiddLA0KCSk7DQoJ JG91dCA9IHN0cnRyKGdldF9wcmVmKCdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JywgJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCddKSwgJHJlcHMpOw0KDQoJLy8g Q2hlY2sgdGhlIHBhc3NlZCBjb21wcmVzc2lvbiBmb3JtYXQgaXMgdmFsaWQ7IHVzZSBkZWZh dWx0IGlmIG5vdA0KCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJaWYg KCRjcnVzaD09JycgfHwgJGNydXNoPT0ndW5kZWZpbmVkJyB8fCAhYXJyYXlfa2V5X2V4aXN0 cygkY3J1c2gsICRjcnVzaGVycykpIHsNCgkJJGNydXNoID0gZ2V0X3ByZWYoJ3NtZF9hdF9j cnVzaCcsICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF9jcnVzaCddKTsNCgl9DQoNCglzd2l0 Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3ppcCc6DQoJCQkkemlwID0gbmV3IHNtZF9hdF96aXBf ZmlsZSgkb3V0LicuemlwJyk7DQoJCQlicmVhazsNCgkJY2FzZSAnYnppcDInOg0KCQkJJHpp cCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKCRvdXQuJy50YnoyJyk7DQoJCQlicmVhazsNCgkJ Y2FzZSAndGFyJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3Rhcl9maWxlKCRvdXQuJy50YXIn KTsNCgkJCWJyZWFrOw0KCQljYXNlICdnemlwJzoNCgkJZGVmYXVsdDoNCgkJCSR6aXAgPSBu ZXcgc21kX2F0X2d6aXBfZmlsZSgkb3V0LicudGd6Jyk7DQogCQkJYnJlYWs7DQoJfQ0KDQoJ JHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+IHR4cGF0aC5EUy5USEVNRSwg J292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5JyA9PiAxKSk7DQoJJHppcC0+YWRkX2ZpbGVz KCRza2luLkRTLicqLionKTsNCgkkemlwLT5leGNsdWRlX2ZpbGVzKCRza2luLkRTLicqLnN2 bionKTsNCgkkemlwLT5jcmVhdGVfYXJjaGl2ZSgpOw0KCSR6aXAtPmRvd25sb2FkX2ZpbGUo KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRf aW1wb3J0KCkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZp bGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhl ZmlsZSddWyd0bXBfbmFtZSddLCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sn dGhlZmlsZSddWyd0bXBfbmFtZSddKSk7DQoJJGJhc2VkaXIgPSB0eHBhdGguRFMuVEhFTUU7 DQoJJHVuY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygnaW1wb3J0Jyk7DQoJJG1l c3NhZ2U9Jyc7DQoJJGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOw0KCSRleHQgPSAkaW5m b1sxXTsNCg0KCWlmICgkbmFtZSAmJiAkZmlsZSkgew0KCQlpZiAoJGV4dCA9PSAnemlwJyAm JiBhcnJheV9rZXlfZXhpc3RzKCd6aXAnLCAkdW5jcnVzaGVycykpIHsNCgkJCSR6aXAgPSBu ZXcgc21kX2RVbnppcDIoJGZpbGUpOw0KLy8JCQkkemlwLT5kZWJ1ZyA9IHRydWU7DQoJCQkk emlwLT5nZXRMaXN0KCk7DQoJCQkkdmFsaWRBcmNoaXZlID0gc21kX2F0X2NoZWNrX2FyY2hp dmUoJHppcC0+Y29tcHJlc3NlZExpc3QsICRleHQpOw0KCQkJaWYgKCR2YWxpZEFyY2hpdmUp IHsNCgkJCQkkemlwLT51bnppcEFsbCgkYmFzZWRpcik7DQoJCQkJJHppcC0+Y2xvc2UoKTsN CgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJCX0gZWxzZSB7 DQoJCQkJJG1lc3NhZ2UgPSBhcnJheShzbWRfYXRfZ1R4dCgnaW1wb3J0X2ZhaWxlZCcpLCBF X1dBUk5JTkcpOw0KCQkJfQ0KCQl9IGVsc2UgaWYgKCRleHQgPT0gJ3RneicgJiYgYXJyYXlf a2V5X2V4aXN0cygnZ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9IG5ldyBzbWRf YXRfZ3ppcF9maWxlKGJhc2VuYW1lKCRmaWxlKSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhh cnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6 aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9y dF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0gJ3RiejInICYmIGFycmF5X2tleV9leGlz dHMoJ2J6aXAyJywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9iemlw X2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdi YXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0 cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7 DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGFyJykgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRf dGFyX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5 KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29r Jyk7DQoJCX0gZWxzZSB7DQoJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9hdF9nVHh0KCd1bnN1 cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnLCBhcnJheSgne2NydXNofScgPT4gJGV4dCkpLCBF X1dBUk5JTkcpOw0KCQl9DQoNCgkJLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KCQl1 bmxpbmsoJGZpbGUpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Vt cHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRfbGlzdCgkbWVzc2FnZSk7DQp9DQoNCi8vIENo ZWNrIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSBhcmNoaXZlIGZvciB2YXJpb3Vz IGl0ZW1zL2F0dHJpYnV0ZXMuDQovLyBFYWNoIHRpbWUgb25lIG9mIHRoZSBjb25kaXRpb25z IGlzIG1ldCwgdGhlIHZjbnQgaXMgaW5jcmVtZW1lbnRlZC4NCi8vIE9uY2UgdGhlIHdob2xl IGFyY2hpdmUgaGFzIGJlZW4gcmVhZCwgaWYgdGhlIHZjbnQgbWF0Y2hlcyB0aGUgZXhwZWN0 ZWRDb3VudHMgZm9yDQovLyB0aGF0IHR5cGUsIHRoZSBhcmNoaXZlIGlzIHZhbGlkLg0KZnVu Y3Rpb24gc21kX2F0X2NoZWNrX2FyY2hpdmUoJHN0cnVjdCwgJHR5cGU9J3ppcCcpIHsNCgkk ZXhwZWN0ZWRDb3VudHMgPSBhcnJheSgnemlwJyA9PiAxLCAndGd6JyA9PiAwLCAndGJ6Micg PT4gMCwgJ3RhcicgPT4gMCk7DQoJc3dpdGNoICgkdHlwZSkgew0KCQljYXNlICJ6aXAiOg0K CQkJJHZjbnQgPSAwOw0KCQkJZm9yZWFjaCAoJHN0cnVjdCBhcyAkZW50cnkgPT4gJGluZm8p IHsNCgkJCQkkcGFydHMgPSBwYXRoaW5mbygkaW5mb1snZmlsZV9uYW1lJ10pOw0KCQkJCWlm IChpc3NldCgkcGFydHNbJ2V4dGVuc2lvbiddKSAmJiAkcGFydHNbJ2V4dGVuc2lvbiddID09 ICdwaHAnKSB7DQoJCQkJCSRkaXJiaXRzID0gZXhwbG9kZShEUywgJHBhcnRzWydkaXJuYW1l J10pOw0KCQkJCQkkbnVtZGlycyA9IGNvdW50KCRkaXJiaXRzKTsNCgkJCQkJaWYgKCgkcGFy dHNbJ2ZpbGVuYW1lJ10gPT0gJGRpcmJpdHNbJG51bWRpcnMtMV0pICYmICRudW1kaXJzPT0x KSB7DQoJCQkJCQkkdmNudCsrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJYnJlYWs7DQoJ fQ0KDQoJcmV0dXJuICgkZXhwZWN0ZWRDb3VudHNbJHR5cGVdID09ICR2Y250KSA/IHRydWUg OiBmYWxzZTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfdXBsb2FkX2ltYWdlKCkgew0KCWdsb2JhbCAkZmlsZV9tYXhfdXBsb2FkX3NpemU7 DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnaWQnKSkpKTsNCgkkX1BPU1RbJ3Nr aW4nXSA9ICRza2luID0gJGlkOw0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25h bWUnXTsNCgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsn dG1wX25hbWUnXSk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUgPT09IGZhbHNlKSB7 DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiIgJG5hbWUgLSAi LnVwbG9hZF9nZXRfZXJyb3Jtc2coJF9GSUxFU1sndGhlZmlsZSddWydlcnJvciddKTsNCgkJ c21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCQlleGl0KCk7DQoJfQ0KDQoJJHNpemUgPSBmaWxl c2l6ZSgkZmlsZSk7DQoJaWYgKCRmaWxlX21heF91cGxvYWRfc2l6ZSA8ICRzaXplKSB7DQoJ CXVubGluaygkZmlsZSk7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVk JykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coVVBMT0FEX0VSUl9GT1JNX1NJ WkUpOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJCWV4aXQoKTsNCgl9DQoNCgkkc2tp bmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkkbmV3X3NraW4gPSAkc2tpbmZv WyduYW1lJ107DQoJJG5ld3BhdGggPSAkc2tpbmZvWydwYXRoJ107DQoNCglpZiAoJG5ld19z a2luICYmICRmaWxlKSB7DQoJCWlmKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdw YXRoLiRuYW1lKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndXBsb2FkX3N1Y2Nl c3MnKTsNCgkJfSBlbHNlIHsNCgkJCXVubGluaygkZmlsZSk7DQoJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCd1cGxvYWRfZmFpbGVkJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1l c3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF9hdF9kZWxldGVfaW1hZ2UoKSB7DQoJZ2xvYmFsICRzbWRfY29yZV90aGVtZXM7DQoNCgll eHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicpKSkpOw0KCSRmaWxlX2xpc3QgPSBn cHMoJ3NtZF9hdF9pbWFnZXMnKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmIChlbXB0eSgkZmls ZV9saXN0KSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJ fSBlbHNlIHsNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0K CQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tz a2lufScgPT4gJHNraW4pKTsNCgkJfSBlbHNlIHsNCgkJCWZvcmVhY2ggKCRmaWxlX2xpc3Qg YXMgJGltYWdlKSB7DQoJCQkJJHBhdGggPSB0eHBhdGguRFMuJGltYWdlOw0KCQkJCXVubGlu aygkcGF0aCk7DQoJCQl9DQoJCX0NCgl9DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0 ZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lcywgJHRoZW1lLCAkc21kX2F0X3ByaXZz LCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4n LCAnZmlsZScpKSkpOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKCRmaWxlKSB7DQoJCS8vIEVk aXRpbmcgYSBza2luLCB0aHVzIGRlbGV0aW5nIGEgc2luZ2xlIGZpbGUNCgkJaWYgKGluX2Fy cmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJ CXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsNCgkJCSRkZWwgPSB1bmxpbmso VEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJaWYgKCRkZWwpIHsNCgkJCQkkbWVzc2FnZSA9 IGdUeHQoJ2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQkJ JF9QT1NUWydmaWxlJ10gPSAnJzsgLy8gQ2xlYXIgdGhlIHZhcmlhYmxlIHNvIHRoZSBmaWxl bmFtZSBkb2Vzbid0IGFwcGVhciBvbiB0aGUgZWRpdCBwYWdlDQoJCQl9IGVsc2Ugew0KCQkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfbm90X2RlbGV0ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkZmlsZSkpOw0KCQkJfQ0KCQl9DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsN Cgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lJywgYXJyYXkoJ3tza2lu fScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsN CgkJCS8vIFZpZXdpbmcgdGhlIHNraW4gbGlzdCwgdGh1cyBkZWxldGluZyB0aGUgd2hvbGUg c2tpbg0KCQkJJHNraW5kaXIgPSBUSEVNRS4kc2tpbjsNCgkJCWlmICghc21kX3JtZGlyX3Jl Y3Vyc2l2ZSgkc2tpbmRpcikpIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdkZWxl dGVfZmFpbGVkJyk7DQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J3NraW5fZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRza2luKSk7DQoJCQl9DQoNCgkJ CS8vIEhhbmRsZSBzaXR1YXRpb25zIGlmIGN1cnJlbnQgc2tpbiBoYXMgYmVlbiBkZWxldGVk DQoJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkk YXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgkJCQkvLyBSZXNldCB0aGUgZ2xv YmFsIHNraW4gaW4gY2FzZSBpdCdzIGJlZW4gZGVsZXRlZA0KCQkJCSRnYmxfc2tpbiA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSkgPyAkYXRfcHJlZnNbJ3Nt ZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJCQkJJGdibF9za2luID0gKCRnYmxfc2tpbiAh PSAnJyAmJiBmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJGdibF9za2luKSkgPyAkZ2Js X3NraW4gOiAnY2xhc3NpYyc7DQoJCQkJc2V0X3ByZWYoJ3NtZF9hdF9nbG9iYWxfc2tpbics ICRnYmxfc2tpbiwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7 DQoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkZ2JsX3NraW4pOw0KDQoJCQkJJHNraW4g PSBnZXRfcHJlZignc21kX3NraW4nKTsNCgkJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5E Uy5USEVNRS4kc2tpbikpIHsNCgkJCQkJJHNraW4gPSAkZ2JsX3NraW47DQoJCQkJfQ0KCQkJ CXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAnc21kX2F0JywgUFJFRl9ISURERU4sICd0 ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJCX0NCgkJCSRfR0VUWydza2luJ10g PSAkc2tpbjsNCgkJCSRfR0VUWyduZXh0c3RlcCddID0gJ3NtZF9hdF9saXN0JzsNCgkJCXNt ZF9hdF9zd2l0Y2goJG1lc3NhZ2UpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zYXZlKCkgew0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdza2luJywnbmV3X3NraW4nLCdmaWxlJywnc21kX2F0X2VkaXRzJykp KSk7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIsICJwaHAiKTsN CgkkbWVzc2FnZSA9ICRleHRyYU1zZyA9ICcnOw0KCSRmaWxlID0gdHJpbSgkZmlsZSk7DQoJ JG5ld19za2luID0gdHJpbSgkbmV3X3NraW4pOw0KCSRtc2dsZXYgPSAwOw0KDQoJLy8gTmV3 IGZpbGUNCglpZiAoISRmaWxlICYmICRuZXdfc2tpbikgew0KCQkkZmlsZSA9ICRuZXdfc2tp bjsNCgkJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGZpbGUpKTsNCgkJaWYgKHN0 cnRvbG93ZXIoJGZpbGUpICE9ICdyZWFkbWUnICYmICgkZXh0ID09ICcnIHx8ICFpbl9hcnJh eSgkZXh0LCAkZWRpdGFibGUpKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5z dXBwb3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsN CgkJCSRtc2dsZXYgPSBFX1dBUk5JTkc7DQoJCQkkX1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOw0K CQl9DQoJfQ0KDQoJaWYgKCRtZXNzYWdlPT0nJykgew0KCQkkZm5hbWUgPSBzYW5pdGl6ZUZv ckZpbGUoJGZpbGUpOw0KCQkkbmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsN CgkJJF9QT1NUWyduZXdfc2tpbiddID0gJG5ld19za2luOw0KDQoJCSRzbWRfYXRfZWRpdHMg PSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRzbWRfYXRfZWRpdHMpKTsgLy8g bmV3bGluZSB3b3JrYXJvdW5kDQoNCgkJaWYgKCRmbmFtZSkgew0KCQkJJGZpbGVwYXRoID0g VEhFTUUuJHNraW4uRFM7DQoJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlcGF0aC4kZm5hbWUp KSB7DQoJCQkJJHJldCA9IHRvdWNoKCRmaWxlcGF0aC4kZm5hbWUpOw0KCQkJCWlmICgkcmV0 ID09PSBmYWxzZSkgew0KCQkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdta2Rpcl9mYWls ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUpKTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8v IEFzc3VtaW5nIG5vIGVycm9ycyBzbyBmYXIuLi4NCgkJCWlmICgkbWVzc2FnZSA9PSAnJykg ew0KCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4kZm5hbWUsICd3YicpOw0KCQkJCWZ3cml0 ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0KCQkJCWZjbG9zZSgkZmgpOw0KDQoJCQkJaWYgKCRm bmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJCQkJLy8gUmVuYW1lIHRoZSBmaWxlDQoJCQkJCSRy ZXMgPSByZW5hbWUoJGZpbGVwYXRoLiRmbmFtZSwgJGZpbGVwYXRoLiRuZXdfc2tpbik7DQoN CgkJCQkJLy8gSWYgdGhlIHJlbmFtZWQgZmlsZSBpcyB0aGUgdGhlbWUncyBQSFAgZmlsZSwg dHJ5IHRvIHJlbmFtZSB0aGUgbWFpbiBza2luIGRpciB0b28NCgkJCQkJJGZpbGViaXRzID0g ZXhwbG9kZSgnLicsICRuZXdfc2tpbik7DQoJCQkJCSRvbGRmaWxlYml0cyA9IGV4cGxvZGUo Jy4nLCAkZm5hbWUpOw0KCQkJCQkkZXh0ID0gYXJyYXlfcG9wKCRmaWxlYml0cyk7DQoJCQkJ CWlmICgkcmVzICYmICRleHQgPT0gJ3BocCcgJiYgKCRvbGRmaWxlYml0c1swXSA9PSAkc2tp bikpIHsNCgkJCQkJCSRuZXdfZmlsZXBhdGggPSBUSEVNRS4kZmlsZWJpdHNbMF0uRFM7DQoJ CQkJCQkkcmVuID0gcmVuYW1lKCRmaWxlcGF0aCwgJG5ld19maWxlcGF0aCk7DQoJCQkJCQkk ZmlsZXBhdGggPSAoJHJlbikgPyAkbmV3X2ZpbGVwYXRoIDogJGZpbGVwYXRoOw0KCQkJCQkJ JF9QT1NUWydza2luJ10gPSAkZmlsZWJpdHNbMF07DQoJCQkJCX0NCgkJCQkJJGV4dHJhTXNn ID0gKCRyZXMpID8gc21kX2F0X2dUeHQoJ3JlbmFtZWQnLCBhcnJheSgne25hbWV9JyA9PiAk bmV3X3NraW4pKSA6IHNtZF9hdF9nVHh0KCdyZW5hbWVfZmFpbGVkJyk7DQoJCQkJfQ0KDQoJ CQkJLy8gUHJvY2VzcyBhbnkgY3NzIHJlcGxhY2VtZW50cw0KCQkJCSRmaWxlYml0cyA9IGV4 cGxvZGUgKCcuJywoKCRmbmFtZT09JG5ld19za2luKT8gJGZuYW1lIDogJG5ld19za2luKSk7 DQoJCQkJJGNzc2ZpbGUgPSAkZmlsZWJpdHNbMF07DQoJCQkJJGV4dCA9IGFycmF5X3BvcCgk ZmlsZWJpdHMpOw0KCQkJCWlmICgkZXh0ID09ICdzc2MnKSB7DQoJCQkJCSRyZXBsYWNlbWVu dHMgPSBhcnJheSgpOw0KCQkJCQkkbnVtX3JlcDEgPSBwcmVnX21hdGNoX2FsbCgnLyhcQFtB LVphLXowLTlfXSspOlxzKiguKik7LycsICRzbWRfYXRfZWRpdHMsICRtYXRjaGVzMSk7DQoJ CQkJCSRudW1fcmVwMiA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAtOV9dKyk6XHMq XHsoLio/KVx9L3MnLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczIpOw0KDQoJCQkJCS8vIFNp bXBsZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0Y2hlczEgYXMgJGlkeCA9PiAk cmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJCQkJCQkJLy8gUmVtb3ZlIHRo ZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRyZXApIHsN CgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRf ZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICgkaWR4ID09IDEpIHsNCgkJ CQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgew0KCQkJCQkJCQkkcmVw bGFjZW1lbnRzWyRyZXBdID0gJG1hdGNoZXMxWzJdWyRqZHhdOw0KCQkJCQkJCX0NCgkJCQkJ CX0NCgkJCQkJfQ0KDQoJCQkJCS8vIE11bHRpLWxpbmUgcmVwbGFjZW1lbnRzDQoJCQkJCWZv cmVhY2goJG1hdGNoZXMyIGFzICRpZHggPT4gJHJlcGFycikgew0KCQkJCQkJaWYgKCRpZHgg PT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25zDQoJCQkJCQkJ Zm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJCSRzbWRfYXRfZWRpdHMgPSBz dHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsNCgkJCQkJCQl9DQoJCQkJCQl9 DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAk amR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVwLic7J10gPSB0cmlt KCRtYXRjaGVzMlsyXVskamR4XSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJ CQkJLy8gR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBuZXcgY3NzIGZpbGUNCgkJCQkJJHNtZF9h dF9lZGl0cyA9IHRyaW0oc3RydHIoJHNtZF9hdF9lZGl0cywgJHJlcGxhY2VtZW50cykpOw0K CQkJCQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGNzc2ZpbGUuJy5jc3MnLCAnd2InKTsNCgkJ CQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJCQkJCWZjbG9zZSgkZmgpOw0KCQkJ CQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJCQkJJG9sZGZuYW1lID0gZXhwbG9k ZSAoJy4nLCAkZm5hbWUpOw0KCQkJCQkJJG9sZGZuYW1lID0gJG9sZGZuYW1lWzBdLicuY3Nz JzsNCgkJCQkJCSRyZXMgPSBAdW5saW5rKCRmaWxlcGF0aC4kb2xkZm5hbWUpOw0KCQkJCQl9 DQoJCQkJfQ0KDQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZmlsZV9zYXZlZCcsIGFy cmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpLmJyLiRleHRyYU1zZzsNCgkJCX0NCgkJfQ0KCX0N CglzbWRfYXRfZWRpdChhcnJheSgkbWVzc2FnZSwgJG1zZ2xldikpOw0KfQ0KDQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUFJFRlMNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcmVmcygpIHsNCglnbG9iYWwgJHNtZF9h dF9wcmVmczsNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5 cygkc21kX2F0X3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwnLCd0 eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOw0KCSRhdF9wcmVmcyA9IGFy cmF5KCk7DQoJZm9yZWFjaCAoJHJzIGFzICRwcmVmYXJyKSB7DQoJCSRhdF9wcmVmc1skcHJl ZmFyclsnbmFtZSddXSA9ICRwcmVmYXJyWyd2YWwnXTsNCgl9DQoJcmV0dXJuICRhdF9wcmVm czsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRf b3B0aW9ucygkZXZlbnQsICRzdGVwLCAkbWVzc2FnZT0nJykgew0KCXNtZF9hdF9zZXR1cCgk bWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X3NldHVwKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9w cmVmcywgJHNtZF9hdF9ldmVudCwgJHRoZW1lLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0 X3N0eWxlczsNCg0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRfYXRfcHJlZnNbMF0pOw0K CSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbnVtUm93cyA9IGNvdW50KCRh dF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3ByZWZzJyksJG1lc3NhZ2UpOw0KDQoJLy8g VE9ETzogdXNlIGdldF9ncm91cHMoKTsNCgkkbGV2ZWxzID0gYXJyYXkoDQovLwkJMSA9PiBn VHh0KCdwdWJsaXNoZXInKSwNCgkJMiA9PiBnVHh0KCdtYW5hZ2luZ19lZGl0b3InKSwNCgkJ MyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLA0KCQk0ID0+IGdUeHQoJ3N0YWZmX3dyaXRlcicp LA0KCQk1ID0+IGdUeHQoJ2ZyZWVsYW5jZXInKSwNCgkJNiA9PiBnVHh0KCdkZXNpZ25lcicp LA0KCSk7DQoJJG51bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsNCg0KCS8vIFNwbGl0IHRoZSB1 c2VyIHNraW4gbGlzdA0KCSR1c2tpbnMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsNCgkJJHVza2lucyA9IGV4cGxvZGUoJywnLCAk YXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7DQoJfQ0KDQoJJGxheW91dCA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10gOiAxOw0KCSRjbHJCdG4gPSAnIFs8c3BhbiBpZD0ic21kX2NsciIgY2xhc3M9InNt ZF9mYWtlYnRuIj4nLnNtZF9hdF9nVHh0KCdjbGVhcicpLic8L3NwYW4+XSc7DQoJJGJ0blNl dCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXQnKSwgJ3B1 Ymxpc2gnKTsNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQo J3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBv c3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9w cmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQn LCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsNCgkk YnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21k X2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3Bs YXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScp LCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkkYnRuTGlzdCA9ICcgPGEgY2xhc3M9Im5h dmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgo KCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIg Lz4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7DQoJ JHJhZEJ0bnMgPSBhcnJheSgNCgkJc21kX2F0X2dUeHQoJ3Blcl9zaXRlJyksDQoJCXNtZF9h dF9nVHh0KCdwZXJfZ3JvdXAnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl91c2VyJyksDQoJKTsN Cg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmICgkbnVtUm93cyA9PSAkbnVtUmVx UHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0KCQkkc2tpbl9saXN0ID0gc21k X2F0X3JlYWRfc2tpbnMoKTsNCg0KCQkvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGluZGV4 IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UNCgkJJHNraW5zZWwgPSBh cnJheSgpOw0KCQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0K CQkJaWYgKHNtZF9hdF9leGlzdHMoJHZhbHVlMSkpIHsNCgkJCQkkc2tpbnNlbFskdmFsdWUx XSA9ICRza2luX2xpc3RbJGtleTFdOw0KCQkJfQ0KCQl9DQoJCSRnYmxfc2tpbiA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9h dF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2lu J10gOiAkdGhlbWUtPm5hbWU7DQoNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0 KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1vdmUuJGJ0 bkxpc3QsICRidG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rp b249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1zbWRfYXRfcHJlZnNfdXBk YXRlIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsiPic7DQoJCWVjaG8gdHIodGRh KHNtZF9hdF9nVHh0KCdjYXNlX3NvcnQnKSkudGRhKHllc25vUmFkaW8oJ3NtZF9hdF9jYXNl X3NvcnQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSksICcgd2lkdGg9IjI0MCIg aWQ9InNtZF9hdF9jYXNlX3NvcnQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgn Y3J1c2hfdHlwZScpKS50ZGEocmFkaW9TZXQoc21kX2F0X2NydXNoX29wdGlvbnMoKSwgJ3Nt ZF9hdF9jcnVzaCcsICRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAi IGlkPSJzbWRfYXRfY3J1c2giJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5 b3V0JykpLnRkYShyYWRpb1NldChhcnJheShzbWRfYXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwg c21kX2F0X2dUeHQoJ2xheW91dF9ncmlkJykpLCAnc21kX2F0X2xheW91dCcsICRhdF9wcmVm c1snc21kX2F0X2xheW91dCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2xheW91dCIn KSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1 dCgndGV4dCcsICdzbWRfYXRfdHcnLCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcn LDQpLnNtZF9hdF9nVHh0KCd0aW1lcycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAk YXRfcHJlZnNbJ3NtZF9hdF90aCddLCcnLCcnLCcnLDQpKSk7DQoJCWVjaG8gdHIodGRhKHNt ZF9hdF9nVHh0KCdmaWxlbmFtZV9mb3JtYXQnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRf YXRfZmlsZW5hbWVfZm9ybWF0JywgJGF0X3ByZWZzWydzbWRfYXRfZmlsZW5hbWVfZm9ybWF0 J10pKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRfZ1R4dCgnZ2xvYmFsX3NraW4nKSkN CgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2JhbF9za2luJywgJHNraW5zZWwsICRn Ymxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdza2lu X3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMsICdzbWRfYXRfc3lzdGVtJywgJGF0 X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfcmFk aW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2X2xpc3QgPSAnPHNlbGVjdCBpZD0i c21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNbXSIgY2xhc3M9Imxpc3QiIHNpemU9 IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxlIj4nOw0KCQlmb3JlYWNoICgkbGV2 ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJJHByaXZfbGlzdCAuPSAnPG9wdGlv biB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4nPC9vcHRpb24+JzsNCgkJfQ0KCQkk cHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8vIE5vdGUgdGhlIGhpZGRlbiBza2lu IGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFueSBsaXN0IGNoYW5nZXMgYW5k IGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRfYXRfZ1R4dCgnc2tpbl9ncm91cHMn KTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91cF9saXN0JywgJGF0X3ByZWZzWydz bWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0gJzxzZWxlY3QgaWQ9InNtZF9hdF9n cnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMu JyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNraW4pIHsNCgkJCWlmIChzbWRf YXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4k YXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJCQl9DQoJCX0NCgkJJHNlbGIgLj0g Jzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAnIGNsYXNzPSJzbWRfYXRfc2Vs MSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2X2xpc3QsICcgd2lkdGg9IjQwMCIg Y2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykpOw0KDQoJCS8vIE9wdGlvbiAyDQoJ CSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tpbnMnKTsNCgkJJHNlbGIgPSAnPHNl bGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0ic21kX2F0X3VzZXJfbGlzdFtdIiBj bGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11bHRpcGxlIj4nOw0KCQlmb3JlYWNo ICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJGFza2lu KSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSInLiRhc2tpbi4nIicuKChpbl9h cnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJyku Jz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0KCQkkc2VsYiAuPSAnPC9zZWxl Y3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0ic21kX2F0X3Nl bDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0aD0iMjQwIiBjbGFzcz0ic21k X2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRu U3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAg JiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNt ZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCQkuc21kX2F0X2dUeHQoJ3By ZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuc21kX2F0X2dUeHQoJ3ByZWZzX3Nv bWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuUmVt b3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0gZWxz ZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdwcmVmc19ub3RfaW5zdGFsbGVkJyks ICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5 bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENvbmNhdGVuYXRlIGNoZWNrYm94IG9w dGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc3dhcChzZWxWYWx1ZSkg ew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7DQoJCWlmIChpZHg9PXNlbFZhbHVl KSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLnNob3coKTsNCgkJfSBlbHNlIHsN CgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlkZSgpOw0KCQl9DQoJfQ0KfQ0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X3N5c3RlbSdd IikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRfcHJlZnN3YXAodGhpcy52YWx1ZSk7 DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCWpR dWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0cigic2VsZWN0ZWQiLCAiIik7 DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNoYW5nZShmdW5jdGlvbigpIHsN CgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCg0KCQkvLyBDbGVhciB0aGUgb2xk IHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlzdCBmcm9tIHRoZSBoaWRkZW4g ZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLmF0dHIoInNlbGVjdGVk IixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRf Z3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBzID0gZ3JwbGlzdC5zcGxpdCgnLCcp Ow0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZvciAodmFyIGlkeCA9IDA7IGlkeCA8 IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tpZHhdLnNwbGl0KCc6Jyk7DQoJCQlz a2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNraW5pZCA9PSBzZWxza2luKSB7DQoJ CQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJZm9yIChqZHggPSAwOyBqZHggPCBu dW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlvblt2 YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2Uo ZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnkoIiNzbWRfYXRfZ3JwcyBvcHRpb246 c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtdOw0KCQl2YXIgcHJpdnMgPSBbXTsN CgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlv bjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlwcml2cy5wdXNoKGpRdWVyeSh0 aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMubGVuZ3RoID09IDEpIHsNCgkJCXBy aXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1c2gocHJpdnMuam9pbigiOiIpKTsN CgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3Vw X2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3QgPSBoaWRsaXN0LnNwbGl0KCcsJyk7 DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3RoOw0KDQoJCWpRdWVyeSgiI3NtZF9h dF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQljdXJyc2tpbiA9IGpRdWVy eSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAhPSBzZWxza2luKSB7DQoJCQkJZm9y ICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4KyspIHsNCgkJCQkJcHJldnByaXZz ID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJCQlza2luaWQgPSBwcmV2cHJpdnMu c2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHByaXYgbGlzdCBmb3IgdGhlIGN1cnJl bnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkgZHVwbGljYXRlIHByaXZzIHNldCBl bHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJyc2tpbikgew0KCQkJCQkJdG1wb3V0 ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQpOw0KCQkJCQkJZm9yICh0aGlzcHJp diBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1ZXJ5LmluQXJyYXkocHJldnByaXZz W3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJCQl0bXBvdXQucHVzaChwcmV2cHJp dnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAodG1wb3V0Lmxl bmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBvdXQuam9pbigiOiIpKTsNCgkJCQkJ CX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJCWpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0KCX0pOw0KDQoJLy8gRGlzcGxheSBh IHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFzc2lnbmVkIHNraW4gd2hlbiBob3Zl cmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9w dGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3ZpdGVtID0galF1ZXJ5KHRoaXMpLnZh bCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCdd IikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIpOw0KCQlmb3IgKGlkeCA9IDA7 IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJCXNraW56ID0gaXRlbXNbaWR4XS5z cGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHggPCBza2luei5sZW5ndGg7IGpkeCsr KSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkgew0KCQkJCQlqUXVlcnkodGhp cykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0N CgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIs ICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRf YXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglqUXVlcnkoIiNzbWRfYXRfcHJpdnMi KS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0pTOw0KCWVjaG8gJzxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+JzsNCgllY2hvICRzbWRfYXRfc3R5bGVzWydjb21tb24nXS5uLiRzbWRf YXRfc3R5bGVzWydzZXR1cCddOw0KCWVjaG8gJzwvc3R5bGU+JzsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNoYXIgcHJlZmVyZW5jZSB2 YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8gTm90ZTogdmFsdWUgaXMg cGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBwcmVmcyBhcnJheSBp biB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZf ZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVzKGFycmF5KHNtZF9hdF9n VHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyksc21kX2F0X2dUeHQoJ2Nfemlw JykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxpdCgnLy8nLCAkdmFsLCAt MSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJheSgpOw0KCWZvcmVhY2go JG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFsoc3RyaW5nKSR2YWx1ZTFd ID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0nMScpIHsNCglnbG9i YWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVhY2ggKCRzbWRfYXRf cHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRjaCgnbmFtZScsJ3R4 cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9pbnNlcnQoJ3R4cF9w cmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKS4nLCB2 YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJzbWRfYWRza2luIicpOw0K CQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgn cHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfcmVtb3ZlKCRzaG93cGFuZT0n MScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVh Y2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNtZF9hdF9wcmVmc1sxXSkgYXMg JHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFt ZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0n LmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5lKSB7 DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsNCgkJc21kX2F0 X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1Z2luX3ByZWZzLCAkc21kX2F0 X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2UgPSAnJzsNCgkkcG9zdCA9IGFy cmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddID0gZ3BzKCdzbWRfYXRfZ2xv YmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSddID0gZ3BzKCdzbWRfYXRfc3lz dGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdwcygnc21kX2F0X2xheW91dCcp Ow0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMoJ3NtZF9hdF9jYXNlX3NvcnQn KTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9hdF90dycpOw0KCSRwb3N0Wydz bWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJJHBvc3RbJ3NtZF9hdF9maWxlbmFt ZV9mb3JtYXQnXSA9IGdwcygnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCcpOw0KCWlmIChncHMo J3NtZF9hdF91c2VyX2xpc3QnKSkgew0KCQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0g am9pbignLCcsIGdwcygnc21kX2F0X3VzZXJfbGlzdCcpKTsNCgl9IGVsc2Ugew0KCQkkcG9z dFsnc21kX2F0X3VzZXJfbGlzdCddID0gJyc7DQoJfQ0KCWlmIChncHMoJ3NtZF9hdF9ncm91 cF9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9ncm91cF9saXN0J10gPSBncHMoJ3NtZF9h dF9ncm91cF9saXN0Jyk7DQoJfQ0KCWlmIChncHMoJ3NtZF9hdF9jcnVzaCcpKSB7DQoJCSRw b3N0WydzbWRfYXRfY3J1c2gnXSA9IGdwcygnc21kX2F0X2NydXNoJyk7DQoJfQ0KDQoJLy8g U2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVtZSB0byB0aGUgZ2xvYmFsIHRoZW1lDQoJaWYgKCRw b3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgew0KCQlzZXRfcHJlZigndGhlbWVfbmFtZScs ICRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSk7DQoJfQ0KDQoJZm9yZWFjaCAoJHNtZF9h dF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoaXNzZXQoJHBvc3RbJHBy ZWZdKSkgew0KCQkJc2V0X3ByZWYoJHByZWYsICRwb3N0WyRwcmVmXSwgJHNtZF9hdF9ldmVu dCwgMik7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcp Ow0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gVVRJTElUWSBGVU5DVElPTlMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcml2cygkdXNlcj0nJykgew0KCWdsb2JhbCAk dHhwX3VzZXI7DQoJJHVzZXIgPSAoJHVzZXIpID8gJHVzZXIgOiAkdHhwX3VzZXI7DQoJJHBy aXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWU9JyIuZG9TbGFz aCgkdXNlcikuIiciKTsNCglyZXR1cm4gJHByaXZzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leGlzdHMoJG5hbWUpIHsNCgkkaW5zdGFu Y2UgPSB0aGVtZTo6ZmFjdG9yeSgkbmFtZSk7DQoJcmV0dXJuICRpbnN0YW5jZTsNCn0NCg0K Ly8gSWYgcGVyLXVzZXIgc2tpbiBzdXBwb3J0IGlzIE9GRiwgdGhlIGdsb2JhbCBza2luIHdp bnMuDQovLyBPbmUgZXhjZXB0aW9uOiBpZiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgYWxsb3cg dGhlIGN1cnJlbnQgc2tpbiB0byBwcmV2YWlsIHNvIHRoZXkgbWF5IHN3aXRjaCBza2lucyB3 aXRoIGltcHVuaXR5DQovLyBhbmQgbm90IGFmZmVjdCB0aGUgZ2xvYmFsIHNraW4NCmZ1bmN0 aW9uIHNtZF9hdF9wZXIoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJpdnMsICRwcmVmcywgJHRo ZW1lLCAkdHhwX3VzZXI7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJ JHNraW5TeXMgPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF9zeXN0ZW0nXSA6IDA7DQoJJHByaXZzID0gc21kX2F0X2dldF9wcml2cygp Ow0KCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbidd KSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVm c1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkkZ2JsX3NraW4gPSAoc21kX2F0X2V4 aXN0cygkZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsNCg0KCXN3aXRjaCAo JHNraW5TeXMpIHsNCgkJY2FzZSAwOg0KCQkJLy8gR2xvYmFsIGZvcmNlZCBza2luIChleGNl cHQgYWRtaW5zKQ0KCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMsIGV4cGxvZGUoJywnLCAkc21k X2F0X3ByaXZzKSkpIHsNCgkJCQlyZXR1cm4gJGdibF9za2luOw0KCQkJfSBlbHNlIHsNCgkJ CQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRn Ymxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNt ZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9 DQoJCQlicmVhazsNCgkJY2FzZSAxOg0KCQkJLy8gR3JvdXAtbGV2ZWwgZm9yY2VkIHNraW5z DQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMp KSkgew0KCQkJCSRmb3JjZVNraW5zID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dyb3Vw X2xpc3QnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddIDogKCgkZ2JsX3Nr aW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsNCg0KCQkJCS8vIFNwbGl0IHRoZSBn cm91cCBza2luIGxpc3QNCgkJCQkkZ3NraW5zID0gYXJyYXkoKTsNCgkJCQkkZ29wdHMgPSBl eHBsb2RlKCcsJywgJGZvcmNlU2tpbnMpOw0KCQkJCWZvcmVhY2ggKCRnb3B0cyBhcyAkZ3Jw ZGVmKSB7DQoJCQkJCWlmICgkZ3JwZGVmID09ICcnKSBjb250aW51ZTsNCgkJCQkJJHByaXZn cnAgPSBleHBsb2RlKCI6IiwgJGdycGRlZik7DQoJCQkJCSRza2luaWQgPSBhcnJheV9zaGlm dCgkcHJpdmdycCk7DQoJCQkJCWlmIChpbl9hcnJheSgkcHJpdnMsICRwcml2Z3JwKSkgew0K CQkJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRza2luaWQpKSA/ICRza2luaWQgOiAnY2xh c3NpYyc7Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiAoJGdibF9za2luKSA/ICRnYmxf c2tpbiA6ICR0aGVtZS0+bmFtZTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRtaW5zDQoJCQkJ JGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9z a2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRhZG1f c2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNh c2UgMjoNCgkJCS8vIFBlci11c2VyIHNraW4uIElmIHVzZXIgaXMgbm9uLWFkbWluLCBjaGVj ayB0aGUgc2tpbiBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0DQoJCQlpZiAoIWluX2FycmF5KCRw cml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkgew0KCQkJCSR2YWxpZFNraW5z ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgPyAkYXRfcHJlZnNb J3NtZF9hdF91c2VyX2xpc3QnXSA6ICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVt ZS0+bmFtZSk7DQoJCQkJJHZhbGlkU2tpbnMgPSBkb19saXN0KCR2YWxpZFNraW5zKTsNCgkJ CQkkdGhlX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2Js X3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKGluX2FycmF5KCR0aGVfc2tp biwgJHZhbGlkU2tpbnMpICYmIHNtZF9hdF9leGlzdHMoJHRoZV9za2luKSkgPyAkdGhlX3Nr aW4gOiAnJzsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0g Z2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1l LT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFk bV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJlYWs7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlYWQgYW5kIHJldHVybiB0aGUgbWFuaWZlc3Qs IGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEgZmV3IG90aGVyIG5pY2V0aWVzIHRvIHRoZSBhcnJh eSBmb3IgbGF0ZXINCmZ1bmN0aW9uIHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbikgew0KCWds b2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJJHRoaXNfdGhlbWUgPSB0aGVtZTo6ZmFjdG9y eSgkc2tpbik7DQoJJHNraW5mbyA9IGFycmF5KCk7DQoJaWYgKCR0aGlzX3RoZW1lKSB7DQoJ CSRza2luZm8gPSAkdGhpc190aGVtZS0+bWFuaWZlc3QoKTsNCgkJJHNraW5mb1snZG5hbWUn XSA9IGVtcHR5KCRza2luZm9bJ3RpdGxlJ10pID8gdWN3b3JkcygkdGhpc190aGVtZS0+bmFt ZSkgOiAkc2tpbmZvWyd0aXRsZSddOw0KCQkkc2tpbmZvWyduYW1lJ10gPSAkdGhpc190aGVt ZS0+bmFtZTsNCgkJJHNraW5mb1sncGF0aCddID0gJHRoaXNfdGhlbWUtPnVybDsNCgkJJHNr aW5mb1sncGhwZmlsZSddID0gJHRoaXNfdGhlbWUtPnBhdGgoJHNraW4pOw0KCQkkc2tpbmZv WydiYXNlZF9vbiddID0gJyc7DQoJCSRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRz a2luZm9bJ3BocGZpbGUnXSk7DQoJCWlmICgoJHBvcyA9IHN0cnBvcygkY29udGVudHMsICd0 aGVtZTo6YmFzZWRfb24nKSkgIT09IGZhbHNlKSB7DQoJCQkkYmVncG9zID0gc3RycG9zKCRj b250ZW50cywgIiciLCAkcG9zKSsxOw0KCQkJJGVuZHBvcyA9IHN0cnBvcygkY29udGVudHMs ICInIiwgJGJlZ3Bvcyk7DQoJCQkkYmFzZSA9IHN1YnN0cigkY29udGVudHMsICRiZWdwb3Ms ICRlbmRwb3MtJGJlZ3Bvcyk7DQoJCQkkc2tpbmZvWydiYXNlZF9vbiddID0gKGluX2FycmF5 KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVzKSkgPyAnJyA6ICRiYXNlOw0KCQl9DQoJCXVuc2V0 KCR0aGlzX3RoZW1lKTsNCgl9DQoJcmV0dXJuICRza2luZm87DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiB0aGUgdGh1bWJuYWlsIGZpbGVuYW1lIGlmIGl0 IGV4aXN0cywgb3B0aW9uYWxseSByZXR1cm4gYSBmb3JtYXR0ZWQgaW1nIHRhZw0KZnVuY3Rp b24gc21kX2F0X2dldF90aHVtYigkc2tpbiwgJGltZz0wKSB7DQoJZ2xvYmFsICRzbWRfYXRf cHJlZnM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJJHR3ID0gaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDog JHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J107DQoJJHRoID0gaXNzZXQoJGF0X3ByZWZz WydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVm c1swXVsnc21kX2F0X3RoJ107DQoJJHVzZV90aHVtYiA9ICgkdHcgPT0gMCB8fCAkdGggPT0g MCkgPyBmYWxzZSA6IHRydWU7DQoNCgkvLyBBbiBhcnJheSBtZWFucyB0aGUgbWFuaWZlc3Qg aGFzIGFscmVhZHkgYmVlbiByZWFkIGFuZCBpcyBiZWluZyBwYXNzZWQgaW50byB0aGlzIGZ1 bmN0aW9uDQoJaWYgKCFpc19hcnJheSgkc2tpbikpIHsNCgkJJHNraW4gPSBzbWRfYXRfcmVh ZF9za2luZm8oJHNraW4pOw0KCX0NCglpZiAoJHNraW4pIHsNCgkJJHNraW5kaXIgPSAkc2tp blsncGF0aCddOw0KCQkkdGh1bWJuYW1lID0gZ2xvYigkc2tpbmRpci4nc2NyZWVuc2hvdC4q Jyk7DQoJCXJldHVybiAoJGltZyAmJiAkdXNlX3RodW1iICYmICR0aHVtYm5hbWUgJiYgZmls ZV9leGlzdHMoJHRodW1ibmFtZVswXSkpID8gJzxpbWcgc3JjPSInLiR0aHVtYm5hbWVbMF0u JyIgYWx0PSInLigoaXNzZXQoJHNraW5bJ25hbWUnXSkpID8gJHNraW5bJ25hbWUnXSA6ICcn KS4nIHRodW1ibmFpbCIgc3R5bGU9ImJvcmRlcjoycHggcmlkZ2UgIzk5OTtwYWRkaW5nOjJw eDsiIHdpZHRoPSInLiR0dy4nIiBoZWlnaHQ9IicuJHRoLiciIC8+JyA6ICcnOw0KCX0gZWxz ZSB7DQoJCXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbnMoKSB7DQoJJHNraW5fbGlzdCA9IHRoZW1l OjpuYW1lcygpOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfc29ydCgkc2tpbl9saXN0KTsNCgly ZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0KLy8gU29ydCB0aGUgc2tpbnMgYnV0IGtlZXAgJ2Ns YXNzaWMnIGF0IHRoZSB0b3ANCmZ1bmN0aW9uIHNtZF9hdF9zb3J0KCRza2luX2xpc3QpIHsN CglnbG9iYWwgJHByZWZzOw0KDQoJJGNhc2VTZW5zZSA9IGlzc2V0KCRwcmVmc1snc21kX2F0 X2Nhc2Vfc29ydCddKSA/ICRwcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddIDogMTsNCg0KCWlm KCRjYXNlU2Vuc2UpIHsNCgkJbmF0c29ydCgkc2tpbl9saXN0KTsNCgl9IGVsc2Ugew0KCQlu YXRjYXNlc29ydCgkc2tpbl9saXN0KTsNCgl9DQoJJGRmbHRfZm91bmQgPSBmYWxzZTsNCglm b3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX2lkeCA9PiAkc2tpbl9uYW1lKSB7DQoJCWlm ICgkc2tpbl9uYW1lID09ICJjbGFzc2ljIikgew0KCQkJdW5zZXQoJHNraW5fbGlzdFskc2tp bl9pZHhdKTsNCgkJCSRkZmx0X2ZvdW5kID0gdHJ1ZTsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0K CWlmICgkZGZsdF9mb3VuZCkgew0KCQlhcnJheV91bnNoaWZ0KCRza2luX2xpc3QsImNsYXNz aWMiKTsNCgl9DQoNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlzdGRpcigkc3RhcnRfZGlyPScuJykg ew0KCSRmaWxlcyA9IGFycmF5KCk7DQoNCglpZiAoaXNfZGlyKCRzdGFydF9kaXIpKSB7DQoJ CSRmaCA9IG9wZW5kaXIoJHN0YXJ0X2Rpcik7DQoJCXdoaWxlICgoJGZpbGUgPSByZWFkZGly KCRmaCkpICE9PSBmYWxzZSkgew0KCQkJLy8gbG9vcCB0aHJvdWdoIHRoZSBmaWxlcywgc2tp cHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1cnNpbmcgaWYgbmVjZXNzYXJ5DQoJCQlpZiAoc3Ry Y21wKCRmaWxlLCAnLicpPT0wIHx8IHN0cmNtcCgkZmlsZSwgJy4uJyk9PTApIGNvbnRpbnVl Ow0KCQkJJGZpbGVwYXRoID0gJHN0YXJ0X2RpciAuICcvJyAuICRmaWxlOw0KCQkJaWYgKCBp c19kaXIoJGZpbGVwYXRoKSApIHsNCgkJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMs IHNtZF9hdF9saXN0ZGlyKCRmaWxlcGF0aCkpOw0KCQkJfSBlbHNlIHsNCgkJCQlhcnJheV9w dXNoKCRmaWxlcywgJGZpbGVwYXRoKTsNCgkJCX0NCgkJfQ0KCQljbG9zZWRpcigkZmgpOw0K CX0gZWxzZSB7DQoNCgkJLy8gZmFsc2UgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0 aCBhbiBpbnZhbGlkIG5vbi1kaXJlY3RvcnkgYXJndW1lbnQNCgkJJGZpbGVzID0gZmFsc2U7 DQoJfQ0KDQoJcmV0dXJuICRmaWxlczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBSZWN1cnNpdmUgcm1kaXIoKSBjb3VydGVzeSBvZiB0aGUgcGhwIG1hbnVhbCB1 c2VyIGNvbW1lbnRzDQpmdW5jdGlvbiBzbWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0aCkg ew0KCWlmIChpc19kaXIoJGZpbGVwYXRoKSAmJiAhaXNfbGluaygkZmlsZXBhdGgpKSB7DQoJ CWlmICgkZGggPSBvcGVuZGlyKCRmaWxlcGF0aCkpIHsNCgkJCXdoaWxlICgoJHNmID0gcmVh ZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJHNmID09ICcuJyB8fCAkc2YgPT0g Jy4uJykgY29udGludWU7DQoJCQkJaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0 aC4nLycuJHNmKSkgew0KCQkJCQlicmVhazsgLy8gRG9oLCBjYW4ndCBkZWxldGUNCgkJCQl9 DQoJCQl9DQoJCQljbG9zZWRpcigkZGgpOw0KCQl9DQoJCXJldHVybiBybWRpcigkZmlsZXBh dGgpOw0KCX0NCglyZXR1cm4gdW5saW5rKCRmaWxlcGF0aCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KLy8gRnJvbSBQSFAgbWFudWFsIGNvbW1lbnRzLiBUaGFua3Mg cHVyZW1hbmdvDQpmdW5jdGlvbiBzbWRfYXRfaXNfZGlyKCRkaXIpIHsNCgkvLyBieXBhc3Nl cyBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rpb25zIG9mIGlzX2RpciBhbmQgZmlsZXBlcm1zDQoJ JHRtcF9jbWQgPSBgbHMgLWRsICRkaXJgOw0KCSRkaXJfZmxhZyA9ICR0bXBfY21kWzBdOw0K CWlmKCRkaXJfZmxhZyE9ImQiKSB7DQoJCS8vIG5vdCBkOyB1c2UgbmV4dCBjaGFyIChmaXJz dCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQgaXMgc3RpbGwgZGlyZWN0b3J5KQ0KCQkkZGlyX2Zs YWcgPSAkdG1wX2NtZFsxXTsNCgl9DQoJcmV0dXJuICgkZGlyX2ZsYWc9PSJkIik7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX21rZGlyX3JlY3Vy c2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1KSB7DQoJaWYoQG1rZGlyKCRwYXRoLCAkbW9kZSkg b3IgZmlsZV9leGlzdHMoJHBhdGgpKSByZXR1cm4gdHJ1ZTsNCglyZXR1cm4gKHNtZF9ta2Rp cl9yZWN1cnNpdmUoZGlybmFtZSgkcGF0aCksICRtb2RlKSBhbmQgbWtkaXIoJHBhdGgsICRt b2RlKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdzbWRfYXRfcGFnZWJ5JywgZ3Bz KCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3NhZ2U9JycpIHsNCglnbG9i YWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2lu JywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9ICI/ZXZlbnQ9Ii4kZXZlbnQu IiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYmIHNtZF9hdF9leGlzdHMoJHNr aW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAkZXZlbnQsIFBSRUZfSElE REVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJCSR1cmwgLj0gJyZtZXNz YWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21kX2F0X2dUeHQoJ3NraW5fc3dp dGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsNCgl9IGVsc2Ugew0KCQkkdXJs IC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJLy8gU2luY2UgdGhlIGhlYWRl cnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBpbiBvcmRlciB0byBzaG93IHRo ZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9TDQo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0ieyR1cmx9IjsNCjwvc2Ny aXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0i MDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCglleGl0Ow0KfQ0KDQovLyBB bGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9hZG1hdCgkZXZlbnQsICRzdGVw KSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX2F0 X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2VyKCcnKTsNCgl9IGVsc2UgJHN0 ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfYWRt X2V2ZW50LCAkdGhlbWUsICRzbWRfYXRfc3R5bGVzOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0 X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsNCgkkdHcgPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDog JHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRh dF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRf YXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KCSRzdHlsZXJlcHMgPSBhcnJheSgN CgkJJ3t0d30nID0+ICR0dywNCgkJJ3t0aH0nID0+ICR0aCwNCgkpOw0KDQoJJG1lc3NhZ2Ug PSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3NhZ2UnKTsNCglwYWdldG9wKHNt ZF9hdF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOw0KDQoJJGN1cnJfc2tpbiA9ICR0aGVt ZS0+bmFtZTsNCg0KCSRhbGxvd2VkID0gJyc7DQoJaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0 X3VzZXJfbGlzdCddKSkgew0KCQkkYWxsb3dlZCA9IGV4cGxvZGUoIiwiLCRwcmVmc1snc21k X2F0X3VzZXJfbGlzdCddKTsNCgkJZm9yZWFjaCAoJGFsbG93ZWQgYXMgJGlkeCA9PiAkdmFs aWQpIHsNCgkJCWlmICgkdmFsaWQgPT0gJycpIHsNCgkJCQl1bnNldCgkYWxsb3dlZFskaWR4 XSk7DQoJCQl9DQoJCX0NCgl9DQoJJGFsbG93ZWQgPSBzbWRfYXRfc29ydCgkYWxsb3dlZCk7 DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdhdmFpbF90aXRsZScpLCAzKTsNCg0KCWlm ICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOw0K CQllY2hvICRzbWRfYXRfc3R5bGVzWydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydsaXN0 J107DQoJCWVjaG8gJzwvc3R5bGU+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0JywgJycs ICdzbWRfYXRfbGlzdCcpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRoZHJvdywgJyBjb2xzcGFu PSIzIicpDQoJCSk7DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFkKA0KCQkJCXNtZF9hdF9nVHh0 KCdza2luX2dibCcpLA0KCQkJCSdhdXRob3InLA0KCQkJCSdkZXNjcmlwdGlvbicNCgkJCSkp Ow0KCX0gZWxzZSB7DQoJCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgkJZWNo byBzdHJ0cigkc21kX2F0X3N0eWxlc1snY29tbW9uJ10ubi4kc21kX2F0X3N0eWxlc1snZ3Jp ZCddLCAkc3R5bGVyZXBzKTsNCgkJZWNobyAnPC9zdHlsZT4nOw0KCQllY2hvICc8ZGl2IGNs YXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3JvdyI+Jy4kaGRyb3cuJzwvZGl2 Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2VkIGFzICRza2luX25hbWUpIHsNCgkJJHNraW5m byA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsNCgkJaWYgKCRza2luZm8pIHsN CgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2luZm8sIDEpOw0KCQkJJHRo aXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gc3Ryb25nKCRza2luZm9b J2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXTsNCgkJCSR0aHVtcm93ID0gJzxhIGhyZWY9 Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4n bmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIiB0aXRsZT0iJy5z bWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRoaXNfc2tpbi4oKCR0aHVtYm5haWwp ID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4nIDogJycpLic8L2E+JzsNCgkJCSRhdXRo cm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRwOi8vIikgPT09IDAp ID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0 aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107DQoNCgkJCWlmICgkbGF5b3V0PT0i MCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0ZCgkdGh1bXJvdykNCgkJCQkJLnRkKCRhdXRo cm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZvWydkZXNjcmlwdGlvbiddLCAyNTApDQoJCQkJ CSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBjbGFzcz0iYWN0aXZlIicgOiAn JykNCgkJCQkpOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2Vs bCcuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBhY3RpdmUnIDogJycpLiciPic7 DQoJCQkJZWNobyAnPGRpdj4nLiR0aHVtcm93Lic8L2Rpdj4nOw0KCQkJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9hdXRoIj4nLnNtZF9hdF9nVHh0KCdieScpLiRhdXRocm93Lic8L2Rpdj4n Ow0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCX0NCgl9DQoJaWYgKCRsYXlvdXQ9PSIw Iikgew0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFz cz0ic21kX2NsZWFyIj48L2Rpdj48L2Rpdj4nOw0KCX0NCn0NCg0KLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgVEFSL0daSVAvQlpJ UDIvWklQIEFSQ0hJVkUgQ0xBU1NFUyAyLjENCiB8IEJ5IERldmluIERvdWNldHRlDQogfCBD b3B5cmlnaHQgKGMpIDIwMDUgRGV2aW4gRG91Y2V0dGUNCiB8IEVtYWlsOiBkYXJrc25vb3B5 QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCiB8IEVtYWlsIGJ1Z3Mvc3VnZ2VzdGlvbnMgdG8gZGFya3Nub29weUBzaGF3 LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQogfCBUaGlzIHNjcmlwdCBoYXMgYmVlbiBjcmVhdGVkIGFuZCByZWxlYXNlZCB1bmRl cg0KIHwgdGhlIEdOVSBHUEwgYW5kIGlzIGZyZWUgdG8gdXNlIGFuZCByZWRpc3RyaWJ1dGUN CiB8IG9ubHkgaWYgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCByZW1vdmVkDQog Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8N Cg0KLy8gTk9URTogY2xhc3MgbmFtZXMgYWx0ZXJlZCB0byBhZGQgc21kX2F0XyBwcmVmaXgg dG8gYXZvaWQgY2xhc2hlcyBpbiBnbG9iYWwgc2NvcGUsIGFuZCBhZGRlZCBzdWJkaXIgY3Jl YXRpb24NCg0KY2xhc3Mgc21kX2F0X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfYXJj aGl2ZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5vcHRpb25zID0gYXJyYXkgKA0KCQkJJ2Jhc2Vk aXInID0+ICIuIiwNCgkJCSduYW1lJyA9PiAkbmFtZSwNCgkJCSdwcmVwZW5kJyA9PiAiIiwN CgkJCSdpbm1lbW9yeScgPT4gMCwNCgkJCSdvdmVyd3JpdGUnID0+IDAsDQoJCQkncmVjdXJz ZScgPT4gMSwNCgkJCSdzdG9yZXBhdGhzJyA9PiAxLA0KCQkJJ2ZvbGxvd2xpbmtzJyA9PiAw LA0KCQkJJ2xldmVsJyA9PiAzLA0KCQkJJ21ldGhvZCcgPT4gMSwNCgkJCSdzZngnID0+ICIi LA0KCQkJJ3R5cGUnID0+ICIiLA0KCQkJJ2NvbW1lbnQnID0+ICIiDQoJCSk7DQoJCSR0aGlz LT5maWxlcyA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXhjbHVkZSA9IGFycmF5ICgpOw0KCQkk dGhpcy0+c3RvcmVvbmx5ID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5lcnJvciA9IGFycmF5ICgp Ow0KCX0NCg0KCWZ1bmN0aW9uIHNldF9vcHRpb25zKCRvcHRpb25zKQ0KCXsNCgkJZm9yZWFj aCAoJG9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkkdGhpcy0+b3B0aW9uc1ska2V5 XSA9ICR2YWx1ZTsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSkp DQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBzdHJfcmVwbGFjZSgiXFwi LCAiLyIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNb J2Jhc2VkaXInXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25z WydiYXNlZGlyJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSA9IHByZWdfcmVw bGFjZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCX0NCgkJ aWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkpDQoJCXsNCgkJCSR0aGlzLT5v cHRpb25zWyduYW1lJ10gPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25z WyduYW1lJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSA9IHByZWdfcmVwbGFjZSgi L1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25zWyduYW1lJ10pOw0KCQl9DQoJCWlmICghZW1w dHkgKCR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBwcmVnX3JlcGxh Y2UoIi9eKFwuKlwvKykrLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKTsNCgkJ CSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8i LCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVw ZW5kJ10gPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydwcmVw ZW5kJ10pIC4gIi8iOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX2FyY2hpdmUoKQ0K CXsNCgkJJHRoaXMtPm1ha2VfbGlzdCgpOw0KDQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5t ZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1snb3Zlcndy aXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0 aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBl J10gPT0gImJ6aXAiID8gIi50bXAiIDogIiIpKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3Jb XSA9ICJGaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBhbHJlYWR5IGV4aXN0cy4iOw0K CQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJHRo aXMtPmFyY2hpdmUgPSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgkdGhpcy0+ b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSddID09 ICJiemlwIiA/ICIudG1wIiA6ICIiKSwgIndiKyIpKQ0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJ ZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhp cy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0K CQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0g IiI7DQoNCgkJc3dpdGNoICgkdGhpcy0+b3B0aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2Ug InppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfemlwKCkpDQoJCQl7DQoJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB6aXAgZmlsZS4iOw0KCQkJCXJldHVybiAw Ow0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3Jl YXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVh dGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNy ZWF0ZV9iemlwKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNy ZWF0ZSBiemlwMiBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVhazsNCgkJ Y2FzZSAiZ3ppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJCQkJ JHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJCXJl dHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2d6aXAoKSkNCgkJCXsNCgkJ CQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGd6aXAgZmlsZS4iOw0KCQkJ CXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6DQoJCQlpZiAoISR0 aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQg bm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoNCgkJ aWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsNCgkJCWZjbG9zZSgk dGhpcy0+YXJjaGl2ZSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3pp cCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIpDQoJCQkJdW5saW5rKCR0 aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gLiAiLyIgLiAkdGhpcy0+b3B0aW9uc1snbmFtZSdd IC4gIi50bXAiKTsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGFkZF9kYXRhKCRkYXRhKQ0KCXsN CgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCQlmd3JpdGUoJHRo aXMtPmFyY2hpdmUsICRkYXRhKTsNCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgLj0gJGRh dGE7DQoJfQ0KDQoJZnVuY3Rpb24gbWFrZV9saXN0KCkNCgl7DQoJCWlmICghZW1wdHkgKCR0 aGlzLT5leGNsdWRlKSkNCgkJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAka2V5ID0+ICR2 YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+ZXhjbHVkZSBhcyAkY3VycmVudCkNCgkJCQkJ aWYgKCR2YWx1ZVsnbmFtZSddID09ICRjdXJyZW50WyduYW1lJ10pDQoJCQkJCQl1bnNldCAo JHRoaXMtPmZpbGVzWyRrZXldKTsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPnN0b3Jlb25seSkp DQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJZm9y ZWFjaCAoJHRoaXMtPnN0b3Jlb25seSBhcyAkY3VycmVudCkNCgkJCQkJaWYgKCR2YWx1ZVsn bmFtZSddID09ICRjdXJyZW50WyduYW1lJ10pDQoJCQkJCQkkdGhpcy0+ZmlsZXNbJGtleV1b J21ldGhvZCddID0gMDsNCgkJdW5zZXQgKCR0aGlzLT5leGNsdWRlLCAkdGhpcy0+c3RvcmVv bmx5KTsNCgl9DQoNCglmdW5jdGlvbiBhZGRfZmlsZXMoJGxpc3QpDQoJew0KCQkkdGVtcCA9 ICR0aGlzLT5saXN0X2ZpbGVzKCRsaXN0KTsNCgkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJl bnQpDQoJCQkkdGhpcy0+ZmlsZXNbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIGV4 Y2x1ZGVfZmlsZXMoJGxpc3QpDQoJew0KCQkkdGVtcCA9ICR0aGlzLT5saXN0X2ZpbGVzKCRs aXN0KTsNCgkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJlbnQpDQoJCQkkdGhpcy0+ZXhjbHVk ZVtdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gc3RvcmVfZmlsZXMoJGxpc3QpDQoJ ew0KCQkkdGVtcCA9ICR0aGlzLT5saXN0X2ZpbGVzKCRsaXN0KTsNCgkJZm9yZWFjaCAoJHRl bXAgYXMgJGN1cnJlbnQpDQoJCQkkdGhpcy0+c3RvcmVvbmx5W10gPSAkY3VycmVudDsNCgl9 DQoNCglmdW5jdGlvbiBsaXN0X2ZpbGVzKCRsaXN0KQ0KCXsNCgkJaWYgKCFpc19hcnJheSAo JGxpc3QpKQ0KCQl7DQoJCQkkdGVtcCA9ICRsaXN0Ow0KCQkJJGxpc3QgPSBhcnJheSAoJHRl bXApOw0KCQkJdW5zZXQgKCR0ZW1wKTsNCgkJfQ0KDQoJCSRmaWxlcyA9IGFycmF5ICgpOw0K DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSk7DQoNCgkJZm9yZWFjaCAoJGxpc3QgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCSRjdXJyZW50 ID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHBy ZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJl Z19yZXBsYWNlKCIvXC8kLyIsICIiLCAkY3VycmVudCk7DQoJCQlpZiAoc3Ryc3RyKCRjdXJy ZW50LCAiKiIpKQ0KCQkJew0KCQkJCSRyZWdleCA9IHByZWdfcmVwbGFjZSgiLyhbXFxcXlwk XC5cW1xdXHxcKFwpXD9cK1x7XH1cL10pLyIsICJcXFxcXFwxIiwgJGN1cnJlbnQpOw0KCQkJ CSRyZWdleCA9IHN0cl9yZXBsYWNlKCIqIiwgIi4qIiwgJHJlZ2V4KTsNCgkJCQkkZGlyID0g c3Ryc3RyKCRjdXJyZW50LCAiLyIpID8gc3Vic3RyKCRjdXJyZW50LCAwLCBzdHJycG9zKCRj dXJyZW50LCAiLyIpKSA6ICIuIjsNCgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGRp cik7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJlbnQyKQ0KCQkJCQlpZiAocHJlZ19t YXRjaCgiL157JHJlZ2V4fSQvaSIsICRjdXJyZW50MlsnbmFtZSddKSkNCgkJCQkJCSRmaWxl c1tdID0gJGN1cnJlbnQyOw0KCQkJCXVuc2V0ICgkcmVnZXgsICRkaXIsICR0ZW1wLCAkY3Vy cmVudCk7DQoJCQl9DQoJCQllbHNlIGlmIChAaXNfZGlyKCRjdXJyZW50KSkNCgkJCXsNCgkJ CQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGN1cnJlbnQpOw0KCQkJCWZvcmVhY2ggKCR0 ZW1wIGFzICRmaWxlKQ0KCQkJCQkkZmlsZXNbXSA9ICRmaWxlOw0KCQkJCXVuc2V0ICgkdGVt cCwgJGZpbGUpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRjdXJyZW50KSkN CgkJCQkkZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGN1cnJlbnQsICduYW1lMicgPT4g JHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSAuDQoJCQkJCXByZWdfcmVwbGFjZSgiLyhcLitc LyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMCAmJiBzdHJz dHIoJGN1cnJlbnQsICIvIikpID8NCgkJCQkJc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRj dXJyZW50LCAiLyIpICsgMSkgOiAkY3VycmVudCksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGlu aygkY3VycmVudCkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10gPT0gMCA/IDIg OiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQs ICIuIikpLCAnc3RhdCcgPT4gc3RhdCgkY3VycmVudCkpOw0KCQl9DQoNCgkJY2hkaXIoJHB3 ZCk7DQoNCgkJdW5zZXQgKCRjdXJyZW50LCAkcHdkKTsNCg0KCQl1c29ydCgkZmlsZXMsIGFy cmF5ICgic21kX2F0X2FyY2hpdmUiLCAic29ydF9maWxlcyIpKTsNCg0KCQlyZXR1cm4gJGZp bGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHBhcnNlX2RpcigkZGlybmFtZSkNCgl7DQoJCWlmICgk dGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDEgJiYgIXByZWdfbWF0Y2goIi9eKFwu K1wvKikrJC8iLCAkZGlybmFtZSkpDQoJCQkkZmlsZXMgPSBhcnJheSAoYXJyYXkgKCduYW1l JyA9PiAkZGlybmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddIC4N CgkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1sn c3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRkaXJuYW1lLCAiLyIpKSA/DQoJCQkJc3Vi c3RyKCRkaXJuYW1lLCBzdHJycG9zKCRkaXJuYW1lLCAiLyIpICsgMSkgOiAkZGlybmFtZSks ICd0eXBlJyA9PiA1LCAnc3RhdCcgPT4gc3RhdCgkZGlybmFtZSkpKTsNCgkJZWxzZQ0KCQkJ JGZpbGVzID0gYXJyYXkgKCk7DQoJCSRkaXIgPSBAb3BlbmRpcigkZGlybmFtZSk7DQoNCgkJ d2hpbGUgKCRmaWxlID0gQHJlYWRkaXIoJGRpcikpDQoJCXsNCgkJCSRmdWxsbmFtZSA9ICRk aXJuYW1lIC4gIi8iIC4gJGZpbGU7DQoJCQlpZiAoJGZpbGUgPT0gIi4iIHx8ICRmaWxlID09 ICIuLiIpDQoJCQkJY29udGludWU7DQoJCQllbHNlIGlmIChAaXNfZGlyKCRmdWxsbmFtZSkp DQoJCQl7DQoJCQkJaWYgKGVtcHR5ICgkdGhpcy0+b3B0aW9uc1sncmVjdXJzZSddKSkNCgkJ CQkJY29udGludWU7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRmdWxsbmFtZSk7 DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUyKQ0KCQkJCQkkZmlsZXNbXSA9ICRmaWxl MjsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkZnVsbG5hbWUpKQ0KCQkJCSRm aWxlc1tdID0gYXJyYXkgKCduYW1lJyA9PiAkZnVsbG5hbWUsICduYW1lMicgPT4gJHRoaXMt Pm9wdGlvbnNbJ3ByZXBlbmQnXSAuDQoJCQkJCXByZWdfcmVwbGFjZSgiLyhcLitcLyspKy8i LCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMCAmJiBzdHJzdHIoJGZ1 bGxuYW1lLCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkZnVsbG5hbWUsIHN0cnJwb3MoJGZ1bGxu YW1lLCAiLyIpICsgMSkgOiAkZnVsbG5hbWUpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xpbmso JGZ1bGxuYW1lKSAmJiAkdGhpcy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6 IDAsDQoJCQkJCSdleHQnID0+IHN1YnN0cigkZmlsZSwgc3RycnBvcygkZmlsZSwgIi4iKSks ICdzdGF0JyA9PiBzdGF0KCRmdWxsbmFtZSkpOw0KCQl9DQoNCgkJQGNsb3NlZGlyKCRkaXIp Ow0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVuY3Rpb24gc29ydF9maWxlcygkYSwg JGIpDQoJew0KCQlpZiAoJGFbJ3R5cGUnXSAhPSAkYlsndHlwZSddKQ0KCQkJaWYgKCRhWyd0 eXBlJ10gPT0gNSB8fCAkYlsndHlwZSddID09IDIpDQoJCQkJcmV0dXJuIC0xOw0KCQkJZWxz ZSBpZiAoJGFbJ3R5cGUnXSA9PSAyIHx8ICRiWyd0eXBlJ10gPT0gNSkNCgkJCQlyZXR1cm4g MTsNCgkJZWxzZSBpZiAoJGFbJ3R5cGUnXSA9PSA1KQ0KCQkJcmV0dXJuIHN0cmNtcChzdHJ0 b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1lJ10pKTsNCgkJZWxzZSBp ZiAoJGFbJ2V4dCddICE9ICRiWydleHQnXSkNCgkJCXJldHVybiBzdHJjbXAoJGFbJ2V4dCdd LCAkYlsnZXh0J10pOw0KCQllbHNlIGlmICgkYVsnc3RhdCddWzddICE9ICRiWydzdGF0J11b N10pDQoJCQlyZXR1cm4gJGFbJ3N0YXQnXVs3XSA+ICRiWydzdGF0J11bN10gPyAtMSA6IDE7 DQoJCWVsc2UNCgkJCXJldHVybiBzdHJjbXAoc3RydG9sb3dlcigkYVsnbmFtZSddKSwgc3Ry dG9sb3dlcigkYlsnbmFtZSddKSk7DQoJCXJldHVybiAwOw0KCX0NCg0KCWZ1bmN0aW9uIGRv d25sb2FkX2ZpbGUoKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09 IDApDQoJCXsNCgkJCSR0aGlzLT5lcnJvcltdID0gIkNhbiBvbmx5IHVzZSBkb3dubG9hZF9m aWxlKCkgaWYgYXJjaGl2ZSBpcyBpbiBtZW1vcnkuIFJlZGlyZWN0IHRvIGZpbGUgb3RoZXJ3 aXNlLCBpdCBpcyBmYXN0ZXIuIjsNCgkJCXJldHVybjsNCgkJfQ0KCQlzd2l0Y2ggKCR0aGlz LT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWhlYWRlcigiQ29u dGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJiemlw IjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWJ6aXAyIik7DQoJ CQlicmVhazsNCgkJY2FzZSAiZ3ppcCI6DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBw bGljYXRpb24veC1nemlwIik7DQoJCQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWhlYWRl cigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXRhciIpOw0KCQl9DQoJCSRoZWFkZXIg PSAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiOw0KCQkk aGVhZGVyIC49IHN0cnN0cigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpID8gc3Vic3Ry KCR0aGlzLT5vcHRpb25zWyduYW1lJ10sIHN0cnJwb3MoJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSwgIi8iKSArIDEpIDogJHRoaXMtPm9wdGlvbnNbJ25hbWUnXTsNCgkJJGhlYWRlciAuPSAi XCIiOw0KCQloZWFkZXIoJGhlYWRlcik7DQoJCWhlYWRlcigiQ29udGVudC1MZW5ndGg6ICIg LiBzdHJsZW4oJHRoaXMtPmFyY2hpdmUpKTsNCgkJaGVhZGVyKCJDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiBiaW5hcnkiKTsNCgkJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNo ZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTYwIik7DQoJCWhlYWRlcigiRXhwaXJlczog U2F0LCAwMSBKYW4gMjAwMCAxMjowMDowMCBHTVQiKTsNCgkJcHJpbnQoJHRoaXMtPmFyY2hp dmUpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3Rhcl9maWxlIGV4dGVuZHMgc21kX2F0X2Fy Y2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfdGFyX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhp cy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0g InRhciI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3RhcigpDQoJew0KCQkkcHdkID0gZ2V0 Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVh Y2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50Wydu YW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsNCgkJCWlm IChzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJCQl7DQoJCQkJJHBhdGggPSBz dWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIDAsIHN0cnBvcygkY3VycmVudFsnbmFtZTInXSwg Ii8iLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pIC0gMTAwKSArIDEpOw0KCQkJCSRjdXJy ZW50WyduYW1lMiddID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCBzdHJsZW4oJHBhdGgp KTsNCgkJCQlpZiAoc3RybGVuKCRwYXRoKSA+IDE1NCB8fCBzdHJsZW4oJGN1cnJlbnRbJ25h bWUyJ10pID4gOTkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qg YWRkIHskcGF0aH17JGN1cnJlbnRbJ25hbWUyJ119IHRvIGFyY2hpdmUgYmVjYXVzZSB0aGUg ZmlsZW5hbWUgaXMgdG9vIGxvbmcuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJfQ0K CQkJJGJsb2NrID0gcGFjaygiYTEwMGE4YThhOGExMmExMmE4YTFhMTAwYTZhMmEzMmEzMmE4 YThhMTU1YTEyIiwgJGN1cnJlbnRbJ25hbWUyJ10sIHNwcmludGYoIiUwN28iLA0KCQkJCSRj dXJyZW50WydzdGF0J11bMl0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs0 XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzVdKSwNCgkJCQlzcHJpbnRm KCIlMDExbyIsICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IDAgOiAkY3VycmVudFsnc3RhdCdd WzddKSwgc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsnc3RhdCddWzldKSwNCgkJCQkiICAg ICAgICAiLCAkY3VycmVudFsndHlwZSddLCAkY3VycmVudFsndHlwZSddID09IDIgPyBAcmVh ZGxpbmsoJGN1cnJlbnRbJ25hbWUnXSkgOiAiIiwgInVzdGFyICIsICIgIiwNCgkJCQkiVW5r bm93biIsICJVbmtub3duIiwgIiIsICIiLCAhZW1wdHkgKCRwYXRoKSA/ICRwYXRoIDogIiIs ICIiKTsNCg0KCQkJJGNoZWNrc3VtID0gMDsNCgkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMjsg JGkrKykNCgkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJ CQkkY2hlY2tzdW0gPSBwYWNrKCJhOCIsIHNwcmludGYoIiUwN28iLCAkY2hlY2tzdW0pKTsN CgkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywgJGNoZWNrc3VtLCAxNDgsIDgp Ow0KDQoJCQlpZiAoJGN1cnJlbnRbJ3R5cGUnXSA9PSAyIHx8ICRjdXJyZW50WydzdGF0J11b N10gPT0gMCkNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCWVsc2UgaWYgKCRm cCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGhpcy0+ YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkZnAsIDEwNDg1 NzYpKQ0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCWlmICgkY3VycmVudFsn c3RhdCddWzddICUgNTEyID4gMCkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gIiI7DQoJCQkJCWZv ciAoJGkgPSAwOyAkaSA8IDUxMiAtICRjdXJyZW50WydzdGF0J11bN10gJSA1MTI7ICRpKysp DQoJCQkJCQkkdGVtcCAuPSAiXDAiOw0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0K CQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3VycmVudFsnbmFtZSddfSBmb3IgcmVh ZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBh Y2soImExMDI0IiwgIiIpKTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsNCgl9 DQoNCglmdW5jdGlvbiBleHRyYWN0X2ZpbGVzKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsN CgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJaWYgKCRmcCA9ICR0 aGlzLT5vcGVuX2FyY2hpdmUoKSkNCgkJew0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1l bW9yeSddID09IDEpDQoJCQkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7DQoNCgkJCXdoaWxl ICgkYmxvY2sgPSBmcmVhZCgkZnAsIDUxMikpDQoJCQl7DQoJCQkJJHRlbXAgPSB1bnBhY2so ImExMDBuYW1lL2E4bW9kZS9hOHVpZC9hOGdpZC9hMTJzaXplL2ExMm10aW1lL2E4Y2hlY2tz dW0vYTF0eXBlL2ExMDBzeW1saW5rL2E2bWFnaWMvYTJ0ZW1wL2EzMnRlbXAvYTMydGVtcC9h OHRlbXAvYTh0ZW1wL2ExNTVwcmVmaXgvYTEydGVtcCIsICRibG9jayk7DQoJCQkJJGZpbGUg PSBhcnJheSAoDQoJCQkJCSduYW1lJyA9PiAkdGVtcFsncHJlZml4J10gLiAkdGVtcFsnbmFt ZSddLA0KCQkJCQknc3RhdCcgPT4gYXJyYXkgKA0KCQkJCQkJMiA9PiAkdGVtcFsnbW9kZSdd LA0KCQkJCQkJNCA9PiBvY3RkZWMoJHRlbXBbJ3VpZCddKSwNCgkJCQkJCTUgPT4gb2N0ZGVj KCR0ZW1wWydnaWQnXSksDQoJCQkJCQk3ID0+IG9jdGRlYygkdGVtcFsnc2l6ZSddKSwNCgkJ CQkJCTkgPT4gb2N0ZGVjKCR0ZW1wWydtdGltZSddKSwNCgkJCQkJKSwNCgkJCQkJJ2NoZWNr c3VtJyA9PiBvY3RkZWMoJHRlbXBbJ2NoZWNrc3VtJ10pLA0KCQkJCQkndHlwZScgPT4gJHRl bXBbJ3R5cGUnXSwNCgkJCQkJJ21hZ2ljJyA9PiAkdGVtcFsnbWFnaWMnXSwNCgkJCQkpOw0K DQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddID09IDB4MDAwMDAwMDApDQoJCQkJCWJyZWFr Ow0KCQkJCWVsc2UgaWYgKHN1YnN0cigkZmlsZVsnbWFnaWMnXSwgMCwgNSkgIT0gInVzdGFy IikNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIlRoaXMgc2NyaXB0IGRvZXMgbm90 IHN1cHBvcnQgZXh0cmFjdGluZyB0aGlzIHR5cGUgb2YgdGFyIGZpbGUuIjsNCgkJCQkJYnJl YWs7DQoJCQkJfQ0KCQkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywgIiAgICAg ICAgIiwgMTQ4LCA4KTsNCgkJCQkkY2hlY2tzdW0gPSAwOw0KCQkJCWZvciAoJGkgPSAwOyAk aSA8IDUxMjsgJGkrKykNCgkJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAk aSwgMSkpOw0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSAhPSAkY2hlY2tzdW0pDQoJCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBleHRyYWN0IGZyb20geyR0aGlzLT5vcHRp b25zWyduYW1lJ119LCBpdCBpcyBjb3JydXB0LiI7DQoNCgkJCQkvLyBBZGRlZDogY3JlYXRl IGRpciBpZiByZXF1aXJlZA0KCQkJCWlmIChzdHJwb3MoJGZpbGVbJ25hbWUnXSwgJy4uJykg PT09IGZhbHNlKSB7DQoJCQkJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZpbGVbJ25hbWUn XSk7DQoJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpIHsNCgkJCQkJCSRy ZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBhdGhfcGFydHNbJ2V4dGVuc2lv biddKSkgPyBkaXJuYW1lKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25h bWUnXSkgOiAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxlWyduYW1lJ10pKTsN CgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9 PSAxKQ0KCQkJCXsNCgkJCQkJJGZpbGVbJ2RhdGEnXSA9IGZyZWFkKCRmcCwgJGZpbGVbJ3N0 YXQnXVs3XSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1 MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikpOw0KCQkJ CQl1bnNldCAoJGZpbGVbJ2NoZWNrc3VtJ10sICRmaWxlWydtYWdpYyddKTsNCgkJCQkJJHRo aXMtPmZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVbJ3R5cGUn XSA9PSA1KQ0KCQkJCXsNCgkJCQkJaWYgKCFpc19kaXIoJGZpbGVbJ25hbWUnXSkpDQoJCQkJ CQlta2RpcigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJ ZWxzZSBpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSddID09IDAgJiYgZmlsZV9leGlz dHMoJGZpbGVbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJ7JGZp bGVbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K CQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0gMikNCgkJCQl7DQoJCQkJCXN5bWxpbmso JHRlbXBbJ3N5bWxpbmsnXSwgJGZpbGVbJ25hbWUnXSk7DQoJCQkJCWNobW9kKCRmaWxlWydu YW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkbmV3ID0g Zm9wZW4oJGZpbGVbJ25hbWUnXSwgIndiIikpDQoJCQkJew0KCQkJCQlmd3JpdGUoJG5ldywg ZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAt ICRmaWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0 YXQnXVs3XSAlIDUxMikpOw0KCQkJCQlmY2xvc2UoJG5ldyk7DQoJCQkJCUBjaG1vZCgkZmls ZVsnbmFtZSddLCAwNjQ0KTsgLy8gSGFyZC1jb2RlZCBmb3Igbm93IGJlY2F1c2UgdGhlIHN0 dXBpZCAwMTAwNjQ0IHZhbHVlIGluICRmaWxlWydzdGF0J11bMl0gY29uZnVzZXMgdGhlIE9T L1BIUA0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJD b3VsZCBub3Qgb3BlbiB7JGZpbGVbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQkJY29u dGludWU7DQoJCQkJfQ0KCQkJCS8vIFJlbW92ZSBvd25lciBhbmQgZ3JvdXAgc2V0dGluZyBz aW5jZSB0aGVyZSBpcyBhbG1vc3QgMCBsaWtlbGlob29kIHRoZSBmaWxlcyB3aWxsIGhhdmUg dGhlIHNhbWUgdXNlci9ncm91cCBhY3Jvc3Mgc3lzdGVtcw0KCQkJCS8vIEluIG90aGVyIHdv cmRzLCBsZWF2ZSBvd25lci9ncm91cCBhdCB0aGUgQXBhY2hlIGRlZmF1bHQgLS0gd2hpY2gg aXMgd2hhdCB3ZSB3YW50DQovLwkJCQljaG93bigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3Rh dCddWzRdKTsNCi8vCQkJCWNoZ3JwKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNV0p Ow0KCQkJCUB0b3VjaCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzldKTsNCgkJCQl1 bnNldCAoJGZpbGUpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBvcGVuIGZpbGUgeyR0aGlzLT5vcHRpb25zWyduYW1lJ119IjsNCg0KCQlj aGRpcigkcHdkKTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0 dXJuIEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9DQoNCmNs YXNzIHNtZF9hdF9nemlwX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfdGFyX2ZpbGUNCnsNCglmdW5j dGlvbiBzbWRfYXRfZ3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9hdF90YXJf ZmlsZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAiZ3ppcCI7DQoJfQ0K DQoJZnVuY3Rpb24gY3JlYXRlX2d6aXAoKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydp bm1lbW9yeSddID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0 aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCRmcCA9IGd6b3BlbigkdGhpcy0+ b3B0aW9uc1snbmFtZSddLCAid2J7JHRoaXMtPm9wdGlvbnNbJ2xldmVsJ119IikpDQoJCQl7 DQoJCQkJZnNlZWsoJHRoaXMtPmFyY2hpdmUsIDApOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZy ZWFkKCR0aGlzLT5hcmNoaXZlLCAxMDQ4NTc2KSkNCgkJCQkJZ3p3cml0ZSgkZnAsICR0ZW1w KTsNCgkJCQlnemNsb3NlKCRmcCk7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQl9DQoJCQllbHNl DQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5v cHRpb25zWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJ cmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSBnemVu Y29kZSgkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KDQoJCXJl dHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4g QGd6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9DQoNCmNsYXNz IHNtZF9hdF9iemlwX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfdGFyX2ZpbGUNCnsNCglmdW5jdGlv biBzbWRfYXRfYnppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9hdF90YXJfZmls ZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAiYnppcCI7DQoJfQ0KDQoJ ZnVuY3Rpb24gY3JlYXRlX2J6aXAoKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1l bW9yeSddID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlz LT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCRmcCA9IGJ6b3BlbigkdGhpcy0+b3B0 aW9uc1snbmFtZSddLCAid2IiKSkNCgkJCXsNCgkJCQlmc2VlaygkdGhpcy0+YXJjaGl2ZSwg MCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFyY2hpdmUsIDEwNDg1NzYp KQ0KCQkJCQliendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWJ6Y2xvc2UoJGZwKTsNCgkJCQlj aGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9 ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcu IjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNl DQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGJ6Y29tcHJlc3MoJHRoaXMtPmFyY2hpdmUsICR0aGlz LT5vcHRpb25zWydsZXZlbCddKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBv cGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBiem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSwgInIiKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF96aXBfZmlsZSBleHRlbmRzIHNt ZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3ppcF9maWxlKCRuYW1lKQ0KCXsN CgkJJHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV96aXAoKQ0KCXsNCgkJJGZp bGVzID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50cmFsID0gIiI7DQoNCgkJaWYgKCFl bXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJCWlmICgkZnAgPSBAZm9wZW4oJHRo aXMtPm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRm cCwgZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSk7DQoJCQkJZmNsb3NlKCRmcCk7 DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQkkb2Zmc2V0ICs9IHN0cmxlbigk dGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9kdWxlIGZyb20geyR0aGlzLT5vcHRp b25zWydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5v cHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3Vy cmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNb J25hbWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRpbWVkYXRlID0gZXhwbG9kZSgiICIs IGRhdGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSkpOw0KCQkJJHRpbWVk YXRlID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUpIHwgKCR0aW1lZGF0ZVsxXSA8PCAy MSkgfCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJKCR0aW1lZGF0ZVszXSA8PCAxMSkg fCAoJHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0ZVs1XSk7DQoNCgkJCSRibG9jayA9 IHBhY2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBBLCAweDAwMDAsIChpc3NldCgkY3Vy cmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4 MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJaWYgKCRjdXJyZW50WydzdGF0J11b N10gPT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUpDQoJCQl7DQoJCQkJJGJsb2NrIC49 IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3Ry bGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRj dXJyZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0K CQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAw eDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBB LCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5v cHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0K CQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJl bnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3Vy cmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7 DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJGZpbGVz Kys7DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsN CgkJCX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCXsNCgkJ CQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9j ayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsN CgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwg MHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAw QSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+ b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwN CgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJy ZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVu dFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJ CQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJ JG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJ CWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsN CgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRbJ3N0YXQnXVs3XSk7DQoJCQkJZmNs b3NlKCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRlbXApOw0KCQkJCWlmICghaXNzZXQo JGN1cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMSkN CgkJCQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygkdGVtcCwgJHRoaXMtPm9wdGlvbnNb J2xldmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVtcCkgLSA2Ow0KCQkJCQkkdGVt cCA9IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJCSRz aXplID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAkY3Jj MzIsICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUy J10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkk dGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0K CQkJCXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2 dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09 IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50Wydt ZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDog MHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0 J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1 cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1l J119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+ YWRkX2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5hZGRfZGF0YShwYWNrKCJWdnZ2dlZW diIsIDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAkZmlsZXMsICRmaWxlcywgc3RybGVu KCRjZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2NvbW1l bnQnXSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgOiAweDAwMDApKTsN Cg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSkNCgkJCSR0aGlz LT5hZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKTsNCg0KCQljaGRpcigkcHdk KTsNCg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIENsYXNzIGRVbnppcDIg djIuNjINCiMNCiMgIEF1dGhvcjogQWxleGFuZHJlIFRlZGVzY2hpIChkKQ0KIyAgRS1NYWls OiBhbGV4YW5kcmViciBhdCBnbWFpbCBkb3QgY29tDQojICBMb25kcmluYSAtIFBSIC8gQnJh emlsDQojDQojICBPYmplY3RpdmU6DQojICAgIFRoaXMgY2xhc3MgYWxsb3dzIHByb2dyYW1t ZXIgdG8gZWFzaWx5IHVuemlwIGZpbGVzIG9uIHRoZSBmbHkuDQojDQojICBSZXF1aXJlbWVu dHM6DQojICAgIFRoaXMgY2xhc3MgcmVxdWlyZXMgZXh0ZW5zaW9uIFpMaWIgRW5hYmxlZC4g SXQgaXMgZGVmYXVsdA0KIyAgICBmb3IgbW9zdCBzaXRlIGhvc3RzIGFyb3VuZCB0aGUgd29y bGQsIGFuZCBmb3IgdGhlIFBIUCBXaW4zMiBkaXN0Lg0KIw0KIyAgVG8gZG86DQojICAgKiBF cnJvciBoYW5kbGluZw0KIyAgICogV3JpdGUgYSBQSFAtU2lkZSBnemluZmxhdGUsIHRvIGNv bXBsZXRlbHkgYXZvaWQgYW55IGV4dGVybmFsIGV4dGVuc2lvbnMNCiMgICAqIFdyaXRlIG90 aGVyIGRlY29tcHJlc3MgYWxnb3JpdGhtcw0KIw0KIyAgTWV0aG9kczoNCiMgICogZFVuemlw MigkZmlsZW5hbWUpICAgICAgICAgLSBDb25zdHJ1Y3RvciAtIE9wZW5zICRmaWxlbmFtZQ0K IyAgKiBnZXRMaXN0KFskc3RvcE9uRmlsZV0pICAgICAtIFJldHJpZXZlIHRoZSBmaWxlIGxp c3QNCiMgICogZ2V0RXh0cmFJbmZvKCR6aXBmaWxlbmFtZSkgLSBSZXRyaWV2ZSBtb3JlIGlu Zm9ybWF0aW9uIGFib3V0IGNvbXByZXNzZWQgZmlsZQ0KIyAgKiBnZXRaaXBJbmZvKFskZW50 cnldKSAgICAgICAtIFJldHJpZXZlIFpJUCBmaWxlIGRldGFpbHMuDQojICAqIHVuemlwKCR6 aXBmaWxlbmFtZSwgWyRvdXRmaWxlbmFtZSwgWyRhcHBseUNobW9kXV0pIC0gVW56aXAgZmls ZQ0KIyAgKiB1bnppcEFsbChbJG91dERpciwgWyR6aXBEaXIsIFskbWFpbnRhaW5TdHJ1Y3R1 cmUsIFskYXBwbHlDaG1vZF1dXV0pDQojICAqIGNsb3NlKCkgICAgICAgICAgICAgICAgICAg IC0gQ2xvc2UgZmlsZSBoYW5kbGVyLCBidXQga2VlcCB0aGUgbGlzdA0KIyAgKiBfX2Rlc3Ry b3koKSAgICAgICAgICAgICAgICAtIENsb3NlIGZpbGUgaGFuZGxlciBhbmQgcmVsZWFzZSBt ZW1vcnkNCiMNCiMgIElmIHlvdSBtb2RpZnkgdGhpcyBjbGFzcywgb3IgaGF2ZSBhbnkgaWRl YXMgdG8gaW1wcm92ZSBpdCwgcGxlYXNlIGNvbnRhY3QgbWUhDQojICBZb3UgYXJlIGFsbG93 ZWQgdG8gcmVkaXN0cmlidXRlIHRoaXMgY2xhc3MsIGlmIHlvdSBrZWVwIG15IG5hbWUgYW5k IGNvbnRhY3QgZS1tYWlsIG9uIGl0Lg0KIw0KIyAgUExFQVNFISBJRiBZT1UgVVNFIFRISVMg Q0xBU1MgSU4gQU5ZIE9GIFlPVVIgUFJPSkVDVFMsIFBMRUFTRSBMRVQgTUUgS05PVyENCiMg IElmIHlvdSBoYXZlIHByb2JsZW1zIHVzaW5nIGl0LCBkb24ndCB0aGluayB0d2ljZSBiZWZv cmUgY29udGFjdGluZyBtZSENCiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmlmKCFmdW5jdGlvbl9leGlzdHMo J2ZpbGVfcHV0X2NvbnRlbnRzJykpew0KCS8vIElmIG5vdCBQSFA1LCBjcmVhdGVzIGEgY29t cGF0aWJsZSBmdW5jdGlvbg0KCUZ1bmN0aW9uIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAk ZGF0YSl7DQoJCWlmKCR0bXAgPSBmb3BlbigkZmlsZSwgInciKSl7DQoJCQlmd3JpdGUoJHRt cCwgJGRhdGEpOw0KCQkJZmNsb3NlKCR0bXApOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJ ZWNobyAiPGI+ZmlsZV9wdXRfY29udGVudHM6PC9iPiBDYW5ub3QgY3JlYXRlIGZpbGUgJGZp bGU8YnI+IjsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2RVbnppcDJ7 DQoJRnVuY3Rpb24gZ2V0VmVyc2lvbigpew0KCQlyZXR1cm4gIjIuNjIiOw0KCX0NCgkvLyBQ dWJsaWMNCgl2YXIgJGZpbGVOYW1lOw0KCXZhciAkbGFzdEVycm9yOw0KCXZhciAkY29tcHJl c3NlZExpc3Q7IC8vIFlvdSB3aWxsIHByb2JsYWJseSB1c2Ugb25seSB0aGlzIG9uZSENCgl2 YXIgJGNlbnRyYWxEaXJMaXN0OyAvLyBDZW50cmFsIGRpciBsaXN0Li4uIEl0J3MgYSBraW5k IG9mICdleHRyYSBhdHRyaWJ1dGVzJyBmb3IgYSBzZXQgb2YgZmlsZXMNCgl2YXIgJGVuZE9m Q2VudHJhbDsgICAvLyBFbmQgb2YgY2VudHJhbCBkaXIsIGNvbnRhaW5zIFpJUCBDb21tZW50 cw0KCXZhciAkZGVidWc7DQoNCgkvLyBQcml2YXRlDQoJdmFyICRmaDsNCgl2YXIgJHppcFNp Z25hdHVyZSA9ICJceDUwXHg0Ylx4MDNceDA0IjsgLy8gbG9jYWwgZmlsZSBoZWFkZXIgc2ln bmF0dXJlDQoJdmFyICRkaXJTaWduYXR1cmUgPSAiXHg1MFx4NGJceDAxXHgwMiI7IC8vIGNl bnRyYWwgZGlyIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZUU9ICJceDUw XHg0Ylx4MDVceDA2IjsgLy8gZW5kIG9mIGNlbnRyYWwgZGlyIHNpZ25hdHVyZQ0KDQoJLy8g UHVibGljDQoJRnVuY3Rpb24gc21kX2RVbnppcDIoJGZpbGVOYW1lKXsNCgkJJHRoaXMtPmZp bGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+Y29tcHJlc3NlZExpc3QgPQ0K CQkkdGhpcy0+Y2VudHJhbERpckxpc3QgPQ0KCQkkdGhpcy0+ZW5kT2ZDZW50cmFsICAgPSBB cnJheSgpOw0KCX0NCg0KCUZ1bmN0aW9uIGdldExpc3QoJHN0b3BPbkZpbGU9ZmFsc2Upew0K CQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkkdGhpcy0+ZGVidWdN c2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxlIGxpc3QuIik7DQoJCQlyZXR1 cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoNCgkJLy8gT3BlbiBmaWxlLCBhbmQg c2V0IGZpbGUgaGFuZGxlcg0KCQkkZmggPSBmb3BlbigkdGhpcy0+ZmlsZU5hbWUsICJyIik7 DQoJCSR0aGlzLT5maCA9ICYkZmg7DQoJCWlmKCEkZmgpew0KCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJGYWlsZWQgdG8gbG9hZCBmaWxlLiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoN CgkJJHRoaXMtPmRlYnVnTXNnKDEsICJMb2FkaW5nIGxpc3QgZnJvbSAnRW5kIG9mIENlbnRy YWwgRGlyJyBpbmRleCBsaXN0Li4uIik7DQoJCWlmKCEkdGhpcy0+X2xvYWRGaWxlTGlzdEJ5 RU9GKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmFpbGVk ISBUcnlpbmcgdG8gbG9hZCBsaXN0IGxvb2tpbmcgZm9yIHNpZ25hdHVyZXMuLi4iKTsNCgkJ CWlmKCEkdGhpcy0+X2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJlcygkZmgsICRzdG9wT25GaWxl KSl7DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQhIENvdWxkIG5vdCBmaW5kIGFu eSB2YWxpZCBoZWFkZXIuIik7DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJaSVAgRmlsZSBp cyBjb3JydXB0ZWQgb3IgZW1wdHkiKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0N Cg0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0gRGVidWcgY29tcHJlc3NlZExp c3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2Zv bnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAwMCc+IjsNCgkJCWZvcmVh Y2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJCWlm KCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDog I0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpDQoJ CQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJCQkJZWNobyAnPC90cj4nOw0K CQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91bmQ6ICNDRkMnPiI7DQoJCQkJ Zm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpew0KCQkJCQlpZigkZmllbGRO YW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZp ZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9tL1kgSDppOnMiLCAkdmFsdWUp LiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFt ZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQl9DQoJCQkJZWNobyAiPC90 cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KDQoJCQkjLS0tLS0tLSBEZWJ1ZyBj ZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlpZihzaXplb2YoJHRoaXMtPmNlbnRy YWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6 IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAwMCc+IjsNCgkJCQlmb3JlYWNo KCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5hbWU9PiRpdGVtKXsNCgkJCQkJaWYo ISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDog I0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGZpZWxkTmFtZT0+JHZhbHVlKQ0K CQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4iOw0KCQkJCQkJZWNobyAnPC90cj4n Ow0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0NDRic+IjsN CgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpew0KCQkJCQkJaWYo JGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScpDQoJCQkJCQkJZWNobyAiPHRkIHRp dGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+Ii5kYXRlKCJkL20vWSBIOmk6cyIs ICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9 JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFsdWU8L3RkPiI7DQoJCQkJCX0NCgkJ CQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3RhYmxlPiI7DQoJCQl9DQoN CgkJCSMtLS0tLS0tIERlYnVnIGVuZE9mQ2VudHJhbA0KCQkJJGtrayA9IDA7DQoJCQlpZihz aXplb2YoJHRoaXMtPmVuZE9mQ2VudHJhbCkpew0KCQkJCWVjaG8gIjx0YWJsZSBib3JkZXI9 JzAnIHN0eWxlPSdmb250OiAxMXB4IFZlcmRhbmEnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xp ZCAjMDAwJz4iOw0KCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0RBQSc+PHRk IGNvbHNwYW49JzInPmRVbnppcCAtIEVuZCBvZiBmaWxlPC90ZD48L3RyPiI7DQoJCQkJZm9y ZWFjaCgkdGhpcy0+ZW5kT2ZDZW50cmFsIGFzICRmaWVsZD0+JHZhbHVlKXsNCgkJCQkJZWNo byAiPHRyPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDogI0ZDQyc+JGZp ZWxkPC90ZD4iOw0KCQkJCQllY2hvICI8dGQgc3R5bGU9J2JhY2tncm91bmQ6ICNGREQnPiR2 YWx1ZTwvdGQ+IjsNCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3Rh YmxlPiI7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0K CX0NCglGdW5jdGlvbiBnZXRFeHRyYUluZm8oJGNvbXByZXNzZWRGaWxlTmFtZSl7DQoJCXJl dHVybg0KCQkJaXNzZXQoJHRoaXMtPmNlbnRyYWxEaXJMaXN0WyRjb21wcmVzc2VkRmlsZU5h bWVdKT8NCgkJCSR0aGlzLT5jZW50cmFsRGlyTGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXToN CgkJCWZhbHNlOw0KCX0NCglGdW5jdGlvbiBnZXRaaXBJbmZvKCRkZXRhaWw9ZmFsc2Upew0K CQlyZXR1cm4gJGRldGFpbD8NCgkJCSR0aGlzLT5lbmRPZkNlbnRyYWxbJGRldGFpbF06DQoJ CQkkdGhpcy0+ZW5kT2ZDZW50cmFsOw0KCX0NCg0KCUZ1bmN0aW9uIHVuemlwKCRjb21wcmVz c2VkRmlsZU5hbWUsICR0YXJnZXRGaWxlTmFtZT1mYWxzZSwgJGFwcGx5Q2htb2Q9MDc3Nyl7 DQoJCWlmKCFzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkkdGhpcy0+ZGVi dWdNc2coMSwgIlRyeWluZyB0byB1bnppcCBiZWZvcmUgbG9hZGluZyBmaWxlIGxpc3QuLi4g TG9hZGluZyBpdCEiKTsNCgkJCSR0aGlzLT5nZXRMaXN0KGZhbHNlLCAkY29tcHJlc3NlZEZp bGVOYW1lKTsNCgkJfQ0KDQoJCSRmZGV0YWlscyA9ICYkdGhpcy0+Y29tcHJlc3NlZExpc3Rb JGNvbXByZXNzZWRGaWxlTmFtZV07DQoJCWlmKCFpc3NldCgkdGhpcy0+Y29tcHJlc3NlZExp c3RbJGNvbXByZXNzZWRGaWxlTmFtZV0pKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiRmls ZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIG5vdCBjb21wcmVzc2VkIGluIHRo ZSB6aXAuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYoc3Vic3RyKCRjb21wcmVz c2VkRmlsZU5hbWUsIC0xKSA9PSAiLyIpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJUcnlp bmcgdG8gdW56aXAgYSBmb2xkZXIgbmFtZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4n LiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmKCEkZmRldGFpbHNbJ3VuY29tcHJl c3NlZF9zaXplJ10pew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGaWxlICc8Yj4kY29tcHJl c3NlZEZpbGVOYW1lPC9iPicgaXMgZW1wdHkuIik7DQoJCQlyZXR1cm4gJHRhcmdldEZpbGVO YW1lPw0KCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgIiIpOg0KCQkJ CSIiOw0KCQl9DQoNCgkJZnNlZWsoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbnRlbnRzLXN0 YXJ0T2Zmc2V0J10pOw0KCQkkcmV0ID0gJHRoaXMtPnVuY29tcHJlc3MoDQoJCQkJZnJlYWQo JHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbXByZXNzZWRfc2l6ZSddKSwNCgkJCQkkZmRldGFp bHNbJ2NvbXByZXNzaW9uX21ldGhvZCddLA0KCQkJCSRmZGV0YWlsc1sndW5jb21wcmVzc2Vk X3NpemUnXSwNCgkJCQkkdGFyZ2V0RmlsZU5hbWUNCgkJCSk7DQoJCWlmKCRhcHBseUNobW9k ICYmICR0YXJnZXRGaWxlTmFtZSkNCgkJCWNobW9kKCR0YXJnZXRGaWxlTmFtZSwgMDc3Nyk7 DQoJCQ0KCQlyZXR1cm4gJHJldDsNCgl9DQoJRnVuY3Rpb24gdW56aXBBbGwoJHRhcmdldERp cj1mYWxzZSwgJGJhc2VEaXI9IiIsICRtYWludGFpblN0cnVjdHVyZT10cnVlLCAkYXBwbHlD aG1vZD0wNzc3KXsNCgkJaWYoJHRhcmdldERpciA9PT0gZmFsc2UpDQoJCQkkdGFyZ2V0RGly ID0gZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLiIvIjsNCgkJDQoJCSRs aXN0YSA9ICR0aGlzLT5nZXRMaXN0KCk7DQoJCWlmKHNpemVvZigkbGlzdGEpKSBmb3JlYWNo KCRsaXN0YSBhcyAkZmlsZU5hbWU9PiR0cmFzaCl7DQoJCQkkZGlybmFtZSAgPSBkaXJuYW1l KCRmaWxlTmFtZSk7DQoJCQkkb3V0RE4gICAgPSAiJHRhcmdldERpci8kZGlybmFtZSI7DQoJ CQkNCgkJCWlmKHN1YnN0cigkZGlybmFtZSwgMCwgc3RybGVuKCRiYXNlRGlyKSkgIT0gJGJh c2VEaXIpDQoJCQkJY29udGludWU7DQoJCQkNCgkJCWlmKCFpc19kaXIoJG91dEROKSAmJiAk bWFpbnRhaW5TdHJ1Y3R1cmUpew0KCQkJCSRzdHIgPSAiIjsNCgkJCQkkZm9sZGVycyA9IGV4 cGxvZGUoIi8iLCAkZGlybmFtZSk7DQoJCQkJZm9yZWFjaCgkZm9sZGVycyBhcyAkZm9sZGVy KXsNCgkJCQkJJHN0ciA9ICRzdHI/IiRzdHIvJGZvbGRlciI6JGZvbGRlcjsNCgkJCQkJaWYo IWlzX2RpcigiJHRhcmdldERpci8kc3RyIikpew0KCQkJCQkJJHRoaXMtPmRlYnVnTXNnKDEs ICJDcmVhdGluZyBmb2xkZXI6ICR0YXJnZXREaXIvJHN0ciIpOw0KCQkJCQkJbWtkaXIoIiR0 YXJnZXREaXIvJHN0ciIpOw0KCQkJCQkJaWYoJGFwcGx5Q2htb2QpDQoJCQkJCQkJY2htb2Qo IiR0YXJnZXREaXIvJHN0ciIsICRhcHBseUNobW9kKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0N CgkJCWlmKHN1YnN0cigkZmlsZU5hbWUsIC0xLCAxKSA9PSAiLyIpDQoJCQkJY29udGludWU7 DQoNCgkJCSRtYWludGFpblN0cnVjdHVyZT8NCgkJCQkkdGhpcy0+dW56aXAoJGZpbGVOYW1l LCAiJHRhcmdldERpci8kZmlsZU5hbWUiLCAkYXBwbHlDaG1vZCk6DQoJCQkJJHRoaXMtPnVu emlwKCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvIi5iYXNlbmFtZSgkZmlsZU5hbWUpLCAkYXBw bHlDaG1vZCk7DQoJCX0NCgl9DQoJDQoJRnVuY3Rpb24gY2xvc2UoKXsgICAgIC8vIEZyZWUg dGhlIGZpbGUgcmVzb3VyY2UNCgkJaWYoJHRoaXMtPmZoKQ0KCQkJZmNsb3NlKCR0aGlzLT5m aCk7DQoJfQ0KCUZ1bmN0aW9uIF9fZGVzdHJveSgpeyANCgkJJHRoaXMtPmNsb3NlKCk7DQoJ fQ0KDQoJLy8gUHJpdmF0ZSAoeW91IHNob3VsZCBOT1QgY2FsbCB0aGVzZSBtZXRob2RzKToN CglGdW5jdGlvbiB1bmNvbXByZXNzKCYkY29udGVudCwgJG1vZGUsICR1bmNvbXByZXNzZWRT aXplLCAkdGFyZ2V0RmlsZU5hbWU9ZmFsc2Upew0KCQlzd2l0Y2goJG1vZGUpew0KCQkJY2Fz ZSAwOg0KCQkJCS8vIE5vdCBjb21wcmVzc2VkDQoJCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFt ZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCAkY29udGVudCk6 DQoJCQkJCSRjb250ZW50Ow0KCQkJY2FzZSAxOg0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAi U2hydW5rIG1vZGUgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZh bHNlOw0KCQkJY2FzZSAyOg0KCQkJY2FzZSAzOg0KCQkJY2FzZSA0Og0KCQkJY2FzZSA1Og0K CQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiQ29tcHJlc3Npb24gZmFjdG9yICIuKCRtb2RlLTEp LiIgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJ Y2FzZSA2Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiSW1wbG9kZSBpcyBub3Qgc3VwcG9y dGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDc6DQoJCQkJJHRo aXMtPmRlYnVnTXNnKDIsICJUb2tlbml6aW5nIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBu b3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDg6 DQoJCQkJLy8gRGVmbGF0ZQ0KCQkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJCWZp bGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgZ3ppbmZsYXRlKCRjb250ZW50LCAk dW5jb21wcmVzc2VkU2l6ZSkpOg0KCQkJCQlnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXBy ZXNzZWRTaXplKTsNCgkJCWNhc2UgOToNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkVuaGFu Y2VkIERlZmxhdGluZyBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQljYXNlIDEwOg0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiUEtXQVJFIERh dGUgQ29tcHJlc3Npb24gTGlicmFyeSBJbXBvbG9kaW5nIGlzIG5vdCBzdXBwb3J0ZWQuLi4g eWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCiAgICAgICAgICAgY2FzZSAxMjoNCiAgICAg ICAgICAgICAgIC8vIEJ6aXAyDQogICAgICAgICAgICAgICByZXR1cm4gJHRhcmdldEZpbGVO YW1lPw0KICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxl TmFtZSwgYnpkZWNvbXByZXNzKCRjb250ZW50KSk6DQogICAgICAgICAgICAgICAgICAgYnpk ZWNvbXByZXNzKCRjb250ZW50KTsNCgkJCWNhc2UgMTg6DQoJCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJJQk0gVEVSU0UgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJu IGZhbHNlOw0KCQkJZGVmYXVsdDoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlVua25vd24g dW5jb21wcmVzcyBtZXRob2Q6ICRtb2RlIik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJ fQ0KCUZ1bmN0aW9uIGRlYnVnTXNnKCRsZXZlbCwgJHN0cmluZyl7DQoJCWlmKCR0aGlzLT5k ZWJ1Zyl7DQoJCQlpZigkbGV2ZWwgPT0gMSkNCgkJCQllY2hvICI8YiBzdHlsZT0nY29sb3I6 ICM3NzcnPmRVbnppcDI6PC9iPiAkc3RyaW5nPGJyPiI7DQoJCQkNCgkJCWlmKCRsZXZlbCA9 PSAyKQ0KCQkJCWVjaG8gIjxiIHN0eWxlPSdjb2xvcjogI0YwMCc+ZFVuemlwMjo8L2I+ICRz dHJpbmc8YnI+IjsNCgkJfQ0KCQkkdGhpcy0+bGFzdEVycm9yID0gJHN0cmluZzsNCgl9DQoJ RnVuY3Rpb24gZ2V0TGFzdEVycm9yKCl7DQoJCXJldHVybiAkdGhpcy0+bGFzdEVycm9yOw0K CX0NCg0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RCeUVPRigmJGZoLCAkc3RvcE9uRmlsZT1m YWxzZSl7DQoJCS8vIENoZWNrIGlmIHRoZXJlJ3MgYSB2YWxpZCBDZW50cmFsIERpciBzaWdu YXR1cmUuDQoJCS8vIExldCdzIGNvbnNpZGVyIGEgZmlsZSBjb21tZW50IHNtYWxsZXIgdGhh biAxMDI0IGNoYXJhY3RlcnMuLi4NCgkJLy8gQWN0dWFsbHksIGl0IGxlbmd0aCBjYW4gYmUg NjU1MzYuLiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHN1cHBvcnQgaXQuDQoNCgkJZm9yKCR4 ID0gMDsgJHggPCAxMDI0OyAkeCsrKXsNCgkJCWZzZWVrKCRmaCwgLTIyLSR4LCBTRUVLX0VO RCk7DQoNCgkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJaWYoJHNpZ25hdHVy ZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlRSl7DQoJCQkJLy8gSWYgZm91bmQgRU9GIENlbnRy YWwgRGlyDQoJCQkJJGVvZGlyWydkaXNrX251bWJlcl90aGlzJ10gICA9IHVucGFjaygidiIs IGZyZWFkKCRmaCwgMikpOyAvLyBudW1iZXIgb2YgdGhpcyBkaXNrDQoJCQkJJGVvZGlyWydk aXNrX251bWJlciddICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBu dW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNlbnRyYWwgZGlyZWN0 b3J5DQoJCQkJJGVvZGlyWyd0b3RhbF9lbnRyaWVzX3RoaXMnXSA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJh bCBkaXIgb24gdGhpcyBkaXNrDQoJCQkJJGVvZGlyWyd0b3RhbF9lbnRyaWVzJ10gICAgICA9 IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmll cyBpbg0KCQkJCSRlb2Rpclsnc2l6ZV9vZl9jZCddICAgICAgICAgPSB1bnBhY2soIlYiLCBm cmVhZCgkZmgsIDQpKTsgLy8gc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkk ZW9kaXJbJ29mZnNldF9zdGFydF9jZCddICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0 KSk7IC8vIG9mZnNldCBvZiBzdGFydCBvZiBjZW50cmFsIGRpcmVjdG9yeSB3aXRoIHJlc3Bl Y3QgdG8gdGhlIHN0YXJ0aW5nIGRpc2sgbnVtYmVyDQoJCQkJJHppcEZpbGVDb21tZW50TGVu Z2h0ICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB6aXBmaWxlIGNv bW1lbnQgbGVuZ3RoDQoJCQkJJGVvZGlyWyd6aXBmaWxlX2NvbW1lbnQnXSAgICA9ICR6aXBG aWxlQ29tbWVudExlbmdodFsxXT9mcmVhZCgkZmgsICR6aXBGaWxlQ29tbWVudExlbmdodFsx XSk6Jyc7IC8vIHppcGZpbGUgY29tbWVudA0KCQkJCSR0aGlzLT5lbmRPZkNlbnRyYWwgPSBB cnJheSgNCgkJCQkJJ2Rpc2tfbnVtYmVyX3RoaXMnPT4kZW9kaXJbJ2Rpc2tfbnVtYmVyX3Ro aXMnXVsxXSwNCgkJCQkJJ2Rpc2tfbnVtYmVyJz0+JGVvZGlyWydkaXNrX251bWJlciddWzFd LA0KCQkJCQkndG90YWxfZW50cmllc190aGlzJz0+JGVvZGlyWyd0b3RhbF9lbnRyaWVzX3Ro aXMnXVsxXSwNCgkJCQkJJ3RvdGFsX2VudHJpZXMnPT4kZW9kaXJbJ3RvdGFsX2VudHJpZXMn XVsxXSwNCgkJCQkJJ3NpemVfb2ZfY2QnPT4kZW9kaXJbJ3NpemVfb2ZfY2QnXVsxXSwNCgkJ CQkJJ29mZnNldF9zdGFydF9jZCc9PiRlb2Rpclsnb2Zmc2V0X3N0YXJ0X2NkJ11bMV0sDQoJ CQkJCSd6aXBmaWxlX2NvbW1lbnQnPT4kZW9kaXJbJ3ppcGZpbGVfY29tbWVudCddLA0KCQkJ CSk7DQoNCgkJCQkvLyBUaGVuLCBsb2FkIGZpbGUgbGlzdA0KCQkJCWZzZWVrKCRmaCwgJHRo aXMtPmVuZE9mQ2VudHJhbFsnb2Zmc2V0X3N0YXJ0X2NkJ10pOw0KCQkJCSRzaWduYXR1cmUg PSBmcmVhZCgkZmgsIDQpOw0KDQoJCQkJd2hpbGUoJHNpZ25hdHVyZSA9PSAkdGhpcy0+ZGly U2lnbmF0dXJlKXsNCgkJCQkJJGRpclsndmVyc2lvbl9tYWRlYnknXSAgICAgID0gdW5wYWNr KCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbWFkZSBieQ0KCQkJCQkkZGlyWyd2 ZXJzaW9uX25lZWRlZCddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8g dmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJCQkkZGlyWydnZW5lcmFsX2JpdF9mbGFn J10gICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3Nl IGJpdCBmbGFnDQoJCQkJCSRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lvbiBtZXRob2QNCgkJCQkJJGRpclsn bGFzdG1vZF90aW1lJ10gICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IGxhc3QgbW9kIGZpbGUgdGltZQ0KCQkJCQkkZGlyWydsYXN0bW9kX2RhdGUnXSAgICAgICAg PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJ CQkJCSRkaXJbJ2NyYy0zMiddICAgICAgICAgICAgICA9IGZyZWFkKCRmaCwgNCk7ICAgICAg ICAgICAgICAvLyBjcmMtMzINCgkJCQkJJGRpclsnY29tcHJlc3NlZF9zaXplJ10gICAgID0g dW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIGNvbXByZXNzZWQgc2l6ZQ0KCQkJCQkk ZGlyWyd1bmNvbXByZXNzZWRfc2l6ZSddICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQp KTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJCQkJJGZpbGVOYW1lTGVuZ3RoICAgICAgICAg ICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGVuYW1lIGxlbmd0aA0K CQkJCQkkZXh0cmFGaWVsZExlbmd0aCAgICAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gZXh0cmEgZmllbGQgbGVuZ3RoDQoJCQkJCSRmaWxlQ29tbWVudExlbmd0 aCAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBmaWxlIGNvbW1l bnQgbGVuZ3RoDQoJCQkJCSRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J10gICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBkaXNrIG51bWJlciBzdGFydA0KCQkJCQkkZGlyWydp bnRlcm5hbF9hdHRyaWJ1dGVzJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8g aW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLWJ5dGUxDQoJCQkJCSRkaXJbJ2V4dGVybmFsX2F0 dHJpYnV0ZXMxJ109IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRlcm5hbCBm aWxlIGF0dHJpYnV0ZXMtYnl0ZTINCgkJCQkJJGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczIn XT0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dGVybmFsIGZpbGUgYXR0cmli dXRlcw0KCQkJCQkkZGlyWydyZWxhdGl2ZV9vZmZzZXQnXSAgICAgPSB1bnBhY2soIlYiLCBm cmVhZCgkZmgsIDQpKTsgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlcg0KCQkJ CQkkZGlyWydmaWxlX25hbWUnXSAgICAgICAgICAgPSBmcmVhZCgkZmgsICRmaWxlTmFtZUxl bmd0aFsxXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZQ0KCQkJ CQkkZGlyWydleHRyYV9maWVsZCddICAgICAgICAgPSAkZXh0cmFGaWVsZExlbmd0aFsxXSA/ ZnJlYWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSkgOicnOyAvLyBleHRyYSBmaWVsZA0K CQkJCQkkZGlyWydmaWxlX2NvbW1lbnQnXSAgICAgICAgPSAkZmlsZUNvbW1lbnRMZW5ndGhb MV0/ZnJlYWQoJGZoLCAkZmlsZUNvbW1lbnRMZW5ndGhbMV0pOicnOyAvLyBmaWxlIGNvbW1l bnQNCg0KCQkJCQkvLyBDb252ZXJ0IHRoZSBkYXRlIGFuZCB0aW1lLCBmcm9tIE1TLURPUyBm b3JtYXQgdG8gVU5JWCBUaW1lc3RhbXANCgkJCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9w YWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9M RUZUKTsNCgkJCQkJJEJJTmxhc3Rtb2RfdGltZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xh c3Rtb2RfdGltZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJGxhc3Rt b2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICAwLCA3KSkrMTk4 MDsNCgkJCQkJJGxhc3Rtb2RfZGF0ZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2Rh dGUsICA3LCA0KSk7DQoJCQkJCSRsYXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklO bGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0KCQkJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRlYyhz dWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVN ID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90aW1lLCAgIDUsIDYpKTsNCgkJCQkJJGxh c3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkp Ow0KDQoJCQkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJCQlp ZighJGRpclsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3QoJGRpclsnZmlsZV9uYW1l J10pKQ0KCQkJCQkJY29udGludWU7DQoNCgkJCQkJJHRoaXMtPmNlbnRyYWxEaXJMaXN0WyRk aXJbJ2ZpbGVfbmFtZSddXSA9IEFycmF5KA0KCQkJCQkJJ3ZlcnNpb25fbWFkZWJ5Jz0+JGRp clsndmVyc2lvbl9tYWRlYnknXVsxXSwNCgkJCQkJCSd2ZXJzaW9uX25lZWRlZCc9PiRkaXJb J3ZlcnNpb25fbmVlZGVkJ11bMV0sDQoJCQkJCQknZ2VuZXJhbF9iaXRfZmxhZyc9PnN0cl9w YWQoZGVjYmluKCRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgsICcwJywgU1RSX1BB RF9MRUZUKSwNCgkJCQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZGlyWydjb21wcmVzc2lv bl9tZXRob2QnXVsxXSwNCgkJCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAgPT5ta3RpbWUoJGxh c3Rtb2RfdGltZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1lUywgJGxhc3Rtb2Rf ZGF0ZU0sICRsYXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJCQkJCQknY3JjLTMy JyAgICAgICAgICAgID0+c3RyX3BhZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzNdKSks IDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChv cmQoJGRpclsnY3JjLTMyJ11bMl0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJ CQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMtMzInXVsxXSkpLCAyLCAnMCcs IFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRkaXJb J2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJCQkJCSdjb21wcmVz c2VkX3NpemUnPT4kZGlyWydjb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJCSd1bmNvbXBy ZXNzZWRfc2l6ZSc9PiRkaXJbJ3VuY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJCQknZGlz a19udW1iZXJfc3RhcnQnPT4kZGlyWydkaXNrX251bWJlcl9zdGFydCddWzFdLA0KCQkJCQkJ J2ludGVybmFsX2F0dHJpYnV0ZXMnPT4kZGlyWydpbnRlcm5hbF9hdHRyaWJ1dGVzJ11bMV0s DQoJCQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczEnPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1 dGVzMSddWzFdLA0KCQkJCQkJJ2V4dGVybmFsX2F0dHJpYnV0ZXMyJz0+JGRpclsnZXh0ZXJu YWxfYXR0cmlidXRlczInXVsxXSwNCgkJCQkJCSdyZWxhdGl2ZV9vZmZzZXQnPT4kZGlyWydy ZWxhdGl2ZV9vZmZzZXQnXVsxXSwNCgkJCQkJCSdmaWxlX25hbWUnPT4kZGlyWydmaWxlX25h bWUnXSwNCgkJCQkJCSdleHRyYV9maWVsZCc9PiRkaXJbJ2V4dHJhX2ZpZWxkJ10sDQoJCQkJ CQknZmlsZV9jb21tZW50Jz0+JGRpclsnZmlsZV9jb21tZW50J10sDQoJCQkJCSk7DQoJCQkJ CSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJCX0NCg0KCQkJCS8vIElmIGxvYWRl ZCBjZW50cmFsRGlycywgdGhlbiB0cnkgdG8gaWRlbnRpZnkgdGhlIG9mZnNldFBvc2l0aW9u IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuDQoJCQkJaWYoJHRoaXMtPmNlbnRyYWxEaXJMaXN0 KSBmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZW5hbWU9PiRkZXRhaWxz KXsNCgkJCQkJJGkgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgsICRk ZXRhaWxzWydyZWxhdGl2ZV9vZmZzZXQnXSk7DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlz dFskZmlsZW5hbWVdWydmaWxlX25hbWUnXSAgICAgICAgICA9ICRmaWxlbmFtZTsNCgkJCQkJ JHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbXByZXNzaW9uX21ldGhvZCdd ID0gJGRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCddOw0KCQkJCQkkdGhpcy0+Y29tcHJl c3NlZExpc3RbJGZpbGVuYW1lXVsndmVyc2lvbl9uZWVkZWQnXSAgICAgPSAkZGV0YWlsc1sn dmVyc2lvbl9uZWVkZWQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFt ZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNbJ2xhc3Rtb2RfZGF0ZXRpbWUn XTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NyYy0zMiddICAg ICAgICAgICAgID0gJGRldGFpbHNbJ2NyYy0zMiddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSAkZGV0YWlsc1snY29t cHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVd Wyd1bmNvbXByZXNzZWRfc2l6ZSddICA9ICRkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSdd Ow0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFzdG1vZF9kYXRl dGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJCQkkdGhpcy0+ Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZXh0cmFfZmllbGQnXSAgICAgICAgPSAkaVsn ZXh0cmFfZmllbGQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1b J2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109JGlbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J107DQoJ CQkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93ZXIoJGZpbGVuYW1l KSkNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0K CQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RCeVNpZ25hdHVy ZXMoJiRmaCwgJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlmc2VlaygkZmgsIDApOw0KCQkNCgkJ JHJldHVybiA9IGZhbHNlOw0KCQlmb3IoOzspew0KCQkJJGRldGFpbHMgPSAkdGhpcy0+X2dl dEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJaWYoISRkZXRhaWxzKXsNCgkJCQkk dGhpcy0+ZGVidWdNc2coMSwgIkludmFsaWQgc2lnbmF0dXJlLiBUcnlpbmcgdG8gdmVyaWZ5 IGlmIGlzIG9sZCBzdHlsZSBEYXRhIERlc2NyaXB0b3IuLi4iKTsNCgkJCQlmc2VlaygkZmgs IDEyIC0gNCwgU0VFS19DVVIpOyAvLyAxMjogRGF0YSBkZXNjcmlwdG9yIC0gNDogU2lnbmF0 dXJlICh0aGF0IHdpbGwgYmUgcmVhZCBhZ2FpbikNCgkJCQkkZGV0YWlscyA9ICR0aGlzLT5f Z2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCk7DQoJCQl9DQoJCQlpZighJGRldGFpbHMp ew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiU3RpbGwgaW52YWxpZCBzaWduYXR1cmUuIFBy b2JhYmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS4iKTsNCgkJCQlicmVhazsNCgkJ CX0NCgkJCSRmaWxlbmFtZSA9ICRkZXRhaWxzWydmaWxlX25hbWUnXTsNCgkJCSR0aGlzLT5j b21wcmVzc2VkTGlzdFskZmlsZW5hbWVdID0gJGRldGFpbHM7DQoJCQkkcmV0dXJuID0gdHJ1 ZTsNCgkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93ZXIoJGZpbGVu YW1lKSkNCgkJCQlicmVhazsNCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXR1cm47DQoJfQ0KCUZ1 bmN0aW9uIF9nZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJiRmaCwgJHN0YXJ0T2Zmc2V0PWZh bHNlKXsNCgkJaWYoJHN0YXJ0T2Zmc2V0ICE9PSBmYWxzZSkNCgkJCWZzZWVrKCRmaCwgJHN0 YXJ0T2Zmc2V0KTsNCgkJDQoJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQlpZigk c2lnbmF0dXJlID09ICR0aGlzLT56aXBTaWduYXR1cmUpew0KCQkJIyAkdGhpcy0+ZGVidWdN c2coMSwgIlppcCBTaWduYXR1cmUhIik7DQoJCQkNCgkJCS8vIEdldCBpbmZvcm1hdGlvbiBh Ym91dCB0aGUgemlwcGVkIGZpbGUNCgkJCSRmaWxlWyd2ZXJzaW9uX25lZWRlZCddICAgICA9 IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRy YWN0DQoJCQkkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddICAgPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkkZmlsZVsnY29t cHJlc3Npb25fbWV0aG9kJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gY29t cHJlc3Npb24gbWV0aG9kDQoJCQkkZmlsZVsnbGFzdG1vZF90aW1lJ10gICAgICAgPSB1bnBh Y2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0aW1lDQoJCQkkZmls ZVsnbGFzdG1vZF9kYXRlJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsg Ly8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkkZmlsZVsnY3JjLTMyJ10gICAgICAgICAgICAg PSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJCQkkZmlsZVsnY29t cHJlc3NlZF9zaXplJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gY29t cHJlc3NlZCBzaXplDQoJCQkkZmlsZVsndW5jb21wcmVzc2VkX3NpemUnXSAgPSB1bnBhY2so IlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJCSRmaWxlTmFt ZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBm aWxlbmFtZSBsZW5ndGgNCgkJCSRleHRyYUZpZWxkTGVuZ3RoICAgICAgICAgICA9IHVucGFj aygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRyYSBmaWVsZCBsZW5ndGgNCgkJCSRmaWxl WydmaWxlX25hbWUnXSAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFd KTsgLy8gZmlsZW5hbWUNCgkJCSRmaWxlWydleHRyYV9maWVsZCddICAgICAgICA9ICRleHRy YUZpZWxkTGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5ndGhbMV0pOicnOyAv LyBleHRyYSBmaWVsZA0KCQkJJGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109IGZ0ZWxs KCRmaCk7DQoJCQkNCgkJCS8vIEJ5cGFzcyB0aGUgd2hvbGUgY29tcHJlc3NlZCBjb250ZW50 cywgYW5kIGxvb2sgZm9yIHRoZSBuZXh0IGZpbGUNCgkJCWZzZWVrKCRmaCwgJGZpbGVbJ2Nv bXByZXNzZWRfc2l6ZSddWzFdLCBTRUVLX0NVUik7DQoJCQkNCgkJCS8vIENvbnZlcnQgdGhl IGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRpbWVzdGFtcA0K CQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRmaWxlWydsYXN0bW9kX2Rh dGUnXVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkkQklObGFzdG1vZF90aW1l ID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfdGltZSddWzFdKSwgMTYsICcwJywg U1RSX1BBRF9MRUZUKTsNCgkJCSRsYXN0bW9kX2RhdGVZID0gYmluZGVjKHN1YnN0cigkQklO bGFzdG1vZF9kYXRlLCAgMCwgNykpKzE5ODA7DQoJCQkkbGFzdG1vZF9kYXRlTSA9IGJpbmRl YyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCSRsYXN0bW9kX2RhdGVE ID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0KCQkJJGxhc3Rt b2RfdGltZUggPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgMCwgNSkpOw0K CQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAg NSwgNikpOw0KCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9k X3RpbWUsICAxMSwgNSkpOw0KCQkJDQoJCQkvLyBTb21lIHByb3RlY3Rpb24gYWdhaW5zIGF0 dGFja3MuLi4NCgkJCWlmKCEkZmlsZVsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3Qo JGZpbGVbJ2ZpbGVfbmFtZSddKSkNCgkJCQlyZXR1cm47DQoJCQkNCgkJCS8vIE1vdW50IGZp bGUgdGFibGUNCgkJCSRpID0gQXJyYXkoDQoJCQkJJ2ZpbGVfbmFtZScgICAgICAgICA9PiRm aWxlWydmaWxlX25hbWUnXSwNCgkJCQknY29tcHJlc3Npb25fbWV0aG9kJz0+JGZpbGVbJ2Nv bXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCSd2ZXJzaW9uX25lZWRlZCcgICAgPT4kZmls ZVsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQknbGFzdG1vZF9kYXRldGltZScgID0+bWt0 aW1lKCRsYXN0bW9kX3RpbWVILCAkbGFzdG1vZF90aW1lTSwgJGxhc3Rtb2RfdGltZVMsICRs YXN0bW9kX2RhdGVNLCAkbGFzdG1vZF9kYXRlRCwgJGxhc3Rtb2RfZGF0ZVkpLA0KCQkJCSdj cmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0zMidd WzNdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3RyX3BhZChkZWNo ZXgob3JkKCRmaWxlWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJ CQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bMV0pKSwgMiwg JzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZp bGVbJ2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJCQknY29tcHJl c3NlZF9zaXplJyAgID0+JGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSd1bmNv bXByZXNzZWRfc2l6ZScgPT4kZmlsZVsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkn ZXh0cmFfZmllbGQnICAgICAgID0+JGZpbGVbJ2V4dHJhX2ZpZWxkJ10sDQoJCQkJJ2dlbmVy YWxfYml0X2ZsYWcnICA9PnN0cl9wYWQoZGVjYmluKCRmaWxlWydnZW5lcmFsX2JpdF9mbGFn J11bMV0pLCA4LCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ2NvbnRlbnRzLXN0YXJ0T2Zm c2V0Jz0+JGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10NCgkJCSk7DQoJCQlyZXR1cm4g JGk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglGdW5jdGlvbiBfcHJvdGVjdCgk ZnVsbFBhdGgpew0KCQkvLyBLbm93biBoYWNrLWF0dGFja3MgKGZpbGVuYW1lIGxpa2UpOg0K CQkvLyAgIC9ob21lL3Vzcg0KCQkvLyAgIC4uLy4uL2hvbWUvdXNyDQoJCS8vICAgZm9sZGVy Ly4uLy4uLy4uL2hvbWUvdXNyDQoJCS8vICAgc2FtcGxlLyh4MCkuLi9ob21lL3Vzcg0KCQkN CgkJJGZ1bGxQYXRoID0gc3RydHIoJGZ1bGxQYXRoLCAiOio8PnxcIlx4MFxcIiwgIi4uLi4u Li4vIik7DQoJCXdoaWxlKCRmdWxsUGF0aFswXSA9PSAiLyIpDQoJCQkkZnVsbFBhdGggPSBz dWJzdHIoJGZ1bGxQYXRoLCAxKTsNCgkJDQoJCWlmKHN1YnN0cigkZnVsbFBhdGgsIC0xKSA9 PSAiLyIpew0KCQkJJGJhc2UgICAgID0gJyc7DQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1 bGxQYXRoLCAwLCAtMSk7DQoJCX0NCgkJZWxzZXsNCgkJCSRiYXNlICAgICA9IGJhc2VuYW1l KCRmdWxsUGF0aCk7DQoJCQkkZnVsbFBhdGggPSBkaXJuYW1lKCRmdWxsUGF0aCk7DQoJCX0N CgkJDQoJCSRwYXJ0cyAgID0gZXhwbG9kZSgiLyIsICRmdWxsUGF0aCk7DQoJCSRsYXN0SWR4 ID0gZmFsc2U7DQoJCWZvcmVhY2goJHBhcnRzIGFzICRpZHg9PiRwYXJ0KXsNCgkJCWlmKCRw YXJ0ID09ICIuIikNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJZWxzZWlmKCRwYXJ0 ID09ICIuLiIpew0KCQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQkJaWYoJGxhc3RJZHgg IT09IGZhbHNlKXsNCgkJCQkJdW5zZXQoJHBhcnRzWyRsYXN0SWR4XSk7DQoJCQkJfQ0KCQkJ fQ0KCQkJZWxzZWlmKCRwYXJ0ID09PSAnJyl7DQoJCQkJdW5zZXQoJHBhcnRzWyRpZHhdKTsN CgkJCX0NCgkJCWVsc2V7DQoJCQkJJGxhc3RJZHggPSAkaWR4Ow0KCQkJfQ0KCQl9DQoNCgkJ JGZ1bGxQYXRoID0gc2l6ZW9mKCRwYXJ0cyk/aW1wbG9kZSgiLyIsICRwYXJ0cykuIi8iOiIi Ow0KCQlyZXR1cm4gJGZ1bGxQYXRoLiRiYXNlOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2RaaXB7 DQoJdmFyICRmaWxlbmFtZTsNCgl2YXIgJG92ZXJ3cml0ZTsNCgkNCgl2YXIgJHppcFNpZ25h dHVyZSA9ICJceDUwXHg0Ylx4MDNceDA0IjsgLy8gbG9jYWwgZmlsZSBoZWFkZXIgc2lnbmF0 dXJlDQoJdmFyICRkaXJTaWduYXR1cmUgPSAiXHg1MFx4NGJceDAxXHgwMiI7IC8vIGNlbnRy YWwgZGlyIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZUU9ICJceDUwXHg0 Ylx4MDVceDA2IjsgLy8gZW5kIG9mIGNlbnRyYWwgZGlyIHNpZ25hdHVyZQ0KCXZhciAkZmls ZXNfY291bnQgID0gMDsNCgl2YXIgJGZoOw0KCQ0KCUZ1bmN0aW9uIHNtZF9kWmlwKCRmaWxl bmFtZSwgJG92ZXJ3cml0ZT10cnVlKXsNCgkJJHRoaXMtPmZpbGVuYW1lICA9ICRmaWxlbmFt ZTsNCgkJJHRoaXMtPm92ZXJ3cml0ZSA9ICRvdmVyd3JpdGU7DQoJfQ0KCUZ1bmN0aW9uIGFk ZERpcigkZGlybmFtZSwgJGZpbGVDb21tZW50cz0nJyl7DQoJCWlmKHN1YnN0cigkZGlybmFt ZSwgLTEpICE9ICcvJykNCgkJCSRkaXJuYW1lIC49ICcvJzsNCgkJJHRoaXMtPmFkZEZpbGUo ZmFsc2UsICRkaXJuYW1lLCAkZmlsZUNvbW1lbnRzKTsNCgl9DQoJRnVuY3Rpb24gYWRkRmls ZSgkZmlsZW5hbWUsICRjZmlsZW5hbWUsICRmaWxlQ29tbWVudHM9JycsICRkYXRhPWZhbHNl KXsNCgkJaWYoISgkZmggPSAmJHRoaXMtPmZoKSkNCgkJCSRmaCA9IGZvcGVuKCR0aGlzLT5m aWxlbmFtZSwgJHRoaXMtPm92ZXJ3cml0ZT8nd2InOidhK2InKTsNCgkJDQoJCS8vICRmaWxl bmFtZSBjYW4gYmUgYSBsb2NhbCBmaWxlIE9SIHRoZSBkYXRhIHdpY2ggd2lsbCBiZSBjb21w cmVzc2VkDQoJCWlmKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9PScvJyl7DQoJCQkkZGV0YWls c1sndW5jc2l6ZSddID0gMDsNCgkJCSRkYXRhID0gJyc7DQoJCX0NCgkJZWxzZWlmKGZpbGVf ZXhpc3RzKCRmaWxlbmFtZSkpew0KCQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IGZpbGVzaXpl KCRmaWxlbmFtZSk7DQoJCQkkZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7 DQoJCX0NCgkJZWxzZWlmKCRmaWxlbmFtZSl7DQoJCQllY2hvICI8Yj5DYW5ub3QgYWRkICRm aWxlbmFtZS4gRmlsZSBub3QgZm91bmQ8L2I+PGJyPiI7DQoJCQlyZXR1cm4gZmFsc2U7DQoJ CX0NCgkJZWxzZXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10gPSBzdHJsZW4oJGZpbGVuYW1l KTsNCgkJCS8vIERBVEEgaXMgZ2l2ZW4uLiB1c2UgaXQhIDp8DQoJCX0NCg0KCQkvLyBpZiBk YXRhIHRvIGNvbXByZXNzIGlzIHRvbyBzbWFsbCwganVzdCBzdG9yZSBpdA0KCQlpZigkZGV0 YWlsc1sndW5jc2l6ZSddIDwgMjU2KXsNCgkJCSRkZXRhaWxzWydjb21zaXplJ10gPSAkZGV0 YWlsc1sndW5jc2l6ZSddOw0KCQkJJGRldGFpbHNbJ3ZuZWVkZWQnXSA9IDEwOw0KCQkJJGRl dGFpbHNbJ2NtZXRob2QnXSA9IDA7DQoJCQkkemRhdGEgPSAmJGRhdGE7DQoJCX0NCgkJZWxz ZXsgLy8gb3RoZXJ3aXNlLCBjb21wcmVzcyBpdA0KCQkJJHpkYXRhID0gZ3pjb21wcmVzcygk ZGF0YSk7DQoJCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6 ZGF0YSkgLSA0KSwgMik7IC8vIGZpeCBjcmMgYnVnICh0aGFua3MgdG8gRXJpYyBNdWVsbGVy KQ0KCQkJJGRldGFpbHNbJ2NvbXNpemUnXSA9IHN0cmxlbigkemRhdGEpOw0KCQkJJGRldGFp bHNbJ3ZuZWVkZWQnXSA9IDEwOw0KCQkJJGRldGFpbHNbJ2NtZXRob2QnXSA9IDg7DQoJCX0N CgkJDQoJCSRkZXRhaWxzWydiaXRmbGFnJ10gPSAwOw0KCQkkZGV0YWlsc1snY3JjXzMyJ10g ID0gY3JjMzIoJGRhdGEpOw0KCQkNCgkJLy8gQ29udmVydCBkYXRlIGFuZCB0aW1lIHRvIERP UyBGb3JtYXQsIGFuZCBzZXQgdGhlbg0KCQkkbGFzdG1vZF90aW1lUyAgPSBzdHJfcGFkKGRl Y2JpbihkYXRlKCdzJyk+PTMyP2RhdGUoJ3MnKS0zMjpkYXRlKCdzJykpLCA1LCAnMCcsIFNU Ul9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX3RpbWVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUo J2knKSksIDYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfdGltZUggID0gc3Ry X3BhZChkZWNiaW4oZGF0ZSgnSCcpKSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFz dG1vZF9kYXRlRCAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdkJykpLCA1LCAnMCcsIFNUUl9Q QURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ20n KSksIDQsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfZGF0ZVkgID0gc3RyX3Bh ZChkZWNiaW4oZGF0ZSgnWScpLTE5ODApLCA3LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQ0K CQkjIGVjaG8gIk1vZFRpbWU6ICRsYXN0bW9kX3RpbWVTLSRsYXN0bW9kX3RpbWVNLSRsYXN0 bW9kX3RpbWVIICgiLmRhdGUoInMgSCBIIikuIilcbiI7DQoJCSMgZWNobyAiTW9kRGF0ZTog JGxhc3Rtb2RfZGF0ZUQtJGxhc3Rtb2RfZGF0ZU0tJGxhc3Rtb2RfZGF0ZVkgKCIuZGF0ZSgi ZCBtIFkiKS4iKVxuIjsNCgkJJGRldGFpbHNbJ21vZHRpbWUnXSA9IGJpbmRlYygiJGxhc3Rt b2RfdGltZUgkbGFzdG1vZF90aW1lTSRsYXN0bW9kX3RpbWVTIik7DQoJCSRkZXRhaWxzWydt b2RkYXRlJ10gPSBiaW5kZWMoIiRsYXN0bW9kX2RhdGVZJGxhc3Rtb2RfZGF0ZU0kbGFzdG1v ZF9kYXRlRCIpOw0KCQkNCgkJJGRldGFpbHNbJ29mZnNldCddID0gZnRlbGwoJGZoKTsNCgkJ ZndyaXRlKCRmaCwgJHRoaXMtPnppcFNpZ25hdHVyZSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2so J3MnLCAkZGV0YWlsc1sndm5lZWRlZCddKSk7IC8vIHZlcnNpb25fbmVlZGVkDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snYml0ZmxhZyddKSk7IC8vIGdlbmVyYWxfYml0 X2ZsYWcNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydjbWV0aG9kJ10pKTsg Ly8gY29tcHJlc3Npb25fbWV0aG9kDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWls c1snbW9kdGltZSddKSk7IC8vIGxhc3Rtb2RfdGltZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdz JywgJGRldGFpbHNbJ21vZGRhdGUnXSkpOyAvLyBsYXN0bW9kX2RhdGUNCgkJZndyaXRlKCRm aCwgcGFjaygnVicsICRkZXRhaWxzWydjcmNfMzInXSkpOyAgLy8gY3JjLTMyDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ0knLCAkZGV0YWlsc1snY29tc2l6ZSddKSk7IC8vIGNvbXByZXNzZWRf c2l6ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdJJywgJGRldGFpbHNbJ3VuY3NpemUnXSkpOyAv LyB1bmNvbXByZXNzZWRfc2l6ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgc3RybGVuKCRj ZmlsZW5hbWUpKSk7ICAgLy8gZmlsZV9uYW1lX2xlbmd0aA0KCQlmd3JpdGUoJGZoLCBwYWNr KCdzJywgMCkpOyAgLy8gZXh0cmFfZmllbGRfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICRjZmls ZW5hbWUpOyAgICAvLyBmaWxlX25hbWUNCgkJLy8gaWdub3JpbmcgZXh0cmFfZmllbGQNCgkJ ZndyaXRlKCRmaCwgJHpkYXRhKTsNCgkJDQoJCS8vIEFwcGVuZCBpdCB0byBjZW50cmFsIGRp cg0KCQkkZGV0YWlsc1snZXh0ZXJuYWxfYXR0cmlidXRlcyddICA9IChzdWJzdHIoJGNmaWxl bmFtZSwgLTEpPT0nLycmJiEkemRhdGEpPzE2OjMyOyAvLyBEaXJlY3Rvcnkgb3IgZmlsZSBu YW1lDQoJCSRkZXRhaWxzWydjb21tZW50cyddICAgICAgICAgICAgID0gJGZpbGVDb21tZW50 czsNCgkJJHRoaXMtPmFwcGVuZENlbnRyYWxEaXIoJGNmaWxlbmFtZSwgJGRldGFpbHMpOw0K CQkkdGhpcy0+ZmlsZXNfY291bnQrKzsNCgl9DQoJRnVuY3Rpb24gc2V0RXh0cmEoJGZpbGVu YW1lLCAkcHJvcGVydHksICR2YWx1ZSl7DQoJCSR0aGlzLT5jZW50cmFsZGlyc1skZmlsZW5h bWVdWyRwcm9wZXJ0eV0gPSAkdmFsdWU7DQoJfQ0KCUZ1bmN0aW9uIHNhdmUoJHppcENvbW1l bnRzPScnKXsNCgkJaWYoISgkZmggPSAmJHRoaXMtPmZoKSkNCgkJCSRmaCA9IGZvcGVuKCR0 aGlzLT5maWxlbmFtZSwgJHRoaXMtPm92ZXJ3cml0ZT8ndyc6J2ErJyk7DQoJCQ0KCQkkY2Ry ZWMgPSAiIjsNCgkJZm9yZWFjaCgkdGhpcy0+Y2VudHJhbGRpcnMgYXMgJGZpbGVuYW1lPT4k Y2Qpew0KCQkJJGNkcmVjIC49ICR0aGlzLT5kaXJTaWduYXR1cmU7DQoJCQkkY2RyZWMgLj0g Ilx4MFx4MCI7ICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkkY2Ry ZWMgLj0gcGFjaygndicsICRjZFsndm5lZWRlZCddKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8g ZXh0cmFjdA0KCQkJJGNkcmVjIC49ICJceDBceDAiOyAgICAgICAgICAgICAgICAgIC8vIGdl bmVyYWwgYml0IGZsYWcNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydjbWV0aG9kJ10p OyAvLyBjb21wcmVzc2lvbiBtZXRob2QNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydt b2R0aW1lJ10pOyAvLyBsYXN0bW9kIHRpbWUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNk Wydtb2RkYXRlJ10pOyAvLyBsYXN0bW9kIGRhdGUNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywg JGNkWydjcmNfMzInXSk7ICAvLyBjcmMzMg0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2Rb J2NvbXNpemUnXSk7IC8vIGNvbXByZXNzZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNr KCdWJywgJGNkWyd1bmNzaXplJ10pOyAvLyB1bmNvbXByZXNzZWQgZmlsZXNpemUNCgkJCSRj ZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRmaWxlbmFtZSkpOyAvLyBmaWxlIGNvbW1lbnQg bGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAgICAgICAgICAgICAgICAvLyBl eHRyYSBmaWVsZCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRjZFsn Y29tbWVudHMnXSkpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFj aygndicsIDApOyAvLyBkaXNrIG51bWJlciBzdGFydA0KCQkJJGNkcmVjIC49IHBhY2soJ3Yn LCAwKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkkY2RyZWMgLj0gcGFjaygn VicsICRjZFsnZXh0ZXJuYWxfYXR0cmlidXRlcyddKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRy aWJ1dGVzDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnb2Zmc2V0J10pOyAvLyByZWxh dGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQoJCQkkY2RyZWMgLj0gJGZpbGVuYW1lOw0K CQkJJGNkcmVjIC49ICRjZFsnY29tbWVudHMnXTsNCgkJfQ0KCQkkYmVmb3JlX2NkID0gZnRl bGwoJGZoKTsNCgkJZndyaXRlKCRmaCwgJGNkcmVjKTsNCgkJDQoJCS8vIGVuZCBvZiBjZW50 cmFsIGRpcg0KCQlmd3JpdGUoJGZoLCAkdGhpcy0+ZGlyU2lnbmF0dXJlRSk7DQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ3YnLCAwKSk7IC8vIG51bWJlciBvZiB0aGlzIGRpc2sNCgkJZndyaXRl KCRmaCwgcGFjaygndicsIDApKTsgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0 YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2Jywg JHRoaXMtPmZpbGVzX2NvdW50KSk7IC8vIHRvdGFsICMgb2YgZW50cmllcyAib24gdGhpcyBk aXNrIiANCgkJZndyaXRlKCRmaCwgcGFjaygndicsICR0aGlzLT5maWxlc19jb3VudCkpOyAv LyB0b3RhbCAjIG9mIGVudHJpZXMgb3ZlcmFsbCANCgkJZndyaXRlKCRmaCwgcGFjaygnVics IHN0cmxlbigkY2RyZWMpKSk7ICAgICAvLyBzaXplIG9mIGNlbnRyYWwgZGlyIA0KCQlmd3Jp dGUoJGZoLCBwYWNrKCdWJywgJGJlZm9yZV9jZCkpOyAgICAgICAgIC8vIG9mZnNldCB0byBz dGFydCBvZiBjZW50cmFsIGRpcg0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2Jywgc3RybGVuKCR6 aXBDb21tZW50cykpKTsgLy8gLnppcCBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCWZ3cml0ZSgk ZmgsICR6aXBDb21tZW50cyk7DQoJCQ0KCQlmY2xvc2UoJGZoKTsNCgl9DQoJDQoJLy8gUHJp dmF0ZQ0KCUZ1bmN0aW9uIGFwcGVuZENlbnRyYWxEaXIoJGZpbGVuYW1lLCRwcm9wZXJ0aWVz KXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV0gPSAkcHJvcGVydGllczsNCgl9 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmlj IHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KZnVuY3Rpb24g c21kX2F0X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXko DQoJCSdhY3Rpb25zJyA9PiAnQWN0aW9ucycsDQoJCSdhbGxvd2VkX3NraW5zJyA9PiAnQWxs b3dlZCB0aGVtZXM6JywNCgkJJ2FwcGx5X3NraW4nID0+ICdBcHBseSB0aGlzIHRoZW1lJywN CgkJJ2F2YWlsX3RpdGxlJyA9PiAnQXZhaWxhYmxlIHRoZW1lcycsDQoJCSdiYXNlZF9vbicg PT4gJyAoYmFzZWQgb24ge3NraW59KScsDQoJCSdieScgPT4gJyBieSAnLA0KCQknY19iemlw MicgPT4gJ0JaaXAnLA0KCQknY19nemlwJyA9PiAnR1ppcCcsDQoJCSdjX3RhcicgPT4gJ1Rh cicsDQoJCSdjX3ppcCcgPT4gJ1ppcCcsDQoJCSdjYXNlX3NvcnQnID0+ICdDYXNlLXNlbnNp dGl2ZSB0aGVtZSBsaXN0OicsDQoJCSdjbGVhcicgPT4gJ25vbmUnLA0KCQknY2xvbmUnID0+ ICdCYXNlJywNCgkJJ2NvbmZpcm0nID0+ICdHbycsDQoJCSdjb3JlX3RoZW1lJyA9PiAnQ2Fu bm90IGRlbGV0ZSB7c2tpbn06IGNvcmUgdGhlbWUnLA0KCQknY29yZV90aGVtZV9maWxlJyA9 PiAnQ2Fubm90IGRlbGV0ZSBmaWxlcyBmcm9tIHtza2lufTogY29yZSB0aGVtZScsDQoJCSdj cnVzaF90eXBlJyA9PiAnRXhwb3J0IGNvbXByZXNzaW9uIHR5cGU6JywNCgkJJ2NydXNoX2Zv cm1hdCcgPT4gJ0Zvcm1hdDonLA0KCQknc3NjJyA9PiAnU3R5bGVwbGF0ZXMnLA0KCQknY3Nz JyA9PiAnU3R5bGVzJywNCgkJJ2RlbGV0ZV9jb25maXJtJyA9PiAnUmVhbGx5IGRlbGV0ZSB0 aGVtZSB7c2tpbn0/JywNCgkJJ2RlbGV0ZV9mYWlsZWQnID0+ICdEZWxldGUgZmFpbGVkLiBU cnkgcmVtb3ZpbmcgaXQgbWFudWFsbHknLA0KCQknZWRpdF9sYmwnID0+ICdUaGVtZSBlZGl0 b3InLA0KCQknZW1wdHlfaW5mbycgPT4gJ1lvdSBzaG91bGQgY2hvb3NlIGEgZmlsZSBmaXJz dCA6LSknLA0KCQknZXhwb3J0JyA9PiAnRXhwb3J0JywNCgkJJ2ZpbGVuYW1lX2Zvcm1hdCcg PT4gJ0ZpbGVuYW1lIGZvcm1hdDogJywNCgkJJ2ZpbGVfbm90X2RlbGV0ZWQnID0+ICdGaWxl IHtuYW1lfSAnLnN0cm9uZygibm90IikuJyBkZWxldGVkJywNCgkJJ2ZpbGVfc2F2ZWQnID0+ ICdGaWxlIHtuYW1lfSBzYXZlZCcsDQoJCSdmaW5kX3RoZW1lJyA9PiAnQnJvd3NlIHRoZW1l cycsDQoJCSdnbG9iYWxfc2tpbicgPT4gJ0RlZmF1bHQgdGhlbWU6JywNCgkJJ2hlbHBfbGlu aycgPT4gJyg8YSBocmVmPSJ7bGlua30iPkhlbHA8L2E+KScsDQoJCSdpbWcnID0+ICdJbWFn ZXMnLA0KCQknaW1wb3J0X2ZhaWxlZCcgPT4gJ0luc3RhbGxhdGlvbiBmYWlsZWQgOi0oIENo ZWNrIHRoZSBhcmNoaXZlIHN0cnVjdHVyZScsDQoJCSdpbXBvcnRfc3VjY2VzcycgPT4gJ0lu c3RhbGxhdGlvbiBzdWNjZXNzZnVsLiBGaWxlcyBleHRyYWN0ZWQ6IHtudW19JywNCgkJJ2lt cG9ydF9vaycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsLicsDQoJCSdpbnN0YWxsX3Nr aW4nID0+ICdJbnN0YWxsIHRoZW1lJywNCgkJJ2ludmFsaWRfZmlsZScgPT4gJ1JvZ3VlIGZp bGUgZGV0ZWN0ZWQ6IHtuYW1lfScsDQoJCSdpc19nbG9iYWwnID0+ICcgW0RFRkFVTFRdJywN CgkJJ2pzJyA9PiAnU2NyaXB0cycsDQoJCSdsYXlvdXQnID0+ICdMYXlvdXQgbWV0aG9kOics DQoJCSdsYXlvdXRfbGlzdCcgPT4gJ0xpc3QnLA0KCQknbGF5b3V0X2dyaWQnID0+ICdHcmlk JywNCgkJJ2xpc3RfdGl0bGUnID0+ICdJbnN0YWxsZWQgdGhlbWVzJywNCgkJJ21hbmFnZV9s YmwnID0+ICdUaGVtZSBtYW5hZ2VyJywNCgkJJ21rZGlyX2ZhaWxlZCcgPT4gJ0Nhbm5vdCBj cmVhdGUgZGlyZWN0b3J5IGZvciBmaWxlIHtuYW1lfS4gVHJ5IG1hbnVhbGx5IGNyZWF0aW5n IGl0LicsDQoJCSduYW1lX2VtcHR5JyA9PiAnWW91IHNob3VsZCBnaXZlIHlvdXIgdGhlbWUg YSBuYW1lIDotKScsDQoJCSduZXcnID0+ICdDcmVhdGUgbmV3IHRoZW1lJywNCgkJJ25ld19m aWxlJyA9PiAnTmV3IGZpbGUnLA0KCQknbmV3X2Nsb25lc2tpbicgPT4gJ05hbWUgb2YgY29w eTonLA0KCQknbmV3X3NraW4nID0+ICdUaGVtZSBuYW1lOicsDQoJCSdvdGhlcl9maWxlcycg PT4gJ090aGVycycsDQoJCSdwaHAnID0+ICdDb2RlJywNCgkJJ3Blcl9ncm91cCcgPT4gJ09u ZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsJywNCgkJJ3Blcl9zaXRlJyA9PiAnT25lIHRo ZW1lIGZvciBldmVyeW9uZScsDQoJCSdwZXJfdXNlcicgPT4gJ09uZSB0aGVtZSBwZXIgdXNl cicsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVsZXRlZCcsDQoJCSdw cmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0KCQkncHJlZnNf bm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywNCgkJJ3By ZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJsZS4nLA0KCQkncHJl ZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0aGVyIGJlY2F1c2UgdGhpcyBpcyBhIGRp ZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZv cmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNvbWUgY29ycnVwdCBzb21laG93 LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUn KS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcu YnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50 b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScgPT4gJ0FkbWluIHRoZW1lIHByZWZlcmVuY2Vz JywNCgkJJ3JlbmFtZV9mYWlsZWQnID0+ICdSZW5hbWUgZmFpbGVkJywNCgkJJ3JlbmFtZWQn ID0+ICdSZW5hbWVkIHRvIHtuYW1lfScsDQoJCSdzZXQnID0+ICdTZXQnLA0KCQknc2V0dXAn ID0+ICdQcmVmZXJlbmNlcycsDQoJCSdza2luX2dibCcgPT4gJ1RoZW1lJywNCgkJJ3NraW5f Y2xvbmVkJyA9PiAnVGhlbWUgZXh0ZW5kZWQgYXMge25hbWV9JywNCgkJJ3NraW5fY3JlYXRl ZCcgPT4gJ1RoZW1lIHtuYW1lfSBjcmVhdGVkJywNCgkJJ3NraW5fZGVsZXRlZCcgPT4gJ1Ro ZW1lIHtuYW1lfSBkZWxldGVkJywNCgkJJ3NraW5fZXhpc3RzJyA9PiAnVGhlbWUge25hbWV9 IGFscmVhZHkgZXhpc3RzJywNCgkJJ3NraW5fZmlsZXMnID0+ICdUaGVtZSBmaWxlcycsDQoJ CSdza2luX2dyb3VwcycgPT4gJ0dyb3VwIHRoZW1lczonLA0KCQknc2tpbl9pbWFnZXMnID0+ ICdUaGVtZSBpbWFnZXMnLA0KCQknc2tpbl9saXN0JyA9PiAnVGhlbWUgbGlzdCcsDQoJCSdz a2luX2dyaWQnID0+ICdUaGVtZSBncmlkJywNCgkJJ3NraW5fbm90X2NyZWF0ZWQnID0+ICdU aGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGNyZWF0ZWQuIFRyeSBtYW51YWxseSBtYWtpbmcg dGhlIGRpcmVjdG9yeScsDQoJCSdza2luX25vdF9mb3VuZCcgPT4gJ1RoZSB0aGVtZSB7bmFt ZX0gY291bGQgbm90IGJlIGZvdW5kJywNCgkJJ3NraW5fc3dpdGNoZWQnID0+ICdUaGVtZSBz d2l0Y2hlZCB0byB7c2tpbn0nLA0KCQknc2tpbl9zeXN0ZW0nID0+ICdUaGVtZSBzeXN0ZW06 JywNCgkJJ3NraW5uZXInID0+ICdUaGVtZScsDQoJCSdzdXBwb3J0ZWRfaW1wb3J0JyA9PiAn U3VwcG9ydGVkIGltcG9ydCB0eXBlczoge3R5cGVzfScsDQoJCSd0YWJfbmFtZScgPT4gJ0Fk bWluIHRoZW1lcycsDQoJCSd0aHVtYnNpemUnID0+ICdUaHVtYiBkaW1lbnNpb25zOicsDQoJ CSd0aW1lcycgPT4gJyB4ICcsDQoJCSd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnID0+ ICd7Y3J1c2h9IGlzIG5vdCBhIHN1cHBvcnRlZCBjb21wcmVzc2lvbiBmb3JtYXQgaW4gdGhp cyBpbnN0YWxsYXRpb24nLA0KCQkndW5zdXBwb3J0ZWRfZmlsZXR5cGUnID0+ICdGaWxlIGlz IG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlJywNCgkJJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyA9PiAn OiBoaXQgU2F2ZSBhZ2FpbiB0byBzdG9yZSBhbnl3YXknLA0KCQkndXBkYXRlJyA9PiAnVXBk YXRlJywNCgkJJ3VwbG9hZF9mYWlsZWQnID0+ICdJbWFnZSBjb3VsZCBub3QgYmUgdXBsb2Fk ZWQnLA0KCQkndXBsb2FkX2ltYWdlJyA9PiAnVXBsb2FkIGltYWdlJywNCgkJJ3VwbG9hZF9z dWNjZXNzJyA9PiAnSW1hZ2UgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5JywNCgkJJ3ZlcnNpb24n ID0+ICd2JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0i O3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6 MToiMyI7czo0OiJoZWxwIjtzOjI1NDU3OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxIGlk PSJ0b3AiPnNtZF9hZG1pbl90aGVtZXM8L2gxPgoKCTxwPkluc3RhbGwsIG1hbmFnZSwgZWRp dCBhbmQgc3dpdGNoIGFkbWluLXNpZGUgdGhlbWVzIHRoZW4gc2hhcmUgdGhlbSB3aXRoIHRo ZSBjb21tdW5pdHkuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8 dWw+CgkJPGxpPkNyZWF0ZSBhbmQgRWRpdCBhZG1pbi1zaWRlIHRoZW1lczwvbGk+CgkJPGxp PkVtcGxveSBpbWFnZXMsIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+LCBKUywgPHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+L1BIUCAoZm9yIGNoYW5naW5nIG1hc3RoZWFk LCBoZWFkZXIgJmFtcDsgZm9vdGVyKSBpbiB5b3VyIHRoZW1lPC9saT4KCQk8bGk+VXNlIGNv bnN0YW50cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGZpbGVzPC9s aT4KCQk8bGk+QmFzZSB5b3VyIHRoZW1lIG9uIGFuIGV4aXN0aW5nIHRoZW1lIHRvIHR3ZWFr IGl0IHRvIHlvdXIgdGFzdGU8L2xpPgoJCTxsaT5FeHBvcnQgYSB0aGVtZSBwYWNrYWdlIGZv ciBkaXN0cmlidXRpb24gdG8gdGhlIGNvbW11bml0eSBpbiBlaXRoZXIgLnRhciwgLnRneiwg LmJ6MiBvciAuemlwIGZvcm1hdDwvbGk+CgkJPGxpPkltcG9ydCAvIGluc3RhbGwgb3RoZXIg dGhlbWVzIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbmlz dHJhdGlvbi10aGVtZXMiPmNvbW11bml0eSByZXBvc2l0b3J5PC9hPjwvbGk+CgkJPGxpPkFk bWluaXN0cmF0b3IgY2FuIHNldCBhIGRlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2Vycywgb3Ig ZW5hYmxlIHBlci11c2VyIC8gcGVyLXJvbGUgdGhlbWVzPC9saT4KCTwvdWw+CgoJPGgyIGlk PSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5J bnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBs dWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdp bnMvMTA5Ni9zbWRfYWRtaW5fdGhlbWVzIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUg PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwg cGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g QWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdp bi4gQSBuZXcgdGFiIGxhYmVsbGVkIDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1l czwvZW0+IGlzIGNyZWF0ZWQuIDxzdHJvbmc+T25seSBwdWJsaXNoZXJzIHdpbGwgc2VlIHRo aXMgdGFiPC9zdHJvbmc+LjwvcD4KCgk8cD5UaGUgcGx1Z2luIHNob3VsZCBhdXRvbWF0aWNh bGx5IGluc3RhbGwgdGhlIHByZWZlcmVuY2VzIGZvciB5b3UuIENsaWNrICYjODIxNjtQcmVm ZXJlbmNlcyYjODIxNzsgZnJvbSB0aGUgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhl bWVzPC9lbT4gdGFiIG9yIDxlbT5PcHRpb25zPC9lbT4gZnJvbSB0aGUgQWRtaW4gLSZndDsg UGx1Z2lucyB0YWIgdG8gYWx0ZXIsIGRlbGV0ZSBvciByZWluc3RhbGwgdGhlbS48L3A+CgoJ PHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD0zMDk1MiI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9y IHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48 L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4gZnJvbSB0 aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLiBUaGUgcHJlZmVyZW5jZXMgd2lsbCBhdXRv bWF0aWNhbGx5IGJlIHJlbW92ZWQuIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHJlbW92aW5nIHRo ZSBwbHVnaW4gZG9lcyA8c3Ryb25nPm5vdCByZW1vdmUgYW55IHRoZW1lcyB5b3UgaGF2ZSBp bnN0YWxsZWQsIG5vciBkb2VzIGl0IHJlbW92ZSBwZXItdXNlciB0aGVtZSBwcmVmZXJlbmNl czwvc3Ryb25nPi4gUGVyLXVzZXIgcHJlZnMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZCB3aGVu IHRoZSBwbHVnaW4gaXMgZGVsZXRlZC48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gy PgoKCTxwPk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiB0 YWIgaXMgYSBsaXN0IG9yIGdyaWQgY29udGFpbmluZyBpbnN0YWxsZWQgdGhlbWVzLiBPdXQg b2YgdGhlIGJveCwgdGhlcmUgd2lsbCBiZSB0d28gYXZhaWxhYmxlOiA8ZW0+Y2xhc3NpYzwv ZW0+IGFuZCA8ZW0+cmVtb3JhPC9lbT4uIDxzdHJvbmc+SXQmIzgyMTc7cyBhZHZpc2FibGUg bm90IHRvIGNoYW5nZSB0aGVzZSB0aGVtZXM8L3N0cm9uZz4gc28geW91IGNhbiBhbHdheXMg Z28gYmFjayB0byB0aGVtIGlmIGV2ZXJ5dGhpbmcgZ29lcyBzaWRld2F5cy4gUGx1cyBpdCYj ODIxNztzIGEgdmVyeSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCB0byA8YSBo cmVmPSIjY2xvbmUiPmJhc2U8L2E+IGEgPGEgaHJlZj0iI25ldyI+bmV3IHRoZW1lPC9hPi48 L3A+CgoJPHA+SW4gdGhlIGxpc3QgbGF5b3V0LCB0aGUgY29sdW1ucyBhcmU6PC9wPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lPC9zcGFuPiA6IFRoZSBuYW1lIG9m IHRoZSB0aGVtZSBhbmQgKG9wdGlvbmFsKSB0aHVtYm5haWwgYXNzaWduZWQgdG8gaXQuIENs aWNrIHRvIDxhIGhyZWY9IiNzd2l0Y2giPmFjdGl2YXRlPC9hPiB0aGUgdGhlbWUuIElmIHRo ZSB0aGVtZSBpcyBiYXNlZCBvbiBhbm90aGVyIHVzZXImIzgyMTc7cyB0aGVtZSwgdGhpcyBk ZXBlbmRlbmN5IHdpbGwgYmUgc2hvd24gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgdGhlIHRoZW1l IG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXV0aG9yPC9zcGFuPiA6IFlv dSEgTGlua2VkIHRvIHlvdXIgd2ViIHNpdGUgaWYgeW91IHN1cHBseSBpdCBpbiB5b3VyIDxh IGhyZWY9IiNhYm91dCI+TWFuaWZlc3Q8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPlZlcnNpb248L3NwYW4+IDogVGhlbWUgdmVyc2lvbiBudW1iZXIgaW4gPGNvZGU+bWFq b3IubWlub3Iuc3VicmV2PC9jb2RlPiBub3RhdGlvbi4gSWYgYSBuZXdlciB2ZXJzaW9uIG9m IGEgdGhlbWUgaXMgYXZhaWxhYmxlIGZyb20gVGV4dGdhcmRlbiwgdGhlIHZlcnNpb24gbnVt YmVyIHdpbGwgYmUgaHlwZXJsaW5rZWQgdG8gdGhlIHRoZW1lIG9uIFRleHRnYXJkZW4gc28g eW91IG1heSBkb3dubG9hZC9pbnN0YWxsIGl0LiBUaGUgdmVyc2lvbnMgYXJlIGNoZWNrZWQs IGF0IG1vc3QsIG9uY2UgZXZlcnkgMjQgaG91cnMgdG8gYXZvaWQgaGFtbWVyaW5nIHRoZSBz ZXJ2ZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVzY3JpcHRpb248L3NwYW4+ IDogQnJpZWYgb25lLSBvciB0d28tbGluZXIgZXhwbGFpbmluZyB5b3VyIHRoZW1lLiBJZiB5 b3UgaGF2ZSBvZmZlcmVkIGEgaGVscCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBp biB5b3VyIG1hbmlmZXN0LCBpdCB3aWxsIGJlIGxpbmtlZCBoZXJlIGFzIHdlbGw8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWN0aW9uczwvc3Bhbj4gOiBBY3Rpb25zIHRvIHBl cmZvcm0gb24gZWFjaCB0aGVtZQoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W05l dyB0aGVtZV08L3NwYW4+IDogPGEgaHJlZj0iI25ldyI+Q3JlYXRlPC9hPiBhIG5ldyBibGFu aywgZW1wdHkgZGlyZWN0b3J5IHJlYWR5IGZvciB5b3VyIHRoZW1lLiBObyBzcGFjZXMgLyBv ZGQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgbmFtZSBhbmQgaXQgbXVzdCBub3Qg c3RhcnQgd2l0aCBhIG51bWJlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRWRp dF08L3NwYW4+IDogPGEgaHJlZj0iI2VkaXRfdGhlbWUiPkVkaXQ8L2E+IHRoZSB2YXJpb3Vz IGRldGFpbHMsIGZpbGVzIGFuZCBjb250ZW50IHdpdGhpbiB0aGUgdGhlbWU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+W0Jhc2VdPC9zcGFuPiA6IDxhIGhyZWY9IiNjbG9uZSI+ RXh0ZW5kPC9hPiBvbmUgb2YgdGhlIGV4aXN0aW5nIHRoZW1lcyB0byBtYWtlIHlvdXIgb3du IGNoYW5nZXMgdW5kZXIgYSBuZXcgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5bRXhwb3J0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZXhwb3J0Ij5TYXZlPC9hPiB0aGUgdGhl bWUgcGFja2FnZSB0byB5b3VyIGhhcmQgZHJpdmUgZm9yIGRpc3RyaWJ1dGlvbi9iYWNrdXAg aW4geW91ciBjaG9zZW4gY29tcHJlc3Npb24gZm9ybWF0PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPltEZWxldGVdPC9zcGFuPiA6IENvbXBsZXRlbHkgPGEgaHJlZj0iI2RlbGV0 ZSI+cmVtb3ZlPC9hPiB0aGUgdGhlbWUuIE5vdCBhdmFpbGFibGUgdG8gdGhlIGNvcmUgdGhl bWVzLCBmb3Igb2J2aW91cyByZWFzb25zISBBbHNvIG5vdCBhdmFpbGFibGUgaWYgYSB0aGVt ZSBoYXMgYmVlbiB1c2VkIGFzIGEgYmFzaXMgZm9yIGFub3RoZXIgdGhlbWUgaW4gdGhlIGN1 cnJlbnQgc2l0ZTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlRoZSByb3cgb2YgdGhl IGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQgYW5kIHRoZSBjdXJyZW50IGRl ZmF1bHQgdGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGlnaGxpZ2h0ZWQuIFRoZSBncmlk IHZpZXcgaGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiwgbGFpZCBvdXQgc2xp Z2h0bHkgZGlmZmVyZW50bHkuPC9wPgoKCTxoMiBpZD0ic3dpdGNoIj5Td2l0Y2hpbmcgdGhl bWVzPC9oMj4KCgk8cD5BcyB0aGUgYWRtaW5pc3RyYXRvciwgeW91IGNhbiBwbGF5IEdvZCBv dmVyIGV2ZXJ5b25lIGVsc2UmIzgyMTc7cyB0aGVtZXMuIFlvdSBhcmUgZnJlZSB0byBpbnN0 YWxsIGFzIG1hbnkgYXMgeW91IHdpc2ggYW5kIHN3aXRjaCBiZXR3ZWVuIHRoZW0gd2l0aG91 dCBhZmZlY3RpbmcgYW55IG90aGVyIGxvZ2lucy4gTm9ib2R5IGVsc2Ugd2lsbCBldmVuIGtu b3cgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBwbHVnaW4uPC9wPgoKCTxwPklmLCBob3dldmVy LCB5b3UgdmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVyZW5jZXM8L2E+IHBhZ2Ug eW91IGNhbiBjb25maWd1cmUgdGhlIHRoZW1lcyB0aGF0IG90aGVycyB1c2UuIFRoZXJlIGFy ZSB0aHJlZSBtZWNoYW5pc21zIHRvIGNob29zZSBmcm9tOjwvcD4KCgk8dWw+CgkJPGxpPkZv cmNlIG9uZSB0aGVtZSBmb3IgYWxsIHVzZXJzIChleGNlcHQgeW91cnNlbGYpPC9saT4KCQk8 bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBlYWNoIHVzZXIgcHJpdmlsZWdlIGxldmVsIChleGNl cHQgeW91cnNlbGYpPC9saT4KCQk8bGk+QWxsb3cgYWxsIHVzZXJzIChleGNlcHQgeW91cnNl bGYpIHRvIHBpY2sgdGhlaXIgZmF2b3VyaXRlIHRoZW1lIGZyb20gYSBzaG9ydGxpc3QgeW91 IGRlZmluZTwvbGk+Cgk8L3VsPgoKCTxwPkF0IGFsbCB0aW1lcywgeW91IGNhbiBjaG9vc2Ug YW55IHRoZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIgb3duIHVzZS4gVGhpcyBhbGxvd3MgdHJp YWxsaW5nLCB0d2Vha2luZyBhbmQgdGVzdGluZyBvZiB0aGVtZXMgYmVmb3JlIHVubGVhc2hp bmcgdGhlbSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+CgoJPGgyIGlkPSJzZXR1cCI+VGhlbWUg cHJlZmVyZW5jZXM8L2gyPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNhc2Ut c2Vuc2l0aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDogV2hlbiBzZXQgdG8gPGNvZGU+WWVzPC9j b2RlPiwgdXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBsb3dl ciBjYXNlIHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJlIGxpc3RlZCBmaXJzdC4gRm9yIGV4YW1w bGUsIDMgdGhlbWUgY2FsbGVkICYjODIxNjtBbmdlbGljJiM4MjE3OywgJiM4MjE2O2JhcmJh cmljJiM4MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZlJiM4MjE3OyB3aWxsIGJlIG9yZGVyZWQ6 IDxjb2RlPkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJiYXJpYzwvY29kZT4uIFNldCB0byA8Y29k ZT5ObzwvY29kZT4gdG8gbWl4IHVwcGVyIGFuZCBsb3dlci1jYXNlIHRoZW1lcyB0b2dldGhl ciAob3JkZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGljLCBiYXJiYXJpYywgQ29oZXNpdmU8L2Nv ZGU+ICkuIFRoZSAmIzgyMTY7Y2xhc3NpYyYjODIxNzsgdGhlbWUgaXMgPGVtPmFsd2F5czwv ZW0+IGxpc3RlZCBmaXJzdC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RXhwb3J0 IGNvbXByZXNzaW9uIHR5cGU8L3NwYW4+IDogRGVwZW5kaW5nIG9uIHlvdXIgdmVyc2lvbiBv ZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBhbmQgd2hpY2ggbW9kdWxlcyBoYXZl IGJlZW4gY29tcGlsZWQgaW50byBpdCwgeW91IHdpbGwgc2VlIGEgbGlzdCBvZiBjb21wcmVz c2lvbiBmb3JtYXRzIGhlcmUuIENob29zZSBvbmUgdGhhdCBzdWl0cyB5b3UgYXMgdGhlIGRl ZmF1bHQgaW4gd2hpY2ggdG8gZXhwb3J0IHlvdXIgdGhlbWUgcGFja2FnZXMuIFlvdSBtYXkg Y2hvb3NlIGZyb20gPGVtPlRhcjwvZW0+LCA8ZW0+R1ppcDwvZW0+IChhY3R1YWxseSB0YXIr Z3ppcCksIDxlbT5CemlwMjwvZW0+ICh0YXIrYnppcCksIG9yIDxlbT5aaXA8L2VtPiAodGhl IGRlZmF1bHQpLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MYXlvdXQgbWV0aG9k PC9zcGFuPiA6IENob29zZSBmcm9tIGEgTGlzdCBWaWV3ICh1c2VmdWwgaWYgeW91IHByZWZl ciB0byBoaWRlIG9yIHVzZSBzbWFsbCB0aHVtYnMpIG9yIGEgR3JpZCBWaWV3IG9mIGluc3Rh bGxlZCB0aGVtZXMuIFRoaXMgc2V0dGluZyBhcHBsaWVzIHRvIGJvdGggYWRtaW4gYW5kIHVz ZXIgdGhlbWUgc2VsZWN0aW9uIHRhYnMuIERlZmF1bHQ6IEdyaWQgVmlldzwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5UaHVtYiBkaW1lbnNpb25zPC9zcGFuPiA6IFNldCB0aGUg dGh1bWJuYWlsIGRpbWVuc2lvbnMgaW4gdGhlIHRoZW1lIGxpc3QuIFNldCBlaXRoZXIgZGlt ZW5zaW9uIHRvIDAgdG8gdHVybiBvZmYgdGh1bWJuYWlsIGRpc3BsYXkuIERlZmF1bHQ6IDI2 MCAmIzIxNTsgMTUwcHg8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RmlsZW5hbWUg Zm9ybWF0PC9zcGFuPiA6IERlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBleHBvcnRlZCB0aGVt ZS4gWW91IGNhbiB1c2UgPGNvZGU+e3RoZW1lfTwvY29kZT4gYW5kIDxjb2RlPnt2ZXJzaW9u fTwvY29kZT4gcmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRoaXMgZmllbGQuIEZvciBleGFt cGxlLCA8Y29kZT57dGhlbWV9X3Z7dmVyc2lvbn08L2NvZGU+LiBEZWZhdWx0OiA8Y29kZT57 dGhlbWV9PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5EZWZhdWx0IHRo ZW1lPC9zcGFuPiA6IFNldCB0aGUgdGhlbWUgZm9yIGFsbCBvdGhlciB1c2Vycy4gSWYgdXNp bmcgJiM4MjE2O09uZSB0aGVtZSBmb3IgZXZlcnlvbmUmIzgyMTc7IHRoZSB0aGVtZSBjaG9z ZW4gaGVyZSBpcyBmb3JjZWQgdXBvbiBhbGwgdXNlcnMuIElmIHVzaW5nIGFueSBvZiB0aGUg b3RoZXIgbWVjaGFuaXNtcywgdGhpcyB0aGVtZSBpcyBhIGZhbGxiYWNrIHNob3VsZCBzb21l dGhpbmcgZ28gcGVhci1zaGFwZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRo ZW1lIHN5c3RlbTwvc3Bhbj4gOiBBcyBkZXRhaWxlZCBpbiA8YSBocmVmPSIjc3dpdGNoIj5T d2l0Y2hpbmcgdGhlbWVzPC9hPiwgeW91IG1heSBjaG9vc2UgdGhlIHdheSB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50ZXJmYWNlIGlzIHByZXNlbnRlZCB0byBvdGhl ciB1c2VyczoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBmb3Ig ZXZlcnlvbmU8L3NwYW4+IDogdXNlcyB0aGUgRGVmYXVsdCB0aGVtZSBmb3IgYWxsIHVzZXJz OyB0aGV5IGhhdmUgbm8gY2hvaWNlIGluIHRoZSBtYXR0ZXI8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+T25lIHRoZW1lIHBlciBwcml2aWxlZ2UgbGV2ZWw8L3NwYW4+IDogYWxs b3dzIHlvdSB0byBhc3NpZ24gb25lIG9yIG1vcmUgcHJpdmlsZWdlIGxldmVscyB0byBhIHRo ZW1lLiBDaG9vc2UgYSB0aGVtZSBmcm9tIHRoZSBsZWZ0LWhhbmQgbGlzdCBhbmQgdGhlbiBz aGlmdC9jdHJsLWNsaWNrIHRoZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGFzc2lnbiB0aGVtLiBG bGljayBiZXR3ZWVuIHRoZW1lcyBpbiB0aGUgbGVmdCBjb2x1bW4gdG8gc2VlIHdoaWNoIG9u ZXMgYXJlIHNldCBmb3IgdmFyaW91cyB1c2VyIGxldmVscywgb3IgaG92ZXIgb3ZlciBhIHBy aXZpbGVnZSBsZXZlbCB0byBzZWUgYSB0b29sdGlwLiBPbmx5IG9uZSBsZXZlbCBjYW4gYmUg YXNzaWduZWQgdG8gYSB0aGVtZSBzbyBpZiB5b3UgY2xpY2sgYSBsZXZlbCB0aGF0IGhhcyBh bHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gYW5vdGhlciB0aGVtZSwgaXQgd2lsbCBiZSByZW1v dmVkIGZyb20gaXRzIG9yaWdpbmFsIGFzc2lnbm1lbnQuIE5vdGUgeW91IG11c3QgU2F2ZSB0 aGUgY2hhbmdlcyBmb3IgdGhlbSB0byB0YWtlIGVmZmVjdDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHVzZXI8L3NwYW4+IDogZGVmaW5lIGEgc2hvcnRs aXN0IGZyb20gdGhlIGF2YWlsYWJsZSBpbnN0YWxsZWQgdGhlbWVzIHRvIG9mZmVyIHRvIGFs bCB1c2Vycy4gQSBuZXcgdGFiIHdpbGwgYXBwZWFyIHRvIG90aGVyIHVzZXJzIHVuZGVyIDxl bT5BZG1pbjwvZW0+IHRoYXQgaXMgZXNzZW50aWFsbHkgYSBjdXQtZG93biB2ZXJzaW9uIG9m IHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFiLiBVc2VycyBjYW4gc3dpdGNoIGJldHdl ZW4gYW55IG9uZSBvZiB0aGUgdGhlbWVzIHlvdSBoYXZlIHBlcm1pdHRlZC48L2xpPgoJPC91 bD48L2xpPgoJPC91bD4KCgk8cD5SZW1lbWJlciB0byBjbGljayBTYXZlIHRvIGFwcGx5IHRo ZSBjaGFuZ2VzLiBDbGlja2luZyBhbnkgb3RoZXIgdGFiIHdpbGwgdW5kbyBhbnkgbW9kaWZp Y2F0aW9ucyB5b3UgbWF5IGhhdmUgbWFkZS48L3A+CgoJPGgyIGlkPSJicm93c2UiPkJyb3dz ZSB0aGVtZXM8L2gyPgoKCTxwPkNsaWNrIHRoaXMgYnV0dG9uIHRvIGJlIHRha2VuIHRvIHRo ZSBjZW50cmFsIGFkbWluIHRoZW1lIHJlcG9zaXRvcnkgd2hlcmUgeW91IG1heSBicm93c2Ug dGhlbWVzIGFuZCBkb3dubG9hZCB0aGVtIHJlYWR5IGZvciBpbnN0YWxsYXRpb24uPC9wPgoK CTxoMiBpZD0iaW1wb3J0Ij5JbnN0YWxsIGEgdGhlbWU8L2gyPgoKCTxwPkxvY2F0ZSBhIHRo ZW1lIHBhY2thZ2Ugb24geW91ciBoYXJkIGRyaXZlIG9yIHBhc3RlIGEgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gdG8gYSBwYWNrYWdlIGluIHRoZSBib3ggYXQgdGhlIHRvcCBv ZiB0aGUgcGFnZS4gSGl0IDxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+IGFuZCBpdCB3aWxsIGJl IGluc3RhbGxlZC4gSWYgaXQgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBiZSBvdmVyd3JpdHRl bi4gTm90ZSB0aGF0IHlvdSBtYXkgcmVjZWl2ZSBhIHdhcm5pbmcgaWYgdGhlIHRoZW1lIGlz IHBhY2thZ2VkIHVzaW5nIGEgY29tcHJlc3Npb24gYWxnb3JpdGhtIHRoYXQgaXMgbm90IGJ1 aWx0IGludG8geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+ LiBBIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbXByZXNzaW9uIHR5cGVzIGlzIGdpdmVuIGJlbG93 IHRoZSB1cGxvYWQgYm94LjwvcD4KCgk8aDIgaWQ9Im5ldyI+Q3JlYXRlIGEgbmV3IChlbXB0 eSkgdGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+Q3JlYXRlIG5ldyB0aGVtZTwvc3Ry b25nPiBhbmQgYSBib3ggd2lsbCBzbGlkZSBkb3duIGFsbG93aW5nIHlvdSB0byBnaXZlIHlv dXIgdGhlbWUgYSBuYW1lLiAgTm90ZSB0aGF0IHRoZSBlZGl0IGJveCBhdXRvbWF0aWNhbGx5 IHRha2VzIGZvY3VzLCBzbyB5b3UgY2FuIHR5cGUgc3RyYWlnaHQgYXdheS48L3A+CgoJPHA+ Tm8gc3BhY2VzIG9yIG9kZCBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhl IG5hbWUgeW91IGVudGVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxs IGJlIGNyZWF0ZWQgaW4gdGhlIDxlbT50aGVtZTwvZW0+IGZvbGRlciBhbmQgdGhlbSBuYW1l IG9mIHlvdXIgdGhlbWUmIzgyMTc7cyBjbGFzcy4gSWYgeW91IGRvIG1hbmFnZSB0byB1c2Ug b2RkIGNoYXJhY3RlcnMsIHRoZSBuYW1lIHdpbGwgYmUgJiM4MjIwO2R1bWJlZCBkb3duJiM4 MjIxOyBmb3IgeW91LiBPbmNlIHRoZSBuYW1lIGlzIHNldCwgdGhhdCBpcyBpdDsgeW91IGNh bm5vdCBjaGFuZ2UgaXQgZnJvbSB3aXRoaW4gdGhlIGludGVyZmFjZS4gVGhlIG9ubHkgd2F5 IHRvIHJlbmFtZSBpdCBpcyB2aWEgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFu PiBjbGllbnQgYW5kIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxl IGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L3A+CgoJPHA+SW4gb3JkZXIgdG8g YXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggb3RoZXIgcGVvcGxlJiM4MjE3O3MgdGhlbWVzLCBp dCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCB0aGVtZXMgeW91IGRlc2lnbiBiZWdpbiB3aXRo IGEgdW5pcXVlIDMtbGV0dGVyIHByZWZpeCBvZiB5b3VyIG93biBjaG9vc2luZywgcGx1cyBh biB1bmRlcnNjb3JlICYjODIxMjsgZXhhY3RseSBsaWtlIHBsdWdpbnMuIFRodXMsIHNtZF9C bHVlTWVhbmllIG1pZ2h0IHdlbGwgYmUgdGhlIG5hbWUgb2YgYSB0aGVtZS48L3A+CgoJPHA+ V2hlbiB5b3UgaGF2ZSBuYW1lZCB5b3VyIHRoZW1lLCBjbGljayA8c3Ryb25nPkdvPC9zdHJv bmc+IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBjYW4gcmVzaWRlLjwvcD4K Cgk8aDIgaWQ9ImNsb25lIj5FeHRlbmQgYW4gZXhpc3RpbmcgdGhlbWU8L2gyPgoKCTxwPkNs aWNrIDxzdHJvbmc+QmFzZTwvc3Ryb25nPiB0byBjcmVhdGUgYSBuZXcgdGhlbWUgYmFzZWQg b24gYW5vdGhlci4gQSBib3ggd2lsbCBzbGlkZSBkb3duICh0aGUgY3Vyc29yIGZvY3VzZXMg YXV0b21hdGljYWxseSBpbiB0aGUgYm94IGZvciB5b3UpIHNvIHlvdSBtYXkgZW50ZXIgdGhl IG5hbWUgb2YgeW91ciBjb3B5LiBPYnNlcnZlIHRoZSA8YSBocmVmPSIjbmV3Ij5uYW1pbmcg Y29udmVudGlvbjwvYT4sIHRoZW4gY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBjcmVh dGUgdGhlIG5ldyB0aGVtZS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9ImltcG9ydGFudCI+UGxl YXNlIHJlbWVtYmVyLCB5b3VyIHRoZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9z ZW4gdGhlbWUgYW5kIDxzdHJvbmc+Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24g YSB1c2VyJiM4MjE3O3Mgc3lzdGVtIGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0 IGlzIHdvcnRoIGVuc3VyaW5nIHRoYXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBh d2FyZSBvZiB0aGlzIGRlcGVuZGVuY3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRp b247IHBlcmhhcHMgYWRkIGEgbGluayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50 aW9uIHRoZSBkZXBlbmRlbmN5IGluIHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVt ZSYjODIxNztzIGFydGljbGUgb24gVGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUg dG8gZGVsZXRlIGFueSB0aGVtZSBmcm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBl bmRlbmN5LCBvdGhlcndpc2UgeW91ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwv cD4KCgk8aDIgaWQ9ImV4cG9ydCI+RXhwb3J0IGEgdGhlbWU8L2gyPgoKCTxwPklmIHlvdSB3 aXNoIHRvIGJhY2sgdXAgYSB0aGVtZSBvciBzaGFyZSBpdCB3aXRoIG90aGVycywgY2xpY2sg PHN0cm9uZz5FeHBvcnQ8L3N0cm9uZz4uIEEgYm94IHdpbGwgc2xpZGUgZG93biBvZmZlcmlu ZyB5b3UgYSBjaG9pY2Ugb2YgY29tcHJlc3Npb24gZm9ybWF0czsgdGhlIGRlZmF1bHQgaXMg dGhlIGZvcm1hdCB5b3UgY2hvc2UgZnJvbSB0aGUgPGEgaHJlZj0iI3NldHVwIj5QcmVmZXJl bmNlczwvYT4gcGFnZS4gQ2xpY2sgPGVtPltHb108L2VtPiB0byBleHBvcnQgdGhlIHRoZW1l IGFuZCBzYXZlIGl0IHRvIHlvdXIgY29tcHV0ZXIuIEFsbCByZWxhdGVkIGZpbGVzIGluIHRo ZSB0aGVtZSB3aWxsIGJlIHBhY2thZ2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgZG93bmxv YWQgZmlsZSBmb3IgY29udmVuaWVuY2UuPC9wPgoKCTxwPlRoZSBmaWxlbmFtZSBpcyBnb3Zl cm5lZCBieSB0aGUgPGVtPkZpbGVuYW1lIGZvcm1hdDwvZW0+IHByZWZlcmVuY2UuPC9wPgoK CTxoMiBpZD0iZGVsZXRlIj5EZWxldGUgYSB0aGVtZTwvaDI+CgoJPHA+SGl0IHRoaXMgKGFu ZCBjb25maXJtIHlvdSBhcmUgc3VyZSkgdG8gcmVtb3ZlIHRoZSBlbnRpcmUgdGhlbWUgZm9s ZGVyIGFuZCBjb250ZW50cyBmcm9tIHRoZSBmaWxlIHN5c3RlbS4gPHNwYW4gY2xhc3M9Imlt cG9ydGFudCI+VGhpcyBpcyBub3QgdW5kb2FibGUsIHNvIGJlIGNhcmVmdWw8L3NwYW4+Ljwv cD4KCgk8aDIgaWQ9ImVkaXRfdGhlbWUiPkVkaXQgYSB0aGVtZTwvaDI+CgoJPHA+QSB0aGVt ZSBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBmaWxlcyBhbGwgcmVzaWRlIGluIHRo ZWlyIG93biBzZWxmLWNvbnRhaW5lZCBkaXJlY3RvcnkgdW5kZXIgPGNvZGU+dGV4dHBhdHRl cm4vdGhlbWU8L2NvZGU+LiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGlzIHRoZSBuYW1l IG9mIHlvdXIgdGhlbWUsIGhlbmNlIHRoZSByZWFzb24gaXQgY2Fubm90IGNvbnRhaW4gYW55 IG9ic2N1cmUgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGludmFsaWQgaW4gdGhlIGZpbGVz eXN0ZW0gb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gdmFyaWFibGVzLjwvcD4K Cgk8cD5XaGVuIHlvdSBjbGljayAmIzgyMTY7RWRpdCYjODIxNzsgeW91IHdpbGwgYmUgdGFr ZW4gdG8gYSBzY3JlZW4gdGhhdCBhbGxvd3MgeW91IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUg dGhlbWUuIFRoZSBFZGl0IHNjcmVlbiBpcyBicm9rZW4gaW50byB0aHJlZSB2ZXJ0aWNhbCBw YXJ0cywgYXMgZm9sbG93czo8L3A+CgoJPGgzIGlkPSJlZGl0X2ltZyI+SW1hZ2UgaGFuZGxp bmc8L2gzPgoKCTxwPkVhY2ggdGhlbWUgY2FuIGNvbnRhaW4gYW4gb3B0aW9uYWwgdGh1bWJu YWlsLiBUaGlzIGlzIGFuIGltYWdlIG9mIDI2MCYjMjE1OzE1MHB4IGluIHNpemUsIGNhbGxl ZCA8Y29kZT5zY3JlZW5zaG90LnBuZzwvY29kZT4gKG9yIDxjb2RlPi5qcGc8L2NvZGU+LCA8 Y29kZT4uZ2lmPC9jb2RlPiwgZXRjKSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90ZSBp dCB3aWxsIGJlIHNxdWFzaGVkIC8gc3RyZXRjaGVkIHRvIGZpdCB5b3VyIHRodW1ibmFpbCBk aW1lbnNpb25zIHNldCBpbiB0aGUgcGx1Z2luIHByZWZzLjwvcD4KCgk8cD5PdGhlciBpbWFn ZXMgZm9yIHVzZSBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBydWxlcyBjYW4g YWxzbyBiZSBhZGRlZCB0byBhIHRoZW1lLiBCcm93c2UgZm9yIGFuIGltYWdlIGFuZCBzZWxl Y3QgaXQsIHRoZW4gY2xpY2sgPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gdG8gYWRkIGl0IHRv IHRoZSB0aGVtZS4gWW91IGNhbiBjdXJyZW50bHkgb25seSB1cGxvYWQgb25lIGltYWdlIGF0 IGEgdGltZSwgdGhvdWdoIHlvdSBjYW4gZGVsZXRlIG9uZSBvciBtb3JlIGF0IG9uY2UgYnkg U2hpZnQvQ3RybCBjbGlja2luZyB0aGUgb25lcyB5b3Ugd2lzaCB0byByZW1vdmUgYW5kIGhp dHRpbmcgdGhlICYjODIxNjt4JiM4MjE3OyBidXR0b24uIDxzcGFuIGNsYXNzPSJpbXBvcnRh bnQiPldhcm5pbmc6IGZpbGVzIHdpbGwgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSwgd2l0aG91 dCBjb25maXJtYXRpb24uPC9zcGFuPjwvcD4KCgk8cD5UaGUgYmVzdCB3YXkgdG8gcmVmZXIg dG8gaW1hZ2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGluIHN0eWxlc2hlZXRz IGlzIHdpdGggYSByZWxhdGl2ZSBwYXRoOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29k ZSBjbGFzcz0iYmxvY2siPi5teVN0eWxlIHsKICAgYmFja2dyb3VuZDogdXJsKG15LWltYWdl LmdpZik7Cn0KPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWRpdF9jb250ZW50Ij5Db250ZW50 PC9oMz4KCgk8cD5UaGUgY2VudHJhbCBwYW5lIGlzIHdoZXJlIHlvdSBlZGl0IHRoZSBjb250 ZW50cyBvZiB0aGUgZmlsZXMgaW4geW91ciB0aGVtZS4gVGhlIHNtYWxsIGVkaXQgYm94IGF0 IHRoZSB0b3AgaXMgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGFyZ2UgdGV4dCBhcmVhIGlzIGl0 cyBjb250ZW50LiBDbGljayA8c3Ryb25nPlNhdmU8L3N0cm9uZz4gdG8gY29tbWl0IGNoYW5n ZXMuIFlvdSBtYXkgZnJlZWx5IHJlbmFtZSBhbnkgZmlsZSB5b3UgYXJlIGVkaXRpbmcuPC9w PgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPkltcG9ydGFudDogaWYgeW91IHNlbGVjdCBhIGZp bGUsIGVkaXQgaXQsIHJlbmFtZSBpdCwgYW5kIGNsaWNrIDxzdHJvbmc+U2F2ZTwvc3Ryb25n PiB5b3Ugd2lsbCBvdmVyd3JpdGUgd2hhdGV2ZXIgd2FzIGluIHRoZSBwcmV2aW91cyBmaWxl ICYjODIxMjsgZXZlbiBpZiB5b3UgZW1wdHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0YXJl YSBpbiBhbiBlZmZvcnQgdG8gbWFrZSBhICYjODIyMDtuZXcmIzgyMjE7IG9uZS4gSWYgeW91 IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGZpbGUsIGl0IGlzIHNhZmVyIHRvIGNsaWNrIHRoZSA8 c3Ryb25nPk5ldyBmaWxlPC9zdHJvbmc+IGJ1dHRvbiBpbiB0aGUgcmlnaHQgaGFuZCBjb2x1 bW4gdG8gZW5zdXJlIHlvdSBhcmUgbm90IGVkaXRpbmcgYW4gZXhpc3RpbmcgZmlsZSBieSBt aXN0YWtlLjwvcD4KCgk8cD5JdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IGZpbGUgcGVy bWlzc2lvbnMgdmFyeSBmcm9tIGhvc3QgdG8gaG9zdC4gSWYgeW91IHRyeSBhbmQgc2F2ZSBh IHRoZW1lIGZpbGUgYW5kIHJlY2VpdmUgYSB5dWtreSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQg bm90IGJlaW5nIGFibGUgdG8gd3JpdGUgdGhlIGZpbGUsIHRyeSBpbmNyZWFzaW5nIHRoZSBw ZXJtaXNzaW9ucyBvbiB0aGUgdGhlbWUgZGlyZWN0b3J5IGFuZCBhbGwgZmlsZXMgYmVuZWF0 aCBpdC48L3A+CgoJPHA+VGhlIHRoZW1lIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbiA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB3aXRoIDxjb2RlPjY0NDwvY29kZT4gcGVybWlz c2lvbnMgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIGEgc3RhbmRhcmQgaG9zdC4gU29tZSBz aGFyZWQgaG9zdGluZyBjb21wYW5pZXMgJiM4MjEyOyBhbmQgdGhlc2UgYXJlIHVzdWFsbHkg dGhlIG9uZXMgdGhhdCB0ZWxsIHlvdSB0byBzZXQgeW91ciA8Y29kZT5maWxlczwvY29kZT4g YW5kIDxjb2RlPmltYWdlczwvY29kZT4gZGlyZWN0b3JpZXMgdG8gNzc3IGluIG9yZGVyIHRv IG1ha2UgdGhlbSB3cml0YWJsZSBieSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiAm IzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVyZW50IHdheSB3aGljaCBtaWdodCBy ZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRlciB0byB3cml0ZSB0byB0aGUgdGhl bWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkgb3V0c2lkZSB0aGUgc2NvcGUg b2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4cGVyaW1lbnQgaWYgaXQgY2F1 c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgzPkZpbGUgaGFuZGxpbmc8L2gzPgoKCTxwPlRo aXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2VsZWN0IGxpc3Qgb2YgYWxsIGluc3RhbGxlZCB0 aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNlbGVjdGVkLiBDaGFuZ2luZyB0aGUgaXRlbSBo ZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cgeW91IHRvIGVkaXQgYW5vdGhlciB0aGVtZS4g VGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgYXJlIGNvcHlpbmcgYW5kIHBhc3RpbmcgZmls ZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhlciBhbmQgc2F2ZXMgeW91IGhhdmluZyB0byBn byBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZpcnN0LjwvcD4KCgk8cD5CZW5lYXRoIHRoYXQg YXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5O ZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcsIGVtcHR5IGZpbGUgaW4geW91ciB0aGVt ZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0dWFsbHkgY3JlYXRlZCB1bnRpbCB5b3UgaGl0 IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQgdXNpbmcgdGhpcyBidXR0b24gZW5zdXJlcyB5 b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRlIGFuZCBkb24mIzgyMTc7dCBhY2NpZGVudGFs bHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmaWxlIHlvdSB3ZXJlIGVkaXRpbmc8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgbGlzdDwvc3Bhbj4gOiBBIHNob3J0Y3V0 IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlzdCAoZXF1aXZhbGVudCB0byBjbGlja2luZyB0 aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYik8L2xpPgoJPC91bD4KCgk8cD5CZWxvdyB0 aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3VyIHNlY3Rpb25zIGNvbnRhaW5pbmcgYWxsIHRo ZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1ha2UgdXAgeW91ciB0aGVtZS4gQ2xpY2sgYSBm aWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhlIGNlbnRyYWwgdGV4dCBhcmVhIGZvciBlZGl0 aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXNoZWV0czwvaDQ+CgoJPHAgY2xh c3M9ImltcG9ydGFudCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNw YW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uY3NzPC9jb2RlPjwv cD4KCgk8cD5UaGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgeW91ciB0aGVtZS4gQWRkIGFzIG1h bnkgc2hlZXRzIGFzIHlvdSBsaWtlIGFuZCBsb2FkIHRoZW0gZnJvbSB5b3VyIDxzcGFuIGNs YXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUocykuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3Mi PlN0eWxlcGxhdGVzPC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxlcyBjYW4gYmUg YW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4g ZW5kIGluIDxjb2RlPi5zc2M8L2NvZGU+PC9wPgoKCTxwPkEgc3BlY2lhbCB2ZXJzaW9uIG9m IGEgc3R5bGVzaGVldCB0aGF0IGFsbG93cyB5b3UgdG8gZGVmaW5lIGNvbnN0YW50cyB0aHJv dWdob3V0IHlvdXIgc2hlZXQuIFdyaXRlIHlvdXIgc3R5bGVzaGVldCBpbiBleGFjdGx5IHRo ZSBzYW1lIHdheSBhcyB5b3Ugd291bGQgbm9ybWFsbHkgYnV0IHdoZXJlIHlvdSBmaW5kIHlv dXJzZWxmLCBmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHNhbWUgY29sb3IgdmFsdWUgcmVwZWF0 ZWRseSBvciB0aGUgc2FtZSBydWxlcyBibG9jaywgeW91IGNhbiBzYXZlIHlvdXJzZWxmIHR5 cGluZyBieSB1c2luZyBjb25zdGFudHM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+QGJyYW5kaW5nOiAjMTIzNDU2OwojaGVhZGVyIHsKICBjb2xvcjog QGJyYW5kaW5nOwp9CmgyIHsKICBjb2xvcjogQGJyYW5kaW5nOwp9CjwvY29kZT48L3ByZT4K Cgk8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSB3aG9sZSBydWxlIGJsb2NrcyBsaWtlIHRoaXMg KDxlbT5Ob3RlIHRoZSBjb2xvbiBhZnRlciB0aGUgYmxvY2sgbmFtZTwvZW0+KSA6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+QG15X2Jsb2NrOiB7CiAg bWFyZ2luOjAgMjBweDsKICBib3JkZXI6M3B4IHNvbGlkICM5OTk7CiAgZm9udC1zaXplOjEy MCU7Cn0KI2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsKICBwb3NpdGlvbjpyZWxhdGl2 ZTsKICBAbXlfYmxvY2s7Cn0KaDIgewogIEBteV9ibG9jazsKfQo8L2NvZGU+PC9wcmU+CgoJ PHA+SWYgeW91IHB1dCBhbGwgeW91ciBjb25zdGFudHMgYXQgdGhlIHRvcCBvZiB0aGUgPGNv ZGU+LnNzYzwvY29kZT4gZmlsZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBnZW5l cmF0ZWQgY3NzIGZpbGUuPC9wPgoKCTxwPldoZW4geW91IHNhdmUgYSA8Y29kZT4uc3NjPC9j b2RlPiBmaWxlLCBhIGNvcnJlc3BvbmRpbmctbmFtZWQgPGNvZGU+LmNzczwvY29kZT4gZmls ZSB3aWxsIGFsc28gYmUgY3JlYXRlZC4gVGhlIHR3byB3aWxsIGJlIGtlcHQgaW4gc3luYyBh cyBmYXIgYXMgcHJhY3RpY2FibGUgKGV2ZW4gaWYgeW91IHJlbmFtZSB0aGUgb3JpZ2luYWwg ZmlsZSkuIFdoZW4gaXQgY29tZXMgdG8gZGVsZXRpb24gdGhvdWdoLCB0aGV5IGFyZSB0cmVh dGVkIHNlcGFyYXRlbHkuIFRoaXMgYWxsb3dzIHlvdSB0byBlaXRoZXIga2VlcCB0aGUgPGNv ZGU+LnNzYzwvY29kZT4gZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGFyY2hpdmUgb3IgcmVt b3ZlIGl0IHByaW9yIHRvIGV4cG9ydC48L3A+CgoJPGg0IGlkPSJlZGl0X2pzIj5KYXZhc2Ny aXB0PC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxlcyBjYW4gYmUgYW55IHZhbGlk IGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxj b2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRyaWNrZXJ5IHlvdSBtYXkgd2lzaCB0byBl bXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3JpdHRlbiBpbiB0aGVzZSBmaWxlcy4gUmVt ZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgb24gdGhlIGFkbWluIHNp ZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48L3A+CgoJPGg0IGlkPSJlZGl0X3BocCI+ PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L2g0PgoKCTxwIGNsYXNzPSJpbXBvcnRh bnQiPk9uZSBmaWxlIDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBiZSBuYW1lZCBleGFjdGx5IHRo ZSBzYW1lIGFzIHlvdXIgdGhlbWUsIGkuZS4gPGNvZGU+c21kX0JsdWVNZWFuaWUucGhwPC9j b2RlPi4gQW55IG90aGVyIGZpbGVzIG11c3QgZW5kIGluIDxjb2RlPi5waHA8L2NvZGU+PC9w PgoKCTxwPkNvbnN1bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lr aS9pbmRleC5waHA/dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5fU2lkZV9UaGVtZSI+QWRtaW4g U2lkZSB0aGVtZSBndWlkZTwvYT4gb24gVGV4dGJvb2sgZm9yIHRoZSBydWxlcyBvbiBtYWtp bmcgdGhlbWVzLiBOb3RlIHRoYXQgY29ycnVwdCB0aGVtZXMgYXJlIGRldGVjdGVkIHRvIHRo ZSBiZXN0IG9mIHRoZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5IGFuZCB5b3UgbWF5IG5vdCBl eHBvcnQsIGJhc2Ugb3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0aGF0IGlzIGJyb2tlbi48L3A+ CgoJPHA+SWYgeW91IHJlbmFtZSB0aGUgdGhlbWUmIzgyMTc7cyBjb3JlIDxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgKGkuZS4gdGhlIG9uZSB3aXRoIHRoZSBzYW1lIG5h bWUgYXMgdGhlIHRoZW1lIGZvbGRlciBpdHNlbGYpIHRoZSBwbHVnaW4gd2lsbCBhdHRlbXB0 IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGFzIHdlbGw7IGVzc2VudGlhbGx5IHJlbmFtaW5n IHRoZSB0aGVtZS4gVGhpcyBzaG91bGQgcHJldmVudCBhIHRoZW1lIGZyb20gYmVjb21pbmcg dW5lZGl0YWJsZSwgYnV0IGl0IGlzIHVwIHRvIHlvdSB0byBrZWVwIHRoZSBjbGFzcyBuYW1l IGluIHN5bmMgd2l0aCB0aGUgZmlsZSBuYW1lLiBJZiBhdCBhbnkgdGltZSB5b3UgZ28gYmFj ayB0byB0aGUgdGhlbWUgbGlzdC9ncmlkIGFuZCBmaW5kIGEgdGhlbWUgZXhpc3RzIGJ1dCBo YXMgbm8gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0LCBjaGFuY2VzIGFyZSBpdCYj ODIxNztzIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWUgZG9lc24mIzgyMTc7dCBtYXRjaCB0aGUg dGhlbWUmIzgyMTc7cyBkaXJlY3RvcnkgbmFtZS4gSnVzdCBoaXQgW0VkaXRdIGFuZCBhbHRl ciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSB0byBicmluZyBldmVy eXRoaW5nIGJhY2sgb24gdHJhY2suPC9wPgoKCTxoNCBpZD0iZWRpdF9vdGhlciI+T3RoZXJz PC9oND4KCgk8cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0 eXBlcyAoYW5kIGFyZSBub3QgaW1hZ2VzKSBhcHBlYXIgaGVyZS4gWW91IHdpbGwgcHJvYmFi bHkgbmV2ZXIgc2VlIHRoaXMgc2VjdGlvbi4gSWYgeW91IGRvIHRyeSB0byBjcmVhdGUgYSBm aWxlIHRoYXQgaXMgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0eXBlcywgYSB3YXJuaW5nIHdp bGwgYmUgaXNzdWVkLiBZb3UgbXVzdCBoaXQgPGVtPlNhdmU8L2VtPiBhZ2FpbiB0byBjb25m aXJtIHlvdSByZWFsbHkgd2lzaCB0byBjcmVhdGUgdGhlIGZpbGUuPC9wPgoKCTxoMyBpZD0i YWJvdXQiPk1hbmlmZXN0PC9oMz4KCgk8cD5JbiB5b3VyIG1haW4gPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCA8Y29kZT5tYW5pZmVz dCgpPC9jb2RlPiB3aGljaCBjb250YWlucyBpbmZvIGFib3V0IHlvdSBhbmQgeW91ciB0aGVt ZS4gRWRpdCB0aGUgdmFsdWVzIGhlcmUgdG8gc3RhbXAgeW91ciBtYXJrIG9uIHRoZSB0aGVt ZS4gTm90ZSB0aGF0IGlmIHlvdXIgZGVzY3JpcHRpb24gY29udGFpbnMgYXBvc3Ryb3BoZXMg dGhleSBtdXN0IGJlIDxlbT5lc2NhcGVkPC9lbT4gYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBh IHNpbmdsZSBiYWNrc2xhc2ggPGNvZGU+XDwvY29kZT4uIGUuZy48L3A+Cgo8cHJlPjxjb2Rl PiYjMzk7ZGVzY3JpcHRpb24mIzM5OyA9Jmd0OyAmIzM5O0RvblwmIzM5O3QgZmVhciB0aGUg cmVhcGVyISYjMzk7LAo8L2NvZGU+PC9wcmU+CgoJPGgyIGlkPSJwZXJ1c2VyIj5QZXItdXNl ciB0aGVtZSBzZWxlY3Rpb248L2gyPgoKCTxwPklmIGFuIGFkbWluaXN0cmF0b3IgY2hvb3Nl cyB0byBhbGxvdyBwZXItdXNlciB0aGVtZXMsIGEgbmV3IHRhYiBhcHBlYXJzIHVuZGVyIHRo ZSBBZG1pbiB0YWIgb2YgYWxsIHVzZXJzIChleGNlcHQgYWRtaW5pc3RyYXRvcnMpLiBUaGlz IHNpbXBseSBkaXNwbGF5cyBhbGwgYXZhaWxhYmxlIHRoZW1lcyAmIzgyMTI7IG9uZXMgdGhh dCB0aGUgYWRtaW5pc3RyYXRvciBoYXMgZXhwbGljaXRseSBhbGxvd2VkLjwvcD4KCgk8cD5D bGlja2luZyBhIHRoZW1lIG5hbWUgb3IgdGh1bWJuYWlsIHdpbGwgaW1tZWRpYXRlbHkgc3dp dGNoIHRvIHRoYXQgdGhlbWUgdW50aWwgdGhlIHVzZXIgY2hvb3NlcyBhbm90aGVyIG9yIHRo ZSBhZG1pbmlzdHJhdG9yIGNoYW5nZXMgdGhlbWUgc3lzdGVtLjwvcD4KCgk8aDIgaWQ9ImNo YW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjEyIEp1biAwOSB8IDAuMSB8 IEluaXRpYWwgcHVibGljIGJldGE8L2xpPgoJCTxsaT4wMyBTZXAgMDkgfCAwLjExIHwgSW1w cm92ZWQgVGV4dGdhcmRlbiB0aGVtZSBmZWVkIGFuZCBsaW5rcyA7IGltcHJvdmVkIGZpbGUg c3VwcG9ydCAoYm90aCB0aGFua3MgdGhlYm9tYnNpdGUpIDsgbWFkZSBnbG9iYWwgdGhlbWUg bW9yZSBvYnZpb3VzIDsgYWx0ZXJlZCBwcmVmcyB0YWIgYSBiaXQgOyBhZGRlZCA8Y29kZT4u c3NjPC9jb2RlPiBzdXBwb3J0IDsgaWdub3JlZCAuc3ZuIHN1YmRpcnMgKGFsbCB0aGFua3Mg cGllbWFuKSA7IGltcHJvdmVkIHdhcm5pbmcgbWVzc2FnZXMgOyBtaXNjIGZpeGVzIGFuZCBo b3VzZWtlZXBpbmc8L2xpPgoJCTxsaT4wMiBOb3YgMDkgfCAwLjEyIHwgUmVkdWNlZCB0aGVt ZSBmZWVkIGNsdXR0ZXIgaW4gdGhlIHByZWZzIHRhYmxlPC9saT4KCQk8bGk+MDQgTm92IDA5 IHwgMC4xMyB8IFJlbW92ZWQgZXJlZ19yZXBsYWNlIHRvIGNvbmZvcm0gd2l0aCBQSFA1LjMr ICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgY2hhbmdlZCAmIzgyMTY7Z2xvYmFsJiM4MjE3OyB0 byAmIzgyMTY7ZGVmYXVsdCYjODIxNzsgOyBmaXhlZCByb2d1ZSB1bnRyYW5zbGF0ZWQgc3Ry aW5nPC9saT4KCQk8bGk+MDkgTm92IDA5IHwgMC4xNCB8IE1vdmVkIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+cyBpbiBsaW5lIHdpdGggVGV4dGdhcmRlbiBsYXlvdXQgYWx0ZXJh dGlvbnMgKHRoYW5rcyBmb3IgdGhlIGhlYWRzdXAgdGhlYm9tYnNpdGUpIDsgbWFkZSBmZWVk cyBtb3JlIHJvYnVzdCBpbiB0aGUgZXZlbnQgVGV4dGdhcmRlbiBpcyBkb3duIC8gdW5kZXIg bWFpbnRlbmFuY2UgKHRoYW5rcyBtbGFyaW5vKTwvbGk+CgkJPGxpPjA5IEZlYiAxMCB8IDAu MiB8IE5hdGl2ZSBzdXBwb3J0IGZvciB6aXAgaW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgKGFs bW9zdCkgaXJyZXNwZWN0aXZlIG9mIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bh bj4gZW52aXJvbm1lbnQgOyB6aXAgaXMgbm93IHRoZSBkZWZhdWx0IHN5c3RlbSA7IGJldHRl ciBub3RpZmljYXRpb24gb2Ygc3VwcG9ydGVkIGNvbXByZXNzaW9uIHR5cGVzIGFuZCBtb3Jl IHJvYnVzdCByZWplY3Rpb24gaWYgc29tZXRoaW5nIGlzIG1pc3Npbmc8L2xpPgoJCTxsaT4x MCBGZWIgMTAgfCAwLjIxIHwgRml4ZWQgYnppcDIgd2FybmluZyAodGhhbmtzIHRoZWJvbWJz aXRlKSA7IGZpeGVkIHJlY3Vyc2l2ZSBta2RpciBwcm9ibGVtIHdpdGggYnppcDIgZmlsZXMg KHRoYW5rcyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBtYW51YWwgY29tbWVudHMp IDsgZml4ZWQgcm9ndWUgdGVtcCBmaWxlIGxlZnQgYmVoaW5kIHdpdGggemlwIGltcG9ydDwv bGk+CgkJPGxpPjE1IEZlYiAxMCB8IDAuMjIgfCBXaGVuIHJlbmFtaW5nIHRoZSBjb3JlIHRo ZW1lIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUsIGF1dG9tYXRpY2FsbHkg cmVuYW1lIGRpcmVjdG9yeSB0b28gKHRoYW5rcyBmbG9vZGZpc2gpPC9saT4KCQk8bGk+Mjgg RmViIDEwIHwgMC4yMyB8IFJ1ZGltZW50YXJ5IHZhbGlkYXRpb24gb2YgemlwIGZpbGUgY29u dGVudHMgKHRoYW5rcyBUdXRzX2FuZF9UaXBwcyk7IGZpeGVkIGV4cG9ydCBub3RpZmljYXRp b248L2xpPgoJCTxsaT4wNiBBdWcgMTAgfCAwLjI0IHwgRml4ZWQgPGNvZGU+ZnNvY2tvcGVu KCk8L2NvZGU+IGFuZCB1bmRlZmluZWQgaW5kZXggd2FybmluZ3MgaWYgbm90IGNvbm5lY3Rl ZCB0byB0aGUgSW50ZXJuZXQgLyBwcmVmcyBub3QgaW5zdGFsbGVkPC9saT4KCQk8bGk+MDEg Tm92IDEwIHwgMC4yNSB8IEJldHRlciB0aGVtZSBpbnRlZ3JhdGlvbiAoY29sb3VycywgZXRj KSA7IGZpeGVkIGR1cGxpY2F0ZSBwYWdlIHJlbmRlcnMgb24gZWRpdCBzY3JlZW4gYW5kIGFk ZGVkIGZpbGVuYW1lIGZvcm1hdCBvcHRpb24gKGJvdGggdGhhbmtzIG1hdmVyaWNrKTwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVn aW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVh cyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFtLCBlc3Bl Y2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9m IGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0 aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwg RGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBhbmQgTWlrZSBEZW5uaXMuPC9wPgoKCTxw PkkgYW0gYWxzbyBpbmRlYnRlZCB0byB0aGUgbGlicmFyaWVzIGhvc3RlZCBhdCA8YSBocmVm PSJodHRwOi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiBDbGFzc2VzPC9hPiB0aGF0IGVuYWJsZWQgbmF0aXZlIGNvbXByZXNzaW9uIGFuZCBkZWNv bXByZXNzaW9uIG9mIHZhcmlvdXMgdHlwZXMuIFRoZSBoYXJkIHdvcmsgb2YgRGV2aW4gRG91 Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2NoaSByZWFsbHkgYWRkZWQgdGhlIGljaW5nIG9u IHRoZSBjYWtlIGZvciB0aGlzIHBsdWdpbi48L3A+CgoJPHA+S3Vkb3MgYW5kIHRoYW5rcyB0 byB5b3UgYWxsLjwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAt LT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41 IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAl ICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjog I2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2Vp Z2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFy Z2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9u dDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNl bnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7 IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQoj c21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRl ci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVy Y2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6 IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFy Z2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAg LmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91 bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3 aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IH0KI3Nt ZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRp bmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0K I3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFy Z2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9w OjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czoz OiJtZDUiO3M6MzI6ImQ5YTc0MmJmMmQwYjg1MjAwMDZmZTE3NmI3ZTIyNmQyIjt9