# Name: smd_admin_themes v0.1 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjEiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjM1OiJBZG1pbi1zaWRlIHRoZW1lIG1hbmFnZXIgYW5kIGVkaXRvciI7czo0OiJjb2Rl IjtzOjgwNTcwOiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRz bWRfYXRfZXZlbnQsICRzbWRfYXRfZnVsbGV2LCAkc21kX2F0X2FkbV9ldmVudCwgJHNtZF9h dF9wcml2cywgJHNtZF9jb3JlX3RoZW1lcywgJHNtZF9hdF9wcmVmcywgJHByZWZzLCAkc21k X2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbzsNCg0KCSRzbWRfYXRfZXZlbnQgPSAn c21kX2F0JzsNCgkkc21kX2F0X2Z1bGxldiA9ICdzbWRfYWRtaW5fdGhlbWVzJzsNCgkkc21k X2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOw0KCSRzbWRfYXRfcHJpdnMgPSAnMSc7DQoJ JHNtZF9hdF9mZWVkdXJsID0gJ2h0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbi10aGVtZXMn Ow0KCSRzbWRfYXRfdGhlbWVfcmVwbyA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcvbGF5b3V0 cy8/Yz10eHAtYWRtaW4nOw0KDQoJLy8gVGh1bWJuYWlsIGRpbWVuc2lvbnMNCgkkc21kX2Nv cmVfdGhlbWVzID0gYXJyYXkoJ2NsYXNzaWMnLCdyZW1vcmEnKTsNCg0KCWFkZF9wcml2cygk c21kX2F0X2V2ZW50LCAkc21kX2F0X3ByaXZzKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVm cy4nLiRzbWRfYXRfZnVsbGV2LCAkc21kX2F0X3ByaXZzKTsNCglyZWdpc3Rlcl90YWIoImV4 dGVuc2lvbnMiLCAkc21kX2F0X2V2ZW50LCBzbWRfYXRfZ1R4dCgndGFiX25hbWUnKSk7DQoJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF9vcHRpb25zJywgJ3BsdWdpbl9wcmVmcy4nLiRz bWRfYXRfZnVsbGV2KTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X3dlbGNvbWUnLCAn cGx1Z2luX2xpZmVjeWNsZS4nLiRzbWRfYXRfZnVsbGV2KTsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX2F0JywgJHNtZF9hdF9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9h dF9wZXInLCAnYWRtaW5fc2lkZScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9hdF9saW5rJywgJ3ByZWZzX3VpJywgJ3RoZW1lX25hbWUnKTsNCglyZWdpc3Rl cl9jYWxsYmFjaygnc21kX2F0X3VwbG9hZF9mb3JtJywgJHNtZF9hdF9ldmVudC4nX3VpJywg J3VwbG9hZF9mb3JtJyk7DQoNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfc3lzdGVtJ10p ICYmICRwcmVmc1snc21kX2F0X3N5c3RlbSddID09IDIpIHsNCgkJYWRkX3ByaXZzKCRzbWRf YXRfYWRtX2V2ZW50LCAnMiwzLDQsNSw2Jyk7DQoJCXJlZ2lzdGVyX3RhYigiYWRtaW4iLCAk c21kX2F0X2FkbV9ldmVudCwgc21kX2F0X2dUeHQoJ3NraW5uZXInKSk7DQoJCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYWRtYXQnLCAkc21kX2F0X2FkbV9ldmVudCk7DQoJfQ0KDQoJLy8g RG91YmxlIGFycmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWly IGRlZmF1bHRzLA0KCS8vIDJuZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5 IG5lZWQgcmVtb3ZpbmcgaW4gZnV0dXJlIChkZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQ0KCSRz bWRfYXRfcHJlZnMgPSBhcnJheSgNCgkJYXJyYXkoDQoJCQknc21kX2F0X2Nhc2Vfc29ydCcg PT4gJzEnLA0KCQkJJ3NtZF9hdF9jcnVzaCcgPT4gJ2d6aXAnLA0KCQkJJ3NtZF9hdF90dycg PT4gJzI2MCcsDQoJCQknc21kX2F0X3RoJyA9PiAnMTUwJywNCgkJCSdzbWRfYXRfbGF5b3V0 JyA9PiAnMScsDQoJCQknc21kX2F0X3N5c3RlbScgPT4gJzAnLA0KCQkJJ3NtZF9hdF9nbG9i YWxfc2tpbicgPT4gJycsDQoJCQknc21kX2F0X2dyb3VwX2xpc3QnID0+ICcnLA0KCQkJJ3Nt ZF9hdF91c2VyX2xpc3QnID0+ICcnLA0KCQkpLA0KCQlhcnJheSgNCgkJCSdzbWRfYXRfbm90 X3VzZWRfYW55X21vcmUnID0+ICcnLA0KCQkpDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXQoJGV2ZW50LCAkc3RlcCkgew0KCWlmKCEk c3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9hdF9jbG9uZScsDQoJ CQknc21kX2F0X2RlbGV0ZScsDQoJCQknc21kX2F0X2RlbGV0ZV9pbWFnZScsDQoJCQknc21k X2F0X2VkaXQnLA0KCQkJJ3NtZF9hdF9leHBvcnQnLA0KCQkJJ3NtZF9hdF9pbXBvcnQnLA0K CQkJJ3NtZF9hdF9uZXdmaWxlJywNCgkJCSdzbWRfYXRfcHJlZnNfaW5zdGFsbCcsDQoJCQkn c21kX2F0X3ByZWZzX3JlbW92ZScsDQoJCQknc21kX2F0X3ByZWZzX3VwZGF0ZScsDQoJCQkn c21kX2F0X3JlbmFtZScsDQoJCQknc21kX2F0X3NhdmUnLA0KCQkJJ3NtZF9hdF9zZXR1cCcs DQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCQknc21kX2F0X3VwbG9hZF9pbWFnZScsDQoJCQkn c21kX2F0X2NoYW5nZV9wYWdlYnknLA0KCQkpKSkgew0KCQlzbWRfYXRfbGlzdCgnJyk7DQoJ fSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF93ZWxj b21lKCRldmVudCwgJHN0ZXApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3RlcCkgew0K CQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX2F0X3ByZWZzX2luc3RhbGwoMCk7DQoJCQli cmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfYXRfcHJlZnNfcmVtb3ZlKDApOw0K CQkJYnJlYWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X2xpbmsoKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQ7DQoJcmV0dXJuIGhyZWYo c21kX2F0X2dUeHQoJ21hbmFnZV9sYmwnKSwgJz9ldmVudD0nLiRzbWRfYXRfZXZlbnQpOw0K fQ0KDQovLyBBIHN0dWIgdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYSAkbWVzc2FnZQ0K ZnVuY3Rpb24gc21kX2F0X2Rpc3BsYXkoKSB7DQoJCXNtZF9hdF9saXN0KCcnKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlzdCgkbWVz c2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50LCAkcHJlZnMsICR0aGVtZSwgJHNt ZF9jb3JlX3RoZW1lcywgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfZmVlZHVybCwgJHNtZF9h dF90aGVtZV9yZXBvOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KDQoJ ZXh0cmFjdChncHNhKGFycmF5KCdzdGVwJywgJ3BhZ2UnLCAnY3JpdCcsICdzZWFyY2hfbWV0 aG9kJywgJ3NraW4nKSkpOw0KCSRtZXNzYWdlID0gKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDog Z3BzKCdtZXNzYWdlJyk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10g OiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQo JGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNt ZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7DQoJJGhlbHBMaW5rID0gIj9ldmVu dD1wbHVnaW4mc3RlcD1wbHVnaW5faGVscCZuYW1lPSRzbWRfYXRfZnVsbGV2I3VzYWdlIjsN Cg0KCSRwYWdlYnkgPSAoZ3BzKCdxdHknKSkgPyBncHMoJ3F0eScpIDogKChjcygnc21kX2F0 X3BhZ2VieScpKSA/IGNzKCdzbWRfYXRfcGFnZWJ5JykgOiAxNSk7DQoJJG1heF9maWxlX3Np emUgPSAxNTAgKiAxMDI0OyAvLyBhIGJpdCBhcmJpdHJhcnkhDQoNCgkkY3Vycl9za2luID0g KHNtZF9hdF9leGlzdHMoJHRoZW1lLT5uYW1lKSkgPyAkdGhlbWUtPm5hbWUgOiAnY2xhc3Np Yyc7DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoJJGNydXNoZXJzID0g c21kX2F0X2V4cG9ydF9vcHRpb25zKCk7DQoJJGJhc2VzID0gYXJyYXkoKTsNCg0KCS8vIEdl dCBhIGxpc3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVuZGVuY2llcykNCglmb3Jl YWNoICgkc2tpbl9saXN0IGFzICRza2luYSkgew0KCQkkbWFuaWZlc3QgPSBzbWRfYXRfcmVh ZF9za2luZm8oJHNraW5hKTsNCgkJaWYgKCRtYW5pZmVzdCkgew0KCQkJaWYgKCRtYW5pZmVz dFsnYmFzZWRfb24nXSkgew0KCQkJCSRiYXNlc1tdID0gJG1hbmlmZXN0WydiYXNlZF9vbidd Ow0KCQkJfQ0KCQl9DQoJfQ0KCSRiYXNlcyA9IGFycmF5X3VuaXF1ZSgkYmFzZXMpOw0KDQoJ cGFnZXRvcChzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCRtZXNzYWdlKTsNCg0KCS8vIEhh bmRsZSBwYWdpbmcNCgkkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0KTsNCgkkbGltaXQgPSBt YXgoQCRwYWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0g cGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCgkkc2tpbl9saXN0ID0gYXJyYXlfc2xp Y2UoJHNraW5fbGlzdCwgJG9mZnNldCwgJGxpbWl0KTsNCg0KCSRxcyA9IGFycmF5KA0KCQki ZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJwYWdlIiA9PiAkcGFnZSwNCgkpOw0KDQoJ ZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlv biBzbWRfZ2V0Y3J1c2goc2tpbikgew0KCXNraW5IYW5kbGUgPSAiY3J1c2hfIitza2luOw0K CWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWJveCA9IGpRdWVy eSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5kbGUpIHsNCgkJCWlm IChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94LnNsaWRlRG93bign ZmFzdCcpOw0KCQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0K CQl9IGVsc2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVy eSgnIycrc2tpbkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRo aXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrc2tpbisi JnN0ZXA9c21kX2F0X2V4cG9ydCZjcnVzaD0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlu cHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkJykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7 DQoJfSk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZ2V0dmFsKHNraW4s IHN0ZXApIHsNCglza2luSGFuZGxlID0gInBvcF8iK3NraW47DQoJalF1ZXJ5KCcuc21kX3Bv cHVwJykuZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5KHRoaXMpOw0KCQlpZiAo Ym94LmF0dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYgKGJveC5jc3MoImRpc3Bs YXkiKSA9PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdmYXN0Jyk7DQoJCQkJalF1 ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS5mb2N1cygpOw0KCQkJfSBlbHNlIHsNCgkJ CQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJYm94LnNsaWRl VXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGEnKS5j bGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50 PXskc21kX2F0X2V2ZW50fSZza2luPSIrKChza2luPT0nbmV3Jyk/ICcnIDogc2tpbikrIiZz dGVwPSIrc3RlcCsiJm5ld19za2luPSIralF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQn KS52YWwoKSsiJnBhZ2U9Iit7JHBhZ2V9KTsNCgl9KTsNCg0KCWpRdWVyeSgnIycrc2tpbkhh bmRsZSsnIGlucHV0Jykua2V5dXAoZnVuY3Rpb24gKCkgew0KCQl0aGlzLnZhbHVlID0gdGhp cy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9ceDdmLVx4ZmZdL2csJycpOw0KCQl3aGls ZSAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIHRoaXMudmFsdWUuc3Vic3RyaW5nKDAsMSku bWF0Y2goL1swLTldLykpIHsNCgkJCXRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnN1YnN0cmlu ZygxKTsNCgkJfQ0KCX0pOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0KPC9zY3JpcHQ+DQo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9oaWRkZW4gew0KCWRpc3BsYXk6bm9uZTsNCglt YXJnaW46NXB4Ow0KfQ0KI3NtZF9jb250cm9sIHsNCgltYXJnaW46MCBhdXRvOw0KfQ0KI3Nt ZF9jb250cm9sIHRkIC5wdWJsaXNoIHsNCgltYXJnaW4tbGVmdDo1MHB4Ow0KfQ0KI3NtZF9j b250cm9sIC51cGxvYWQtZm9ybSB7DQoJcGFkZGluZzowOw0KfQ0KLnNtZF9ncmlkIHsNCgl3 aWR0aDo5NjBweDsNCgltYXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDps ZWZ0Ow0KCXBhZGRpbmc6MTBweDsNCgltYXJnaW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdl ICNjY2M7DQoJd2lkdGg6eyR0d31weDsNCgloZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2Vs bDpob3ZlciB7DQoJYmFja2dyb3VuZDojZGRkOw0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6 Ym90aDsNCn0NCi5zbWRfYXV0aCwNCi5zbWRfYWN0aW9ucyB7DQoJdGV4dC1hbGlnbjpjZW50 ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9zdHlsZT4NCkVPSlM7DQoNCgkvLyBMaXN0IHRo ZSBhdmFpbGFibGUgc2tpbnMNCgllY2hvIHN0YXJ0VGFibGUoJ3NtZF9jb250cm9sJywnJywn Jyw1KTsNCgllY2hvIHRyKA0KCQl0ZGEodXBsb2FkX2Zvcm0oc21kX2F0X2dUeHQoJ2luc3Rh bGxfc2tpbicpLCAnJywgJ3NtZF9hdF9pbXBvcnQnLCAkc21kX2F0X2V2ZW50LCAnJywgJG1h eF9maWxlX3NpemUpLCAnIGNvbHNwYW49IjIiJykNCgkJLnRkYShmb3JtKGZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJbnB1 dCgnc21kX2F0X3NldHVwJykuZUlucHV0KCRzbWRfYXRfZXZlbnQpKSwnIGNvbHNwYW49IjYi IHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQ0KCSk7DQoJZWNobyBlbmRUYWJsZSgp Ow0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIGFjdGlvbj0i Jy5qb2luX3FzKCRxcykuJyI+JzsNCgkkbmV3YnRuID0gJyAnLic8YSBjbGFzcz0ibmF2bGlu ayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9uZScu YS4nc2tpbj0iIG9uY2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnbmV3XCcsIFwnc21kX2F0 X2Nsb25lXCcpOyI+Jy5zbWRfYXRfZ1R4dCgnbmV3JykuJzwvYT4nDQoJCS4gJzxkaXYgaWQ9 InBvcF9uZXciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRf Z1R4dCgnbmV3X3NraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRf dGV4dF9uYW1lIiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj5bJy5zbWRfYXRfZ1R4dCgnY29u ZmlybScpLiddPC9hPjwvZGl2Pic7DQoJJHJlcG9idG4gPSAnICcuJzxhIGNsYXNzPSJuYXZs aW5rIiBocmVmPSInLiRzbWRfYXRfdGhlbWVfcmVwby4nIj4nLnNtZF9hdF9nVHh0KCdmaW5k X3RoZW1lJykuJzwvYT4nOw0KCSRoZHJvdyA9IGhlZChzbWRfYXRfZ1R4dCgnbGlzdF90aXRs ZScpLiAnICcuIHNtZF9hdF9nVHh0KCdoZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9PiAk aGVscExpbmspKSwgMyk7DQoJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hvIHN0YXJ0VGFi bGUoJ2xpc3QnLCcnLCcnLDUpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRoZHJvdy4kcmVwb2J0 bi4kbmV3YnRuLCAnIGNvbHNwYW49IjciJykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hl YWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJ Z1R4dCgndmVyc2lvbicpLA0KCQkJCSdkZXNjcmlwdGlvbicsDQoJCQkJc21kX2F0X2dUeHQo J2FjdGlvbnMnKQ0KCQkJCSkNCgkJKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3JvdyI+Jy4kaGRyb3cuJHJlcG9idG4u JG5ld2J0bi4nPC9kaXY+JzsNCgl9DQoJaWYoIGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSAp DQoJCSR0cmFuc3BvcnQgPSAnZnNvY2snOw0KCWVsc2VpZiggaXNfY2FsbGFibGUoJ2N1cmxf aW5pdCcpICkgew0KCQkkdHJhbnNwb3J0ID0gJ2N1cmwnOw0KCX0gZWxzZSB7DQoJCSR0cmFu c3BvcnQgPSAnJzsNCgl9DQoNCgkkZmVlZCA9ICcnOw0KCXN3aXRjaCAoJHRyYW5zcG9ydCkg ew0KCQljYXNlICdjdXJsJzoNCgkJCSRjID0gY3VybF9pbml0KCk7DQoJCQljdXJsX3NldG9w dCgkYywgQ1VSTE9QVF9VUkwsICRzbWRfYXRfZmVlZHVybCk7DQoJCQljdXJsX3NldG9wdCgk YywgQ1VSTE9QVF9SRUZFUkVSLCBodSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9S RVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9WRVJC T1NFLCBmYWxzZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9USU1FT1VULCAxMCk7 DQoJCQkkZmVlZCA9IGN1cmxfZXhlYygkYyk7DQoJCQlicmVhazsNCgkJY2FzZSAnZnNvY2sn Og0KCQkJJHVybCA9IHBhcnNlX3VybCgkc21kX2F0X2ZlZWR1cmwpOw0KCQkJJGZwID0gZnNv Y2tvcGVuICgkdXJsWydob3N0J10sIDgwLCAkZXJybm8sICRlcnJzdHIsIDEwKTsNCgkJCSRx cnkgPSAnR0VUICcuJHNtZF9hdF9mZWVkdXJsOw0KCQkJJHFyeSAuPSAiIEhUVFAvMS4wXHJc blxyXG4iOw0KDQoJCQlmcHV0cygkZnAsICRxcnkpOw0KCQkJJGhkcnMgPSB0cnVlOw0KCQkJ d2hpbGUgKCFmZW9mKCRmcCkpIHsNCgkJCQkkbGluZSA9IGZnZXRzKCRmcCwgODE5Mik7DQoJ CQkJJGxpbmUgPSBlcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7DQoJCQkJaWYg KCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCSRmZWVkIC49ICRsaW5lLiJcbiI7DQoJCQkJfQ0K CQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJzID0gZmFsc2U7DQoJCQl9DQoJCQlm Y2xvc2UoJGZwKTsNCgkJCWJyZWFrOw0KCQlkZWZhdWx0Og0KCQkJJGZlZWQgPSAnJzsNCgl9 DQoNCgkkc21kX2F0X3ZsYXN0ID0gJGZlZWRzID0gJyc7DQoJaWYgKGlzc2V0KCRwcmVmc1sn c21kX2F0X3ZlcnNpb25zJ10pICYmIGlzc2V0KCRwcmVmc1snc21kX2F0X3ZsYXN0J10pKSB7 DQoJCWlmICh0aW1lKCkgLSAkcHJlZnNbJ3NtZF9hdF92bGFzdCddIDwgODY0MDApIHsNCgkJ CS8vIExhc3QgdXBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgZGF5LCBzbyByZWFkIHRoZSBjYWNo ZWQgdmVyc2lvbiBudW1iZXJzDQoJCQkkZmVlZHMgPSB1bnNlcmlhbGl6ZSgkcHJlZnNbJ3Nt ZF9hdF92ZXJzaW9ucyddKTsNCgkJfQ0KCX0NCglpZiAoISRmZWVkcyB8fCBncHMoJ3JlYWRf dmVyc2lvbnMnKSkgew0KCQkkZmVlZHMgPSBzbWRfYXRfZmVlZCgkZmVlZCk7DQoJCXNldF9w cmVmKCdzbWRfYXRfdmxhc3QnLCB0aW1lKCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVO LCAndGV4dF9pbnB1dCcpOw0KCQlzZXRfcHJlZignc21kX2F0X3ZlcnNpb25zJywgc2VyaWFs aXplKCRmZWVkcyksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcp Ow0KCX0NCg0KCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkvLyBS ZWFkIGVhY2ggbWFuaWZlc3QgYW5kIHNldCB1cCB0aGUgbGFiZWxzDQoJCSRza2luZm8gPSBz bWRfYXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCSRmZWVkX3NraW5fbmFtZSA9IHN0 cl9yZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSBmb3IgdXJs X3RpdGxlIG1hdGNoaW5nIQ0KDQoJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRz a2luZm8sIDEpOw0KCQkkdGhpc19za2luID0gKCRza2luZm8pID8gKCgkc2tpbl9uYW1lID09 ICRjdXJyX3NraW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5h bWUnXSkgOiAkc2tpbl9uYW1lOw0KCQkkdGh1bXJvdyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2F0 X2xpc3QnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiB0aXRsZT0i Jy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRoaXNfc2tpbi4oKCRza2luZm8g JiYgJHNraW5mb1snYmFzZWRfb24nXSkgPyBzbWRfYXRfZ1R4dCgnYmFzZWRfb24nLCBhcnJh eSgne3NraW59JyA9PiAkc2tpbmZvWydiYXNlZF9vbiddKSkgOiAnJykuKCgkdGh1bWJuYWls KSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7DQoJCSRhdXRo cm93ID0gKCgkc2tpbmZvICYmIHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRw Oi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSddLiciPicu JHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogKCgkc2tpbmZvKSA/ICRza2luZm9bJ2F1dGhv ciddIDogJy0nKSk7DQoJCSRhY3Ryb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9l dmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIj5bJy5n VHh0KCdlZGl0JykuJ108L2E+Jw0KCQkJLiAnICcgLigoJHNraW5mbykgPyAnPGEgaHJlZj0i P2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9uZScuYS4nc2tpbj0n LiRza2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwoXCcnLiRza2luX25h bWUuJ1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPlsnLnNtZF9hdF9nVHh0KCdjbG9uZScpLidd PC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0n LiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZXhwb3J0Jy5hLidza2luPScuJHNraW5f bmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldGNydXNoKFwnJy4kc2tpbl9uYW1lLidc Jyk7Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0JykuJ108L2E+JyA6ICcnKQ0KCQkJLiAnICcg LigoaW5fYXJyYXkoJHNraW5fbmFtZSwgJHNtZF9jb3JlX3RoZW1lcykgfHwgaW5fYXJyYXko JHNraW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0 X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0ZScuYS4nc2tpbj0nLiRza2luX25hbWUuYS4n cGFnZT0nLiRwYWdlLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnUmVhbGx5IGRlbGV0 ZSBza2luICcuJHNraW5fbmFtZS4nP1wnKTsiPlsnLmdUeHQoJ2RlbGV0ZScpLiddPC9hPicp DQoJCQkuICcgJyAuKCgkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9z a2luJ10pID8gJyonIDogJycpDQoJCQkuICc8ZGl2IGlkPSJwb3BfJy4kc2tpbl9uYW1lLici IGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnbmV3 X2Nsb25lc2tpbicpLic8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90ZXh0 X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9IiMiPiZuYnNwO1snLnN0cm9uZyhzbWRfYXRf Z1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4nDQoJCQkuICc8ZGl2IGlkPSJjcnVzaF8n LiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNt ZF9hdF9nVHh0KCdjcnVzaF9mb3JtYXQnKS4nPC9zcGFuPicucmFkaW9TZXQoJGNydXNoZXJz LCAkc2tpbl9uYW1lLidfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVzaCddKS4nPGEg aHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25maXJtJykpLiddPC9h PjwvZGl2Pic7DQoJCSR2ZXJvdyA9ICgkc2tpbmZvKSA/ICgoaXNzZXQoJGZlZWRzWyRmZWVk X3NraW5fbmFtZV0pICYmIGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1tYXJ5 J10pICYmIHZlcnNpb25fY29tcGFyZSgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFy eSddLCRza2luZm9bJ3ZlcnNpb24nXSk9PT0xKSA/ICc8YSBocmVmPSInLiRmZWVkc1skZmVl ZF9za2luX25hbWVdWydsaW5rJ10uJyIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6 Izk5MDAwMDsiPicuc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10u JzwvYT4nIDogc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10pIDog Jyc7DQoNCgkJaWYgKCRsYXlvdXQ9PTApIHsNCgkJCWVjaG8gdHIoDQoJCQkJdGQoJHRodW1y b3cpDQoJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJLnRkKCR2ZXJvdykNCgkJCQkudGQo KCgkc2tpbmZvKT8gJHNraW5mb1snZGVzY3JpcHRpb24nXSA6ICctJykuKCgkc2tpbmZvICYm ICRza2luZm9bJ2hlbHAnXSkgPyAnICcuaHJlZignWycuZ1R4dCgnaGVscCcpLiddJywgJHNr aW5mb1snaGVscCddKSA6ICcnKSwgMjUwKQ0KCQkJCS50ZCgkYWN0cm93LDI2MCkNCgkJCSwg KCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThl OGU4OyInIDogJycpDQoJCQkpOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAnPGRpdiBjbGFzcz0i c21kX2NlbGwiJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNr Z3JvdW5kOiNlOGU4ZTg7IicgOiAnJykuJz4nOw0KCQkJZWNobyAnPGRpdj4nLiR0aHVtcm93 Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicuJHZlcm93LnNt ZF9hdF9nVHh0KCdieScpLiRhdXRocm93Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBjbGFz cz0ic21kX2FjdGlvbnMiPicuJGFjdHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzwvZGl2Pic7 DQoJCX0NCgl9DQoNCi8vCWVjaG8gdGRhKHNlbGVjdF9idXR0b25zKCkgLiBldmVudF9tdWx0 aWVkaXRfZm9ybSgkc21kX2F0X2V2ZW50LCBOVUxMLCAkcGFnZSwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCksICcgY29sc3Bhbj0iNSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyBib3Jk ZXI6IG5vbmU7IicpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyAnPC90ZD48L3Ry Pic7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVj aG8gbi5uYXZfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZSwgJG51bVBhZ2VzLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsNCgllY2hvIG4ucGFnZWJ5X2Zvcm0oJHNtZF9hdF9ldmVudCwg JHBhZ2VieSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkKCRmZWVkKSB7DQoJZ2xvYmFs ICRmZWVkczsNCg0KCSRmZWVkPWVyZWdpX3JlcGxhY2UoIj4iLiJbWzpzcGFjZTpdXSsiLiI8 IiwiPjwiLCRmZWVkKTsgLy8gS2lsbCB3aGl0ZXNwYWNlIGluIGZlZWQNCgkkeG1scGFyc2Vy ID0geG1sX3BhcnNlcl9jcmVhdGUoKTsNCgl4bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1s cGFyc2VyLCAic21kX2F0X2ZlZWRfc3RhcnRfdGFnIiwgInNtZF9hdF9mZWVkX2VuZF90YWci KTsNCgl4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9h dF9mZWVkX3RhZ19jb250ZW50cyIpOw0KCXhtbF9wYXJzZSgkeG1scGFyc2VyLCAkZmVlZCk7 DQoJeG1sX3BhcnNlcl9mcmVlKCR4bWxwYXJzZXIpOw0KDQoJcmV0dXJuICRmZWVkczsNCn0N Cg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfc3RhcnRfdGFnKCRwYXJzZXIsICRuYW1lLCAkYXR0 cmlicykgew0KCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnOw0KCWlm ICgkbmFtZSA9PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gdHJ1ZTsNCgl9DQoJ aWYgKCRzbWRfYXRfZmVlZGluKSB7DQoJCSRzbWRfYXRfZmVlZHRhZyA9ICRuYW1lOw0KCX0N Cn0NCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX2VuZF90YWcoJHBhcnNlciwgJG5hbWUpIHsNCgln bG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFt ZTsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9IGZhbHNl Ow0KCQkkc21kX2F0X2ZlZWRuYW1lID0gJyc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBzbWRfYXRf ZmVlZF90YWdfY29udGVudHMoJHBhcnNlciwgJGRhdGEpIHsNCglnbG9iYWwgJHNtZF9hdF9m ZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZSwgJGZlZWRzOw0KCWlm ICgkc21kX2F0X2ZlZWRpbikgew0KCQlpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJOQU1FIikg ew0KCQkJJGZlZWRzWyRkYXRhXSA9ICcnOw0KCQkJJHNtZF9hdF9mZWVkbmFtZSA9ICRkYXRh Ow0KCQl9DQoJCWlmIChpc3NldCgkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV0pKSB7DQoJCQlp ZiAoJHNtZF9hdF9mZWVkdGFnID09ICJUSVRMRSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJT VU1NQVJZIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlVQREFURUQiIHx8ICRzbWRfYXRfZmVl ZHRhZyA9PSAiSUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiTElOSyIpIHsNCgkJCQkkZmVl ZHNbJHNtZF9hdF9mZWVkbmFtZV1bc3RydG9sb3dlcigkc21kX2F0X2ZlZWR0YWcpXSA9ICRk YXRhOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIFJlbW92ZSBoYXJkIHNwYWNlcyBpbiB0aGUgdXBsb2FkX2Zvcm0gc28gT3BlcmEgYW5k IElFIHdyYXAgdGhlIGJ1dHRvbnMNCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfZm9ybSgkZXZl bnQsICRzdGVwLCAkZGF0YSwgJGFyZ3MpIHsNCglyZXR1cm4gc3RyX3JlcGxhY2UoJyYjMTYw OycsICcgJywgJGRhdGEpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9lZGl0KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZl bnQ7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbics ICdmaWxlJykpKSk7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJJGxh eW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZz WydzbWRfYXRfbGF5b3V0J10gOiAxOw0KDQoJJGVkaXRhYmxlID0gYXJyYXkoImNzcyIsICJq cyIsICJwaHAiKTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwg InBuZyIpOw0KCSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5m byA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19z a2luKSkgPyAkZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihU SEVNRS4kc2tpbik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50 byBpdHMgZGlyZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFj aCAoJGZpbGVzIGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1 cnJmaWxlKTsNCgkJJGZpbGVfdHlwZSA9IChpc3NldCgkZmlsZV9pbmZvWydleHRlbnNpb24n XSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInOw0KCQkkYWxsZmlsZXNb JGZpbGVfdHlwZV1bXSA9ICRjdXJyZmlsZTsNCgl9DQoNCglpZiAoZ3BzKCdzbWRfYXRfZWRp dHMnKSkgew0KCQkkY29udGVudHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQon LGdwcygnc21kX2F0X2VkaXRzJykpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoJfSBlbHNl IHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAmJiBmaWxlX2V4aXN0cyhUSEVN RS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9IGZpbGUoVEhFTUUuJHNraW4u RFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwgJGNvbnRlbnRzKTsNCgkJfQ0K CX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0KCXBhZ2V0b3Aoc21kX2F0X2dU eHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyA8PDxFT1MNCjxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+DQojc21kX2F0X2ltYWdlcyB7DQoJbWFyZ2luOjBweCA2cHggLTRweCAw Ow0KfQ0KLnNtZF9za2luX2ZpbGV0eXBlcyB7DQoJbWFyZ2luOjEycHggMDsNCn0NCjwvc3R5 bGU+DQpFT1M7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCS8v 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 LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4cG9ydF9vcHRpb25zKCkgew0KCSRzbWRf Y3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4dCgnY190YXInKSk7DQoJaWYg KGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7DQoJCSRzbWRfY3J1c2hlcnNbJ2d6 aXAnXSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsNCgkJJHNtZF9jcnVzaGVyc1snemlwJ10g PSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgl9DQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpj b21wcmVzcycpKSB7DQoJCSRzbWRfY3J1c2hlcnNbJ2J6aXAyJ10gPSBzbWRfYXRfZ1R4dCgn Y19iemlwMicpOw0KCX0NCglyZXR1cm4gJHNtZF9jcnVzaGVyczsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhwb3J0KCkgew0KCWdsb2Jh bCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnc2tpbicsJ2NydXNoJykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoJY2hkaXIoVEhFTUUpOw0K CSRvdXQgPSAkc2tpbjsNCg0KCS8vIENoZWNrIHRoZSBwYXNzZWQgY29tcHJlc3Npb24gZm9y bWF0IGlzIHZhbGlkOyB1c2UgZGVmYXVsdCBpZiBub3QNCgkkY3J1c2hlcnMgPSBzbWRfYXRf ZXhwb3J0X29wdGlvbnMoKTsNCglpZiAoJGNydXNoPT0nJyB8fCAkY3J1c2g9PSd1bmRlZmlu ZWQnIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRjcnVzaCwgJGNydXNoZXJzKSkgew0KCQkkY3J1 c2ggPSBnZXRfcHJlZignc21kX2F0X2NydXNoJywgJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0 X2NydXNoJ10pOw0KCX0NCg0KCXN3aXRjaCgkY3J1c2gpIHsNCgkJY2FzZSAnemlwJzoNCgkJ CSR6aXAgPSBuZXcgc21kX2F0X3ppcF9maWxlKCRvdXQuJy56aXAnKTsNCgkJCWJyZWFrOw0K CQljYXNlICdiemlwMic6DQoJCQkkemlwID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoJG91dC4n LnRiejInKTsNCgkJCWJyZWFrOw0KCQljYXNlICd0YXInOg0KCQkJJHppcCA9IG5ldyBzbWRf YXRfdGFyX2ZpbGUoJG91dC4nLnRhcicpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2d6aXAnOg0K CQlkZWZhdWx0Og0KCQkJJHppcCA9IG5ldyBzbWRfYXRfZ3ppcF9maWxlKCRvdXQuJy50Z3on KTsNCiAJCQlicmVhazsNCgl9DQoNCgkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRp cicgPT4gdHhwYXRoLkRTLlRIRU1FLCAnb3ZlcndyaXRlJyA9PiAxLCAnaW5tZW1vcnknID0+ IDEpKTsNCgkkemlwLT5hZGRfZmlsZXMoJHNraW4uRFMuJyouKicpOw0KCSR6aXAtPmNyZWF0 ZV9hcmNoaXZlKCk7DQoJJHppcCAtPmRvd25sb2FkX2ZpbGUoKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfaW1wb3J0KCkgew0KCWdsb2Jh bCAkcHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddOw0KCSRm aWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSdd LCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFt ZSddKSk7DQoJJGJhc2VkaXIgPSB0eHBhdGguRFMuVEhFTUU7DQoJJG1lc3NhZ2U9Jyc7DQoJ JGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOw0KCSRleHQgPSAkaW5mb1sxXTsNCg0KCWlm ICgkbmFtZSAmJiAkZmlsZSkgew0KCQlpZiAoJGV4dCA9PSAiemlwIiAmJiBmdW5jdGlvbl9l eGlzdHMoJ3ppcF9vcGVuJykpIHsNCgkJCSR6aXAgPSB6aXBfb3BlbigkZmlsZSk7DQoJCQlp ZiAoJHppcCkgew0KCQkJCSRmaWxlY3RyID0gMDsNCgkJCQl3aGlsZSAoJHppcF9lbnRyeSA9 IHppcF9yZWFkKCR6aXApKSB7DQoJCQkJCSRmbiA9IHppcF9lbnRyeV9uYW1lKCR6aXBfZW50 cnkpOw0KCQkJCQkkZmlsZXBhdGggPSAkYmFzZWRpci4kZm47DQoJCQkJCWlmIChzdHJwb3Mo JGZpbGVwYXRoLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJCSRwYXRoX3BhcnRzID0gcGF0 aGluZm8oJGZpbGVwYXRoKTsNCgkJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVwYXRoKSkg ew0KCQkJCQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBhdGhfcGFy dHNbJ2V4dGVuc2lvbiddKSkgPyBkaXJuYW1lKCRmaWxlcGF0aCkgOiAkZmlsZXBhdGgpKTsN CgkJCQkJCQlpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJCQkJCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnaW1wb3J0X2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSk7DQoJ CQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnaW52YWxpZF9maWxlJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZuKSk7DQoJCQkJ CX0NCg0KCQkJCQlpZiAoJG1lc3NhZ2U9PScnKSB7DQoJCQkJCQlpZiAoIWlzX2RpcigkZm4p KSB7DQoJCQkJCQkJJGZwID0gZm9wZW4oJGJhc2VkaXIuJGZuLCAid2IiKTsNCgkJCQkJCQlp ZiAoemlwX2VudHJ5X29wZW4oJHppcCwgJHppcF9lbnRyeSwgInIiKSkgew0KCQkJCQkJCQkk YnVmID0gemlwX2VudHJ5X3JlYWQoJHppcF9lbnRyeSwgemlwX2VudHJ5X2ZpbGVzaXplKCR6 aXBfZW50cnkpKTsNCgkJCQkJCQkJemlwX2VudHJ5X2Nsb3NlKCR6aXBfZW50cnkpOw0KCQkJ CQkJCX0NCgkJCQkJCQlmd3JpdGUoJGZwLCAkYnVmKTsNCgkJCQkJCQlmY2xvc2UoJGZwKTsN Ci8vCQkJCQkJCWVjaG8gIlRoZSBmaWxlICIuJGZuLiIgd2FzIGV4dHJhY3RlZCBzdWNjZXNz ZnVsbHlcbjxicj4iOw0KCQkJCQkJCSRmaWxlY3RyKys7DQoJCQkJCQl9DQoJICAgICAgICAg ICAgfQ0KCQkJCX0NCgkJCQl6aXBfY2xvc2UoJHppcCk7DQoJCQkJaWYgKCRtZXNzYWdlID09 ICcnKSB7DQoJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9zdWNjZXNzJywg YXJyYXkoJ3tudW19JyA9PiAkZmlsZWN0cikpOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlm ICgkZXh0ID09ICJ0Z3oiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9nemlwX2ZpbGUoYmFz ZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9 PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxl cygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxz ZSBpZiAoJGV4dCA9PSAidGJ6MiIpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2J6aXBfZmls ZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2Vk aXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0 X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJ fSBlbHNlIGlmICgkZXh0ID09ICJ0YXIiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF90YXJf ZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jh c2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRy YWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsN CgkJfSBlbHNlIHsNCgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dUeHQoJ3Vuc3VwcG9y dGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkZXh0KSksIEVfV0FS TklORyk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlDQoJCXVubGlu aygkZmlsZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlf aW5mbycpOw0KCX0NCg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfdXBsb2FkX2ltYWdlKCkgew0K CWdsb2JhbCAkZmlsZV9tYXhfdXBsb2FkX3NpemU7DQoNCglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnaWQnKSkpKTsNCgkkX1BPU1RbJ3NraW4nXSA9ICRza2luID0gJGlkOw0KDQoJ JG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdldF91cGxv YWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7DQoJJG1lc3NhZ2U9 Jyc7DQoNCglpZiAoJGZpbGUgPT09IGZhbHNlKSB7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmls ZV91cGxvYWRfZmFpbGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coJF9G SUxFU1sndGhlZmlsZSddWydlcnJvciddKTsNCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0K CX0NCg0KCSRzaXplID0gZmlsZXNpemUoJGZpbGUpOw0KCWlmICgkZmlsZV9tYXhfdXBsb2Fk X3NpemUgPCAkc2l6ZSkgew0KCQl1bmxpbmsoJGZpbGUpOw0KCQkkbWVzc2FnZSA9IGdUeHQo J2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRuYW1lIC0gIi51cGxvYWRfZ2V0X2Vycm9ybXNn KFVQTE9BRF9FUlJfRk9STV9TSVpFKTsNCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCX0N Cg0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCSRuZXdfc2tpbiA9 ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3cGF0aCA9ICRza2luZm9bJ3BhdGgnXTsNCg0KCWlm ICgkbmV3X3NraW4gJiYgJGZpbGUpIHsNCgkJaWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmls ZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxv YWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ugew0KCQkJdW5saW5rKCRmaWxlKTsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9mYWlsZWQnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFnZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1l czsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJykpKSk7DQoJJGZpbGVf bGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycpOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKGVt cHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2lu Zm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVt ZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBh cnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQl9IGVsc2Ugew0KCQkJZm9yZWFjaCAoJGZp bGVfbGlzdCBhcyAkaW1hZ2UpIHsNCgkJCQkkcGF0aCA9IHR4cGF0aC5EUy4kaW1hZ2U7DQoJ CQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNz YWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzLCAkdGhlbWUsICRzbWRf YXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnc2tpbicsICdmaWxlJykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUpIHsN CgkJLy8gRWRpdGluZyBhIHNraW4sIHRodXMgZGVsZXRpbmcgYSBzaW5nbGUgZmlsZQ0KCQlp ZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9 IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tp bikpOw0KCQkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJJGRlbCA9 IHVubGluayhUSEVNRS4kc2tpbi5EUy4kZmlsZSk7DQoJCQlpZiAoJGRlbCkgew0KCQkJCSRt ZXNzYWdlID0gZ1R4dCgnZmlsZV9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZpbGUp KTsNCgkJCQkkX1BPU1RbJ2ZpbGUnXSA9ICcnOyAvLyBDbGVhciB0aGUgdmFyaWFibGUgc28g dGhlIGZpbGVuYW1lIGRvZXNuJ3QgYXBwZWFyIG9uIHRoZSBlZGl0IHBhZ2UNCgkJCX0gZWxz ZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZmlsZV9ub3RfZGVsZXRlZCcsIGFy cmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQl9DQoJCX0NCgkJc21kX2F0X2VkaXQoJG1l c3NhZ2UpOw0KCX0gZWxzZSB7DQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3Ro ZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWUnLCBhcnJh eSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2xpc3QoJG1lc3NhZ2UpOw0KCQl9 IGVsc2Ugew0KCQkJLy8gVmlld2luZyB0aGUgc2tpbiBsaXN0LCB0aHVzIGRlbGV0aW5nIHRo ZSB3aG9sZSBza2luDQoJCQkkc2tpbmRpciA9IFRIRU1FLiRza2luOw0KCQkJaWYgKCFzbWRf cm1kaXJfcmVjdXJzaXZlKCRza2luZGlyKSkgew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dU eHQoJ2RlbGV0ZV9mYWlsZWQnKTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnc2tpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNraW4pKTsNCgkJ CX0NCg0KCQkJLy8gSGFuZGxlIHNpdHVhdGlvbnMgaWYgY3VycmVudCBza2luIGhhcyBiZWVu IGRlbGV0ZWQNCgkJCWlmICghZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkg ew0KCQkJCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCg0KCQkJCS8vIFJlc2V0 IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNlIGl0J3MgYmVlbiBkZWxldGVkDQoJCQkJJGdibF9z a2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pKSA/ICRhdF9w cmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkJCQkkZ2JsX3NraW4gPSAoJGdi bF9za2luICE9ICcnICYmIGZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kZ2JsX3NraW4p KSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsNCgkJCQlzZXRfcHJlZignc21kX2F0X2dsb2Jh bF9za2luJywgJGdibF9za2luLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnKTsNCgkJCQlzZXRfcHJlZigndGhlbWVfbmFtZScsICRnYmxfc2tpbik7DQoNCgkJ CQkkc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicpOw0KCQkJCWlmICghZmlsZV9leGlzdHMo dHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0KCQkJCQkkc2tpbiA9ICRnYmxfc2tpbjsNCgkJ CQl9DQoJCQkJc2V0X3ByZWYoJ3NtZF9za2luJywgJHNraW4sICdzbWRfYXQnLCBQUkVGX0hJ RERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkJfQ0KCQkJJF9HRVRb J3NraW4nXSA9ICRza2luOw0KCQkJJF9HRVRbJ25leHRzdGVwJ10gPSAnc21kX2F0X2xpc3Qn Ow0KCQkJc21kX2F0X3N3aXRjaCgkbWVzc2FnZSk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3NhdmUoKSB7DQoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCduZXdfc2tpbicsJ2ZpbGUnLCdzbWRfYXRf ZWRpdHMnKSkpKTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJjc3MiLCAianMiLCAicGhwIik7 DQoJJG1lc3NhZ2UgPSAkZXh0cmFNc2cgPSAnJzsNCgkkZmlsZSA9IHRyaW0oJGZpbGUpOw0K CSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2luKTsNCgkkbXNnbGV2ID0gMDsNCg0KCS8vIE5l dyBmaWxlDQoJaWYgKCEkZmlsZSAmJiAkbmV3X3NraW4pIHsNCgkJJGZpbGUgPSAkbmV3X3Nr aW47DQoJCSRleHQgPSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlKSk7DQoJCWlmIChz dHJ0b2xvd2VyKCRmaWxlKSAhPSAncmVhZG1lJyAmJiAoJGV4dCA9PSAnJyB8fCAhaW5fYXJy YXkoJGV4dCwgJGVkaXRhYmxlKSkpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3Vu c3VwcG9ydGVkX2ZpbGV0eXBlJykuc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyk7 DQoJCQkkbXNnbGV2ID0gRV9XQVJOSU5HOw0KCQkJJF9QT1NUWydmaWxlJ10gPSAkZmlsZTsN CgkJfQ0KCX0NCg0KCWlmICgkbWVzc2FnZT09JycpIHsNCgkJJHNraW5kaXIgPSBUSEVNRS4k c2tpbi5EUzsNCg0KCQkkZm5hbWUgPSBzYW5pdGl6ZUZvckZpbGUoJGZpbGUpOw0KCQkkbmV3 X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsNCgkJJF9QT1NUWyduZXdfc2tpbidd ID0gJG5ld19za2luOw0KDQoJCSRzbWRfYXRfZWRpdHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNl KCdcclxuJywnDQonLCRzbWRfYXRfZWRpdHMpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoN CgkJaWYgKCRmbmFtZSkgew0KCQkJJGZpbGVwYXRoID0gJHNraW5kaXIuRFM7DQoJCQlpZiAo IWZpbGVfZXhpc3RzKCRmaWxlcGF0aC4kZm5hbWUpKSB7DQoJCQkJJHJldCA9IHRvdWNoKCRm aWxlcGF0aC4kZm5hbWUpOw0KCQkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCQkkbWVz c2FnZSA9IHNtZF9hdF9nVHh0KCdta2Rpcl9mYWlsZWQnLCBhcnJheSgne25hbWV9JyA9PiAk Zm5hbWUpKTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIEFzc3VtaW5nIG5vIGVycm9ycyBzbyBm YXIuLi4NCgkJCWlmICgkbWVzc2FnZSA9PSAnJykgew0KCQkJCSRmaCA9IGZvcGVuKCRmaWxl cGF0aC4kZm5hbWUsICd3YicpOw0KCQkJCWZ3cml0ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0K CQkJCWZjbG9zZSgkZmgpOw0KDQoJCQkJaWYgKCRmbmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJ CQkJJHJlcyA9IHJlbmFtZSgkZmlsZXBhdGguJGZuYW1lLCAkZmlsZXBhdGguJG5ld19za2lu KTsNCgkJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gc21kX2F0X2dUeHQoJ3JlbmFtZWQnLCBh cnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKSA6IHNtZF9hdF9nVHh0KCdyZW5hbWVfZmFp bGVkJyk7DQoJCQkJfQ0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfc2F2ZWQn LCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUpKS5ici4kZXh0cmFNc2c7DQoJCQl9DQoJCX0N Cgl9DQoJc21kX2F0X2VkaXQoYXJyYXkoJG1lc3NhZ2UsICRtc2dsZXYpKTsNCn0NCg0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBSRUZTDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9nZXRfcHJlZnMoKSB7DQoJZ2xvYmFsICRz bWRfYXRfcHJlZnM7DQoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5 X2tleXMoJHNtZF9hdF9wcmVmc1swXSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFs JywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsNCgkkYXRfcHJlZnMg PSBhcnJheSgpOw0KCWZvcmVhY2ggKCRycyBhcyAkcHJlZmFycikgew0KCQkkYXRfcHJlZnNb JHByZWZhcnJbJ25hbWUnXV0gPSAkcHJlZmFyclsndmFsJ107DQoJfQ0KCXJldHVybiAkYXRf cHJlZnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X29wdGlvbnMoJGV2ZW50LCAkc3RlcCwgJG1lc3NhZ2U9JycpIHsNCglzbWRfYXRfc2V0 dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF9hdF9zZXR1cCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRf YXRfcHJlZnMsICRzbWRfYXRfZXZlbnQsICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1lczsNCg0K CSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9 IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoN CglwYWdldG9wKGdUeHQoJ3ByZWZzJyksJG1lc3NhZ2UpOw0KDQoJLy8gWXVrLCB3aHkncyB0 aGlzIG5vdCBhdmFpbGFibGUgZ2xvYmFsbHk/IQ0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkx ID0+IGdUeHQoJ3B1Ymxpc2hlcicpLA0KCQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicp LA0KCQkzID0+IGdUeHQoJ2NvcHlfZWRpdG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3Jp dGVyJyksDQoJCTUgPT4gZ1R4dCgnZnJlZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2ln bmVyJyksDQoJKTsNCgkkbnVtTGV2cyA9IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQg dGhlIHVzZXIgc2tpbiBsaXN0DQoJJHVza2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRh dF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgn LCcsICRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgl9DQoNCgkkY2xyQnRuID0g JyBbPHNwYW4gaWQ9InNtZF9jbHIiIGNsYXNzPSJzbWRfZmFrZWJ0biI+Jy5zbWRfYXRfZ1R4 dCgnY2xlYXInKS4nPC9zcGFuPl0nOw0KCSRidG5TZXQgPSBmSW5wdXQoJ3N1Ym1pdCcsICdz dWJtaXQnLCBzbWRfYXRfZ1R4dCgnc2V0JyksICdwdWJsaXNoJyk7DQoJJGJ0blNhdmUgPSBm SW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyk7DQoJ JGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRz bWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1zbWRfYXRfcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRp c3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3Rh bGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7DQoJJGJ0blJlbW92ZSA9ICc8Zm9ybSBtZXRo b2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNt ZF9hdF9wcmVmc19yZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1 Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdkZWxldGUnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7 DQoJJGJ0blN0eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFk QnRucyA9IGFycmF5KA0KCQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dU eHQoJ3Blcl9ncm91cCcpLA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJ ZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVm cykgew0KCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRf cmVhZF9za2lucygpOw0KDQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5k IHZhbHVlIHRvIGJlIHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5 KCk7DQoJCWZvcmVhY2goJHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlp ZiAoc21kX2F0X2V4aXN0cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0g JHNraW5fbGlzdFska2V5MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRh dF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2ds b2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6 ICR0aGVtZS0+bmFtZTsNCg0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3By ZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZSwgJGJ0blN0 eWxlKSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScu JHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0 PSJyZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQo J2Nhc2Vfc29ydCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcsICRhdF9w cmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2Nh c2Vfc29ydCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBlJykp LnRkYShyYWRpb1NldChzbWRfYXRfZXhwb3J0X29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVzaCcs ICRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRf Y3J1c2giJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRkYShy YWRpb1NldChhcnJheShzbWRfYXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dUeHQo J2xheW91dF9ncmlkJykpLCAnc21kX2F0X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVjaG8g dHIodGRhKHNtZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdz bWRfYXRfdHcnLCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9n VHh0KCd0aW1lcycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3Nt ZF9hdF90aCddLCcnLCcnLCcnLDQpKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRfZ1R4 dCgnZ2xvYmFsX3NraW4nKSkNCgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2JhbF9z a2luJywgJHNraW5zZWwsICRnYmxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIodGRh KHNtZF9hdF9nVHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMsICdz bWRfYXRfc3lzdGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRoPSIy NDAiIGlkPSJzbWRfYXRfcmFkaW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2X2xp c3QgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNbXSIg Y2xhc3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxlIj4n Ow0KCQlmb3JlYWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJJHBy aXZfbGlzdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4nPC9v cHRpb24+JzsNCgkJfQ0KCQkkcHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8vIE5v dGUgdGhlIGhpZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFu eSBsaXN0IGNoYW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRfYXRf Z1R4dCgnc2tpbl9ncm91cHMnKTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91cF9s aXN0JywgJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0gJzxz ZWxlY3QgaWQ9InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3Qi IHNpemU9IicuJG51bUxldnMuJyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNr aW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAn PG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJCQl9 DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAn IGNsYXNzPSJzbWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2X2xp c3QsICcgd2lkdGg9IjQwMCIgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykpOw0K DQoJCS8vIE9wdGlvbiAyDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tpbnMn KTsNCgkJJHNlbGIgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0ic21k X2F0X3VzZXJfbGlzdFtdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11bHRp cGxlIj4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNt ZF9hdF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSIn LiRhc2tpbi4nIicuKChpbl9hcnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0ZWQ9 InNlbGVjdGVkIicgOiAnJykuJz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0K CQkkc2VsYiAuPSAnPC9zZWxlY3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwg JyBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0 aD0iMjQwIiBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8gdHIo dGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNl IGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNo byB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJ CQkuc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuc21k X2F0X2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQll Y2hvIHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRi dG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdwcmVm c19ub3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRi dG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJZWNo byA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENvbmNh dGVuYXRlIGNoZWNrYm94IG9wdGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9w cmVmc3dhcChzZWxWYWx1ZSkgew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7DQoJ CWlmIChpZHg9PXNlbFZhbHVlKSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLnNo b3coKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlkZSgp Ow0KCQl9DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRbbmFt ZT0nc21kX2F0X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRfcHJl ZnN3YXAodGhpcy52YWx1ZSk7DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2so ZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0 cigic2VsZWN0ZWQiLCAiIik7DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNo YW5nZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCg0K CQkvLyBDbGVhciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlz dCBmcm9tIHRoZSBoaWRkZW4gZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlv biIpLmF0dHIoInNlbGVjdGVkIixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBzID0g Z3JwbGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZvciAo dmFyIGlkeCA9IDA7IGlkeCA8IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tpZHhd LnNwbGl0KCc6Jyk7DQoJCQlza2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNraW5p ZCA9PSBzZWxza2luKSB7DQoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJZm9y IChqZHggPSAwOyBqZHggPCBudW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIjc21k X2F0X3ByaXZzIG9wdGlvblt2YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNlbGVj dGVkIiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRf YXRfcHJpdnMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnkoIiNz bWRfYXRfZ3JwcyBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtdOw0K CQl2YXIgcHJpdnMgPSBbXTsNCgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5KCIj c21kX2F0X3ByaXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlw cml2cy5wdXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMubGVu Z3RoID09IDEpIHsNCgkJCXByaXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1c2go cHJpdnMuam9pbigiOiIpKTsNCgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5wdXRb bmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3QgPSBo aWRsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3RoOw0K DQoJCWpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJ CQljdXJyc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAhPSBz ZWxza2luKSB7DQoJCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4Kysp IHsNCgkJCQkJcHJldnByaXZzID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJCQlz a2luaWQgPSBwcmV2cHJpdnMuc2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHByaXYg bGlzdCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkgZHVw bGljYXRlIHByaXZzIHNldCBlbHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJyc2tp bikgew0KCQkJCQkJdG1wb3V0ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQpOw0K CQkJCQkJZm9yICh0aGlzcHJpdiBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1ZXJ5 LmluQXJyYXkocHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJCQl0 bXBvdXQucHVzaChwcmV2cHJpdnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJ CQkJCQlpZiAodG1wb3V0Lmxlbmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBvdXQu am9pbigiOiIpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJCWpR dWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0KCX0p Ow0KDQoJLy8gRGlzcGxheSBhIHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFzc2ln bmVkIHNraW4gd2hlbiBob3ZlcmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1ZXJ5 KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3ZpdGVt ID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIp Ow0KCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJCXNr aW56ID0gaXRlbXNbaWR4XS5zcGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHggPCBz a2luei5sZW5ndGg7IGpkeCsrKSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkg ew0KCQkJCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJCWJy ZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0 aGlzKS5hdHRyKCJ0aXRsZSIsICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1ZXJ5 KCJpbnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglqUXVl cnkoIiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPg0KLnNtZF9mYWtlYnRuIHsNCgljb2xvcjojNTU1Ow0KCWN1cnNv cjpwb2ludGVyOw0KfQ0KI3NtZF9hdF9yYWRpbyBpbnB1dCB7DQoJZmxvYXQ6bGVmdDsNCglj bGVhcjpib3RoOw0KfQ0KI3NtZF9hdF9yYWRpbyBsYWJlbCB7DQoJZmxvYXQ6bGVmdDsNCn0N Ci5zbWRfaGlkZGVuIHsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNoYXIg cHJlZmVyZW5jZSB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8gTm90 ZTogdmFsdWUgaXMgcGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBw cmVmcyBhcnJheSBpbiB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rpb24g c21kX2F0X3ByZWZfZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVzKGFy cmF5KHNtZF9hdF9nVHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyksc21kX2F0 X2dUeHQoJ2NfemlwJykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxpdCgn Ly8nLCAkdmFsLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJheSgp Ow0KCWZvcmVhY2goJG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFsoc3Ry aW5nKSR2YWx1ZTFdID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0n MScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVh Y2ggKCRzbWRfYXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRj aCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9p bnNlcnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2go JHByZWYpKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJzbWRf YWRza2luIicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBz bWRfYXRfZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2Fn ZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfcmVtb3Zl KCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9 ICcnOw0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNtZF9hdF9w cmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhw X3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3By ZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAo JHNob3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2RlbGV0ZWQn KTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1Z2luX3By ZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2UgPSAnJzsN CgkkcG9zdCA9IGFycmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddID0gZ3Bz KCdzbWRfYXRfZ2xvYmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSddID0gZ3Bz KCdzbWRfYXRfc3lzdGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdwcygnc21k X2F0X2xheW91dCcpOw0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMoJ3NtZF9h dF9jYXNlX3NvcnQnKTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9hdF90dycp Ow0KCSRwb3N0WydzbWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJaWYgKGdwcygn c21kX2F0X3VzZXJfbGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSBq b2luKCcsJywgZ3BzKCdzbWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRwb3N0 WydzbWRfYXRfdXNlcl9saXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dyb3Vw X2xpc3QnKSkgew0KCQkkcG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21kX2F0 X2dyb3VwX2xpc3QnKTsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJJHBv c3RbJ3NtZF9hdF9jcnVzaCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkvLyBT ZXQgdGhlIHN5c3RlbS13aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAoJHBv c3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1lJywg JHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21kX2F0 X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJl Zl0pKSB7DQoJCQlzZXRfcHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2ZW50 LCAyKTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7 DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBVVElMSVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFsICR0 eHBfdXNlcjsNCgkkdXNlciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkkcHJp dnMgPSBzYWZlX2ZpZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNo KCR1c2VyKS4iJyIpOw0KCXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0YW5j ZSA9IHRoZW1lOjpmYWN0b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0KDQov LyBJZiBwZXItdXNlciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4gd2lu cy4NCi8vIE9uZSBleGNlcHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxvdyB0 aGUgY3VycmVudCBza2luIHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5zIHdp dGggaW1wdW5pdHkNCi8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVuY3Rp b24gc21kX2F0X3BlcigpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAkdGhl bWUsICR0eHBfdXNlcjsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkk c2tpblN5cyA9IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9wcmVm c1snc21kX2F0X3N5c3RlbSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7 DQoJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10p ICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZz WydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRfZXhp c3RzKCRnYmxfc2tpbikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNoICgk c2tpblN5cykgew0KCQljYXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2Vw dCBhZG1pbnMpDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRf YXRfcHJpdnMpKSkgew0KCQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0KCQkJ CS8vIEFkbWlucw0KCQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdi bF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21k X2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0N CgkJCWJyZWFrOw0KCQljYXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tpbnMN CgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykp KSB7DQoJCQkJJGZvcmNlU2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBf bGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tp bikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhlIGdy b3VwIHNraW4gbGlzdA0KCQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9IGV4 cGxvZGUoJywnLCAkZm9yY2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRncnBk ZWYpIHsNCgkJCQkJaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJpdmdy cCA9IGV4cGxvZGUoIjoiLCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3NoaWZ0 KCRwcml2Z3JwKTsNCgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7DQoJ CQkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdjbGFz c2ljJzs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdibF9z a2luIDogJHRoZW1lLT5uYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkk YWRtX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3Nr aW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9z a2luKSkgPyAkYWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2Fz ZSAyOg0KCQkJLy8gUGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNr IHRoZSBza2luIGlzIGluIHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXkoJHBy aXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tpbnMg PSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVmc1sn c21kX2F0X3VzZXJfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1l LT5uYW1lKTsNCgkJCQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0KCQkJ CSR0aGVfc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxf c2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9za2lu LCAkdmFsaWRTa2lucykgJiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tp biA6ICcnOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBn ZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUt Pm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRt X3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVzdCwg aWYgaXQgZXhpc3RzIGFuZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFycmF5 IGZvciBsYXRlcg0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJZ2xv YmFsICRzbWRfY29yZV90aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0b3J5 KCRza2luKTsNCgkkc2tpbmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsNCgkJ JHNraW5mbyA9ICR0aGlzX3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFtZSdd ID0gZW1wdHkoJHNraW5mb1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1l KSA6ICRza2luZm9bJ3RpdGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3RoZW1l LT5uYW1lOw0KCQkkc2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkkc2tp bmZvWydwaHBmaWxlJ10gPSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2luZm9b J2Jhc2VkX29uJ10gPSAnJzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJHNr aW5mb1sncGhwZmlsZSddKTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywgJ3Ro ZW1lOjpiYXNlZF9vbicpKSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3MoJGNv bnRlbnRzLCAiJyIsICRwb3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywg IiciLCAkYmVncG9zKTsNCgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3Bvcywg JGVuZHBvcy0kYmVncG9zKTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJyYXko JGJhc2UsICRzbWRfY29yZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5zZXQo JHRoaXNfdGhlbWUpOw0KCX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYgaXQg ZXhpc3RzLCBvcHRpb25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5jdGlv biBzbWRfYXRfZ2V0X3RodW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9hdF9w cmVmczsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAk c21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF90aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZz WzBdWydzbWRfYXRfdGgnXTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9PSAw KSA/IGZhbHNlIDogdHJ1ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBo YXMgYWxyZWFkeSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVu Y3Rpb24NCglpZiAoIWlzX2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9yZWFk X3NraW5mbygkc2tpbik7DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRza2lu WydwYXRoJ107DQoJCSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90Lion KTsNCgkJcmV0dXJuICgkaW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBmaWxl X2V4aXN0cygkdGh1bWJuYW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVswXS4n IiBhbHQ9IicuKChpc3NldCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDogJycp LicgdGh1bWJuYWlsIiBzdHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6MnB4 OyIgd2lkdGg9IicuJHR3LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBlbHNl IHsNCgkJcmV0dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhlbWU6 Om5hbWVzKCk7DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0KCXJl dHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAnY2xh c3NpYycgYXQgdGhlIHRvcA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgew0K CWdsb2JhbCAkcHJlZnM7DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRf Y2FzZV9zb3J0J10pID8gJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJaWYo JGNhc2VTZW5zZSkgew0KCQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJCW5h dGNhc2Vzb3J0KCRza2luX2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0KCWZv cmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJaWYg KCRza2luX25hbWUgPT0gImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRza2lu X2lkeF0pOw0KCQkJJGRmbHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJ aWYgKCRkZmx0X2ZvdW5kKSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xhc3Np YyIpOw0KCX0NCg0KCXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4nKSB7 DQoJJGZpbGVzID0gYXJyYXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsNCgkJ JGZoID0gb3BlbmRpcigkc3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIo JGZoKSkgIT09IGZhbHNlKSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lw cGluZyAuIGFuZCAuLiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChzdHJj bXAoJGZpbGUsICcuJyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7 DQoJCQkkZmlsZXBhdGggPSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAoIGlz X2RpcigkZmlsZXBhdGgpICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywg c21kX2F0X2xpc3RkaXIoJGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5X3B1 c2goJGZpbGVzLCAkZmlsZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7DQoJ fSBlbHNlIHsNCg0KCQkvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRo IGFuIGludmFsaWQgbm9uLWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxzZTsN Cgl9DQoNCglyZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIFJlY3Vyc2l2ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFsIHVz ZXIgY29tbWVudHMNCmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoKSB7 DQoJaWYgKGlzX2RpcigkZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsNCgkJ aWYgKCRkaCA9IG9wZW5kaXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSByZWFk ZGlyKCRkaCkpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAn Li4nKSBjb250aW51ZTsNCgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRo LicvJy4kc2YpKSB7DQoJCQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJCX0N CgkJCX0NCgkJCWNsb3NlZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxlcGF0 aCk7DQoJfQ0KCXJldHVybiB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5rcyBw dXJlbWFuZ28NCmZ1bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFzc2Vz IG9wZW5fYmFzZWRpciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMNCgkk dG1wX2NtZCA9IGBscyAtZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07DQoJ aWYoJGRpcl9mbGFnIT0iZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZpcnN0 IGNoYXIgbWlnaHQgYmUgJ3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJfZmxh ZyA9ICR0bXBfY21kWzFdOw0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVjdXJz aXZlKCRwYXRoLCAkbW9kZSA9IDA3NTUpIHsNCgkkcGF0aCA9IChzdHJwb3MoJHBhdGgsICcv JykgPT09IDApID8gc3Vic3RyKCRwYXRoLCAxKSA6ICRwYXRoOw0KCSRkaXJzID0gZXhwbG9k ZShEUywgJHBhdGgpOw0KCSRjb3VudCA9IGNvdW50KCRkaXJzKTsNCgkkcGF0aCA9ICcnOw0K CWZvciAoJGlkeCA9IDA7ICRpZHggPCAkY291bnQ7ICsrJGlkeCkgew0KCQkkcGF0aCAuPSBE UyAuICRkaXJzWyRpZHhdOw0KCQlpZiAoIXNtZF9hdF9pc19kaXIoJHBhdGgpKSB7DQoJCQlp ZiAoIW1rZGlyKCRwYXRoLCAkbW9kZSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJ CX0NCgl9DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdzbWRf YXRfcGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3Nh Z2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFzaChn cHNhKGFycmF5KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9ICI/ ZXZlbnQ9Ii4kZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYmIHNt ZF9hdF9leGlzdHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAk ZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJ CSR1cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21kX2F0 X2dUeHQoJ3NraW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsNCgl9 IGVsc2Ugew0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJLy8g U2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBpbiBv cmRlciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9TDQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0i eyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVm cmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCgll eGl0Ow0KfQ0KDQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9hZG1h dCgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJy YXkoDQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2VyKCcn KTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJl ZnMsICRzbWRfYXRfYWRtX2V2ZW50LCAkdGhlbWU7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRf Z2V0X3ByZWZzKCk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlv dXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAk c21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2Fn ZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQo J3NraW5uZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0K DQoJJGFsbG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0 J10pKSB7DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9s aXN0J10pOw0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJ aWYgKCR2YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0N CgkJfQ0KCX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cg PSBoZWQoc21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9 PSIwIikgew0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cigNCgkJCXRk YSgkaGRyb3csICcgY29sc3Bhbj0iMyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNzSGVh ZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJCQkn ZGVzY3JpcHRpb24nDQoJCQkpKTsNCgl9IGVsc2Ugew0KCQllY2hvIDw8PEVPQ1NTDQo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCgltYXJn aW46MCBhdXRvOw0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6MTBw eDsNCgltYXJnaW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6eyR0 d31weDsNCgloZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFja2dy b3VuZDojZGRkOw0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRfYXV0 aCB7DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9zdHlsZT4N CkVPQ1NTOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21k X25ld3JvdyI+Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2VkIGFz ICRza2luX25hbWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9u YW1lKTsNCgkJaWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3Ro dW1iKCRza2luZm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRjdXJy X3NraW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXTsN CgkJCSR0aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50LmEu J3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2luPScu JHNraW5fbmFtZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicu JHRoaXNfc2tpbi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4n IDogJycpLic8L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3Jf dXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9y X3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9y J107DQoNCgkJCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0ZCgk dGh1bXJvdykNCgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZvWydk ZXNjcmlwdGlvbiddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4p ID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJCQkJKTsNCgkJCX0g ZWxzZSB7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2luX25hbWUg PT0gJGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAnJyku Jz4nOw0KCQkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCQllY2hvICc8 ZGl2IGNsYXNzPSJzbWRfYXV0aCI+Jy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4nPC9k aXY+JzsNCgkJCQllY2hvICc8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbGF5b3V0 PT0iMCIpIHsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQp9DQoNCi8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRBUi9HWklQ L0JaSVAyL1pJUCBBUkNISVZFIENMQVNTRVMgMi4xDQogfCBCeSBEZXZpbiBEb3VjZXR0ZQ0K IHwgQ29weXJpZ2h0IChjKSAyMDA1IERldmluIERvdWNldHRlDQogfCBFbWFpbDogZGFya3Nu b29weUBzaGF3LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogfCBFbWFpbCBidWdzL3N1Z2dlc3Rpb25zIHRvIGRhcmtzbm9vcHlA c2hhdy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KIHwgVGhpcyBzY3JpcHQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgcmVsZWFzZWQg dW5kZXINCiB8IHRoZSBHTlUgR1BMIGFuZCBpcyBmcmVlIHRvIHVzZSBhbmQgcmVkaXN0cmli dXRlDQogfCBvbmx5IGlmIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgcmVtb3Zl ZA0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovDQoNCi8vIE5PVEU6IGNsYXNzIG5hbWVzIGFsdGVyZWQgdG8gYWRkIHNtZF9hdF8gcHJl Zml4IHRvIGF2b2lkIGNsYXNoZXMgaW4gZ2xvYmFsIHNjb3BlLCBhbmQgYWRkZWQgc3ViZGly IGNyZWF0aW9uDQoNCmNsYXNzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0 X2FyY2hpdmUoJG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdi YXNlZGlyJyA9PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4g IiIsDQoJCQknaW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3Jl Y3Vyc2UnID0+IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycg PT4gMCwNCgkJCSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9 PiAiIiwNCgkJCSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkk dGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsN CgkJJHRoaXMtPnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJh eSAoKTsNCgl9DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZv cmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNb JGtleV0gPSAkdmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGly J10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2Uo IlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRp b25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0 aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVn X3JlcGxhY2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9 DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhp cy0+b3B0aW9uc1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0 aW9uc1snbmFtZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxh Y2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAo IWVtcHR5ICgkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9w dGlvbnNbJ3ByZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlv bnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19y ZXBsYWNlKCIvXihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7 DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIs ICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddKSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZl KCkNCgl7DQoJCSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNb J2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIo JHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292 ZXJ3cml0ZSddID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAu ICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sn dHlwZSddID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVy cm9yW10gPSAiRmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMu IjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYg KCR0aGlzLT5hcmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9PSAiYnppcCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsN CgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7 JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdk KTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2 ZSA9ICIiOw0KDQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQlj YXNlICJ6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0 aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1 cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMt PmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qg Y3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlz LT5jcmVhdGVfYnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5v dCBjcmVhdGUgYnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7 DQoJCWNhc2UgImd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0K CQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJ CQlyZXR1cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7 DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYg KCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0K DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xv c2UoJHRoaXMtPmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0g Imd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGlu aygkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSAuICIudG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkN Cgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRl KCR0aGlzLT5hcmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49 ICRkYXRhOw0KCX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5 ICgkdGhpcy0+ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9 PiAkdmFsdWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJ CQkJCWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5z ZXQgKCR0aGlzLT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9u bHkpKQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJ CWZvcmVhY2ggKCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFs dWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRr ZXldWydtZXRob2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0 b3Jlb25seSk7DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRl bXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRj dXJyZW50KQ0KCQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlv biBleGNsdWRlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxl cygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4 Y2x1ZGVbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0 KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2gg KCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7 DQoJfQ0KDQoJZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJy YXkgKCRsaXN0KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkg KCR0ZW1wKTsNCgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAo KTsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3Vy cmVudCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQg PSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9 IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigk Y3VycmVudCwgIioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xc XF5cJFwuXFtcXVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsN CgkJCQkkcmVnZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRp ciA9IHN0cnN0cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBv cygkY3VycmVudCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGly KCRkaXIpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHBy ZWdfbWF0Y2goIi9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkk ZmlsZXNbXSA9ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwg JGN1cnJlbnQpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7 DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNo ICgkdGVtcCBhcyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAo JHRlbXAsICRmaWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVu dCkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTIn ID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8o XC4rXC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYg c3Ryc3RyKCRjdXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBv cygkY3VycmVudCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlz X2xpbmsoJGN1cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAg PyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJy ZW50LCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGly KCRwd2QpOw0KDQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVz LCBhcnJheSAoInNtZF9hdF9hcmNoaXZlIiwgInNvcnRfZmlsZXMiKSk7DQoNCgkJcmV0dXJu ICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBwYXJzZV9kaXIoJGRpcm5hbWUpDQoJew0KCQlp ZiAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAxICYmICFwcmVnX21hdGNoKCIv XihcLitcLyopKyQvIiwgJGRpcm5hbWUpKQ0KCQkJJGZpbGVzID0gYXJyYXkgKGFycmF5ICgn bmFtZScgPT4gJGRpcm5hbWUsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQn XSAuDQoJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlv bnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZGlybmFtZSwgIi8iKSkgPw0KCQkJ CXN1YnN0cigkZGlybmFtZSwgc3RycnBvcygkZGlybmFtZSwgIi8iKSArIDEpIDogJGRpcm5h bWUpLCAndHlwZScgPT4gNSwgJ3N0YXQnID0+IHN0YXQoJGRpcm5hbWUpKSk7DQoJCWVsc2UN CgkJCSRmaWxlcyA9IGFycmF5ICgpOw0KCQkkZGlyID0gQG9wZW5kaXIoJGRpcm5hbWUpOw0K DQoJCXdoaWxlICgkZmlsZSA9IEByZWFkZGlyKCRkaXIpKQ0KCQl7DQoJCQkkZnVsbG5hbWUg PSAkZGlybmFtZSAuICIvIiAuICRmaWxlOw0KCQkJaWYgKCRmaWxlID09ICIuIiB8fCAkZmls ZSA9PSAiLi4iKQ0KCQkJCWNvbnRpbnVlOw0KCQkJZWxzZSBpZiAoQGlzX2RpcigkZnVsbG5h bWUpKQ0KCQkJew0KCQkJCWlmIChlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3JlY3Vyc2UnXSkp DQoJCQkJCWNvbnRpbnVlOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZnVsbG5h bWUpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlMikNCgkJCQkJJGZpbGVzW10gPSAk ZmlsZTI7DQoJCQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGZ1bGxuYW1lKSkNCgkJ CQkkZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGZ1bGxuYW1lLCAnbmFtZTInID0+ICR0 aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8r KSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3Ry KCRmdWxsbmFtZSwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGZ1bGxuYW1lLCBzdHJycG9zKCRm dWxsbmFtZSwgIi8iKSArIDEpIDogJGZ1bGxuYW1lKSwNCgkJCQkJJ3R5cGUnID0+IEBpc19s aW5rKCRmdWxsbmFtZSkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10gPT0gMCA/ IDIgOiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZpbGUsICIu IikpLCAnc3RhdCcgPT4gc3RhdCgkZnVsbG5hbWUpKTsNCgkJfQ0KDQoJCUBjbG9zZWRpcigk ZGlyKTsNCg0KCQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHNvcnRfZmlsZXMo JGEsICRiKQ0KCXsNCgkJaWYgKCRhWyd0eXBlJ10gIT0gJGJbJ3R5cGUnXSkNCgkJCWlmICgk YVsndHlwZSddID09IDUgfHwgJGJbJ3R5cGUnXSA9PSAyKQ0KCQkJCXJldHVybiAtMTsNCgkJ CWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gMiB8fCAkYlsndHlwZSddID09IDUpDQoJCQkJcmV0 dXJuIDE7DQoJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gNSkNCgkJCXJldHVybiBzdHJjbXAo c3RydG9sb3dlcigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7DQoJCWVs c2UgaWYgKCRhWydleHQnXSAhPSAkYlsnZXh0J10pDQoJCQlyZXR1cm4gc3RyY21wKCRhWydl eHQnXSwgJGJbJ2V4dCddKTsNCgkJZWxzZSBpZiAoJGFbJ3N0YXQnXVs3XSAhPSAkYlsnc3Rh dCddWzddKQ0KCQkJcmV0dXJuICRhWydzdGF0J11bN10gPiAkYlsnc3RhdCddWzddID8gLTEg OiAxOw0KCQllbHNlDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSks IHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglmdW5jdGlv biBkb3dubG9hZF9maWxlKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnkn XSA9PSAwKQ0KCQl7DQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDYW4gb25seSB1c2UgZG93bmxv YWRfZmlsZSgpIGlmIGFyY2hpdmUgaXMgaW4gbWVtb3J5LiBSZWRpcmVjdCB0byBmaWxlIG90 aGVyd2lzZSwgaXQgaXMgZmFzdGVyLiI7DQoJCQlyZXR1cm47DQoJCX0NCgkJc3dpdGNoICgk dGhpcy0+b3B0aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQloZWFkZXIo IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQoJCQlicmVhazsNCgkJY2FzZSAi YnppcCI6DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1iemlwMiIp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6 IGFwcGxpY2F0aW9uL3gtZ3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6DQoJCQlo ZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC10YXIiKTsNCgkJfQ0KCQkkaGVh ZGVyID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIjsN CgkJJGhlYWRlciAuPSBzdHJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8iKSA/IHN1 YnN0cigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCBzdHJycG9zKCR0aGlzLT5vcHRpb25zWydu YW1lJ10sICIvIikgKyAxKSA6ICR0aGlzLT5vcHRpb25zWyduYW1lJ107DQoJCSRoZWFkZXIg Lj0gIlwiIjsNCgkJaGVhZGVyKCRoZWFkZXIpOw0KCQloZWFkZXIoIkNvbnRlbnQtTGVuZ3Ro OiAiIC4gc3RybGVuKCR0aGlzLT5hcmNoaXZlKSk7DQoJCWhlYWRlcigiQ29udGVudC1UcmFu c2Zlci1FbmNvZGluZzogYmluYXJ5Iik7DQoJCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8t Y2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT02MCIpOw0KCQloZWFkZXIoIkV4cGly ZXM6IFNhdCwgMDEgSmFuIDIwMDAgMTI6MDA6MDAgR01UIik7DQoJCXByaW50KCR0aGlzLT5h cmNoaXZlKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF90YXJfZmlsZSBleHRlbmRzIHNtZF9h dF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3Rhcl9maWxlKCRuYW1lKQ0KCXsNCgkJ JHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9ICJ0YXIiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV90YXIoKQ0KCXsNCgkJJHB3ZCA9 IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlm b3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgkY3VycmVu dFsnbmFtZSddID09ICR0aGlzLT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGludWU7DQoJ CQlpZiAoc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJew0KCQkJCSRwYXRo ID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCAwLCBzdHJwb3MoJGN1cnJlbnRbJ25hbWUy J10sICIvIiwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSAtIDEwMCkgKyAxKTsNCgkJCQkk Y3VycmVudFsnbmFtZTInXSA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgc3RybGVuKCRw YXRoKSk7DQoJCQkJaWYgKHN0cmxlbigkcGF0aCkgPiAxNTQgfHwgc3RybGVuKCRjdXJyZW50 WyduYW1lMiddKSA+IDk5KQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQg bm90IGFkZCB7JHBhdGh9eyRjdXJyZW50WyduYW1lMiddfSB0byBhcmNoaXZlIGJlY2F1c2Ug dGhlIGZpbGVuYW1lIGlzIHRvbyBsb25nLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJ CX0NCgkJCSRibG9jayA9IHBhY2soImExMDBhOGE4YThhMTJhMTJhOGExYTEwMGE2YTJhMzJh MzJhOGE4YTE1NWExMiIsICRjdXJyZW50WyduYW1lMiddLCBzcHJpbnRmKCIlMDdvIiwNCgkJ CQkkY3VycmVudFsnc3RhdCddWzJdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50WydzdGF0 J11bNF0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs1XSksDQoJCQkJc3By aW50ZigiJTAxMW8iLCAkY3VycmVudFsndHlwZSddID09IDIgPyAwIDogJGN1cnJlbnRbJ3N0 YXQnXVs3XSksIHNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSksDQoJCQkJ IiAgICAgICAgIiwgJGN1cnJlbnRbJ3R5cGUnXSwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAyID8g QHJlYWRsaW5rKCRjdXJyZW50WyduYW1lJ10pIDogIiIsICJ1c3RhciAiLCAiICIsDQoJCQkJ IlVua25vd24iLCAiVW5rbm93biIsICIiLCAiIiwgIWVtcHR5ICgkcGF0aCkgPyAkcGF0aCA6 ICIiLCAiIik7DQoNCgkJCSRjaGVja3N1bSA9IDA7DQoJCQlmb3IgKCRpID0gMDsgJGkgPCA1 MTI7ICRpKyspDQoJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAkaSwgMSkp Ow0KCQkJJGNoZWNrc3VtID0gcGFjaygiYTgiLCBzcHJpbnRmKCIlMDdvIiwgJGNoZWNrc3Vt KSk7DQoJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICRjaGVja3N1bSwgMTQ4 LCA4KTsNCg0KCQkJaWYgKCRjdXJyZW50Wyd0eXBlJ10gPT0gMiB8fCAkY3VycmVudFsnc3Rh dCddWzddID09IDApDQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQllbHNlIGlm ICgkZnAgPSBAZm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJiIikpDQoJCQl7DQoJCQkJJHRo aXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJGZwLCAx MDQ4NTc2KSkNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQlpZiAoJGN1cnJl bnRbJ3N0YXQnXVs3XSAlIDUxMiA+IDApDQoJCQkJew0KCQkJCQkkdGVtcCA9ICIiOw0KCQkJ CQlmb3IgKCRpID0gMDsgJGkgPCA1MTIgLSAkY3VycmVudFsnc3RhdCddWzddICUgNTEyOyAk aSsrKQ0KCQkJCQkJJHRlbXAgLj0gIlwwIjsNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1w KTsNCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9y IHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0 YShwYWNrKCJhMTAyNCIsICIiKSk7DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJcmV0dXJuIDE7 DQoJfQ0KDQoJZnVuY3Rpb24gZXh0cmFjdF9maWxlcygpDQoJew0KCQkkcHdkID0gZ2V0Y3dk KCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWlmICgkZnAg PSAkdGhpcy0+b3Blbl9hcmNoaXZlKCkpDQoJCXsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1sn aW5tZW1vcnknXSA9PSAxKQ0KCQkJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0KDQoJCQl3 aGlsZSAoJGJsb2NrID0gZnJlYWQoJGZwLCA1MTIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gdW5w YWNrKCJhMTAwbmFtZS9hOG1vZGUvYTh1aWQvYThnaWQvYTEyc2l6ZS9hMTJtdGltZS9hOGNo ZWNrc3VtL2ExdHlwZS9hMTAwc3ltbGluay9hNm1hZ2ljL2EydGVtcC9hMzJ0ZW1wL2EzMnRl bXAvYTh0ZW1wL2E4dGVtcC9hMTU1cHJlZml4L2ExMnRlbXAiLCAkYmxvY2spOw0KCQkJCSRm aWxlID0gYXJyYXkgKA0KCQkJCQknbmFtZScgPT4gJHRlbXBbJ3ByZWZpeCddIC4gJHRlbXBb J25hbWUnXSwNCgkJCQkJJ3N0YXQnID0+IGFycmF5ICgNCgkJCQkJCTIgPT4gJHRlbXBbJ21v ZGUnXSwNCgkJCQkJCTQgPT4gb2N0ZGVjKCR0ZW1wWyd1aWQnXSksDQoJCQkJCQk1ID0+IG9j dGRlYygkdGVtcFsnZ2lkJ10pLA0KCQkJCQkJNyA9PiBvY3RkZWMoJHRlbXBbJ3NpemUnXSks DQoJCQkJCQk5ID0+IG9jdGRlYygkdGVtcFsnbXRpbWUnXSksDQoJCQkJCSksDQoJCQkJCSdj aGVja3N1bScgPT4gb2N0ZGVjKCR0ZW1wWydjaGVja3N1bSddKSwNCgkJCQkJJ3R5cGUnID0+ ICR0ZW1wWyd0eXBlJ10sDQoJCQkJCSdtYWdpYycgPT4gJHRlbXBbJ21hZ2ljJ10sDQoJCQkJ KTsNCg0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSA9PSAweDAwMDAwMDAwKQ0KCQkJCQli cmVhazsNCgkJCQllbHNlIGlmIChzdWJzdHIoJGZpbGVbJ21hZ2ljJ10sIDAsIDUpICE9ICJ1 c3RhciIpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJUaGlzIHNjcmlwdCBkb2Vz IG5vdCBzdXBwb3J0IGV4dHJhY3RpbmcgdGhpcyB0eXBlIG9mIHRhciBmaWxlLiI7DQoJCQkJ CWJyZWFrOw0KCQkJCX0NCgkJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICIg ICAgICAgICIsIDE0OCwgOCk7DQoJCQkJJGNoZWNrc3VtID0gMDsNCgkJCQlmb3IgKCRpID0g MDsgJGkgPCA1MTI7ICRpKyspDQoJCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3RyKCRibG9j aywgJGksIDEpKTsNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gIT0gJGNoZWNrc3VtKQ0K CQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgZXh0cmFjdCBmcm9tIHskdGhpcy0+ b3B0aW9uc1snbmFtZSddfSwgaXQgaXMgY29ycnVwdC4iOw0KDQoJCQkJLy8gQWRkZWQ6IGNy ZWF0ZSBkaXIgaWYgcmVxdWlyZWQNCgkJCQlpZiAoc3RycG9zKCRmaWxlWyduYW1lJ10sICcu LicpID09PSBmYWxzZSkgew0KCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxlWydu YW1lJ10pOw0KCQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKSB7DQoJCQkJ CQkkcmV0ID0gc21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydleHRl bnNpb24nXSkpID8gZGlybmFtZSgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxl WyduYW1lJ10pIDogJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSdd KSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5 J10gPT0gMSkNCgkJCQl7DQoJCQkJCSRmaWxlWydkYXRhJ10gPSBmcmVhZCgkZnAsICRmaWxl WydzdGF0J11bN10pOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmlsZVsnc3RhdCddWzdd ICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpKTsN CgkJCQkJdW5zZXQgKCRmaWxlWydjaGVja3N1bSddLCAkZmlsZVsnbWFnaWMnXSk7DQoJCQkJ CSR0aGlzLT5maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0 eXBlJ10gPT0gNSkNCgkJCQl7DQoJCQkJCWlmICghaXNfZGlyKCRmaWxlWyduYW1lJ10pKQ0K CQkJCQkJbWtkaXIoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJfQ0K CQkJCWVsc2UgaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVf ZXhpc3RzKCRmaWxlWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi eyRmaWxlWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJ CX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDIpDQoJCQkJew0KCQkJCQlzeW1s aW5rKCR0ZW1wWydzeW1saW5rJ10sICRmaWxlWyduYW1lJ10pOw0KCQkJCQljaG1vZCgkZmls ZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJG5l dyA9IGZvcGVuKCRmaWxlWyduYW1lJ10sICJ3YiIpKQ0KCQkJCXsNCgkJCQkJZndyaXRlKCRu ZXcsIGZyZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSkpOw0KCQkJCQlmcmVhZCgkZnAsICg1 MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxl WydzdGF0J11bN10gJSA1MTIpKTsNCgkJCQkJZmNsb3NlKCRuZXcpOw0KCQkJCQlAY2htb2Qo JGZpbGVbJ25hbWUnXSwgMDY0NCk7IC8vIEhhcmQtY29kZWQgZm9yIG5vdyBiZWNhdXNlIHRo ZSBzdHVwaWQgMDEwMDY0NCB2YWx1ZSBpbiAkZmlsZVsnc3RhdCddWzJdIGNvbmZ1c2VzIHRo ZSBPUy9QSFANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IG9wZW4geyRmaWxlWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJ CWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkvLyBSZW1vdmUgb3duZXIgYW5kIGdyb3VwIHNldHRp bmcgc2luY2UgdGhlcmUgaXMgYWxtb3N0IDAgbGlrZWxpaG9vZCB0aGUgZmlsZXMgd2lsbCBo YXZlIHRoZSBzYW1lIHVzZXIvZ3JvdXAgYWNyb3NzIHN5c3RlbXMNCgkJCQkvLyBJbiBvdGhl ciB3b3JkcywgbGVhdmUgb3duZXIvZ3JvdXAgYXQgdGhlIEFwYWNoZSBkZWZhdWx0IC0tIHdo aWNoIGlzIHdoYXQgd2Ugd2FudA0KLy8JCQkJY2hvd24oJGZpbGVbJ25hbWUnXSwgJGZpbGVb J3N0YXQnXVs0XSk7DQovLwkJCQljaGdycCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCdd WzVdKTsNCgkJCQlAdG91Y2goJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs5XSk7DQoJ CQkJdW5zZXQgKCRmaWxlKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ZXJyb3Jb XSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSI7DQoN CgkJY2hkaXIoJHB3ZCk7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJ CXJldHVybiBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0K DQpjbGFzcyBzbWRfYXRfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJ ZnVuY3Rpb24gc21kX2F0X2d6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRf dGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImd6aXAiOw0K CX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9u c1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRp cigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBnem9wZW4oJHRo aXMtPm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25zWydsZXZlbCddfSIpKQ0K CQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRlbXAg PSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWd6d3JpdGUoJGZwLCAk dGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0KCQkJ ZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhp cy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0K CQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0g Z3plbmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsNCg0K CQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0 dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpj bGFzcyBzbWRfYXRfYnppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJZnVu Y3Rpb24gc21kX2F0X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfdGFy X2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImJ6aXAiOw0KCX0N Cg0KCWZ1bmN0aW9uIGNyZWF0ZV9iemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1sn aW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBiem9wZW4oJHRoaXMt Pm9wdGlvbnNbJ25hbWUnXSwgIndiIikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMtPmFyY2hp dmUsIDApOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZlLCAxMDQ4 NTc2KSkNCgkJCQkJYnp3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQliemNsb3NlKCRmcCk7DQoJ CQkJY2hkaXIoJHB3ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3cml0 aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJ ZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSBiemNvbXByZXNzKCR0aGlzLT5hcmNoaXZlLCAk dGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVuY3Rp b24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAYnpvcGVuKCR0aGlzLT5vcHRpb25z WyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVu ZHMgc21kX2F0X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUp DQoJew0KCQkkdGhpcy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9u c1sndHlwZSddID0gInppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0K CQkkZmlsZXMgPSAwOw0KCQkkb2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlp ZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3Bl bigkdGhpcy0+b3B0aW9uc1snc2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJl YWQoJGZwLCBmaWxlc2l6ZSgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2Uo JGZwKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3Ry bGVuKCR0ZW1wKTsNCgkJCQl1bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0 aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMt Pm9wdGlvbnNbJ3NmeCddfS4iOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFz ICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0 aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2Rl KCIgIiwgZGF0ZSgiWSBuIGogRyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkk dGltZWRhdGUgPSAoJHRpbWVkYXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFd IDw8IDIxKSB8ICgkdGltZWRhdGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8 IDExKSB8ICgkdGltZWRhdGVbNF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJs b2NrID0gcGFjaygiVnZ2dlYiLCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0 KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAp ID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0 YXQnXVs3XSA9PSAwICYmICRjdXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxv Y2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAw LCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sg Lj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9j ayk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRi NTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAw eDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRo aXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRh dGUsDQoJCQkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigk Y3VycmVudFsnbmFtZTInXSkgKyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs ICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zm c2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkk ZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTIn XSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJ ew0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJ JGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxv Y2spOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0 YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDog MHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0 aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVk YXRlLA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4o JGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRj dXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0 KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsN CgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJ fQ0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0K CQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJ CQlmY2xvc2UoJGZwKTsNCgkJCQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFp c3NldCgkY3VycmVudFsnbWV0aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9 PSAxKQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0 aW9uc1snbGV2ZWwnXSk7DQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJ CSR0ZW1wID0gc3Vic3RyKCR0ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJ CQkJJHNpemUgPSBzdHJsZW4oJHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIs ICRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsn bmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0K CQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVt cCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZW VlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9k J10gPT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJl bnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAw MDAgOiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRb J3N0YXQnXVs3XSwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAu PSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgz MCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNl DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRb J25hbWUnXX0gZm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0 aGlzLT5hZGRfZGF0YSgkY2VudHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2 dnZ2VlZ2IiwgMHgwNjA1NGI1MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBz dHJsZW4oJGNlbnRyYWwpLCAkb2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1sn Y29tbWVudCddKSA/IHN0cmxlbigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAw MCkpOw0KDQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJ JHRoaXMtPmFkZF9kYXRhKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGly KCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2Fs aXNlIGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfYXRfZ1R4dCgkd2hhdCwgJGF0dHMgPSBh cnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMnID0+ICdBY3Rpb25zJywN CgkJJ2FsbG93ZWRfc2tpbnMnID0+ICdBbGxvd2VkIHRoZW1lczonLA0KCQknYXBwbHlfc2tp bicgPT4gJ0FwcGx5IHRoaXMgdGhlbWUnLA0KCQknYXZhaWxfdGl0bGUnID0+ICdBdmFpbGFi bGUgdGhlbWVzJywNCgkJJ2Jhc2VkX29uJyA9PiAnIChiYXNlZCBvbiB7c2tpbn0pJywNCgkJ J2J5JyA9PiAnIGJ5ICcsDQoJCSdjX2J6aXAyJyA9PiAnQlppcCcsDQoJCSdjX2d6aXAnID0+ ICdHWmlwJywNCgkJJ2NfdGFyJyA9PiAnVGFyJywNCgkJJ2NfemlwJyA9PiAnWmlwJywNCgkJ J2Nhc2Vfc29ydCcgPT4gJ0Nhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q6JywNCgkJJ2NsZWFy JyA9PiAnbm9uZScsDQoJCSdjbG9uZScgPT4gJ0Jhc2UnLA0KCQknY29uZmlybScgPT4gJ0dv JywNCgkJJ2NvcmVfdGhlbWUnID0+ICdDYW5ub3QgZGVsZXRlIHtza2lufTogY29yZSB0aGVt ZScsDQoJCSdjb3JlX3RoZW1lX2ZpbGUnID0+ICdDYW5ub3QgZGVsZXRlIGZpbGVzIGZyb20g e3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2NydXNoX3R5cGUnID0+ICdFeHBvcnQgY29tcHJl c3Npb24gdHlwZTonLA0KCQknY3J1c2hfZm9ybWF0JyA9PiAnRm9ybWF0OicsDQoJCSdjc3Mn ID0+ICdTdHlsZXMnLA0KCQknZGVsZXRlX2ZhaWxlZCcgPT4gJ0RlbGV0ZSBmYWlsZWQuIFRy eSByZW1vdmluZyBpdCBtYW51YWxseScsDQoJCSdlZGl0X2xibCcgPT4gJ1RoZW1lIGVkaXRv cicsDQoJCSdlbXB0eV9pbmZvJyA9PiAnWW91IHNob3VsZCBjaG9vc2UgYSBmaWxlIGZpcnN0 IDotKScsDQoJCSdleHBvcnQnID0+ICdFeHBvcnQnLA0KCQknZmlsZV9ub3RfZGVsZXRlZCcg PT4gJ0ZpbGUge25hbWV9ICcuc3Ryb25nKCJub3QiKS4nIGRlbGV0ZWQnLA0KCQknZmlsZV9z YXZlZCcgPT4gJ0ZpbGUge25hbWV9IHNhdmVkJywNCgkJJ2ZpbmRfdGhlbWUnID0+ICdCcm93 c2UgdGhlbWVzJywNCgkJJ2dsb2JhbF9za2luJyA9PiAnR2xvYmFsIHRoZW1lOicsDQoJCSdo ZWxwX2xpbmsnID0+ICcoPGEgaHJlZj0ie2xpbmt9Ij5IZWxwPC9hPiknLA0KCQknaW1nJyA9 PiAnSW1hZ2VzJywNCgkJJ2ltcG9ydF9mYWlsZWQnID0+ICdJbnN0YWxsYXRpb24gZmFpbGVk IDotKCBDaGVjayB0aGUgZmlsZSBzdHJ1Y3R1cmUnLA0KCQknaW1wb3J0X3N1Y2Nlc3MnID0+ ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4gRmlsZXMgZXh0cmFjdGVkOiB7bnVtfScsDQoJ CSdpbXBvcnRfb2snID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4nLA0KCQknaW5zdGFs bF9za2luJyA9PiAnSW5zdGFsbCB0aGVtZScsDQoJCSdpbnZhbGlkX2ZpbGUnID0+ICdSb2d1 ZSBmaWxlIGRldGVjdGVkOiB7bmFtZX0nLA0KCQknanMnID0+ICdTY3JpcHRzJywNCgkJJ2xh eW91dCcgPT4gJ0xheW91dCBtZXRob2Q6JywNCgkJJ2xheW91dF9saXN0JyA9PiAnTGlzdCcs DQoJCSdsYXlvdXRfZ3JpZCcgPT4gJ0dyaWQnLA0KCQknbGlzdF90aXRsZScgPT4gJ0luc3Rh bGxlZCB0aGVtZXMnLA0KCQknbWFuYWdlX2xibCcgPT4gJ1RoZW1lIG1hbmFnZXInLA0KCQkn bWtkaXJfZmFpbGVkJyA9PiAnQ2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIGZpbGUge25h bWV9LiBUcnkgbWFudWFsbHkgY3JlYXRpbmcgaXQuJywNCgkJJ25hbWVfZW1wdHknID0+ICdZ b3Ugc2hvdWxkIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUgOi0pJywNCgkJJ25ldycgPT4gJ0Ny ZWF0ZSBuZXcgdGhlbWUnLA0KCQknbmV3X2ZpbGUnID0+ICdOZXcgZmlsZScsDQoJCSduZXdf Y2xvbmVza2luJyA9PiAnTmFtZSBvZiBjb3B5OicsDQoJCSduZXdfc2tpbicgPT4gJ1RoZW1l IG5hbWU6JywNCgkJJ290aGVyX2ZpbGVzJyA9PiAnT3RoZXJzJywNCgkJJ3BocCcgPT4gJ0Nv ZGUnLA0KCQkncGVyX2dyb3VwJyA9PiAnT25lIHRoZW1lIHBlciBwcml2aWxlZ2UgbGV2ZWwn LA0KCQkncGVyX3NpdGUnID0+ICdPbmUgdGhlbWUgZm9yIGV2ZXJ5b25lJywNCgkJJ3Blcl91 c2VyJyA9PiAnT25lIHRoZW1lIHBlciB1c2VyJywNCgkJJ3ByZWZzX2RlbGV0ZWQnID0+ICdQ cmVmZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVu Y2VzIGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5j ZXMgbm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwgcHJlZmVy ZW5jZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBl aXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4n cGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLido YXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZzX3NvbWVfb3B0aW9ucycg PT4gJ0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxsIG9yICcu Z1R4dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVzLCBsZWF2aW5nIGFs bCBleGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3RpdGxlJyA9 PiAnQWRtaW4gdGhlbWUgcHJlZmVyZW5jZXMnLA0KCQkncmVuYW1lX2ZhaWxlZCcgPT4gJ1Jl bmFtZSBmYWlsZWQnLA0KCQkncmVuYW1lZCcgPT4gJ1JlbmFtZWQgdG8ge25hbWV9JywNCgkJ J3NldCcgPT4gJ1NldCcsDQoJCSdzZXR1cCcgPT4gJ1NldHVwJywNCgkJJ3NraW5fZ2JsJyA9 PiAnVGhlbWUnLA0KCQknc2tpbl9jbG9uZWQnID0+ICdUaGVtZSBleHRlbmRlZCBhcyB7bmFt ZX0nLA0KCQknc2tpbl9jcmVhdGVkJyA9PiAnVGhlbWUge25hbWV9IGNyZWF0ZWQnLA0KCQkn c2tpbl9kZWxldGVkJyA9PiAnVGhlbWUge25hbWV9IGRlbGV0ZWQnLA0KCQknc2tpbl9leGlz dHMnID0+ICdUaGVtZSB7bmFtZX0gYWxyZWFkeSBleGlzdHMnLA0KCQknc2tpbl9maWxlcycg PT4gJ1RoZW1lIGZpbGVzJywNCgkJJ3NraW5fZ3JvdXBzJyA9PiAnR3JvdXAgdGhlbWVzOics DQoJCSdza2luX2ltYWdlcycgPT4gJ1RoZW1lIGltYWdlcycsDQoJCSdza2luX2xpc3QnID0+ ICdUaGVtZSBsaXN0JywNCgkJJ3NraW5fZ3JpZCcgPT4gJ1RoZW1lIGdyaWQnLA0KCQknc2tp bl9ub3RfY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjb3VsZCBub3QgYmUgY3JlYXRlZC4g VHJ5IG1hbnVhbGx5IG1ha2luZyB0aGUgZGlyZWN0b3J5JywNCgkJJ3NraW5fbm90X2ZvdW5k JyA9PiAnVGhlIHRoZW1lIHtuYW1lfSBjb3VsZCBub3QgYmUgZm91bmQnLA0KCQknc2tpbl9z d2l0Y2hlZCcgPT4gJ1RoZW1lIHN3aXRjaGVkIHRvIHtza2lufScsDQoJCSdza2luX3N5c3Rl bScgPT4gJ1RoZW1lIHN5c3RlbTonLA0KCQknc2tpbm5lcicgPT4gJ1RoZW1lJywNCgkJJ3Rh Yl9uYW1lJyA9PiAnQWRtaW4gdGhlbWVzJywNCgkJJ3RodW1ic2l6ZScgPT4gJ1RodW1iIGRp bWVuc2lvbnM6JywNCgkJJ3RpbWVzJyA9PiAnIHggJywNCgkJJ3Vuc3VwcG9ydGVkX2NvbXBy ZXNzaW9udHlwZScgPT4gJ3tjcnVzaH0gaXMgbm90IGEgc3VwcG9ydGVkIGNvbXByZXNzaW9u IGZvcm1hdCBvbiB0aGlzIGluc3RhbGxhdGlvbicsDQoJCSd1bnN1cHBvcnRlZF9maWxldHlw ZScgPT4gJ0ZpbGUgaXMgbm90IG9mIGEgc3VwcG9ydGVkIHR5cGUnLA0KCQkndW5zdXBwb3J0 ZWRfZnVkZ2UnID0+ICc6IGhpdCBTYXZlIGFnYWluIHRvIHN0b3JlIGFueXdheScsDQoJCSd1 cGRhdGUnID0+ICdVcGRhdGUnLA0KCQkndXBsb2FkX2ZhaWxlZCcgPT4gJ0ltYWdlIGNvdWxk IG5vdCBiZSB1cGxvYWRlZCcsDQoJCSd1cGxvYWRfaW1hZ2UnID0+ICdVcGxvYWQgaW1hZ2Un LA0KCQkndXBsb2FkX3N1Y2Nlc3MnID0+ICdJbWFnZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkn LA0KCQkndmVyc2lvbicgPT4gJ3YnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0 XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToib3JkZXIiO3M6MToiNSI7 czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MjA1NzI6IjxkaXYgaWQ9InNtZF9o ZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2FkbWluX3RoZW1lczwvaDE+CgoJPHA+SW5zdGFs bCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRtaW4tc2lkZSB0aGVtZXMgdGhlbiBzaGFy ZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVh dHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGFuZCBFZGl0IGFkbWluLXNpZGUgdGhl bWVzPC9saT4KCQk8bGk+RW1wbG95IGltYWdlcywgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4sIEpTLCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4vUEhQIChmb3IgY2hh bmdpbmcgbWFzdGhlYWQsIGhlYWRlciAmYW1wOyBmb290ZXIpIGluIHlvdXIgdGhlbWU8L2xp PgoJCTxsaT5CYXNlIHlvdXIgdGhlbWUgb24gYW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsg aXQgdG8geW91ciB0YXN0ZTwvbGk+CgkJPGxpPkV4cG9ydCBhIHRoZW1lIHBhY2thZ2UgZm9y IGRpc3RyaWJ1dGlvbiB0byB0aGUgY29tbXVuaXR5IGluIGVpdGhlciAudGFyLCAudGd6LCAu YnoyIG9yIC56aXAgZm9ybWF0PC9saT4KCQk8bGk+SW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0 aGVtZXMgZnJvbSB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRnYXJkZW4ub3JnL2xheW91dHMv P2M9dHhwLWFkbWluIj5jb21tdW5pdHkgcmVwb3NpdG9yeTwvYT48L2xpPgoJCTxsaT5BZG1p bmlzdHJhdG9yIGNhbiBzZXQgYSBnbG9iYWwgdGhlbWUsIG9yIGVuYWJsZSBwZXItdXNlciAv IHBlci1yb2xlIHRoZW1lczwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8 L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVm IERhd3NvbjwvYT4uPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5p bnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIg PGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwOTYvc21kX2FkbWlu X3RoZW1lcyI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGlu dG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdp bnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiBsYWJl bGxlZCA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiBpcyBjcmVhdGVk LiA8c3Ryb25nPk9ubHkgcHVibGlzaGVycyB3aWxsIHNlZSB0aGlzIHRhYjwvc3Ryb25nPi48 L3A+CgoJPHA+VGhlIHBsdWdpbiBzaG91bGQgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBw cmVmZXJlbmNlcyBmb3IgeW91LiBDbGljayAmIzgyMTY7U2V0dXAmIzgyMTc7IGZyb20gdGhl IDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IHRhYiBvciA8ZW0+T3B0 aW9uczwvZW0+IGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgdGFiIHRvIGFsdGVyLCBk ZWxldGUgb3IgcmVpbnN0YWxsIHRoZW0uPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVmPSJo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjg4MzgiPmZv cnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nl c3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwg c2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMg cGFnZS4gVGhlIHByZWZlcmVuY2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBQ bGVhc2UgYmUgYXdhcmUgdGhhdCByZW1vdmluZyB0aGUgcGx1Z2luIGRvZXMgPHN0cm9uZz5u b3QgcmVtb3ZlIGFueSB0aGVtZXMgeW91IGhhdmUgaW5zdGFsbGVkLCBub3IgZG9lcyBpdCBy ZW1vdmUgcGVyLXVzZXIgdGhlbWUgcHJlZmVyZW5jZXM8L3N0cm9uZz4uIFBlci11c2VyIHBy ZWZzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGRlbGV0ZWQu PC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5PbiB0aGUgPGVtPkV4dGVu c2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4gdGFiIGlzIGEgbGlzdCBvciBncmlkIGNv bnRhaW5pbmcgaW5zdGFsbGVkIHRoZW1lcy4gT3V0IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwg YmUgdGhyZWUgYXZhaWxhYmxlOiA8ZW0+Y2xhc3NpYzwvZW0+LCA8ZW0+cmVtb3JhPC9lbT4g YW5kIDxlbT48c3BhbiBjbGFzcz0iY2FwcyI+VEJBPC9zcGFuPjwvZW0+LiA8c3Ryb25nPkl0 JiM4MjE3O3MgYWR2aXNhYmxlIG5vdCB0byBjaGFuZ2UgdGhlc2UgdGhlbWVzPC9zdHJvbmc+ IHNvIHlvdSBjYW4gYWx3YXlzIGdvIGJhY2sgdG8gdGhlbSBpZiBldmVyeXRoaW5nIGdvZXMg c2lkZXdheXMuIFBsdXMgaXQmIzgyMTc7cyBhIHZlcnkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50 IGZyb20gd2hpY2ggdG8gPGEgaHJlZj0iI2Nsb25lIj5iYXNlPC9hPiBhIDxhIGhyZWY9IiNu ZXciPm5ldyB0aGVtZTwvYT4uPC9wPgoKCTxwPkluIHRoZSBsaXN0IGxheW91dCwgdGhlIGNv bHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZTwv c3Bhbj4gOiBUaGUgbmFtZSBvZiB0aGUgdGhlbWUgYW5kIChvcHRpb25hbCkgdGh1bWJuYWls IGFzc2lnbmVkIHRvIGl0LiBDbGljayB0byA8YSBocmVmPSIjc3dpdGNoIj5hY3RpdmF0ZTwv YT4gdGhlIHRoZW1lLiBJZiB0aGUgdGhlbWUgaXMgYmFzZWQgb24gYW5vdGhlciB1c2VyJiM4 MjE3O3MgdGhlbWUsIHRoaXMgZGVwZW5kZW5jeSB3aWxsIGJlIHNob3duIGluIHBhcmVudGhl c2VzIGFmdGVyIHRoZSB0aGVtZSBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PkF1dGhvcjwvc3Bhbj4gOiBZb3UhIExpbmtlZCB0byB5b3VyIHdlYiBzaXRlIGlmIHlvdSBz dXBwbHkgaXQgaW4geW91ciA8YSBocmVmPSIjYWJvdXQiPk1hbmlmZXN0PC9hPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5WZXJzaW9uPC9zcGFuPiA6IFRoZW1lIHZlcnNpb24g bnVtYmVyIGluIDxjb2RlPm1ham9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24uIElm IGEgbmV3ZXIgdmVyc2lvbiBvZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRnYXJk ZW4sIHRoZSB2ZXJzaW9uIG51bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0aGVt ZSBvbiBUZXh0Z2FyZGVuIHNvIHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC4gVGhlIHZl cnNpb25zIGFyZSBjaGVja2VkLCBhdCBtb3N0LCBvbmNlIGV2ZXJ5IDI0IGhvdXJzIHRvIGF2 b2lkIGhhbW1lcmluZyB0aGUgc2VydmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PkRlc2NyaXB0aW9uPC9zcGFuPiA6IEJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxhaW5p bmcgeW91ciB0aGVtZS4gSWYgeW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gaW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5rZWQg aGVyZSBhcyB3ZWxsPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8L3Nw YW4+IDogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGVhY2ggdGhlbWUKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPltOZXcgdGhlbWVdPC9zcGFuPiA6IDxhIGhyZWY9IiNuZXciPkNy ZWF0ZTwvYT4gYSBuZXcgYmxhbmssIGVtcHR5IGRpcmVjdG9yeSByZWFkeSBmb3IgeW91ciB0 aGVtZS4gTm8gc3BhY2VzIC8gb2RkIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIG5h bWUgYW5kIGl0IG11c3Qgbm90IHN0YXJ0IHdpdGggYSBudW1iZXI8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+W0VkaXRdPC9zcGFuPiA6IDxhIGhyZWY9IiNlZGl0X3RoZW1lIj5F ZGl0PC9hPiB0aGUgdmFyaW91cyBkZXRhaWxzLCBmaWxlcyBhbmQgY29udGVudCB3aXRoaW4g dGhlIHRoZW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltCYXNlXTwvc3Bhbj4g OiA8YSBocmVmPSIjY2xvbmUiPkV4dGVuZDwvYT4gb25lIG9mIHRoZSBleGlzdGluZyB0aGVt ZXMgdG8gbWFrZSB5b3VyIG93biBjaGFuZ2VzIHVuZGVyIGEgbmV3IG5hbWU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+W0V4cG9ydF08L3NwYW4+IDogPGEgaHJlZj0iI2V4cG9y dCI+U2F2ZTwvYT4gdGhlIHRoZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZvciBk aXN0cmlidXRpb24vYmFja3VwIGluIHlvdXIgY2hvc2UgY29tcHJlc3Npb24gZm9ybWF0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltEZWxldGVdPC9zcGFuPiA6IENvbXBsZXRl bHkgPGEgaHJlZj0iI2RlbGV0ZSI+cmVtb3ZlPC9hPiB0aGUgdGhlbWUuIE5vdCBhdmFpbGFi bGUgdG8gdGhlIGNvcmUgdGhlbWVzLCBmb3Igb2J2aW91cyByZWFzb25zISBBbHNvIG5vdCBh dmFpbGFibGUgaWYgYSB0aGVtZSBoYXMgYmVlbiB1c2VkIGFzIGEgYmFzaXMgZm9yIGFub3Ro ZXIgdGhlbWUgaW4gdGhlIGN1cnJlbnQgc2l0ZTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoK CTxwPlRoZSByb3cgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQg YW5kIHRoZSBjdXJyZW50IGdsb2JhbCB0aGVtZSB0aGF0IGlzIGluIGVmZmVjdCBpcyBoaWdo bGlnaHRlZCB3aXRoIGFuIGFzdGVyaXNrICgqKS4gVGhlIGdyaWQgdmlldyBoYXMgcGFydHMg b2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLCBsYWlkIG91dCBzbGlnaHRseSBkaWZmZXJlbnRs eS48L3A+CgoJPGgyIGlkPSJzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2gyPgoKCTxwPkFz IHRoZSBhZG1pbmlzdHJhdG9yLCB5b3UgY2FuIHBsYXkgR29kIG92ZXIgZXZlcnlvbmUgZWxz ZSYjODIxNztzIHRoZW1lcy4gWW91IGFyZSBmcmVlIHRvIGluc3RhbGwgYXMgbWFueSBhcyB5 b3Ugd2lzaCBhbmQgc3dpdGNoIGJldHdlZW4gdGhlbSB3aXRob3V0IGFmZmVjdGluZyBhbnkg b3RoZXIgbG9naW5zLiBOb2JvZHkgZWxzZSB3aWxsIGV2ZW4ga25vdyB5b3UgaGF2ZSBpbnN0 YWxsZWQgdGhlIHBsdWdpbi48L3A+CgoJPHA+SWYsIGhvd2V2ZXIsIHlvdSB2aXNpdCB0aGUg PGEgaHJlZj0iI3NldHVwIj5TZXR1cDwvYT4gcGFnZSB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUg dGhlbWVzIHRoYXQgb3RoZXJzIHVzZS4gVGhlcmUgYXJlIHRocmVlIG1lY2hhbmlzbXMgdG8g Y2hvb3NlIGZyb206PC9wPgoKCTx1bD4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBhbGwg dXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxsaT5Gb3JjZSBvbmUgdGhlbWUgZm9y IGVhY2ggdXNlciBwcml2aWxlZ2UgbGV2ZWwgKGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxs aT5BbGxvdyBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZikgdG8gcGljayB0aGVpciBmYXZv dXJpdGUgdGhlbWUgZnJvbSBhIHNob3J0bGlzdCB5b3UgZGVmaW5lPC9saT4KCTwvdWw+CgoJ PHA+QXQgYWxsIHRpbWVzLCB5b3UgY2FuIGNob29zZSBhbnkgdGhlbWUgeW91IHBsZWFzZSBm b3IgeW91ciBvd24gdXNlLiBUaGlzIGFsbG93cyB0cmlhbGxpbmcsIHR3ZWFraW5nIGFuZCB0 ZXN0aW5nIG9mIHRoZW1lcyBiZWZvcmUgdW5sZWFzaGluZyB0aGVtIG9uIHlvdXIgdXNlciBi YXNlLjwvcD4KCgk8aDIgaWQ9InNldHVwIj5UaGVtZSBwcmVmZXJlbmNlczwvaDI+CgoJPHVs PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Q2FzZS1zZW5zaXRpdmUgdGhlbWUgbGlzdDwv c3Bhbj4gOiBXaGVuIHNldCB0byA8Y29kZT5ZZXM8L2NvZGU+LCB1cHBlci1jYXNlIHRoZW1l IG5hbWVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvd2VyIGNhc2UgdGhlbWUgbmFtZXMgYW5k IHdpbGwgYmUgbGlzdGVkIGZpcnN0LiBGb3IgZXhhbXBsZSwgMyB0aGVtZSBjYWxsZWQgJiM4 MjE2O0FuZ2VsaWMmIzgyMTc7LCAmIzgyMTY7YmFyYmFyaWMmIzgyMTc7IGFuZCAmIzgyMTY7 Q29oZXNpdmUmIzgyMTc7IHdpbGwgYmUgb3JkZXJlZDogPGNvZGU+QW5nZWxpYywgQ29oZXNp dmUsIGJhcmJhcmljPC9jb2RlPi4gU2V0IHRvIDxjb2RlPk5vPC9jb2RlPiB0byBtaXggdXBw ZXIgYW5kIGxvd2VyLWNhc2UgdGhlbWVzIHRvZ2V0aGVyIChvcmRlciBpcyB0aGVuIDxjb2Rl PkFuZ2VsaWMsIGJhcmJhcmljLCBDb2hlc2l2ZTwvY29kZT4gKS4gVGhlICYjODIxNjtjbGFz c2ljJiM4MjE3OyB0aGVtZSBpcyA8ZW0+YWx3YXlzPC9lbT4gbGlzdGVkIGZpcnN0LjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FeHBvcnQgY29tcHJlc3Npb24gdHlwZTwvc3Bh bj4gOiBEZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IGFuZCB3aGljaCBtb2R1bGVzIGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIGl0 LCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIGNvbXByZXNzaW9uIGZvcm1hdHMgaGVyZS4gQ2hv b3NlIG9uZSB0aGF0IHN1aXRzIHlvdSBhcyB0aGUgZGVmYXVsdCBpbiB3aGljaCB0byBleHBv cnQgeW91ciB0aGVtZSBwYWNrYWdlcy4gWW91IG1heSBjaG9vc2UgZnJvbSA8ZW0+VGFyPC9l bT4sIDxlbT5HWmlwPC9lbT4gKHRoZSBkZWZhdWx0OiBhY3R1YWxseSB0YXIrZ3ppcCksIDxl bT5CemlwMjwvZW0+ICh0YXIrYnppcCksIG9yIDxlbT5aaXA8L2VtPi48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+TGF5b3V0IG1ldGhvZDwvc3Bhbj4gOiBDaG9vc2UgZnJvbSBh IExpc3QgVmlldyAodXNlZnVsIGlmIHlvdSBwcmVmZXIgdG8gaGlkZSBvciB1c2Ugc21hbGwg dGh1bWJzKSBvciBhIEdyaWQgVmlldyBvZiBpbnN0YWxsZWQgdGhlbWVzLiBUaGlzIHNldHRp bmcgYXBwbGllcyB0byBib3RoIGFkbWluIGFuZCB1c2VyIHRoZW1lIHNlbGVjdGlvbiB0YWJz LiBEZWZhdWx0OiBHcmlkIFZpZXc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGh1 bWIgc2l6ZTwvc3Bhbj4gOiBTZXQgdGhlIHRodW1ibmFpbCBkaW1lbnNpb25zIGluIHRoZSB0 aGVtZSBsaXN0LiBTZXQgZWl0aGVyIGRpbWVuc2lvbiB0byAwIHRvIHR1cm4gb2ZmIHRodW1i bmFpbCBkaXNwbGF5LiBEZWZhdWx0OiAyNjAgJiMyMTU7IDE1MHB4PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkdsb2JhbCB0aGVtZTwvc3Bhbj4gOiBTZXQgdGhlIHRoZW1lIGZv ciBhbGwgb3RoZXIgdXNlcnMuIElmIHVzaW5nICYjODIxNjtPbmUgdGhlbWUgZm9yIGV2ZXJ5 b25lJiM4MjE3OyB0aGUgdGhlbWUgY2hvc2VuIGhlcmUgaXMgZm9yY2VkIHVwb24gYWxsIHVz ZXJzLiBJZiB1c2luZyBhbnkgb2YgdGhlIG90aGVyIG1lY2hhbmlzbXMsIHRoaXMgdGhlbWUg aXMgYSBmYWxsYmFjayBzaG91bGQgc29tZXRoaW5nIGdvIHBlYXItc2hhcGVkLjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBzeXN0ZW08L3NwYW4+IDogQXMgZGV0YWls ZWQgaW4gPGEgaHJlZj0iI3N3aXRjaCI+U3dpdGNoaW5nIHRoZW1lczwvYT4sIHlvdSBtYXkg Y2hvb3NlIHRoZSB3YXkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGludGVy ZmFjZSBpcyBwcmVzZW50ZWQgdG8gb3RoZXIgdXNlcnM6Cgk8dWw+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5PbmUgdGhlbWUgZm9yIGV2ZXJ5b25lPC9zcGFuPiA6IHVzZXMgdGhlIEds b2JhbCB0aGVtZSBmb3IgYWxsIHVzZXJzOyB0aGV5IGhhdmUgbm8gY2hvaWNlIGluIHRoZSBt YXR0ZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIHBlciBwcml2 aWxlZ2UgbGV2ZWw8L3NwYW4+IDogYWxsb3dzIHlvdSB0byBhc3NpZ24gb25lIG9yIG1vcmUg cHJpdmlsZWdlIGxldmVscyB0byBhIHRoZW1lLiBDaG9vc2UgYSB0aGVtZSBmcm9tIHRoZSBs ZWZ0LWhhbmQgbGlzdCBhbmQgdGhlbiBzaGlmdC9jdHJsLWNsaWNrIHRoZSBwcml2aWxlZ2Ug bGV2ZWxzIHRvIGFzc2lnbiB0aGVtLiBGbGljayBiZXR3ZWVuIHRoZW1lcyBpbiB0aGUgbGVm dCBjb2x1bW4gdG8gc2VlIHdoaWNoIG9uZXMgYXJlIHNldCBmb3IgdmFyaW91cyB1c2VyIGxl dmVscywgb3IgaG92ZXIgb3ZlciBhIHByaXZpbGVnZSBsZXZlbCB0byBzZWUgYSB0b29sdGlw LiBPbmx5IG9uZSBsZXZlbCBjYW4gYmUgYXNzaWduZWQgdG8gYSB0aGVtZSBzbyBpZiB5b3Ug Y2xpY2sgYSBsZXZlbCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gYW5vdGhl ciB0aGVtZSwgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXRzIG9yaWdpbmFsIGFzc2lnbm1l bnQuIE5vdGUgeW91IG11c3QgU2F2ZSB0aGUgY2hhbmdlcyBmb3IgdGhlbSB0byB0YWtlIGVm ZmVjdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHVzZXI8 L3NwYW4+IDogZGVmaW5lIGEgc2hvcnRsaXN0IGZyb20gdGhlIGF2YWlsYWJsZSBpbnN0YWxs ZWQgdGhlbWVzIHRvIG9mZmVyIHRvIGFsbCB1c2Vycy4gQSBuZXcgdGFiIHdpbGwgYXBwZWFy IHRvIG90aGVyIHVzZXJzIHVuZGVyIDxlbT5BZG1pbjwvZW0+IHRoYXQgaXMgZXNzZW50aWFs bHkgYSBjdXQtZG93biB2ZXJzaW9uIG9mIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFi LiBVc2VycyBjYW4gc3dpdGNoIGJldHdlZW4gYW55IG9uZSBvZiB0aGUgdGhlbWVzIHlvdSBo YXZlIHBlcm1pdHRlZC48L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5SZW1lbWJlciB0 byBjbGljayBTYXZlIHRvIGFwcGx5IHRoZSBjaGFuZ2VzLiBDbGlja2luZyBhbnkgb3RoZXIg dGFiIHdpbGwgdW5kbyBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWF5IGhhdmUgbWFkZS48L3A+ CgoJPGgyIGlkPSJicm93c2UiPkJyb3dzZSB0aGVtZXM8L2gyPgoKCTxwPkNsaWNrIHRoaXMg YnV0dG9uIHRvIGJlIHRha2VuIHRvIHRoZSBjZW50cmFsIGFkbWluIHRoZW1lIHJlcG9zaXRv cnkgd2hlcmUgeW91IG1heSBicm93c2UgdGhlbWVzIGFuZCBkb3dubG9hZCB0aGVtIHJlYWR5 IGZvciBpbnN0YWxsYXRpb24uPC9wPgoKCTxoMiBpZD0iaW1wb3J0Ij5JbnN0YWxsIGEgdGhl bWU8L2gyPgoKCTxwPkxvY2F0ZSBhIHRoZW1lIHBhY2thZ2Ugb24geW91ciBoYXJkIGRyaXZl IG9yIHBhc3RlIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gYSBwYWNrYWdl IGluIHRoZSBib3ggYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4gSGl0IDxzdHJvbmc+VXBsb2Fk PC9zdHJvbmc+IGFuZCBpdCB3aWxsIGJlIGluc3RhbGxlZC4gSWYgaXQgYWxyZWFkeSBleGlz dHMgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi4gTm90ZSB0aGF0IHlvdSBtYXkgcmVjZWl2ZSBh IHdhcm5pbmcgaWYgdGhlIHRoZW1lIGlzIHBhY2thZ2VkIHVzaW5nIGEgY29tcHJlc3Npb24g YWxnb3JpdGhtIHRoYXQgaXMgbm90IGJ1aWx0IGludG8geW91ciB2ZXJzaW9uIG9mIDxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+LjwvcD4KCgk8aDIgaWQ9Im5ldyI+Q3JlYXRlIGEg bmV3IChlbXB0eSkgdGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+Q3JlYXRlIG5ldyB0 aGVtZTwvc3Ryb25nPiBhbmQgYSBib3ggd2lsbCBzbGlkZSBkb3duIGFsbG93aW5nIHlvdSB0 byBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lLiAgTm90ZSB0aGF0IHRoZSBlZGl0IGJveCBhdXRv bWF0aWNhbGx5IHRha2VzIGZvY3VzLCBzbyB5b3UgY2FuIHR5cGUgc3RyYWlnaHQgYXdheS48 L3A+CgoJPHA+Tm8gc3BhY2VzIG9yIG9kZCBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQsIGJl Y2F1c2UgdGhlIG5hbWUgeW91IGVudGVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkg dGhhdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxlbT50aGVtZTwvZW0+IGZvbGRlciBhbmQg dGhlbSBuYW1lIG9mIHlvdXIgdGhlbWUmIzgyMTc7cyBjbGFzcy4gSWYgeW91IGRvIG1hbmFn ZSB0byB1c2Ugb2RkIGNoYXJhY3RlcnMsIHRoZSBuYW1lIHdpbGwgYmUgJiM4MjIwO2R1bWJl ZCBkb3duJiM4MjIxOyBmb3IgeW91LiBPbmNlIHRoZSBuYW1lIGlzIHNldCwgdGhhdCBpcyBp dDsgeW91IGNhbm5vdCBjaGFuZ2UgaXQgZnJvbSB3aXRoaW4gdGhlIGludGVyZmFjZS4gVGhl IG9ubHkgd2F5IHRvIHJlbmFtZSBpdCBpcyB2aWEgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+ RlRQPC9zcGFuPiBjbGllbnQgYW5kIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPiBmaWxlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L3A+CgoJPHA+SW4g b3JkZXIgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggb3RoZXIgcGVvcGxlJiM4MjE3O3Mg dGhlbWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCB0aGVtZXMgeW91IGRlc2lnbiBi ZWdpbiB3aXRoIGEgdW5pcXVlIDMtbGV0dGVyIHByZWZpeCBvZiB5b3VyIG93biBjaG9vc2lu ZywgcGx1cyBhbiB1bmRlcnNjb3JlICYjODIxMjsgZXhhY3RseSBsaWtlIHBsdWdpbnMuIFRo dXMsIHNtZF9CbHVlTWVhbmllIG1pZ2h0IHdlbGwgYmUgdGhlIG5hbWUgb2YgYSB0aGVtZS48 L3A+CgoJPHA+V2hlbiB5b3UgaGF2ZSBuYW1lZCB5b3VyIHRoZW1lLCBjbGljayA8c3Ryb25n PkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBjYW4gcmVz aWRlLjwvcD4KCgk8aDIgaWQ9ImNsb25lIj5FeHRlbmQgYW4gZXhpc3RpbmcgdGhlbWU8L2gy PgoKCTxwPkNsaWNrIDxzdHJvbmc+QmFzZTwvc3Ryb25nPiB0byBjcmVhdGUgYSBuZXcgdGhl bWUgYmFzZWQgb24gYW5vdGhlci4gQSBib3ggd2lsbCBzbGlkZSBkb3duICh0aGUgY3Vyc29y IGZvY3VzZXMgYXV0b21hdGljYWxseSBpbiB0aGUgYm94IGZvciB5b3UpIHNvIHlvdSBtYXkg ZW50ZXIgdGhlIG5hbWUgb2YgeW91ciBjb3B5LiBPYnNlcnZlIHRoZSA8YSBocmVmPSIjbmV3 Ij5uYW1pbmcgY29udmVudGlvbjwvYT4sIHRoZW4gY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25n PiB0byBjcmVhdGUgdGhlIG5ldyB0aGVtZS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9InJlcXVp cmVkIj5QbGVhc2UgcmVtZW1iZXIsIHlvdXIgdGhlbWUgd2lsbCBiZSBkZXBlbmRlbnQgb24g dGhlIGNob3NlbiB0aGVtZSBhbmQgPHN0cm9uZz5ib3RoPC9zdHJvbmc+IG11c3QgYmUgcHJl c2VudCBvbiBhIHVzZXImIzgyMTc7cyBzeXN0ZW0gZm9yIHRoZSB0aGVtZSB0byB3b3JrPC9z cGFuPi4gSXQgaXMgd29ydGggZW5zdXJpbmcgdGhhdCB1c2VycyBvZiB5b3VyIHRoZW1lIGFy ZSBtYWRlIGF3YXJlIG9mIHRoaXMgZGVwZW5kZW5jeSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBm cnVzdHJhdGlvbjsgcGVyaGFwcyBhZGQgYSBsaW5rIHRvIHRoZSB0aGVtZSYjODIxNztzIGJh c2UsIG1lbnRpb24gdGhlIGRlcGVuZGVuY3kgaW4gdGhlIEhlbHAgbGluayBhbmQvb3IgaW4g dGhlIHRoZW1lJiM4MjE3O3MgYXJ0aWNsZSBvbiBUZXh0Z2FyZGVuLiBZb3Ugd2lsbCBub3Qg YmUgYWJsZSB0byBkZWxldGUgYW55IHRoZW1lIGZyb20gdGhlIGxpc3QgdGhhdCBoYXMgc3Vj aCBhIGRlcGVuZGVuY3ksIG90aGVyd2lzZSB5b3VyIGFkbWluIHNpZGUgd2lsbCBzdG9wIHdv cmtpbmcuPC9wPgoKCTxoMiBpZD0iZXhwb3J0Ij5FeHBvcnQgYSB0aGVtZTwvaDI+CgoJPHA+ SWYgeW91IHdpc2ggdG8gYmFjayB1cCBhIHRoZW1lIG9yIHNoYXJlIGl0IHdpdGggb3RoZXJz LCBjbGljayA8c3Ryb25nPkV4cG9ydDwvc3Ryb25nPi4gQSBib3ggd2lsbCBzbGlkZSBkb3du IG9mZmVyaW5nIHlvdSBhIGNob2ljZSBvZiBjb21wcmVzc2lvbiBmb3JtYXRzOyB0aGUgZGVm YXVsdCBpcyB0aGUgZm9ybWF0IHlvdSBjaG9zZSBmcm9tIHRoZSA8YSBocmVmPSIjc2V0dXAi PlNldHVwPC9hPiBwYWdlLiBDbGljayA8ZW0+W0dvXTwvZW0+IHRvIGV4cG9ydCB0aGUgdGhl bWUgYW5kIHNhdmUgaXQgdG8geW91ciBjb21wdXRlci4gQWxsIHJlbGF0ZWQgZmlsZXMgaW4g dGhlIHRoZW1lIHdpbGwgYmUgcGFja2FnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBkb3du bG9hZCBmaWxlIGZvciBjb252ZW5pZW5jZS48L3A+CgoJPGgyIGlkPSJkZWxldGUiPkRlbGV0 ZSBhIHRoZW1lPC9oMj4KCgk8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFyZSBzdXJl KSB0byByZW1vdmUgdGhlIGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRzIGZyb20g dGhlIGZpbGUgc3lzdGVtLiA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPlRoaXMgaXMgbm90IHVu ZG9hYmxlLCBzbyBiZSBjYXJlZnVsPC9zcGFuPi48L3A+CgoJPGgyIGlkPSJlZGl0X3RoZW1l Ij5FZGl0IGEgdGhlbWU8L2gyPgoKCTxwPkEgdGhlbWUgaXMgYSBjb2xsZWN0aW9uIG9mIGZp bGVzLiBUaGUgZmlsZXMgYWxsIHJlc2lkZSBpbiB0aGVpciBvd24gc2VsZi1jb250YWluZWQg ZGlyZWN0b3J5IHVuZGVyIDxjb2RlPnRleHRwYXR0ZXJuL3RoZW1lPC9jb2RlPi4gVGhlIG5h bWUgb2YgdGhlIGRpcmVjdG9yeSBpcyB0aGUgbmFtZSBvZiB5b3VyIHRoZW1lLCBoZW5jZSB0 aGUgcmVhc29uIGl0IGNhbm5vdCBjb250YWluIGFueSBvYnNjdXJlIGNoYXJhY3RlcnMgdGhh dCB3b3VsZCBiZSBpbnZhbGlkIGluIHRoZSBmaWxlc3lzdGVtIG9yIDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IHZhcmlhYmxlcy48L3A+CgoJPHA+V2hlbiB5b3UgY2xpY2sgJiM4 MjE2O0VkaXQmIzgyMTc7IHlvdSB3aWxsIGJlIHRha2VuIHRvIGEgc2NyZWVuIHRoYXQgYWxs b3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHRoZW1lLiBUaGUgRWRpdCBzY3JlZW4g aXMgYnJva2VuIGludG8gdGhyZWUgdmVydGljYWwgcGFydHMsIGFzIGZvbGxvd3M6PC9wPgoK CTxoMyBpZD0iZWRpdF9pbWciPkltYWdlIGhhbmRsaW5nPC9oMz4KCgk8cD5FYWNoIHRoZW1l IGNhbiBjb250YWluIGFuIG9wdGlvbmFsIHRodW1ibmFpbC4gVGhpcyBpcyBhbiBpbWFnZSBv ZiAyNjAmIzIxNTsxNTBweCBpbiBzaXplLCBjYWxsZWQgPGNvZGU+c2NyZWVuc2hvdC5wbmc8 L2NvZGU+IChvciA8Y29kZT4uanBnPC9jb2RlPiwgPGNvZGU+LmdpZjwvY29kZT4sIGV0Yykg aW4geW91ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGUgaXQgd2lsbCBiZSBzcXVhc2hlZCAvIHN0 cmV0Y2hlZCB0byBmaXQgeW91ciB0aHVtYm5haWwgZGltZW5zaW9ucyBzZXQgaW4gdGhlIHBs dWdpbiBwcmVmcy48L3A+CgoJPHA+T3RoZXIgaW1hZ2VzIGZvciB1c2UgaW4gPHNwYW4gY2xh c3M9ImNhcHMiPkNTUzwvc3Bhbj4gcnVsZXMgY2FuIGFsc28gYmUgYWRkZWQgdG8gYSB0aGVt ZS4gQnJvd3NlIGZvciBhbiBpbWFnZSBhbmQgc2VsZWN0IGl0LCB0aGVuIGNsaWNrIDxzdHJv bmc+VXBsb2FkPC9zdHJvbmc+IHRvIGFkZCBpdCB0byB0aGUgdGhlbWUuIFlvdSBjYW4gY3Vy cmVudGx5IG9ubHkgdXBsb2FkIG9uZSBpbWFnZSBhdCBhIHRpbWUsIHRob3VnaCB5b3UgY2Fu IGRlbGV0ZSBvbmUgb3IgbW9yZSBhdCBvbmNlIGJ5IFNoaWZ0L0N0cmwgY2xpY2tpbmcgdGhl IG9uZXMgeW91IHdpc2ggdG8gcmVtb3ZlIGFuZCBoaXR0aW5nIHRoZSAmIzgyMTY7eCYjODIx NzsgYnV0dG9uLiA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPldhcm5pbmc6IGZpbGVzIHdpbGwg YmUgZGVsZXRlZCBpbW1lZGlhdGVseSwgd2l0aG91dCBjb25maXJtYXRpb24uPC9zcGFuPjwv cD4KCgk8cD5UaGUgYmVzdCB3YXkgdG8gcmVmZXIgdG8gaW1hZ2UgPHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj5zIGluIHN0eWxlc2hlZXRzIGlzIHdpdGggYSByZWxhdGl2ZSBwYXRo OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPi5teVN0eWxl IHsKICAgYmFja2dyb3VuZDogdXJsKG15LWltYWdlLmdpZik7Cn0KPC9jb2RlPjwvcHJlPgoK CTxoMyBpZD0iZWRpdF9jb250ZW50Ij5Db250ZW50PC9oMz4KCgk8cD5UaGUgY2VudHJhbCBw YW5lIGlzIHdoZXJlIHlvdSBlZGl0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMgaW4geW91 ciB0aGVtZS4gVGhlIHNtYWxsIGVkaXQgYm94IGF0IHRoZSB0b3AgaXMgdGhlIGZpbGVuYW1l IGFuZCB0aGUgbGFyZ2UgdGV4dCBhcmVhIGlzIGl0cyBjb250ZW50LiBDbGljayA8c3Ryb25n PlNhdmU8L3N0cm9uZz4gdG8gY29tbWl0IGNoYW5nZXMuIFlvdSBtYXkgZnJlZWx5IHJlbmFt ZSBhbnkgZmlsZSB5b3UgYXJlIGVkaXRpbmcuPC9wPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+ SW1wb3J0YW50OiBpZiB5b3Ugc2VsZWN0IGEgZmlsZSwgZWRpdCBpdCwgcmVuYW1lIGl0LCBh bmQgY2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IHlvdSB3aWxsIG92ZXJ3cml0ZSB3aGF0 ZXZlciB3YXMgaW4gdGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlmIHlvdSBlbXB0 eSB0aGUgY29udGVudHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0byBtYWtlIGEg JiM4MjIwO25ldyYjODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYSBuZXcgZmls ZSwgaXQgaXMgc2FmZXIgdG8gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IGZpbGU8L3N0cm9uZz4g YnV0dG9uIGluIHRoZSByaWdodCBoYW5kIGNvbHVtbiB0byBlbnN1cmUgeW91IGFyZSBub3Qg ZWRpdGluZyBhbiBleGlzdGluZyBmaWxlIGJ5IG1pc3Rha2UuPC9wPgoKCTxwPkl0IGlzIGFs c28gd29ydGggbm90aW5nIHRoYXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZyb20gaG9zdCB0 byBob3N0LiBJZiB5b3UgdHJ5IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQgcmVjZWl2ZSBh IHl1a2t5IHdhcm5pbmcgbWVzc2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZSB0 aGUgZmlsZSwgdHJ5IGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0aGVtZSBk aXJlY3RvcnkgYW5kIGFsbCBmaWxlcyBiZW5lYXRoIGl0LjwvcD4KCgk8cD5UaGUgdGhlbWUg ZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IHdpdGggPGNvZGU+NjQ0PC9jb2RlPiBwZXJtaXNzaW9ucyB3aGljaCBzaG91bGQgYmUgZmlu ZSBmb3IgYSBzdGFuZGFyZCBob3N0LiBTb21lIHNoYXJlZCBob3N0aW5nIGNvbXBhbmllcyAm IzgyMTI7IGFuZCB0aGVzZSBhcmUgdXN1YWxseSB0aGUgb25lcyB0aGF0IHRlbGwgeW91IHRv IHNldCB5b3VyIDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+aW1hZ2VzPC9jb2RlPiBk aXJlY3RvcmllcyB0byA3NzcgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIHdyaXRhYmxlIGJ5IDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ICYjODIxMjsgcnVuIEFwYWNoZS9QSFAgaW4g YSBkaWZmZXJlbnQgd2F5IHdoaWNoIG1pZ2h0IHJlcXVpcmUgaGlnaGVyIHBlcm1pc3Npb25z IGluIG9yZGVyIHRvIHdyaXRlIHRvIHRoZSB0aGVtZSBkaXJlY3RvcnkuIFRoaXMgaXMgdW5m b3J0dW5hdGVseSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgcGx1Z2luIHNvIHlvdSB3aWxs IGhhdmUgdG8gZXhwZXJpbWVudCBpZiBpdCBjYXVzZXMgeW91IHByb2JsZW1zLjwvcD4KCgk8 aDM+RmlsZSBoYW5kbGluZzwvaDM+CgoJPHA+VGhpcyBjb2x1bW4gYmVnaW5zIHdpdGggYSBz ZWxlY3QgbGlzdCBvZiBhbGwgaW5zdGFsbGVkIHRoZW1lczsgdGhlIGN1cnJlbnQgdGhlbWUg c2VsZWN0ZWQuIENoYW5naW5nIHRoZSBpdGVtIGhlcmUgd2lsbCBpbW1lZGlhdGVseSBhbGxv dyB5b3UgdG8gZWRpdCBhbm90aGVyIHRoZW1lLiBUaGlzIGlzIHZlcnkgdXNlZnVsIGlmIHlv dSBhcmUgY29weWluZyBhbmQgcGFzdGluZyBmaWxlcyBmcm9tIG9uZSB0aGVtZSB0byBhbm90 aGVyIGFuZCBzYXZlcyB5b3UgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHRoZW1lIGxpc3Qg Zmlyc3QuPC9wPgoKCTxwPkJlbmVhdGggdGhhdCBhcmUgdHdvIGJ1dHRvbnM6PC9wPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk5ldyBmaWxlPC9zcGFuPiA6IENyZWF0ZSBh IG5ldywgZW1wdHkgZmlsZSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90aGluZyBpcyBh Y3R1YWxseSBjcmVhdGVkIHVudGlsIHlvdSBoaXQgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IGJ1 dCB1c2luZyB0aGlzIGJ1dHRvbiBlbnN1cmVzIHlvdSBiZWdpbiB3aXRoIGEgY2xlYW4gc2xh dGUgYW5kIGRvbiYjODIxNzt0IGFjY2lkZW50YWxseSBvdmVyd3JpdGUgdGhlIHByZXZpb3Vz IGZpbGUgeW91IHdlcmUgZWRpdGluZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5U aGVtZSBsaXN0PC9zcGFuPiA6IEEgc2hvcnRjdXQgYmFjayB0byB0aGUgbWFpbiB0aGVtZSBs aXN0IChlcXVpdmFsZW50IHRvIGNsaWNraW5nIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4g dGFiKTwvbGk+Cgk8L3VsPgoKCTxwPkJlbG93IHRob3NlIGJ1dHRvbnMgYXJlIHVwIHRvIGZv dXIgc2VjdGlvbnMgY29udGFpbmluZyBhbGwgdGhlIChub24taW1hZ2UpIGZpbGVzIHRoYXQg bWFrZSB1cCB5b3VyIHRoZW1lLiBDbGljayBhIGZpbGVuYW1lIHRvIGxvYWQgaXQgaW50byB0 aGUgY2VudHJhbCB0ZXh0IGFyZWEgZm9yIGVkaXRpbmcuPC9wPgoKCTxoNCBpZD0iZWRpdF9j c3MiPlN0eWxlc2hlZXRzPC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkZpbGVzIGNhbiBi ZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFu PiBlbmQgaW4gPGNvZGU+LmNzczwvY29kZT48L3A+CgoJPHA+VGhlIG1lYXQgYW5kIHBvdGF0 b2VzIG9mIHlvdXIgdGhlbWUuIEFkZCBhcyBtYW55IHNoZWV0cyBhcyB5b3UgbGlrZSBhbmQg bG9hZCB0aGVtIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxl KHMpLjwvcD4KCgk8aDQgaWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoKCTxwIGNsYXNz PSJyZXF1aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4g Y2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uanM8L2NvZGU+PC9wPgoK CTxwPkFueSB0cmlja2VyeSB5b3UgbWF5IHdpc2ggdG8gZW1wbG95IGluIHlvdXIgdGhlbWUg Y2FuIGJlIHdyaXR0ZW4gaW4gdGhlc2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQgalF1ZXJ5IGlz IGxvYWRlZCBieSBkZWZhdWx0IG9uIHRoZSBhZG1pbiBzaWRlIHNvIHlvdSBjYW4gcGxheSB3 aXRoIHRoYXQuPC9wPgoKCTxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+PC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPk9uZSBmaWxlIDxzdHJvbmc+ bXVzdDwvc3Ryb25nPiBiZSBuYW1lZCBleGFjdGx5IHRoZSBzYW1lIGFzIHlvdXIgdGhlbWUs IGkuZS4gPGNvZGU+c21kX0JsdWVNZWFuaWUucGhwPC9jb2RlPi4gQW55IG90aGVyIGZpbGVz IG11c3QgZW5kIGluIDxjb2RlPi5waHA8L2NvZGU+PC9wPgoKCTxwPkNvbnN1bHQgdGhlIDxh IGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9Q3Jl YXRpbmdfYW5fQWRtaW5fU2lkZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBndWlkZTwvYT4g b24gVGV4dGJvb2sgZm9yIHRoZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBOb3RlIHRoYXQg Y29ycnVwdCB0aGVtZXMgYXJlIGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRoZSBwbHVnaW4m IzgyMTc7cyBhYmlsaXR5IGFuZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ugb3Igc3dpdGNo IHRvIGFueSB0aGVtZSB0aGF0IGlzIGJyb2tlbi48L3A+CgoJPGg0IGlkPSJlZGl0X290aGVy Ij5PdGhlcnM8L2g0PgoKCTxwPkFueSBmaWxlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIGFib3Zl IHRocmVlIHR5cGVzIChhbmQgYXJlIG5vdCBpbWFnZXMpIGFwcGVhciBoZXJlLiBZb3Ugd2ls bCBwcm9iYWJseSBuZXZlciBzZWUgdGhpcyBzZWN0aW9uLiBJZiB5b3UgZG8gdHJ5IHRvIGNy ZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5cGVzLCBhIHdh cm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlvdSBtdXN0IGhpdCA8ZW0+U2F2ZTwvZW0+IGFnYWlu IHRvIGNvbmZpcm0geW91IHJlYWxseSB3aXNoIHRvIGNyZWF0ZSB0aGUgZmlsZS48L3A+CgoJ PGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8L2gzPgoKCTxwPkluIHlvdXIgbWFpbiA8c3BhbiBj bGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIGEgZnVuY3Rpb24gY2FsbGVkIDxjb2Rl Pm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNoIGNvbnRhaW5zIGluZm8gYWJvdXQgeW91IGFuZCB5 b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1ZXMgaGVyZSB0byBzdGFtcCB5b3VyIG1hcmsgb24g dGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYgeW91ciBkZXNjcmlwdGlvbiBjb250YWlucyBhcG9z dHJvcGhlcyB0aGV5IG11c3QgYmUgPGVtPmVzY2FwZWQ8L2VtPiBieSBwcmVjZWRpbmcgdGhl bSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFzaCA8Y29kZT5cPC9jb2RlPi4gZS5nLjwvcD4KCjxw cmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlvbiYjMzk7ID0mZ3Q7ICYjMzk7RG9uXCYjMzk7dCBm ZWFyIHRoZSByZWFwZXIhJiMzOTssCjwvY29kZT48L3ByZT4KCgk8aDIgaWQ9InBlcnVzZXIi PlBlci11c2VyIHRoZW1lIHNlbGVjdGlvbjwvaDI+CgoJPHA+SWYgYW4gYWRtaW5pc3RyYXRv ciBjaG9vc2VzIHRvIGFsbG93IHBlci11c2VyIHRoZW1lcywgYSBuZXcgdGFiIGFwcGVhcnMg dW5kZXIgdGhlIEFkbWluIHRhYiBvZiBhbGwgdXNlcnMgKGV4Y2VwdCBhZG1pbmlzdHJhdG9y cykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFsbCBhdmFpbGFibGUgdGhlbWVzICYjODIxMjsg b25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBleHBsaWNpdGx5IGFsbG93ZWQuPC9w PgoKCTxwPkNsaWNraW5nIGEgdGhlbWUgbmFtZSBvciB0aHVtYm5haWwgd2lsbCBpbW1lZGlh dGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVtZSB1bnRpbCB0aGUgdXNlciBjaG9vc2VzIGFub3Ro ZXIgb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGVtZSBzeXN0ZW0uPC9wPgoKCTxo MiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90 IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVz IG9mIFRlYW0gVGV4dHBhdHRlcm4sIGVzcGVjaWFsbHkgUm9iZXJ0IFdldHpsbWF5ciBmb3Ig dGhlIHRoZW1lIHN1cHBvcnQuIFBsdXMgb2YgY291cnNlIHRoZSBhcm15IG9mIGJldGEgdGVz dGVycywgaWRlYXMgaGFtc3RlcnMgYW5kIHRpcmVsZXNzIHRoZW1lIGFkdm9jYXRlcywgbW9z dCBub3RhYmx5IFN0dWFydCBCdXRjaGVyLCBEYWxlIENoYXBtYW4sIERhdmUgRGVTYW5kcm8s IGFuZCBNaWtlIERlbm5pcy4gS3Vkb3MgYW5kIHRoYW5rcyB0byB5b3UgYWxsLjwvcD4KCjwv ZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2Rl IHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNv dXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVs cCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAj OTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46 MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBjb2xvcjog IzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQt YWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29s aWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7IGZv bnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsg bWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29y YXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0 ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2Vp Z2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDoj ZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6 OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxw IHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVt IDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVs cCAucmVxdWlyZWQge2NvbG9yOnJlZDt9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBw eCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9z dHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMy OiI2NWVjNzQxYTExMmNkY2JiNTdmOTFiMzVjMGQ2YmU3ZCI7fQ==