# Name: smd_access_keys v0.10 # Type: Admin/Public side plugin # Permit access to content for a certain time period/number of access attempts # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfYWNjZXNzX2tleXMiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTAiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjc2OiJQZXJtaXQgYWNjZXNzIHRvIGNvbnRlbnQgZm9yIGEgY2VydGFpbiB0aW1lIHBl cmlvZC9udW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzIjtzOjQ6ImNvZGUiO3M6MzI2Mjk6Imlm KEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAkc21kX2FrZXlfZXZlbnQs ICRzbWRfYWtleV9zdHlsZXM7DQoJJHNtZF9ha2V5X2V2ZW50ID0gJ3NtZF9ha2V5JzsNCg0K CSRzbWRfYWtleV9zdHlsZXMgPSBhcnJheSgNCgkJJ2xpc3QnID0+DQogICAgICAgICAnLnNt ZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0nLA0KCSk7DQoNCglhZGRfcHJpdnMoJHNtZF9h a2V5X2V2ZW50LCAnMScpOw0KCWFkZF9wcml2cygncGx1Z2luX3ByZWZzLnNtZF9hY2Nlc3Nf a2V5cycsICcxJyk7DQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNtZF9ha2V5X2V2 ZW50LCBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90YWJfbmFtZScpKTsNCglyZWdpc3Rlcl9j YWxsYmFjaygnc21kX2FrZXlfZGlzcGF0Y2hlcicsICRzbWRfYWtleV9ldmVudCk7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9ha2V5X3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS5z bWRfYWNjZXNzX2tleXMnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FrZXlfcHJlZnMn LCAncGx1Z2luX3ByZWZzLnNtZF9hY2Nlc3Nfa2V5cycpOw0KfQ0KDQpnbG9iYWwgJHNtZF9h a2V5X3ByZWZzOw0KJHNtZF9ha2V5X3ByZWZzID0gYXJyYXkoDQoJJ3NtZF9ha2V5X2ZpbGVf ZG93bmxvYWRfZXhwaXJlcycgPT4gYXJyYXkoDQoJCSdodG1sJyAgICAgPT4gJ3RleHRfaW5w dXQnLA0KCQkndHlwZScgICAgID0+IFBSRUZfSElEREVOLA0KCQkncG9zaXRpb24nID0+IDEw LA0KCQknZGVmYXVsdCcgID0+ICczNjAwJywNCgkpLA0KCSdzbWRfYWtleV9zYWx0X2xlbmd0 aCcgPT4gYXJyYXkoDQoJCSdodG1sJyAgICAgPT4gJ3RleHRfaW5wdXQnLA0KCQkndHlwZScg ICAgID0+IFBSRUZfSElEREVOLA0KCQkncG9zaXRpb24nID0+IDIwLA0KCQknZGVmYXVsdCcg ID0+ICc4JywNCgkpLA0KCSdzbWRfYWtleV9sb2dfaXAnID0+IGFycmF5KA0KCQknaHRtbCcg ICAgID0+ICd5ZXNub3JhZGlvJywNCgkJJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwNCgkJ J3Bvc2l0aW9uJyA9PiAzMCwNCgkJJ2RlZmF1bHQnICA9PiAnMCcsDQoJKSwNCik7DQoNCmlm ICghZGVmaW5lZCgnU01EX0FLRVlTJykpIGRlZmluZSgiU01EX0FLRVlTIiwgJ3NtZF9ha2V5 cycpOw0KDQpyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FjY2Vzc19wcm90ZWN0X2Rvd25sb2Fk JywgJ2ZpbGVfZG93bmxvYWQnKTsNCg0KLy8gKioqKioqKioqKioqKioqKioqKioNCi8vIEFE TUlOIFNJREUgSU5URVJGQUNFDQovLyAqKioqKioqKioqKioqKioqKioqKg0KLy8gSnVtcCBv ZmYgcG9pbnQgZm9yIGV2ZW50L3N0ZXBzDQpmdW5jdGlvbiBzbWRfYWtleV9kaXNwYXRjaGVy KCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJyYXkoDQoJ CQknc21kX2FrZXlfdGFibGVfaW5zdGFsbCcsDQoJCQknc21kX2FrZXlfdGFibGVfcmVtb3Zl JywNCgkJCSdzbWRfYWtleV9jcmVhdGUnLA0KCQkJJ3NtZF9ha2V5X3ByZWZzJywNCgkJCSdz bWRfYWtleV9wcmVmc2F2ZScsDQoJCQknc21kX2FrZXlfbXVsdGlfZWRpdCcsDQoJCQknc21k X2FrZXlfY2hhbmdlX3BhZ2VieScsDQoJCSkpKSB7DQoJCXNtZF9ha2V5KCcnKTsNCgl9IGVs c2UgJHN0cCgpOw0KfQ0KDQovLyBCb290c3RyYXAgd2hlbiBpbnN0YWxsZWQvZGVsZXRlZA0K ZnVuY3Rpb24gc21kX2FrZXlfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJJG1zZyA9ICcnOw0K CXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX2FrZXlfdGFi bGVfaW5zdGFsbCgwKTsNCgkJCSRtc2cgPSAnUmVzdHJpY3QgeW91ciBUWFAgd29ybGQgOi0p JzsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF9ha2V5X3RhYmxlX3Jl bW92ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gTWFpbiBh ZG1pbiBpbnRlcmZhY2UNCmZ1bmN0aW9uIHNtZF9ha2V5KCRtc2c9JycpIHsNCglnbG9iYWwg JHNtZF9ha2V5X2V2ZW50LCAkc21kX2FrZXlfbGlzdF9wYWdlYnksICRzbWRfYWtleV9zdHls ZXMsICRsb2dnaW5nLCAkc21kX2FrZXlfcHJlZnM7DQoNCglwYWdldG9wKHNtZF9ha2V5X2dU eHQoJ3NtZF9ha2V5X3RhYl9uYW1lJyksICRtc2cpOw0KDQoJaWYgKHNtZF9ha2V5X3RhYmxl X2V4aXN0KDEpKSB7DQoJCWV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScsICdzb3J0JywgJ2Rp cicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOw0KCQlpZiAoJHNvcnQgPT09ICcnKSAk c29ydCA9IGdldF9wcmVmKCdzbWRfYWtleV9zb3J0X2NvbHVtbicsICd0aW1lJyk7DQoJCWlm ICgkZGlyID09PSAnJykgJGRpciA9IGdldF9wcmVmKCdzbWRfYWtleV9zb3J0X2RpcicsICdk ZXNjJyk7DQoJCSRkaXIgPSAoJGRpciA9PSAnYXNjJykgPyAnYXNjJyA6ICdkZXNjJzsNCg0K CQlzd2l0Y2ggKCRzb3J0KSB7DQoJCQljYXNlICdwYWdlJzoNCgkJCQkkc29ydF9zcWwgPSAn cGFnZSAnLiRkaXIuJywgdGltZSBkZXNjJzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICd0cmln Z2FoJzoNCgkJCQkkc29ydF9zcWwgPSAndHJpZ2dhaCAnLiRkaXIuJywgdGltZSBkZXNjJzsN CgkJCWJyZWFrOw0KDQoJCQljYXNlICdtYXhpbXVtJzoNCgkJCQkkc29ydF9zcWwgPSAnbWF4 aW11bSAnLiRkaXIuJywgdGltZSBkZXNjJzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICdhY2Nl c3Nlcyc6DQoJCQkJJHNvcnRfc3FsID0gJ2FjY2Vzc2VzICcuJGRpci4nLCB0aW1lIGRlc2Mn Ow0KCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2lwJzoNCgkJCQkkc29ydF9zcWwgPSAnaXAgJy4k ZGlyLicsIHRpbWUgZGVzYyc7DQoJCQlicmVhazsNCg0KCQkJZGVmYXVsdDoNCgkJCQkkc29y dCA9ICd0aW1lJzsNCgkJCQkkc29ydF9zcWwgPSAndGltZSAnLiRkaXI7DQoJCQlicmVhazsN CgkJfQ0KDQoJCXNldF9wcmVmKCdzbWRfYWtleV9zb3J0X2NvbHVtbicsICRzb3J0LCAnc21k X2FrZXknLCBQUkVGX0hJRERFTiwgJycsIDAsIFBSRUZfUFJJVkFURSk7DQoJCXNldF9wcmVm KCdzbWRfYWtleV9zb3J0X2RpcicsICRkaXIsICdzbWRfYWtleScsIFBSRUZfSElEREVOLCAn JywgMCwgUFJFRl9QUklWQVRFKTsNCg0KCQkkc3dpdGNoX2RpciA9ICgkZGlyID09ICdkZXNj JykgPyAnYXNjJyA6ICdkZXNjJzsNCg0KCQkkY3JpdGVyaWEgPSAxOw0KDQoJCWlmICgkc2Vh cmNoX21ldGhvZCBhbmQgJGNyaXQpIHsNCgkJCSRjcml0X2VzY2FwZWQgPSBkb1NsYXNoKHN0 cl9yZXBsYWNlKGFycmF5KCdcXCcsJyUnLCdfJywnXCcnKSwgYXJyYXkoJ1xcXFwnLCdcXCUn LCdcXF8nLCAnXFxcJycpLCAkY3JpdCkpOw0KCQkJJGNyaXRzcWwgPSBhcnJheSgNCgkJCQkn cGFnZScgICAgID0+ICJwYWdlIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJCSd0cmln Z2FoJyAgPT4gInRyaWdnYWggbGlrZSAnJSRjcml0X2VzY2FwZWQlJyIsDQoJCQkJJ21heGlt dW0nICA9PiAibWF4aW11bSA9ICckY3JpdF9lc2NhcGVkJyIsDQoJCQkJJ2FjY2Vzc2VzJyA9 PiAiYWNjZXNzZXMgPSAnJGNyaXRfZXNjYXBlZCciLA0KCQkJCSdpcCcgICAgICAgPT4gImlw IGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJKTsNCg0KCQkJaWYgKGFycmF5X2tleV9l eGlzdHMoJHNlYXJjaF9tZXRob2QsICRjcml0c3FsKSkgew0KCQkJCSRjcml0ZXJpYSA9ICRj cml0c3FsWyRzZWFyY2hfbWV0aG9kXTsNCgkJCQkkbGltaXQgPSA1MDA7DQoJCQl9IGVsc2Ug ew0KCQkJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCQkJJGNyaXQgPSAnJzsNCgkJCX0NCgkJ fSBlbHNlIHsNCgkJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCQkkY3JpdCA9ICcnOw0KCQl9 DQoNCgkJJHRvdGFsID0gc2FmZV9jb3VudChTTURfQUtFWVMsICIkY3JpdGVyaWEiKTsNCg0K CQllY2hvICc8ZGl2IGlkPSInLiRzbWRfYWtleV9ldmVudC4nX2NvbnRyb2wiIGNsYXNzPSJ0 eHAtY29udHJvbC1wYW5lbCI+JzsNCg0KCQlpZiAoJHRvdGFsIDwgMSkgew0KCQkJaWYgKCRj cml0ZXJpYSAhPSAxKSB7DQoJCQkJZWNobyBuLnNtZF9ha2V5X3NlYXJjaF9mb3JtKCRjcml0 LCAkc2VhcmNoX21ldGhvZCkuDQoJCQkJCW4uZ3JhZihnVHh0KCdub19yZXN1bHRzX2ZvdW5k JyksICcgY2xhc3M9ImluZGljYXRvciInKS4nPC9kaXY+JzsNCgkJCX0NCgkJfQ0KDQoJCSRs aW1pdCA9IG1heCgkc21kX2FrZXlfbGlzdF9wYWdlYnksIDE1KTsNCg0KCQlsaXN0KCRwYWdl LCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsN Cg0KCQllY2hvIG4uc21kX2FrZXlfc2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9k KS4nPC9kaXY+JzsNCg0KCQkvLyBSZXRyaWV2ZSB0aGUgc2VjcmV0IGtleXJpbmcgdGFibGUg ZW50cmllcw0KCQkkc2VjcmluZyA9IHNhZmVfcm93cygnKicsIFNNRF9BS0VZUywgIiRjcml0 ZXJpYSBvcmRlciBieSAkc29ydF9zcWwgbGltaXQgJG9mZnNldCwgJGxpbWl0Iik7DQoNCgkJ Ly8gU2V0IHVwIHRoZSBidXR0b25zIGFuZCBjb2x1bW4gaW5mbw0KCQkkbmV3YnRuID0gJzxh IGNsYXNzPSJuYXZsaW5rIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2FrZXlfdG9n Z2xlbmV3KCk7Ij4nLnNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X2J0bl9uZXcnKS4nPC9hPic7 DQoJCSRwcmVmYnRuID0gJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21k X2FrZXlfZXZlbnQuYS4nc3RlcD1zbWRfYWtleV9wcmVmcyI+Jy5zbWRfYWtleV9nVHh0KCdz bWRfYWtleV9idG5fcHJlZicpLic8L2E+JzsNCgkJJHNob3dpcCA9IGdldF9wcmVmKCdzbWRf YWtleV9sb2dfaXAnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9ha2V5X2xvZ19pcCddWydkZWZh dWx0J10sIDEpOw0KDQoJCWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+DQpmdW5jdGlvbiBzbWRfYWtleV90b2dnbGVuZXcoKSB7DQoJYm94ID0galF1ZXJ5 KCIjc21kX2FrZXlfY3JlYXRlIik7DQoJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9u ZSIpIHsNCgkJYm94LnNob3coKTsNCgl9IGVsc2Ugew0KCQlib3guaGlkZSgpOw0KCX0NCglq UXVlcnkoImlucHV0LnNtZF9mb2N1cyIpLmZvY3VzKCk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0K alF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiI3NtZF9ha2V5X2FkZCIpLmNsaWNrKGZ1 bmN0aW9uICgpIHsNCgkJalF1ZXJ5KCIjc21kX2FrZXlfc3RlcCIpLnZhbCgnc21kX2FrZXlf Y3JlYXRlJyk7DQoJCWpRdWVyeSgiI3NtZF9ha2V5X2Zvcm0iKS5yZW1vdmVBdHRyKCdvbnN1 Ym1pdCcpLnN1Ym1pdCgpOw0KCX0pOw0KfSk7DQo8L3NjcmlwdD4NCkVPQzsNCgkJLy8gSW5q ZWN0IHN0eWxlcw0KCQllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX2Fr ZXlfc3R5bGVzWydsaXN0J10gLiAnPC9zdHlsZT4nOw0KDQoJCS8vIEFjY2VzcyBrZXkgbGlz dA0KCQllY2hvIG4uJzxkaXYgaWQ9IicuJHNtZF9ha2V5X2V2ZW50LidfY29udGFpbmVyIiBj bGFzcz0idHhwLWNvbnRhaW5lciB0eHAtbGlzdCI+JzsNCgkJZWNobyAnPGZvcm0gbmFtZT0i bG9uZ2Zvcm0iIGlkPSJzbWRfYWtleV9mb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJuIHZlcmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJl JykuJ1wnKSI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJCWVjaG8gbi4nPHRo ZWFkPicNCgkJCS5uLnRyKHRkYSgkbmV3YnRuIC4gc3AgLiAkcHJlZmJ0biwgJyBjbGFzcz0i bm9saW5lIicpKQ0KCQkJLm4udHIoDQoJCQkJbi5jb2x1bW5faGVhZChzbWRfYWtleV9nVHh0 KCdzbWRfYWtleV9wYWdlJyksICdwYWdlJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVlLCAkc3dp dGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdwYWdlJyA9PSAkc29ydCkgPyAi JGRpciAiIDogJycpLidwYWdlJykuDQoJCQkJbi5jb2x1bW5faGVhZChzbWRfYWtleV9nVHh0 KCdzbWRfYWtleV90cmlnZ2VyJyksICd0cmlnZ2FoJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVl LCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCd0cmlnZ2FoJyA9PSAk c29ydCkgPyAiJGRpciAiIDogJycpKS4NCgkJCQluLmNvbHVtbl9oZWFkKHNtZF9ha2V5X2dU eHQoJ3NtZF9ha2V5X3RpbWUnKSwgJ3RpbWUnLCAkc21kX2FrZXlfZXZlbnQsIHRydWUsICRz d2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgoJ3RpbWUnID09ICRzb3J0KSA/ ICIkZGlyICIgOiAnJykuJ2RhdGUgdGltZScpLg0KCQkJCW4uY29sdW1uX2hlYWQoc21kX2Fr ZXlfZ1R4dCgnc21kX2FrZXlfbWF4JyksICdtYXhpbXVtJywgJHNtZF9ha2V5X2V2ZW50LCB0 cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdtYXhpbXVtJyA9 PSAkc29ydCkgPyAiJGRpciAiIDogJycpKS4NCgkJCQluLmNvbHVtbl9oZWFkKHNtZF9ha2V5 X2dUeHQoJ3NtZF9ha2V5X2FjY2Vzc2VzJyksICdhY2Nlc3NlcycsICRzbWRfYWtleV9ldmVu dCwgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCgnYWNjZXNz ZXMnID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykpLg0KCQkJCSgoJHNob3dpcCkgPyBuLmNv bHVtbl9oZWFkKCdJUCcsICdpcCcsICRzbWRfYWtleV9ldmVudCwgdHJ1ZSwgJHN3aXRjaF9k aXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCgnaXAnID09ICRzb3J0KSA/ICIkZGlyICIg OiAnJykuJ2lwJykgOiAnJykuDQoJCQkJbi5oQ2VsbCgnJywgJycsICcgY2xhc3M9Im11bHRp LWVkaXQiJykNCgkJCSkuDQoJCQluLic8L3RoZWFkPic7DQoNCgkJJG11bHRpT3B0cyA9IGFy cmF5KCdzbWRfYWtleV9kZWxldGUnID0+IGdUeHQoJ2RlbGV0ZScpKTsNCg0KCQllY2hvICc8 dGZvb3Q+JyAuIHRyKHRkYSgNCgkJCQlzZWxlY3RfYnV0dG9ucygpDQoJCQkJLm4uc2VsZWN0 SW5wdXQoJ3NtZF9ha2V5X211bHRpX2VkaXQnLCAkbXVsdGlPcHRzLCAnJywgdHJ1ZSkNCgkJ CQkubi5lSW5wdXQoJHNtZF9ha2V5X2V2ZW50KQ0KCQkJCS5uLmZJbnB1dCgnc3VibWl0Jywg JycsIGdUeHQoJ2dvJyksICdzbWFsbGVyYm94JykNCgkJCSwnIGNsYXNzPSJtdWx0aS1lZGl0 IiBjb2xzcGFuPSInIC4gKCgkc2hvd2lwKSA/IDcgOiA2KSAuICciIHN0eWxlPSJ0ZXh0LWFs aWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKSk7DQoJCWVjaG8gJzwvdGZvb3Q+JzsNCgkJ ZWNobyAnPHRib2R5Pic7DQoNCgkJLy8gTmV3IGFjY2VzcyBrZXkgcm93DQoJCWVjaG8gJzx0 ciBpZD0ic21kX2FrZXlfY3JlYXRlIiBjbGFzcz0ic21kX2hpZGRlbiI+JzsNCgkJZWNobyB0 ZChmSW5wdXQoJ2hpZGRlbicsICdzdGVwJywgJ3NtZF9ha2V5X211bHRpX2VkaXQnLCAnJywg JycsICcnLCAnJywgJycsICdzbWRfYWtleV9zdGVwJykuZklucHV0KCd0ZXh0JywgJ3NtZF9h a2V5X25ld3BhZ2UnLCAnJywgJ3NtZF9mb2N1cycsICcnLCAnJywgJzYwJykpDQoJCQkudGQo ZklucHV0KCd0ZXh0JywgJ3NtZF9ha2V5X3RyaWdnYWgnLCAnJykpDQoJCQkudGQoZklucHV0 KCd0ZXh0JywgJ3NtZF9ha2V5X3RpbWUnLCBzYWZlX3N0cmZ0aW1lKCclWS0lbS0lZCAlSDol TTolUycpLCAnJywgJycsICcnLCAnMjUnKSkNCgkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21k X2FrZXlfbWF4aW11bScsICcnLCAnJywgJycsICcnLCAnNScpKQ0KCQkJLnRkKCcmbmJzcDsn KQ0KCQkJLiAoKCRzaG93aXApID8gdGQoJyZuYnNwOycpIDogJycpDQoJCQkudGQoZklucHV0 KCdzdWJtaXQnLCAnc21kX2FrZXlfYWRkJywgZ1R4dCgnYWRkJyksICdzbWFsbGVyYm94Jywg JycsICcnLCAnJywgJycsICdzbWRfYWtleV9hZGQnKSk7DQoJCWVjaG8gJzwvdHI+JzsNCg0K CQkvLyBSZW1haW5pbmcgYWNjZXNzIGtleXMNCgkJZm9yZWFjaCAoJHNlY3JpbmcgYXMgJHNl Y2lkeCA9PiAkZGF0YSkgew0KCQkJaWYgKCRzaG93aXApIHsNCgkJCQkkaXBzID0gZG9fbGlz dCgkZGF0YVsnaXAnXSwgJyAnKTsNCgkJCQkkaXBsaXN0ID0gYXJyYXkoKTsNCgkJCQlmb3Jl YWNoICgkaXBzIGFzICRpcCkgew0KCQkJCQkkaXBsaXN0W10gPSAoJGxvZ2dpbmcgPT0gJ25v bmUnKSA/ICRpcCA6IGVMaW5rKCdsb2cnLCAnbG9nX2xpc3QnLCAnc2VhcmNoX21ldGhvZCcs ICdpcCcsICRpcCwgJ2NyaXQnLCAkaXApOw0KCQkJCX0NCgkJCX0NCgkJCSRka2V5ID0gJGRh dGFbJ3BhZ2UnXS4nfCcuJGRhdGFbJ3RfaGV4J107DQoJCQllY2hvIHRyKA0KCQkJCXRkKCc8 YSBocmVmPSInLiRkYXRhWydwYWdlJ10uJyI+Jy4kZGF0YVsncGFnZSddLic8L2E+JywgJycs ICdwYWdlJykNCgkJCQkuIHRkKCRkYXRhWyd0cmlnZ2FoJ10pDQoJCQkJLiB0ZChzYWZlX3N0 cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycsICRkYXRhWyd0aW1lJ10pLCA4NSwgJ2RhdGUg dGltZScpDQoJCQkJLiB0ZCgkZGF0YVsnbWF4aW11bSddKQ0KCQkJCS4gdGQoJGRhdGFbJ2Fj Y2Vzc2VzJ10pDQoJCQkJLiAoICgkc2hvd2lwKSA/IHRkKCB0cmltKGpvaW4oJyAnLCAkaXBs aXN0KSksIDIwLCAnaXAnICkgOiAnJyApDQoJCQkJLiB0ZCggZklucHV0KCdjaGVja2JveCcs ICdzZWxlY3RlZFtdJywgJGRrZXksICdjaGVja2JveCcpLCAnJywgJ211bHRpLWVkaXQnKQ0K CQkJKTsNCgkJfQ0KCQllY2hvICc8L3Rib2R5Pic7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgkJ ZWNobyAnPC9mb3JtPic7DQoNCgkJZWNobyAnPGRpdiBpZD0iJy4kc21kX2FrZXlfZXZlbnQu J19uYXZpZ2F0aW9uIiBjbGFzcz0idHhwLW5hdmlnYXRpb24iPicuDQoJCQluLm5hdl9mb3Jt KCRzbWRfYWtleV9ldmVudCwgJHBhZ2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIsICRjcml0 LCAkc2VhcmNoX21ldGhvZCwgJHRvdGFsLCAkbGltaXQpLg0KDQoJCQluLnBhZ2VieV9mb3Jt KCRzbWRfYWtleV9ldmVudCwgJHNtZF9ha2V5X2xpc3RfcGFnZWJ5KS4NCgkJCW4uJzwvZGl2 Picubi4nPC9kaXY+JzsNCg0KCX0gZWxzZSB7DQoJCS8vIFRhYmxlIG5vdCBpbnN0YWxsZWQN CgkJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0n LiRzbWRfYWtleV9ldmVudC5hLidzdGVwPXNtZF9ha2V5X3RhYmxlX2luc3RhbGwiIHN0eWxl PSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfYWtl eV9nVHh0KCdzbWRfYWtleV90YmxfaW5zdGFsbF9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9m b3JtPic7DQoJCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7 DQoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21k X2FrZXlfZ1R4dCgnc21kX2FrZXlfcHJlZnNfc29tZV90YmwnKSkuYnIuYnINCgkJCQkuc21k X2FrZXlfZ1R4dCgnc21kX2FrZXlfcHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQku c21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfcHJlZnNfc29tZV9vcHRzJyksICcgY29sc3Bhbj0i MiInKQ0KCQkpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJ CWVjaG8gZW5kVGFibGUoKTsNCgl9DQp9DQoNCi8vIENoYW5nZSBhbmQgc3RvcmUgcXR5LXBl ci1wYWdlIHZhbHVlDQpmdW5jdGlvbiBzbWRfYWtleV9jaGFuZ2VfcGFnZWJ5KCkgew0KCWV2 ZW50X2NoYW5nZV9wYWdlYnkoJ3NtZF9ha2V5Jyk7DQoJc21kX2FrZXkoKTsNCn0NCg0KLy8g VGhlIHNlYXJjaCBkcm9wZG93biBsaXN0DQpmdW5jdGlvbiBzbWRfYWtleV9zZWFyY2hfZm9y bSgkY3JpdCwgJG1ldGhvZCkgew0KCWdsb2JhbCAkc21kX2FrZXlfZXZlbnQsICRzbWRfYWtl eV9wcmVmczsNCg0KCSRkb2lwID0gZ2V0X3ByZWYoJ3NtZF9ha2V5X2xvZ19pcCcsICRzbWRf YWtleV9wcmVmc1snc21kX2FrZXlfbG9nX2lwJ11bJ2RlZmF1bHQnXSwgMSk7DQoNCgkkbWV0 aG9kcyA9CWFycmF5KA0KCQkncGFnZScgICAgID0+IHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5 X3BhZ2UnKSwNCgkJJ3RyaWdnYWgnICA9PiBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90cmln Z2VyJyksDQoJCSdtYXhpbXVtJyAgPT4gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfbWF4Jyks DQoJCSdhY2Nlc3NlcycgPT4gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfYWNjZXNzZXMnKSwN CgkpOw0KDQoJaWYgKCRkb2lwKSB7DQoJCSRtZXRob2RzWydpcCddID0gZ1R4dCgnSVAnKTsN Cgl9DQoNCglyZXR1cm4gc2VhcmNoX2Zvcm0oJHNtZF9ha2V5X2V2ZW50LCAnJywgJGNyaXQs ICRtZXRob2RzLCAkbWV0aG9kLCAncGFnZScpOw0KfQ0KDQovLyBDcmVhdGUgYSBrZXkgZnJv bSB0aGUgYWRtaW4gc2lkZSdzICdOZXcga2V5JyBidXR0b24NCmZ1bmN0aW9uIHNtZF9ha2V5 X2NyZWF0ZSgpIHsNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3NtZF9ha2V5X25ld3BhZ2UnLCAn c21kX2FrZXlfdHJpZ2dhaCcsICdzbWRfYWtleV90aW1lJywgJ3NtZF9ha2V5X21heGltdW0n KSkpOw0KDQoJaWYgKCRzbWRfYWtleV9uZXdwYWdlKSB7DQoJCS8vIEp1c3QgY2FsbCB0aGUg cHVibGljIHRhZyB3aXRoIHRoZSByZWxldmFudCBvcHRpb25zDQoJCSRrZXkgPSBzbWRfYWNj ZXNzX2tleSgNCgkJCWFycmF5KA0KCQkJCSd1cmwnID0+ICRzbWRfYWtleV9uZXdwYWdlLA0K CQkJCSd0cmlnZ2VyJyA9PiAkc21kX2FrZXlfdHJpZ2dhaCwNCgkJCQknc3RhcnQnID0+ICRz bWRfYWtleV90aW1lLA0KCQkJCSdtYXgnID0+ICRzbWRfYWtleV9tYXhpbXVtLA0KCQkJKQ0K CQkpOw0KCQkkbXNnID0gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZ2VuZXJhdGVkJywgYXJy YXkoJ3trZXl9JyA9PiAka2V5KSk7DQoJfSBlbHNlIHsNCgkJJG1zZyA9IGFycmF5KHNtZF9h a2V5X2dUeHQoJ3NtZF9ha2V5X25lZWRfcGFnZScpLCBFX0VSUk9SKTsNCgl9DQoJc21kX2Fr ZXkoJG1zZyk7DQp9DQoNCi8vIEhhbmRsZSBzdWJtaXNzaW9uIG9mIHRoZSBtdWx0aS1lZGl0 IGRyb3Bkb3duIG9wdGlvbnMNCmZ1bmN0aW9uIHNtZF9ha2V5X211bHRpX2VkaXQoKSB7DQoJ JHNlbGVjdGVkID0gZ3BzKCdzZWxlY3RlZCcpOw0KCSRvcGVyYXRpb24gPSBncHMoJ3NtZF9h a2V5X211bHRpX2VkaXQnKTsNCgkkZGVsID0gMDsNCgkkbXNnID0gJyc7DQoNCglzd2l0Y2gg KCRvcGVyYXRpb24pIHsNCgkJY2FzZSAnc21kX2FrZXlfZGVsZXRlJzoNCgkJCWlmICgkc2Vs ZWN0ZWQpIHsNCgkJCQlmb3JlYWNoICgkc2VsZWN0ZWQgYXMgJHNlbCkgew0KCQkJCQkkcGFy dHMgPSBleHBsb2RlKCd8JywgJHNlbCk7DQoJCQkJCSRyZXQgPSBzYWZlX2RlbGV0ZShTTURf QUtFWVMsICJwYWdlID0gJyIgLiAkcGFydHNbMF0gLiAiJyBBTkQgdF9oZXggPSAnIiAuICRw YXJ0c1sxXSAuICInIik7DQoJCQkJCSRkZWwgPSAoJHJldCkgPyAkZGVsKzEgOiAkZGVsOw0K CQkJCX0NCgkJCQkkbXNnID0gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZGVsZXRlZCcsIGFy cmF5KCd7ZGVsZXRlZH0nID0+ICRkZWwpKTsNCgkJCX0NCgkJYnJlYWs7DQoJfQ0KDQoJc21k X2FrZXkoJG1zZyk7DQp9DQoNCi8vIERpc3BsYXkgdGhlIHByZWZzDQpmdW5jdGlvbiBzbWRf YWtleV9wcmVmcygpIHsNCglnbG9iYWwgJHNtZF9ha2V5X2V2ZW50LCAkc21kX2FrZXlfcHJl ZnM7DQoNCglwYWdldG9wKHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X3ByZWZfbGVnZW5kJykp Ow0KDQoJJG91dCA9IGFycmF5KCk7DQoJJG91dFtdID0gJzxmb3JtIG5hbWU9InNtZF9ha2V5 X3ByZWZzIiBpZD0ic21kX2FrZXlfcHJlZnMiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9 InBvc3QiPic7DQoJJG91dFtdID0gZUlucHV0KCRzbWRfYWtleV9ldmVudCkuc0lucHV0KCdz bWRfYWtleV9wcmVmc2F2ZScpOw0KCSRvdXRbXSA9IHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkk b3V0W10gPSB0cih0ZGNzKHN0cm9uZyhzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9wcmVmX2xl Z2VuZCcpKSwgMikpOw0KCWZvcmVhY2ggKCRzbWRfYWtleV9wcmVmcyBhcyAkaWR4ID0+ICRw cmVmb2JqKSB7DQoJCSRzdWJvdXQgPSBhcnJheSgpOw0KCQkkc3Vib3V0W10gPSB0ZGEoJzxs YWJlbCBmb3I9IicuJGlkeC4nIj4nLnNtZF9ha2V5X2dUeHQoJGlkeCkuJzwvbGFiZWw+Jywg JyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFs aWduOiBtaWRkbGU7IicpOw0KCQkkdmFsID0gZ2V0X3ByZWYoJGlkeCwgJHByZWZvYmpbJ2Rl ZmF1bHQnXSk7DQoJCXN3aXRjaCAoJHByZWZvYmpbJ2h0bWwnXSkgew0KCQkJY2FzZSAndGV4 dF9pbnB1dCc6DQoJCQkJJHN1Ym91dFtdID0gZklucHV0Q2VsbCgkaWR4LCAkdmFsLCAnJywg JycsICcnLCAkaWR4KTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAneWVzbm9yYWRpbyc6DQoJCQkJ JHN1Ym91dFtdID0gdGRhKHllc25vUmFkaW8oJGlkeCwgJHZhbCksJyBjbGFzcz0ibm9saW5l IicpOw0KCQkJYnJlYWs7DQoJCX0NCgkJJG91dFtdID0gdHIoam9pbihuICwkc3Vib3V0KSk7 DQoJfQ0KDQoJJG91dFtdID0gdHIodGRhKCcmbmJzcDsnLCAnIGNsYXNzPSJub2xpbmUiJykg LiB0ZGEoZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLCAn IGNsYXNzPSJub2xpbmUiJykpOw0KCSRvdXRbXSA9IGVuZFRhYmxlKCk7DQoJJG91dFtdID0g JzwvZm9ybT4nOw0KDQoJZWNobyBqb2luKG4sICRvdXQpOw0KfQ0KDQovLyBTYXZlIHRoZSBw cmVmcw0KZnVuY3Rpb24gc21kX2FrZXlfcHJlZnNhdmUoKSB7DQoJZ2xvYmFsICRzbWRfYWtl eV9ldmVudCwgJHNtZF9ha2V5X3ByZWZzOw0KDQoJZm9yZWFjaCAoJHNtZF9ha2V5X3ByZWZz IGFzICRpZHggPT4gJHByZWZvYmopIHsNCgkJJHZhbCA9IHBzKCRpZHgpOw0KCQlzZXRfcHJl ZigkaWR4LCAkdmFsLCAkc21kX2FrZXlfZXZlbnQsICRwcmVmb2JqWyd0eXBlJ10sICRwcmVm b2JqWydodG1sJ10sICRwcmVmb2JqWydwb3NpdGlvbiddKTsNCgl9DQoNCgkkbXNnID0gc21k X2FrZXlfZ1R4dCgnc21kX2FrZXlfcHJlZnNfc2F2ZWQnKTsNCg0KCXNtZF9ha2V5KCRtc2cp Ow0KfQ0KDQovLyBBZGQgYWtleSB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQNCmZ1 bmN0aW9uIHNtZF9ha2V5X3RhYmxlX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0KCSRHTE9C QUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXko KTsNCg0KCS8vIFVzZSAndHJpZ2dhaCcgYW5kICdtYXhpbXVtJyBiZWNhdXNlICd0cmlnZ2Vy JyBhbmQgJ21heCcgYXJlIHJlc2VydmVkIHdvcmRzLg0KCSRzcWxbXSA9ICJDUkVBVEUgVEFC TEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX0FLRVlTLiJgICgNCgkJYHBhZ2VgIHZhcmNo YXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQlgdF9oZXhgIHZhcmNoYXIoMTIpIE5P VCBOVUxMIGRlZmF1bHQgJycsDQoJCWB0aW1lYCBpbnQoMTQpIE5PVCBOVUxMIGRlZmF1bHQg MCwNCgkJYHNlY3JldGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCWB0 cmlnZ2FoYCB2YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnLA0KCQlgbWF4aW11bWAgaW50 KDExKSBOVUxMIGRlZmF1bHQgMCwNCgkJYGFjY2Vzc2VzYCBpbnQoMTEpIE5VTEwgZGVmYXVs dCAwLA0KCQlgaXBgIHRleHQgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJUFJJTUFSWSBLRVkg KGBwYWdlYCxgdF9oZXhgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCglpZihncHMoJ2RlYnVn JykpIHsNCgkJZG1wKCRzcWwpOw0KCX0NCglmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJ JHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRH TE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4 cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQll Y2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJfQ0KCX0NCg0KCS8vIEJlIGtpbmQgdG8g YmV0YSB0ZXN0ZXJzIGFuZCB1cGRhdGUgdGFibGUNCgkkZmxkcyA9IGdldFRoaW5ncygnZGVz Y3JpYmUgYCcuUEZYLlNNRF9BS0VZUy4nYCcpOw0KCWlmICghaW5fYXJyYXkoJ2lwJywkZmxk cykpIHsNCgkJc2FmZV9hbHRlcihTTURfQUtFWVMsICJhZGQgYGlwYCB0ZXh0IE5PVCBOVUxM IGRlZmF1bHQgJycgYWZ0ZXIgYGFjY2Vzc2VzYCIpOw0KCX0NCg0KCS8vIFNwaXQgb3V0IHJl c3VsdHMNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCWlmICgk c2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90YmxfaW5z dGFsbGVkJyk7DQoJCQlzbWRfYWtleSgkbXNnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWlmICgk c2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90Ymxfbm90 X2luc3RhbGxlZCcpOw0KCQkJc21kX2FrZXkoJG1zZyk7DQoJCX0NCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWJsZSBpZiBpbiBkYXRhYmFzZQ0K ZnVuY3Rpb24gc21kX2FrZXlfdGFibGVfcmVtb3ZlKCkgew0KCSRyZXQgPSAnJzsNCgkkc3Fs ID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCglpZiAoc21k X2FrZXlfdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElT VFMgIiAuUEZYLlNNRF9BS0VZUy4gIjsgIjsNCgkJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCQlk bXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0g c2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCQkkR0xPQkFM U1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQllY2hv ICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJEdMT0JBTFNb J3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtc2cgPSBzbWRfYWtleV9nVHh0KCdzbWRf YWtleV90YmxfcmVtb3ZlZCcpOw0KCX0gZWxzZSB7DQoJCSRtc2cgPSBzbWRfYWtleV9nVHh0 KCdzbWRfYWtleV90Ymxfbm90X3JlbW92ZWQnKTsNCgkJc21kX2FrZXkoJG1zZyk7DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9ha2V5X3Rh YmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkgew0KCQkkdGJscyA9IGFycmF5KFNN RF9BS0VZUyA9PiA4KTsNCgkJJG91dCA9IGNvdW50KCR0YmxzKTsNCgkJZm9yZWFjaCAoJHRi bHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJCWVj aG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMn LCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xzLiIgKysiLmJyOw0KCQkJfQ0K CQkJaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgPT0gJGNvbHMpIHsN CgkJCQkkb3V0LS07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09MCkgPyAxIDogMDsN Cgl9IGVsc2Ugew0KCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJCQllY2hvICIrKyBUQUJMRSAi LlNNRF9BS0VZUy4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfQUtF WVMpKS4iIENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycs IFNNRF9BS0VZUykpOw0KCX0NCn0NCg0KLy8qKioqKioqKioqKioqKioqKioqKioqDQovLyBQ VUJMSUMgU0lERSBJTlRFUkZBQ0UNCi8vKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rp b24gc21kX2FjY2Vzc19rZXkoJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRf YWtleV9wcmVmczsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdzZWNyZXQnICAgID0+ ICcnLA0KCQkndXJsJyAgICAgICA9PiAnJywNCgkJJ3NpdGVfbmFtZScgPT4gJzEnLA0KCQkn c3RhcnQnICAgICA9PiAnJywNCgkJJ3RyaWdnZXInICAgPT4gJ3NtZF9ha2V5JywNCgkJJ21h eCcgICAgICAgPT4gJycsDQoJCSdleHRyYScgICAgID0+ICcnLA0KCSksJGF0dHMpKTsNCg0K CWlmIChzbWRfYWtleV90YWJsZV9leGlzdCgxKSkgew0KCQkkdHJpZ2dlciA9IHRyaW0oJHRy aWdnZXIpOw0KCQkkdHJpZ2dlciA9ICgkdHJpZ2dlciA9PSAnZmlsZV9kb3dubG9hZCcpID8g JycgOiAkdHJpZ2dlcjsNCg0KCQkkc21kX2FrZXlfc2FsdF9sZW5ndGggPSBnZXRfcHJlZign c21kX2FrZXlfc2FsdF9sZW5ndGgnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9ha2V5X3NhbHRf bGVuZ3RoJ11bJ2RlZmF1bHQnXSk7DQoNCgkJLy8gV2l0aG91dCBhIFVSTCwgYXNzdW1lIGN1 cnJlbnQgcGFnZQ0KCQkkcGFnZSA9IHJ0cmltKCAoKCR1cmwpID8gJHVybCA6IHNlcnZlclNl dCgnUkVRVUVTVF9VUkknKSksICcvJyk7DQoJCWlmICgkc2l0ZV9uYW1lKSB7DQoJCQkkcGFn ZSA9IChzdHJwb3MoJHBhZ2UsICdodHRwJykgPT09IDApID8gJHBhZ2UgOiBydHJpbShodSwg Jy8nKSAuICRwYWdlOw0KCQl9DQoNCgkJaWYgKCEkc2VjcmV0KSB7DQoJCQkkc2VjcmV0ID0g dW5pcWlkKCcnLCB0cnVlKTsNCgkJfQ0KDQoJCSRzYWx0ID0gc3Vic3RyKG1kNSh1bmlxaWQo cmFuZCgpLCB0cnVlKSksIDAsICRzbWRfYWtleV9zYWx0X2xlbmd0aCk7DQoJCSRwbGVuID0g c3RybGVuKCRwYWdlKSAlIDMyOyAvLyBCZWNhdXNlIDMyIGlzIHRoZSBzaXplIG9mIGFuIG1k NSBzdHJpbmcgYW5kIHdlIGRvbid0IHdhbnQgdG8gZmFsbCBvZmYgdGhlIGVuZA0KDQoJCS8v IEdlbmVyYXRlIGEgdGltZXN0YW1wLiBUaGUgY2xvY2sgc3RhcnRzIHRpY2tpbmcgZnJvbSB0 aGlzIG1vbWVudA0KCQkkdHMgPSAoJHN0YXJ0KSA/IHNhZmVfc3RydG90aW1lKCRzdGFydCkg OiB0aW1lKCk7DQoJCSR0cyA9ICgkdHMgPT09IGZhbHNlKSA/IHRpbWUoKSA6ICR0czsNCgkJ JHRfaGV4ID0gZGVjaGV4KCR0cyk7DQoNCgkJLy8gVXBkYXRlL2luc2VydCB0aGUgcmVtYWlu aW5nIGRhdGENCgkJJGV4aXN0cyA9IHNhZmVfZmllbGQoJ3BhZ2UnLCBTTURfQUtFWVMsICJw YWdlPSciLmRvU2xhc2goJHBhZ2UpLiInIEFORCB0X2hleD0nIi5kb1NsYXNoKCR0X2hleCku IiciKTsNCgkJJG1heGluZm8gPSAnJzsNCgkJaWYgKCRtYXgpIHsNCgkJCSRtYXhpbmZvID0g IiwgbWF4aW11bSA9ICciLmRvU2xhc2goJG1heCkuIicsIGFjY2Vzc2VzID0gJzAnIjsNCgkJ fQ0KCQlpZiAoJGV4aXN0cykgew0KCQkJc2FmZV91cGRhdGUoU01EX0FLRVlTLCAidHJpZ2dh aD0nIi5kb1NsYXNoKCR0cmlnZ2VyKS4iJywgdGltZT0nIi5kb1NsYXNoKCR0cykuIicsIHNl Y3JldD0nIi5kb1NsYXNoKCRzZWNyZXQpLiInIiAuICRtYXhpbmZvLCAicGFnZT0nIi5kb1Ns YXNoKCRwYWdlKS4iJyBBTkQgdF9oZXg9JyIuZG9TbGFzaCgkdF9oZXgpLiInIik7DQoJCX0g ZWxzZSB7DQoJCQlzYWZlX2luc2VydChTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBh Z2UpLiInLCB0X2hleD0nIi5kb1NsYXNoKCR0X2hleCkuIicsIHRyaWdnYWg9JyIuZG9TbGFz aCgkdHJpZ2dlcikuIicsIHNlY3JldD0nIi5kb1NsYXNoKCRzZWNyZXQpLiInLCB0aW1lPSci LmRvU2xhc2goJHRzKS4iJyIgLiAkbWF4aW5mbyk7DQoJICAgfQ0KDQoJCS8vIFRhY2sgb24g bWF4IGlmIGFwcGxpY2FibGUNCgkJJG1heCA9ICgkbWF4KSA/ICcuJy4kbWF4IDogJyc7DQoN CgkJLy8gQW5kIGFueSBleHRyYQ0KCQkkZXh0cmF0b2sgPSAoJGV4dHJhKSA/ICcvJy4kZXh0 cmEgOiAnJzsNCg0KCQkvLyBDcmVhdGUgdGhlIHJhdyB0b2tlbi4uLg0KCQkkdG9rZW4gPSBt ZDUoJHNhbHQuJHNlY3JldC4kcGFnZS4kdHJpZ2dlci4kdF9oZXguJG1heC4kZXh0cmEpOw0K CQkvLyAuLi4gYW5kIGluc2VydCB0aGUgc2FsdCBwYXJ0d2F5IHRocm91Z2gNCgkJJHNhbHR5 X3Rva2VuID0gc3Vic3RyKCR0b2tlbiwgMCwgJHBsZW4pIC4gJHNhbHQgLiBzdWJzdHIoJHRv a2VuLCAkcGxlbik7DQoNCgkJcmV0dXJuICRwYWdlIC4gKCgkdHJpZ2dlcikgPyAnLycgLiAk dHJpZ2dlciA6ICcnKSAuICcvJyAuICRzYWx0eV90b2tlbiAuICcvJyAuICR0X2hleCAuICRt YXggLiAkZXh0cmF0b2s7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfYWtleV9n VHh0KCdzbWRfYWtleV90Ymxfbm90X2luc3RhbGxlZCcpLCBFX1VTRVJfTk9USUNFKTsNCgl9 DQp9DQoNCi8vIFByb3RlY3QgYSBwYWdlIGZvciBhIGdpdmVuIHRpbWUgbGltaXQgZnJvbSB0 aGUgbW9tZW50IHRoZQ0KLy8gYWNjZXNzIHRva2VuIGhhcyBiZWVuIGdlbmVyYXRlZC4gRW1i ZWQgdGhpcyB0YWcgYXQgdGhlIHRvcA0KLy8gb2YgdGhlIHBhZ2UgeW91IHdhbnQgdG8gcHJv dGVjdCBvciB3cmFwIGl0IGFyb3VuZCBwYXJ0IG9mIGENCi8vIHBhZ2UgeW91IHdpc2ggdG8g cHJvdGVjdC4gVGhlIHVuaXF1ZSBVUkwgdG8gdGhlIHJlc291cmNlDQovLyBpcyBnZW5lcmF0 ZWQgYnkgPHR4cDpzbWRfYWNjZXNzX2tleSAvPg0KZnVuY3Rpb24gc21kX2FjY2Vzc19wcm90 ZWN0KCRhdHRzLCAkdGhpbmc9TlVMTCkgew0KCWdsb2JhbCAkc21kX2FjY2Vzc19lcnJvciwg JHNtZF9hY2Nlc3NfZXJyY29kZSwgJHNtZF9ha2V5X2luZm8sICRzbWRfYWtleV9wcmVmcywg JHBlcm1saW5rX21vZGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHJpZ2dlcicg ICAgICA9PiAnc21kX2FrZXknLA0KCQkndHJpZ2dlcl9tb2RlJyA9PiAnZXhhY3QnLCAvLyBl eGFjdCwgYmVnaW5zLCBlbmRzLCBjb250YWlucw0KCQknc2l0ZV9uYW1lJyAgICA9PiAnMScs DQoJCSdmb3JjZScgICAgICAgID0+ICcwJywNCgkJJ2V4cGlyZXMnICAgICAgPT4gJzM2MDAn LCAvLyBpbiBzZWNvbmRzDQoJKSwkYXR0cykpOw0KDQoJaWYgKHNtZF9ha2V5X3RhYmxlX2V4 aXN0KDEpKSB7DQoJCSR1cmwgPSBzZXJ2ZXJTZXQoJ1JFUVVFU1RfVVJJJyk7DQoJCSR1cmwg PSAoKCRzaXRlX25hbWUgJiYgKHN0cnBvcygkdXJsLCBodSkgPT09IGZhbHNlKSkgPyBydHJp bShodSwgJy8nKSA6ICcnKSAuICR1cmw7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkdXJs KTsNCg0KCQkvLyBMb29rIGZvciBvbmUgb2YgdGhlIHRyaWdnZXJzIGluIHRoZSBVUkwgYW5k IGJvbWIgb3V0IGlmIHdlIGZpbmQgaXQNCgkJJHRyaWdnZXJzID0gZG9fbGlzdCgkdHJpZ2dl cik7DQoJCSR0cmlnZ2VyID0gJHRyaWdnZXJzWzBdOyAvLyBJbml0aWFsaXNlIHRvIHRoZSBm aXJzdCB2YWx1ZSBpbiBjYXNlIG5vIG90aGVycyBhcmUgZm91bmQNCg0KCQkkdHJpZ29mZiA9 IGZhbHNlOw0KCQlmb3JlYWNoICgkdHJpZ2dlcnMgYXMgJHRyaWcpIHsNCgkJCXN3aXRjaCAo JHRyaWdnZXJfbW9kZSkgew0KCQkJCWNhc2UgJ2V4YWN0JzoNCgkJCQkJJHRyaWdvZmYgPSBh cnJheV9zZWFyY2goJHRyaWcsICRwYXJ0cyk7DQoJCQkJCSRyZWFsVHJpZyA9ICR0cmlnOw0K CQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2JlZ2lucyc6DQoJCQkJCSRjb3VudCA9IDA7DQoJCQkJ CWZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgew0KCQkJCQkJaWYgKHN0cnBvcygkcGFydCwg JHRyaWcpID09PSAwKSB7DQoJCQkJCQkJJHRyaWdvZmYgPSAkY291bnQ7DQoJCQkJCQkJJHJl YWxUcmlnID0gJHBhcnQ7DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQkkY291bnQr KzsNCgkJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2VuZHMnOg0KCQkJCQkkY291bnQg PSAwOw0KCQkJCQlmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsNCgkJCQkJCSRyZSA9ICcv LisnLnByZWdfcXVvdGUoJHRyaWcpLickL2knOw0KCQkJCQkJaWYgKHByZWdfbWF0Y2goJHJl LCAkcGFydCkgPT09IDEpIHsNCgkJCQkJCQkkdHJpZ29mZiA9ICRjb3VudDsNCgkJCQkJCQkk cmVhbFRyaWcgPSAkcGFydDsNCgkJCQkJCQlicmVhazsNCgkJCQkJCX0NCgkJCQkJCSRjb3Vu dCsrOw0KCQkJCQl9DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29udGFpbnMnOg0KCQkJCQkk Y291bnQgPSAwOw0KCQkJCQlmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsNCgkJCQkJCSRy ZSA9ICcvLionLnByZWdfcXVvdGUoJHRyaWcpLicuKiQvaSc7DQoJCQkJCQlpZiAocHJlZ19t YXRjaCgkcmUsICRwYXJ0KSA9PT0gMSkgew0KCQkJCQkJCSR0cmlnb2ZmID0gJGNvdW50Ow0K CQkJCQkJCSRyZWFsVHJpZyA9ICRwYXJ0Ow0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJfQ0KCQkJ CQkJJGNvdW50Kys7DQoJCQkJCX0NCgkJCQlicmVhazsNCgkJCX0NCgkJCWlmICgkdHJpZ29m ZiAhPT0gZmFsc2UpIHsNCgkJCQkvLyBGb3VuZCBpdCBzbyBzZXQgdGhlIHRyaWdnZXIgdG8g YmUgdGhlIGN1cnJlbnQgaXRlbSBhbmQganVtcCBvdXQNCgkJCQkkdHJpZ29mZiA9ICgkdHJp Z2dlciA9PSAnZmlsZV9kb3dubG9hZCcpID8gJHRyaWdvZmYgKyAyIDogJHRyaWdvZmY7DQoJ CQkJJHRyaWdnZXIgPSAkcmVhbFRyaWc7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCg0KCQkk cmV0ID0gZmFsc2U7DQoJCSRzbWRfYWNjZXNzX2Vycm9yID0gJHNtZF9hY2Nlc3NfZXJyY29k ZSA9ICcnOw0KCQkkc21kX2FrZXlfc2FsdF9sZW5ndGggPSBnZXRfcHJlZignc21kX2FrZXlf c2FsdF9sZW5ndGgnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9ha2V5X3NhbHRfbGVuZ3RoJ11b J2RlZmF1bHQnXSk7DQoJCSRkb2lwID0gZ2V0X3ByZWYoJ3NtZF9ha2V5X2xvZ19pcCcsICRz bWRfYWtleV9wcmVmc1snc21kX2FrZXlfbG9nX2lwJ11bJ2RlZmF1bHQnXSk7DQoNCgkJaWYg KCR0cmlnb2ZmICE9PSBmYWxzZSkgew0KCQkJJHRva2lkeCA9ICR0cmlnb2ZmICsgMTsNCgkJ CSR0aW1laWR4ID0gJHRyaWdvZmYgKyAyOw0KCQkJJGV4dHJhaWR4ID0gJHRyaWdvZmYgKyAz Ow0KDQoJCQkvLyBPSywgb24gYSB0cmlnZ2VyIHBhZ2UsIHNvIHJlYWQgdGhlIHRva2VuIGZy b20gdGhlIFVSTA0KCQkJJHRvayA9IChpc3NldCgkcGFydHNbJHRva2lkeF0pICYmIHN0cmxl bigkcGFydHNbJHRva2lkeF0pID09IGludHZhbCgzMiArICRzbWRfYWtleV9zYWx0X2xlbmd0 aCkpID8gJHBhcnRzWyR0b2tpZHhdIDogMDsNCg0KCQkJaWYgKCR0b2spIHsNCgkJCQkvLyBU aGUgdG9rZW4gaXMgcHJlc2VudCwgc28gcmVhZCB0aGUgdGltZXN0YW1wIGZyb20gdGhlIFVS TA0KCQkJCSR0X2hleCA9IChpc3NldCgkcGFydHNbJHRpbWVpZHhdKSkgPyAkcGFydHNbJHRp bWVpZHhdIDogMDsNCg0KCQkJCS8vIElzIHRoZXJlIGEgZG93bmxvYWQgbGltaXQ/IEV4dHJh Y3QgaXQgaWYgc28NCgkJCQkkdGltZXBhcnRzID0gZG9fbGlzdCgkdF9oZXgsICcuJyk7DQoJ CQkJJG1heCA9IChpc3NldCgkdGltZXBhcnRzWzFdKSkgPyAkdGltZXBhcnRzWzFdIDogJzAn Ow0KCQkJCSRtYXh0b2sgPSAoJG1heCkgPyAnLicuJG1heCA6ICcnOw0KCQkJCSR0X2hleCA9 ICR0aW1lcGFydHNbMF07DQoNCgkJCQkvLyBBbnkgZXh0cmEgaW5mbz8NCgkJCQkkZXh0cmFz ID0gKGlzc2V0KCRwYXJ0c1skZXh0cmFpZHhdKSkgPyBhcnJheV9zbGljZSgkcGFydHMsICRl eHRyYWlkeCkgOiBhcnJheSgpOw0KDQoJCQkJLy8gUmVjcmVhdGUgdGhlIG9yaWdpbmFsIHBh Z2UgVVJMLCBzYW5zIC90cmlnZ2VyL3Rva2VuL3RpbWUNCgkJCQlpZiAoJHRyaWdnZXIgPT0g J2ZpbGVfZG93bmxvYWQnKSB7DQoJCQkJCSR0cmlnb2ZmKys7DQoJCQkJCSR0cmlnZ2VyID0g Jyc7DQoJCQkJfQ0KCQkJCWlmICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSB7DQoJCQkJ CS8vIERvbid0IHdhbnQgYSBzbGFzaCBiZXR3ZWVuIHNpdGUgYW5kIHN0YXJ0IG9mIHF1ZXJ5 IHBhcmFtcw0KCQkJCQkkcGFnZSA9IHJ0cmltKGpvaW4oJy8nLCBhcnJheV9zbGljZSgkcGFy dHMsIDAsICR0cmlnb2ZmLTEpKSwgJy8nKSAuICRwYXJ0c1skdHJpZ29mZi0xXTsNCgkJCQl9 IGVsc2Ugew0KCQkJCQkkcGFnZSA9IHJ0cmltKGpvaW4oJy8nLCBhcnJheV9zbGljZSgkcGFy dHMsIDAsICR0cmlnb2ZmKSksICcvJyk7DQoJCQkJfQ0KDQoJCQkJaWYgKCR0X2hleCkgew0K CQkJCQkvLyBUaGUgdGltZXN0YW1wIGlzIHByZXNlbnQuIE5leHQsIGdldCB0aGUgc2VjcmV0 IGtleQ0KCQkJCQkkc2VjcmV0ID0gZmFsc2U7DQoJCQkJCSRzZWNyaW5nID0gc2FmZV9yb3co JyonLCBTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiInIEFORCB0X2hleCA9 ICciLmRvU2xhc2goJHRfaGV4KS4iJyIpOw0KDQoJCQkJCWlmICgkc2VjcmluZykgew0KCQkJ CQkJJHNlY3JldCA9ICRzZWNyaW5nWydzZWNyZXQnXTsNCg0KCQkJCQkJLy8gRXh0cmFjdCB0 aGUgc2FsdCBmcm9tIHRoZSB0b2tlbg0KCQkJCQkJJHBsZW4gPSBzdHJsZW4oJHBhZ2UpICUg MzI7DQoJCQkJCQkkc2FsdCA9IHN1YnN0cigkdG9rLCAkcGxlbiwgJHNtZF9ha2V5X3NhbHRf bGVuZ3RoKTsNCgkJCQkJCSR0b2sgPSBzdWJzdHIoJHRvaywgMCwgJHBsZW4pLnN1YnN0cigk dG9rLCAkcGxlbiskc21kX2FrZXlfc2FsdF9sZW5ndGgpOw0KCQkJCQkJJGV4dCA9ICgoJGV4 dHJhcykgPyB1cmxkZWNvZGUoam9pbignLycsICRleHRyYXMpKSA6ICcnKTsNCg0KCQkJCQkJ Ly8gUmVnZW5lcmF0ZSB0aGUgb3JpZ2luYWwgdG9rZW4uLi4NCgkJIAkJCQkkY2hlY2tfdG9r ZW4gPSBtZDUoJHNhbHQuJHNlY3JldC4kcGFnZS4kdHJpZ2dlci4kdF9oZXguJG1heHRvay4k ZXh0KTsNCg0KCQkJCQkJLy8gLi4uIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBvbmUgaW4gdGhl IFVSTA0KCQkJCQkJaWYgKCRjaGVja190b2tlbiA9PSAkdG9rKSB7DQoJCQkJCQkJLy8gVG9r ZW4gaXMgdmFsaWQuIE5vdyBjaGVjayBpZiB0aGUgcGFnZSBoYXMgZXhwaXJlZA0KCQkJCQkJ CSR0X2RlYyA9IGhleGRlYygkdF9oZXgpOw0KCQkJCQkJCSRub3cgPSB0aW1lKCk7DQoNCgkJ CQkJCQkvLyBIYXMgdGhlIHJlc291cmNlIGJlY29tZSBhdmFpbGFibGUgeWV0Pw0KCQkJCQkJ CWlmICgkbm93IDwgJHRfZGVjKSB7DQoJCQkJCQkJCWlmICgkdGhpbmcgPT0gTlVMTCkgew0K CQkJCQkJCQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9lcnJfdW5hdmFpbGFi bGUnKSwgNDEwKTsNCgkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCSRzbWRfYWNjZXNzX2Vy cm9yID0gJ3NtZF9ha2V5X2Vycl91bmF2YWlsYWJsZSc7DQoJCQkJCQkJCQkkc21kX2FjY2Vz c19lcnJjb2RlID0gNDEwOw0KCQkJCQkJCQl9DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJ Ly8gSXMgJ25vdycgZ3JlYXRlciB0aGFuICd0aGVuJyAod2hlbiB0b2tlbiBnZW5lcmF0ZWQp ICsgZXhwaXJ5IHBlcmlvZD8NCgkJCQkJCQkJaWYgKCRleHBpcmVzICE9IDAgJiYgJG5vdyA+ ICR0X2RlYyArICRleHBpcmVzKSB7DQoJCQkJCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsN CgkJCQkJCQkJCQl0eHBfZGllKHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X2Vycl9leHBpcmVk JyksIDQxMCk7DQoJCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJCSRzbWRfYWNjZXNzX2Vy cm9yID0gJ3NtZF9ha2V5X2Vycl9leHBpcmVkJzsNCgkJCQkJCQkJCQkkc21kX2FjY2Vzc19l cnJjb2RlID0gNDEwOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJ Ly8gQ2hlY2sgaWYgdGhlIGRvd25sb2FkIGxpbWl0IGhhcyBiZWVuIGV4Y2VlZGVkDQoJCQkJ CQkJCQkkdnVfcXR5ID0gJHNlY3JpbmdbJ2FjY2Vzc2VzJ107DQoJCQkJCQkJCQlpZiAoJG1h eCkgew0KCQkJCQkJCQkJCWlmICgkdnVfcXR5IDwgJG1heCkgew0KCQkJCQkJCQkJCQkkcmV0 ID0gdHJ1ZTsNCgkJCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJCQlpZiAoJHRoaW5nID09 IE5VTEwpIHsNCgkJCQkJCQkJCQkJCXR4cF9kaWUoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlf ZXJyX2xpbWl0JyksIDQxMCk7DQoJCQkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJCQkk c21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfbGltaXQnOw0KCQkJCQkJCQkJCQkJ JHNtZF9hY2Nlc3NfZXJyY29kZSA9IDQxMDsNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCX0N CgkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJJHJldCA9IHRydWU7DQoJCQkJCQkJCQl9 DQoJCQkJCQkJCQkvLyBJbmNyZW1lbnQgdGhlIGFjY2VzcyBjb3VudGVyDQoJCQkJCQkJCQkk dnVfcXR5Kys7DQoJDQoJCQkJCQkJCQkvLyBHcmFiIHRoZSBJUCBhbmQgYWRkIGl0IHRvIHRo ZSBsaXN0IG9mIElQcyBzbyBmYXINCgkJCQkJCQkJCWlmICgkZG9pcCkgew0KCQkJCQkJCQkJ CSRpcHMgPSBkb19saXN0KCRzZWNyaW5nWydpcCddLCAnICcpOw0KCQkJCQkJCQkJCSRpcCA9 IHJlbW90ZV9hZGRyKCk7DQoJCQkJCQkJCQkJaWYgKCFpbl9hcnJheSgkaXAsICRpcHMpKSB7 DQoJCQkJCQkJCQkJCSRpcHNbXSA9ICRpcDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJJGlw dXAgPSAiLCBpcD0nIi5kb1NsYXNoKHRyaW0oam9pbignICcsICRpcHMpKSkuIiciOw0KCQkJ CQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCQkkaXB1cCA9ICcnOw0KCQkJCQkJCQkJfQ0KCQkJ CQkJCQkJc2FmZV91cGRhdGUoU01EX0FLRVlTLCAiYWNjZXNzZXM9JyIuZG9TbGFzaCgkdnVf cXR5KS4iJyIgLiAkaXB1cCwgInBhZ2U9JyIuZG9TbGFzaCgkcGFnZSkuIicgQU5EIHRfaGV4 ID0gJyIuZG9TbGFzaCgkdF9oZXgpLiInIik7DQoNCgkJCQkJCQkJCS8vIExvYWQgdXAgdGhl IGdsb2JhbCBhcnJheSBzbyA8dHhwOnNtZF9hY2Nlc3NfaW5mbz4gYW5kIDx0eHA6aWZfc21k X2FjY2Vzc19pbmZvPiB3b3JrDQoJCQkJCQkJCQkkc21kX2FrZXlfaW5mbyA9IGFycmF5KA0K CQkJCQkJCQkJCSdwYWdlJyAgICAgPT4gJHNlY3JpbmdbJ3BhZ2UnXSwNCgkJCQkJCQkJCQkn aGV4dGltZScgID0+ICRzZWNyaW5nWyd0X2hleCddLA0KCQkJCQkJCQkJCSdpc3N1ZWQnICAg PT4gJHNlY3JpbmdbJ3RpbWUnXSwNCgkJCQkJCQkJCQknbm93JyAgICAgID0+ICRub3csDQoJ CQkJCQkJCQkJJ2V4cGlyZXMnICA9PiAkdF9kZWMgKyAkZXhwaXJlcywNCgkJCQkJCQkJCQkn dHJpZ2dlcicgID0+ICRzZWNyaW5nWyd0cmlnZ2FoJ10sDQoJCQkJCQkJCQkJJ21heGltdW0n ICA9PiAkc2VjcmluZ1snbWF4aW11bSddLA0KCQkJCQkJCQkJCSdhY2Nlc3NlcycgPT4gJHZ1 X3F0eSwNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQlpZiAoJGRvaXApIHsNCgkJCQkJCQkJCQkk c21kX2FrZXlfaW5mb1snaXAnXSA9ICRpcDsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICgk ZXh0cmFzKSB7DQoJCQkJCQkJCQkJJHNtZF9ha2V5X2luZm9bJ2V4dHJhJ10gPSB1cmxkZWNv ZGUoam9pbignLycsICRleHRyYXMpKTsNCgkJCQkJCQkJCQlmb3JlYWNoKCRleHRyYXMgYXMg JGlkeCA9PiAkZXh0cmEpIHsNCgkJCQkJCQkJCQkJJHNtZF9ha2V5X2luZm9bJ2V4dHJhXycu aW50dmFsKCRpZHgrMSldID0gdXJsZGVjb2RlKCRleHRyYSk7DQoJCQkJCQkJCQkJfQ0KCQkJ CQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJ CWlmICgkdGhpbmcgPT0gTlVMTCkgew0KCQkJCQkJCQl0eHBfZGllKHNtZF9ha2V5X2dUeHQo J3NtZF9ha2V5X2Vycl9pbnZhbGlkX3Rva2VuJyksIDQwMyk7DQoJCQkJCQkJfSBlbHNlIHsN CgkJCQkJCQkJJHNtZF9hY2Nlc3NfZXJyb3IgPSAnc21kX2FrZXlfZXJyX2ludmFsaWRfdG9r ZW4nOw0KCQkJCQkJCQkkc21kX2FjY2Vzc19lcnJjb2RlID0gNDAzOw0KCQkJCQkJCX0NCgkJ CQkJCX0NCg0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJaWYgKCR0aGluZyA9PSBOVUxMKSB7DQoJ CQkJCQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9lcnJfdW5hdXRob3JpemVk JyksIDQwMSk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCSRzbWRfYWNjZXNzX2Vycm9yID0g J3NtZF9ha2V5X2Vycl91bmF1dGhvcml6ZWQnOw0KCQkJCQkJCSRzbWRfYWNjZXNzX2VycmNv ZGUgPSA0MDE7DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmICgk dGhpbmcgPT0gTlVMTCkgew0KCQkJCQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtl eV9lcnJfbWlzc2luZ190aW1lc3RhbXAnKSwgNDAzKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ CSRzbWRfYWNjZXNzX2Vycm9yID0gJ3NtZF9ha2V5X2Vycl9taXNzaW5nX3RpbWVzdGFtcCc7 DQoJCQkJCQkkc21kX2FjY2Vzc19lcnJjb2RlID0gNDAzOw0KCQkJCQl9DQoJCQkJfQ0KDQoJ CQl9IGVsc2Ugew0KCQkJCWlmICgkdGhpbmcgPT0gTlVMTCkgew0KCQkJCQl0eHBfZGllKHNt ZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X2Vycl9iYWRfdG9rZW4nKSwgNDAzKTsNCgkJCQl9IGVs c2Ugew0KCQkJCQkkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfYmFkX3Rva2Vu JzsNCgkJCQkJJHNtZF9hY2Nlc3NfZXJyY29kZSA9IDQwMzsNCgkJCQl9DQoJCQl9DQoJCX0g ZWxzZSB7DQoJCQkvLyBJZiB3ZSBhbHdheXMgd2FudCB0byBmb3JiaWQgYWNjZXNzIHRvIHRo aXMgcGFnZSByZWdhcmRsZXNzIGlmIHRoZSB0cmlnZ2VyIGV4aXN0cw0KCQkJaWYgKCRmb3Jj ZSkgew0KCQkJCWlmICgkdGhpbmcgPT0gTlVMTCkgew0KCQkJCQl0eHBfZGllKHNtZF9ha2V5 X2dUeHQoJ3NtZF9ha2V5X2Vycl9mb3JiaWRkZW4nKSwgNDAxKTsNCgkJCQl9IGVsc2Ugew0K CQkJCQkkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfZm9yYmlkZGVuJzsNCgkJ CQkJJHNtZF9hY2Nlc3NfZXJyY29kZSA9IDQwMTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJ CSRyZXQgPSB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgd2UgcmVhY2ggdGhpcyBwb2lu dCBpdCdzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBjb250YWluZXINCgkJcmV0dXJuIHBhcnNl KEV2YWxFbHNlKCR0aGluZywgJHJldCkpOw0KCX0gZWxzZSB7DQoJCXRyaWdnZXJfZXJyb3Io c21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfdGJsX25vdF9pbnN0YWxsZWQnKSwgRV9VU0VSX05P VElDRSk7DQoJfQ0KfQ0KDQovLyBDYWxsZWQganVzdCBiZWZvcmUgYSBkb3dubG9hZCBpcyBp bml0aWF0ZWQNCmZ1bmN0aW9uIHNtZF9hY2Nlc3NfcHJvdGVjdF9kb3dubG9hZCgkZXZ0LCAk c3RwKSB7DQoJZ2xvYmFsICRzbWRfYWtleV9wcmVmcywgJGlkLCAkZmlsZV9lcnJvcjsNCg0K CWlmIChzbWRfYWtleV90YWJsZV9leGlzdCgxKSAmJiAhaXNzZXQoJGZpbGVfZXJyb3IpKSB7 DQoJCSRmaWxlaWQgPSBpbnR2YWwoJGlkKTsNCg0KCQkvLyBJbiBjYXNlIHRoZSBwYWdlIHdh cyBjYWxsZWQgd2l0aCBhIGJvZ3VzIGZpbGVuYW1lLCBnZXQgdGhlICJ0cnVlIiBmaWxlbmFt ZQ0KCQkvLyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgbWFrZSB1cCB0aGUgdmFsaWQgVVJMDQoJ CSRyZWFsX2ZpbGUgPSBzYWZlX2ZpZWxkKCJmaWxlbmFtZSIsICJ0eHBfZmlsZSIsICJpZD0i LmRvU2xhc2goJGZpbGVpZCkpOw0KCQkkcGFnZSA9IGZpbGVkb3dubG9hZHVybCgkZmlsZWlk LCAkcmVhbF9maWxlKTsNCgkJJHNlY3JpbmcgPSBzYWZlX2ZpZWxkKCdwYWdlJywgU01EX0FL RVlTLCAicGFnZT0nIi5kb1NsYXNoKCRwYWdlKS4iJyIpOw0KDQoJCS8vIE9ubHkgd2FudCB0 byBwcm90ZWN0IHBhZ2VzIHRoYXQgd2UndmUgZ2VuZXJhdGVkIHRva2VucyBmb3INCgkJaWYg KCRzZWNyaW5nKSB7DQoJCQlyZXR1cm4gc21kX2FjY2Vzc19wcm90ZWN0KA0KCQkJCWFycmF5 KA0KCQkJCQkndHJpZ2dlcicgPT4gJ2ZpbGVfZG93bmxvYWQnLA0KCQkJCQknZm9yY2UnICAg PT4gJzEnLA0KCQkJCQknZXhwaXJlcycgPT4gZ2V0X3ByZWYoJ3NtZF9ha2V5X2ZpbGVfZG93 bmxvYWRfZXhwaXJlcycsICRzbWRfYWtleV9wcmVmc1snc21kX2FrZXlfZmlsZV9kb3dubG9h ZF9leHBpcmVzJ11bJ2RlZmF1bHQnXSksDQoJCQkJKQ0KCQkJKTsNCgkJfQ0KCX0NCgkvLyBy ZW1vdGUgZG93bmxvYWQgbm90IGRvbmUgLSBsZWF2ZSB0byBUWFAgdG8gaGFuZGxlIGVycm9y IG9yICJsb2NhbCIgZmlsZSBkb3dubG9hZA0KCXJldHVybjsNCn0NCg0KLy8gQ29uZGl0aW9u YWwgdGFnIGZvciBjaGVja2luZyBlcnJvciBzdGF0dXMgZnJvbSBzbWRfYWNjZXNzX3Byb3Rl Y3QNCmZ1bmN0aW9uIHNtZF9pZl9hY2Nlc3NfZXJyb3IoJGF0dHMsICR0aGluZz1OVUxMKSB7 DQoJZ2xvYmFsICRzbWRfYWNjZXNzX2Vycm9yLCAkc21kX2FjY2Vzc19lcnJjb2RlOw0KDQoJ ZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnICAgPT4gJycsDQoJCSdjb2RlJyAgID0+ ICcnLA0KCSksJGF0dHMpKTsNCg0KCSRlcnIgPSBhcnJheSgpOw0KCSRjb2RlcyA9IGRvX2xp c3QoJGNvZGUpOw0KCSR0eXBlcyA9IGRvX2xpc3QoJHR5cGUpOw0KDQoJaWYgKCRzbWRfYWNj ZXNzX2Vycm9yKSB7DQoJCWlmICgkY29kZSAmJiAkdHlwZSkgew0KCQkJJGVyclsnY29kZSdd ID0gKGluX2FycmF5KCRzbWRfYWNjZXNzX2VycmNvZGUsICRjb2RlcykpID8gdHJ1ZSA6IGZh bHNlOw0KCQkJJGVyclsnbXNnJ10gPSAoaW5fYXJyYXkoJHNtZF9hY2Nlc3NfZXJyb3IsICR0 eXBlcykpID8gdHJ1ZSA6IGZhbHNlOw0KCQl9IGVsc2UgaWYgKCRjb2RlKSB7DQoJCQkkZXJy Wydjb2RlJ10gPSAoaW5fYXJyYXkoJHNtZF9hY2Nlc3NfZXJyY29kZSwgJGNvZGVzKSkgPyB0 cnVlIDogZmFsc2U7DQoJCX0gZWxzZSBpZiAoJHR5cGUpIHsNCgkJCSRlcnJbJ21zZyddID0g KGluX2FycmF5KCRzbWRfYWNjZXNzX2Vycm9yLCAkdHlwZXMpKSA/IHRydWUgOiBmYWxzZTsN CgkJfSBlbHNlIHsNCgkJCSRlcnJbJ21zZyddID0gdHJ1ZTsNCgkJfQ0KCX0NCg0KCSRvdXQg PSBpbl9hcnJheShmYWxzZSwgJGVycikgPyBmYWxzZSA6IHRydWU7IC8vIEFORCBsb2dpYw0K DQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJG91dCkpOw0KfQ0KDQovLyBEaXNw bGF5IGFjY2VzcyBlcnJvciBpbmZvcm1hdGlvbg0KZnVuY3Rpb24gc21kX2FjY2Vzc19lcnJv cigkYXR0cywgJHRoaW5nPU5VTEwpIHsNCglnbG9iYWwgJHNtZF9hY2Nlc3NfZXJyb3IsICRz bWRfYWNjZXNzX2VycmNvZGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknaXRlbScg ICAgPT4gJ21lc3NhZ2UnLA0KCQknbWVzc2FnZScgPT4gJycsDQoJCSd3cmFwdGFnJyAgICA9 PiAnJywNCgkJJ2NsYXNzJyAgICAgID0+ICcnLA0KCQknaHRtbF9pZCcgICAgPT4gJycsDQoJ CSdicmVhaycgICAgICA9PiAnJywNCgkJJ2JyZWFrY2xhc3MnID0+ICcnLA0KCSksJGF0dHMp KTsNCg0KCSRvdXQgPSBhcnJheSgpOw0KCSRpdGVtcyA9IGRvX2xpc3QoJGl0ZW0pOw0KDQoJ aWYgKCRzbWRfYWNjZXNzX2VycmNvZGUgJiYgaW5fYXJyYXkoJ2NvZGUnLCAkaXRlbXMpKSB7 DQoJCSRvdXRbXSA9ICRzbWRfYWNjZXNzX2VycmNvZGU7DQoJfQ0KDQoJaWYgKCRzbWRfYWNj ZXNzX2Vycm9yICYmIGluX2FycmF5KCdtZXNzYWdlJywgJGl0ZW1zKSkgew0KCQkkb3V0W10g PSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBzbWRfYWtleV9nVHh0KCRzbWRfYWNjZXNzX2Vy cm9yKTsNCgl9DQoNCglpZiAoJG91dCkgew0KCQlyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFw dGFnLCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MsICcnLCAnJywgJGh0bWxfaWQpOw0K CX0NCg0KCXJldHVybiAnJzsNCn0NCg0KLy8gRGlzcGxheSBhY2Nlc3MgaW5mb3JtYXRpb24g Zm9yIGN1c3RvbSBmb3JtYXR0ZWQgbWVzc2FnZXMNCmZ1bmN0aW9uIHNtZF9hY2Nlc3NfaW5m bygkYXR0cywgJHRoaW5nPU5VTEwpIHsNCglnbG9iYWwgJHNtZF9ha2V5X2luZm87DQoNCgll eHRyYWN0KGxBdHRzKGFycmF5KA0KCQknaXRlbScgICAgICAgPT4gJ3BhZ2UnLA0KCQknZXNj YXBlJyAgICAgPT4gJ2h0bWwnLA0KCQknZm9ybWF0JyAgICAgPT4gJyVZLSVtLSVkICVIOiVN OiVTJywNCgkJJ3dyYXB0YWcnICAgID0+ICcnLA0KCQknY2xhc3MnICAgICAgPT4gJycsDQoJ CSdodG1sX2lkJyAgICA9PiAnJywNCgkJJ2JyZWFrJyAgICAgID0+ICcnLA0KCQknYnJlYWtj bGFzcycgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJJG91dCA9IGFycmF5KCk7DQoJJGl0ZW1z ID0gZG9fbGlzdCgkaXRlbSk7DQoNCglmb3JlYWNoICgkaXRlbXMgYXMgJGlkeCkgew0KCQlp ZiAoJHNtZF9ha2V5X2luZm8gJiYgYXJyYXlfa2V5X2V4aXN0cygkaWR4LCAkc21kX2FrZXlf aW5mbykpIHsNCgkJCSR2YWwgPSAoJGVzY2FwZSA9PSAnaHRtbCcpID8gaHRtbHNwZWNpYWxj aGFycygkc21kX2FrZXlfaW5mb1skaWR4XSkgOiAkc21kX2FrZXlfaW5mb1skaWR4XTsNCgkJ CWlmIChpbl9hcnJheSgkaWR4LCBhcnJheSgndGltZScsICdub3cnLCAnZXhwaXJlcycpKSAm JiAkZm9ybWF0KSB7DQoJCQkJJHZhbCA9IHNhZmVfc3RyZnRpbWUoJGZvcm1hdCwgJHZhbCk7 DQoJCQl9DQoJCQkkb3V0W10gPSAkdmFsOw0KCQl9DQoJfQ0KDQoJaWYgKCRvdXQpIHsNCgkJ cmV0dXJuIGRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2Ns YXNzLCAnJywgJycsICRodG1sX2lkKTsNCgl9DQoNCglyZXR1cm4gJyc7DQp9DQoNCi8qKg0K ICogc21kX2FrZXlfZ1R4dAlDb252ZXJ0IHN0cmluZ3MgZm9yIGkxOG4gcHVycG9zZXMNCiAq DQogKiBAcGFyYW0Jc3RyaW5nCSR3aGF0IFsrXSBbcHJpdmF0ZV0gW3N0YXRpY10JCU5hbWUg b2YgdGhlIGl0ZW0gZnJvbSB0aGUgYXJyYXkgdG8gcmV0cmlldmUNCiAqIEBwYXJhbQlhcnJh eQkkYXR0cyBbK10JKERlZmF1bHQ6IEFycmF5KQlBcnJheSBvZiAnc2VhcmNoJyA9PiAncmVw bGFjZW1lbnRzJyB0byBtYWtlDQogKi8NCmZ1bmN0aW9uIHNtZF9ha2V5X2dUeHQoJHdoYXQs ICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdzbWRfYWtleV9hY2Nl c3NlcycgPT4gJ0FjY2VzcyBhdHRlbXB0cycsDQoJCSdzbWRfYWtleV9idG5fbmV3JyA9PiAn TmV3IGtleScsDQoJCSdzbWRfYWtleV9idG5fcHJlZicgPT4gJ1ByZWZzJywNCgkJJ3NtZF9h a2V5X2RlbGV0ZWQnID0+ICdLZXlzIGRlbGV0ZWQ6IHtkZWxldGVkfScsDQoJCSdzbWRfYWtl eV9lcnJfYmFkX3Rva2VuJyA9PiAnTWlzc2luZyBvciBtYW5nbGVkIGFjY2VzcyBrZXknLA0K CQknc21kX2FrZXlfZXJyX2V4cGlyZWQnID0+ICdBY2Nlc3MgZXhwaXJlZCcsDQoJCSdzbWRf YWtleV9lcnJfZm9yYmlkZGVuJyA9PiAnRm9yYmlkZGVuIGFjY2VzcycsDQoJCSdzbWRfYWtl eV9lcnJfaW52YWxpZF90b2tlbicgPT4gJ0ludmFsaWQgYWNjZXNzIGtleScsDQoJCSdzbWRf YWtleV9lcnJfbWlzc2luZ190aW1lc3RhbXAnID0+ICdNaXNzaW5nIHRpbWVzdGFtcCcsDQoJ CSdzbWRfYWtleV9lcnJfdW5hdmFpbGFibGUnID0+ICdOb3QgYXZhaWxhYmxlJywNCgkJJ3Nt ZF9ha2V5X2Vycl91bmF1dGhvcml6ZWQnID0+ICdVbmF1dGhvcml6ZWQgYWNjZXNzJywNCgkJ J3NtZF9ha2V5X2Vycl9saW1pdCcgPT4gJ0FjY2VzcyBsaW1pdCByZWFjaGVkJywNCgkJJ3Nt ZF9ha2V5X2ZpbGVfZG93bmxvYWRfZXhwaXJlcycgPT4gJ0ZpbGUgZG93bmxvYWQgZXhwaXJ5 IHRpbWUgKHNlY29uZHMpJywNCgkJJ3NtZF9ha2V5X2dlbmVyYXRlZCcgPT4gJ0FjY2VzcyBr ZXk6IHtrZXl9JywNCgkJJ3NtZF9ha2V5X2xvZ19pcCcgPT4gJ0xvZyBJUCBhZGRyZXNzZXMn LA0KCQknc21kX2FrZXlfbWF4JyA9PiAnTWF4aW11bScsDQoJCSdzbWRfYWtleV9uZWVkX3Bh Z2UnID0+ICdZb3UgbmVlZCB0byBlbnRlciBhIHBhZ2UgVVJMJywNCgkJJ3NtZF9ha2V5X3Bh Z2UnID0+ICdQYWdlJywNCgkJJ3NtZF9ha2V5X3ByZWZfbGVnZW5kJyA9PiAnQWNjZXNzIGtl eSBwcmVmZXJlbmNlcycsDQoJCSdzbWRfYWtleV9wcmVmc19zYXZlZCcgPT4gJ1ByZWZlcmVu Y2VzIHNhdmVkJywNCgkJJ3NtZF9ha2V5X3ByZWZzX3NvbWVfdGJsJyA9PiAnTm90IGFsbCB0 YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0KCQknc21kX2FrZXlfcHJlZnNfc29tZV9leHBsYWlu JyA9PiAnVGhpcyBpcyBlaXRoZXIgYSBuZXcgaW5zdGFsbGF0aW9uIG9yIGEgZGlmZmVyZW50 IHZlcnNpb24nLmJyLidvZiB0aGUgcGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZS4nLA0K CQknc21kX2FrZXlfcHJlZnNfc29tZV9vcHRzJyA9PiAnQ2xpY2sgIkluc3RhbGwgdGFibGUi IHRvIGFkZCBvciB1cGRhdGUgdGhlIHRhYmxlJy5ici4nbGVhdmluZyBhbGwgZXhpc3Rpbmcg ZGF0YSB1bnRvdWNoZWQuJywNCgkJJ3NtZF9ha2V5X3ByZWZzX3NvbWVfdGJsJyA9PiAnTm90 IGFsbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0KCQknc21kX2FrZXlfc2FsdF9sZW5ndGgn ID0+ICdTYWx0IGxlbmd0aCAoY2hhcmFjdGVycyknLA0KCQknc21kX2FrZXlfdGFiX25hbWUn ID0+ICdBY2Nlc3Mga2V5cycsDQoJCSdzbWRfYWtleV90YmxfaW5zdGFsbF9sYmwnID0+ICdJ bnN0YWxsIHRhYmxlJywNCgkJJ3NtZF9ha2V5X3RibF9pbnN0YWxsZWQnID0+ICdUYWJsZSBp bnN0YWxsZWQnLA0KCQknc21kX2FrZXlfdGJsX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZSBu b3QgaW5zdGFsbGVkJywNCgkJJ3NtZF9ha2V5X3RibF9yZW1vdmVkJyA9PiAnVGFibGUgcmVt b3ZlZCcsDQoJCSdzbWRfYWtleV90Ymxfbm90X3JlbW92ZWQnID0+ICdUYWJsZSBub3QgcmVt b3ZlZCcsDQoJCSdzbWRfYWtleV90aW1lJyA9PiAnSXNzdWVkJywNCgkJJ3NtZF9ha2V5X3Ry aWdnZXInID0+ICdUcmlnZ2VyJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0s ICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6 NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjI2NDQ2OiI8ZGl2IGlkPSJzbWRfaGVs cCI+CgoJPGgxPnNtZF9hY2Nlc3Nfa2V5czwvaDE+CgoJPHA+UGVybWl0IGFjY2VzcyB0byBk b3dubG9hZHMsIHBhZ2VzIG9yIHBhcnRzIG9mIHBhZ2VzIGZvciBhIGNlcnRhaW4gY29uZmln dXJhYmxlIHRpbWUgcGVyaW9kIGFuZC9vciBmb3IgYSBkZWZpbmVkIG51bWJlciBvZiBhY2Nl c3MgYXR0ZW1wdHMuIFRoZSBhY2Nlc3Mga2V5IGlzIHRhbXBlci1wcm9vZi48L3A+CgoJPGgy PkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPGgyPklu c3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50 Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjQuMCs8L3A+CgoJ PHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4 dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTIyMi9zbWRfYWNjZXNzX2tleXMiPnRleHRwYXR0ZXJu Lm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNv ZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiBwYW5lLCBpbnN0 YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVGhlIHRhYmxlIHdpbGwgYmUgaW5zdGFsbGVk IGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSB1c2UgdGhlIHBsdWdpbiBmcm9tIHRoZSBjYWNo ZSBkaXJlY3Rvcnk7IGluIHdoaWNoIGNhc2UsIHZpc2l0IHRoZSA8ZW0+RXh0ZW5zaW9ucy0m Z3Q7QWNjZXNzIGtleXM8L2VtPiB0YWIgYW5kIGNsaWNrIHRoZSA8ZW0+SW5zdGFsbCB0YWJs ZTwvZW0+IGJ1dHRvbiBiZWZvcmUgdHJ5aW5nIHRvIHVzZSB0aGUgcGx1Z2luLjwvcD4KCgk8 cD5UbyB1bmluc3RhbGwgdGhlIHBsdWdpbiwgZGVsZXRlIGZyb20gdGhlIDxlbT5BZG1pbi0m Z3Q7UGx1Z2luczwvZW0+IHBhZ2UuIFRoZSBhY2Nlc3Mga2V5cyB0YWJsZSB3aWxsIGJlIGRl bGV0ZWQgYXV0b21hdGljYWxseS48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNTk5NiI+Zm9ydW0g dGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBv ciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPk92ZXJ2aWV3PC9oMj4KCgk8 cD5UaGUgcGx1Z2luIGFsbG93cyB5b3UgdG8gY3JlYXRlIGtleXMgZm9yIGFueSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBhbmQgeW91IGNhbiB0aGVuIHByb3RlY3QgYWxsIG9y IHBhcnQgb2YgdGhhdCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBieSBlaXRoZXI6 PC9wPgoKCTxwPmEpIHdyYXBwaW5nIGEgdGFnIGFyb3VuZCB0aGUgcGFydHMgeW91IHdhbnQg cHJvdGVjdGluZzxiciAvPgpiKSBwdXR0aW5nIGEgcHJvdGVjdGlvbiB0YWcgYXQgdGhlIHRv cCBvZiB0aGUgcGFnZSB0byBwcm90ZWN0IGl0cyBlbnRpcmV0eTxiciAvPgpjKSBmbGFnZ2lu ZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gYXMgYSBmaWxlX2Rvd25sb2Fk IHdoZXJlYnkgaXQmIzgyMTc7cyBhdXRvbWF0aWNhbGx5IHJlc3RyaWN0ZWQgdG8gb25seSB0 aG9zZSBpbiBwb3NzZXNzaW9uIG9mIHRoZSBrZXk8L3A+CgoJPHA+QW4gYWNjZXNzIGtleSBp cyBhIGxvbmcgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdGhhdCBsb29rcyBsaWtl IHRoaXM6IDxjb2RlPnNpdGUuY29tL3NvbWUvcHJvdGVjdGVkL3VybC8mbHQ7dHJpZ2dlciZn dDsvJmx0O3Rva2VuJmd0Oy8mbHQ7dGltZV9nZW5lcmF0ZWQmZ3Q7LiZsdDttYXhfYWNjZXNz ZXMmZ3Q7PC9jb2RlPi4gQW55IGRldmlhdGlvbiBvciBhbHRlcmF0aW9uIG9mIHRoZSB0b2tl biByZXN1bHRzIGluIHJlamVjdGlvbi4gVGhlIHNlY3JldCBrZXkgdXNlZCB0byBwcm90ZWN0 IHRoZSByZXNvdXJjZXMgY2FuIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBw bHVnaW4gb3Igc3VwcGxpZWQgYnkgeW91LiBBIHVzZXItY29uZmlndXJhYmxlIHNhbHQgaXMg YXBwbGllZCBhcyB3ZWxsLiBGb3IgYmVzdCByZXN1bHRzLCBsZXQgdGhlIHBsdWdpbiBjaG9v c2UsIGJlY2F1c2UgdGhlbiBubyB0d28gc2VjcmV0IGtleXMvc2FsdHMgd2lsbCBldmVyIGJl IHRoZSBzYW1lLCBldmVuIGlmIHRoZXkgcHJvdGVjdCB0aGUgZXhhY3Qgc2FtZSByZXNvdXJj ZS48L3A+CgoJPHA+WW91IGNhbiB0aW1lLWxpbWl0IHRoZSBhY2Nlc3MgdG8gdGhlIHJlc291 cmNlIGlmIHlvdSBsaWtlICYjODIxMjsgZnJvbSB0aGUgbW9tZW50IHRoZSBrZXkgaXMgZ2Vu ZXJhdGVkIG9yIGZyb20gc29tZSBhcmJpdHJhcnkgcG9pbnQgaW4gdGhlIGZ1dHVyZSAmIzgy MTI7IGFuZC9vciB5b3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgYWNjZXNzZXMgKHZpZXdz L2Rvd25sb2FkcykgdGhhdCByZXNvdXJjZSBjYW4gaGF2ZS4gV2hlbiB0aGUgcmVzb3VyY2Ug aGFzIGV4cGlyZWQsIGl0JiM4MjE3O3MgZ29uZS48L3A+CgoJPHA+S2V5cyBjYW4gYmUgZ2Vu ZXJhdGVkIGZyb20gdGhlIGFkbWluIHNpZGUgaW50ZXJmYWNlICg8ZW0+RXh0ZW5zaW9ucy0m Z3Q7QWNjZXNzIGtleXM8L2VtPikgb3IgdmlhIGEgcHVibGljIHRhZy4gVGhlIGxhdHRlciBh bGxvd3MgeW91IHRvIG9mZmVyIHNlbGYta2V5IGdlbmVyYXRpb24sIHBlcmhhcHMgaW4gcmVz cG9uc2UgdG8gYSBtZW1fc2VsZl9yZWdpc3RlciByZXF1ZXN0IG9yIHplbV9jb250YWN0X3Jl Ym9ybiBmb3JtIHN1Ym1pc3Npb24sIG9yIGZyb20gYW4gYWRtaW4tc2lkZSBkYXNoYm9hcmQu PC9wPgoKCTxoMj5QdWJsaWMgc2lkZSB0YWdzPC9oMj4KCgk8aDM+VGFnOiA8Y29kZT4mbHQ7 dHhwOnNtZF9hY2Nlc3Nfa2V5IC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+R2VuZXJhdGVzIGFu IGFjY2VzcyB0b2tlbiBmb3IgYSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu Pi4gQ29uZmlndXJlIGl0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8L3A+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dXJsPC9zcGFuPiA6IHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBvZiB0aGUgcmVzb3VyY2UgeW91IHdhbnQgdG8gcHJv dGVjdC4gQ2FuIGJlIGVpdGhlciBhIGZ1bGx5IHF1YWxpZmllZCA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBvciByZWxhdGl2ZS4gSWYgeW91IG9taXQgdGhpcyBhdHRyaWJ1dGUs IHRoZSBjdXJyZW50IHBhZ2Ugd2lsbCBiZSBhc3N1bWVkPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnRyaWdnZXI8L3NwYW4+IDogdGhpcyBzdHJpbmcgaXMgYWRkZWQgdG8geW91 ciB1cmwgc28gdGhlIHBsdWdpbiBrbm93cyBpdCBpcyBwcm90ZWN0ZWQgY29udGVudC4gRGVm YXVsdDogPGNvZGU+c21kX2FrZXk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnNpdGVfbmFtZTwvc3Bhbj4gOiB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgYWRkIHRo ZSBzaXRlIG5hbWUgKGh0dHA6Ly9zaXRlLmNvbSkgdG8gdGhlIHVybCAoMSkgb3Igbm90ICgw KS4gRGVmYXVsdDogMS4gSWYgc2V0IHRvIDEsIGl0IHRyaWVzIHRvIGJlIGNsZXZlciBhbmQg b25seSBhZGQgdGhlIHNpdGUgcHJlZml4IGlmIGl0cyBub3QgaW4gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+IGFscmVhZHk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c2VjcmV0PC9zcGFuPiA6IGEgc2VjcmV0IGtleSB1c2VkIHRvIHVubG9jayB0aGUgcGFn ZS4gQ2hvb3NlIGFueSB0ZXh0IHlvdSB3aXNoIGhlcmUgb3IgbGVhdmUgYmxhbmsgdG8gaGF2 ZSB0aGUgcGx1Z2luIGNob29zZSBhIHJhbmRvbSBudW1iZXIgZm9yIHlvdTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5zdGFydDwvc3Bhbj4gOiBhbiBFbmdsaXNoLWZvcm1hdHRl ZCBkYXRlIHN0YW1wIGZyb20gd2hlbiB5b3Ugd2FudCB0aGUgcmVzb3VyY2UgdG8gYmVjb21l IGF2YWlsYWJsZS4gSXQgaXMgb2Z0ZW4gYmVzdCB0byB1c2UgPGNvZGU+WVlZWS1NTU0tREQg SEg6TU06U1M8L2NvZGU+IGZvcm1hdCBhcyBpdCBpcyB0aGUgbGVhc3QgYW1iaWd1b3VzLiBE ZWZhdWx0OiBlbXB0eSAoaS5lLiBub3cpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pm1heDwvc3Bhbj4gOiBpZiB5b3Ugd2lzaCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHRpbWVz IHRoaXMgcmVzb3VyY2UgY2FuIGJlIHJlcXVlc3RlZCwgc2V0IGl0cyB2YWx1ZSBoZXJlLiBE ZWZhdWx0OiB1bnNldCAoaS5lLiB1bmxpbWl0ZWQpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmV4dHJhPC9zcGFuPiA6IGlmIHlvdSB3YW50IHRvIGFkZCBhbnkgYWRkaXRpb25h bCBpbmZvcm1hdGlvbiB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gKGFm dGVyIHRoZSB0b2tlbikgdGhlbiBzcGVjaWZ5IGl0IGhlcmUuIElmIHNldCwgYSBzbGFzaCB3 aWxsIGJlIGFkZGVkIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBhbmQg dGhlbiB5b3VyIGdpdmVuIGNvbnRlbnQgd2lsbCBiZSBhcHBlbmRlZC4gSXQmIzgyMTc7cyB1 cCB0byB5b3UgdG8gZW5zdXJlIGl0IGlzIHN1aXRhYmx5IGVuY29kZWQuIE5vdGUgdGhhdCB5 b3UgY2FuIGFkZCBtdWx0aXBsZSBpdGVtcywgc2VwYXJhdGluZyBlYWNoIHdpdGggYSBzbGFz aCBjaGFyYWN0ZXIgaWYgeW91IHdpc2guIEFkZGl0aW9uYWwgdmFsdWVzIGFkZGVkIHVzaW5n IHRoaXMgYXR0cmlidXRlIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHVzaW5nIHRoZSA8Y29k ZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfaW5mbyAvJmd0OzwvY29kZT4gdGFnPC9saT4KCTwvdWw+ CgoJPHA+QSBmZXcgd29yZHMgYWJvdXQgdGhpcyB0YWc6PC9wPgoKCTxvbD4KCQk8bGk+VGhl IGNsb2NrIHN0YXJ0cyB0aWNraW5nIHRoZSBtb21lbnQgdGhlIHRva2VuIGlzIGdlbmVyYXRl ZCAob3IgYXQgdGhlIHRpbWUgZ2l2ZW4gaW4gdGhlIDxjb2RlPnN0YXJ0PC9jb2RlPiBhdHRy aWJ1dGUpPC9saT4KCQk8bGk+WW91IGNhbiBwYXNzIHRoZSByZXR1cm5lZCBhY2Nlc3MgbGlu ayBhcm91bmQgYXMgb2Z0ZW4gYXMgeW91IGxpa2UgdG8gYXMgbWFueSBwZW9wbGUgYXMgeW91 IGxpa2UgYW5kIGl0JiM4MjE3O2xsIGtlZXAgd29ya2luZyB1bnRpbCBpdHMgZXhwaXJ5L2Fj Y2VzcyBsaW1pdCBpcyBtZXQ8L2xpPgoJCTxsaT5FYWNoIHRpbWUgeW91IGNyZWF0ZSBhIG5l dyB0b2tlbiAoZXZlbiBmb3IgdGhlIHNhbWUgcGFnZSkgYSBuZXcgYWNjZXNzIGNvdW50ZXIg aXMgZ2VuZXJhdGVkOyBhbnkgcHJldmlvdXNseSBjcmVhdGVkIHRva2VucyB0aGF0IHN0aWxs IGhhdmUgYXZhaWxhYmxlIGFjY2VzcyBhdHRlbXB0cyB3aWxsIGNvbnRpbnVlIHRvIGZ1bmN0 aW9uIHVudGlsIHRoZSBsaW1pdCBpcyByZWFjaGVkIG9yIHRoZXkgZXhwaXJlPC9saT4KCQk8 bGk+RGlyZWN0IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZpbGUgZG93bmxvYWRz IGNhbiBiZSBwcm90ZWN0ZWQgdG9vLiBKdXN0IHN1cHBseSA8Y29kZT50cmlnZ2VyPSZxdW90 O2ZpbGVfZG93bmxvYWQmcXVvdDs8L2NvZGU+IGFuZCA8Y29kZT51cmw9JnF1b3Q7L2ZpbGVf ZG93bmxvYWQvJmx0O2lkJmd0Oy8mbHQ7ZmlsZW5hbWUmZ3Q7JnF1b3Q7PC9jb2RlPi4gWW91 IHdpbGwgdGhlbiBub3QgYmUgcGVybWl0dGVkIHRvIGFjY2VzcyB0aGUgc2l0ZS5jb20vZmls ZV9kb3dubG9hZC88aWQ+IGxpbmsgd2l0aG91dCB0aGUgYWNjZXNzIHRva2VuIGJlaW5nIHBy ZXNlbnQuIEZvciB0aGlzIHRvIGJlIGVmZmVjdGl2ZSB5b3Ugc2hvdWxkIG1vdmUgeW91ciA8 Y29kZT4vZmlsZXM8L2NvZGU+IGRpcmVjdG9yeSBvdXQgb2YgYSB3ZWItYWNjZXNzaWJsZSBs b2NhdGlvbiBvciBlbXBsb3kgYW4gLmh0YWNjZXNzIGZpbGUgdGhhdCBmb3JiaWRzIGJ5cGFz c2luZyB0aGUgPGNvZGU+c2l0ZS5jb20vZmlsZXMvJmx0O2ZpbGVuYW1lJmd0OzwvY29kZT4g PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZm9ybWF0LiBOb3RlIHRoYXQgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbm9ybWFsbHkgYWxsb3dzIHlvdSB0byB0eXBlIGFu eXRoaW5nIGFmdGVyIHRoZSA8Y29kZT4vaWQvPC9jb2RlPiBhcyBhIGZpbGVuYW1lIGFuZCBz dGlsbCByZXRyaWV2ZSB0aGUgZmlsZTsgc21kX2FjY2Vzc19rZXkgd2lsbCBub3Q6IHRoZSBm aWxlbmFtZSBtdXN0IG1hdGNoIGV4YWN0bHk8L2xpPgoJCTxsaT5JZiB0aGUgPGNvZGU+c3Rh cnQ8L2NvZGU+IGRhdGUgaXMgbWFuZ2xlZCBpbiBhbnkgd2F5LCB0aGUga2V5IHdpbGwgYmUg Z2VuZXJhdGVkICYjODIxNjtub3cmIzgyMTc7PC9saT4KCQk8bGk+WW91ciBzZWNyZXQga2V5 IGlzIHNhbHRlZCB1c2luZyBhIHJhbmRvbWx5IGdlbmVyYXRlZCBzYWx0LiBUaGUgZGVmYXVs dCBsZW5ndGggb2YgdGhlIHNhbHQgaXMgOCBjaGFyYWN0ZXJzIGJ1dCB5b3UgY2FuIGFsdGVy IHRoaXMgdmlhIGEgPGEgaHJlZj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVmPC9hPjwvbGk+CgkJ PGxpPllvdSBtYXkgY29udHJvbCB0aGUgZXhwaXJ5IHRpbWUgb2YgPGVtPmFsbDwvZW0+IG9m IHlvdXIgZGlyZWN0IGZpbGVfZG93bmxvYWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj5zIGJ5IGFsdGVyaW5nIGEgPGEgaHJlZj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVmPC9hPjwv bGk+Cgk8L29sPgoKCTxoND5FeGFtcGxlOiBDcmVhdGluZyBhIGtleTwvaDQ+Cgo8cHJlIGNs YXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5 CiAgICAgdXJsPSZxdW90Oy9tdXNpYy9uZXh0LWJpZy1oaXQmcXVvdDsgdHJpZ2dlcj0mcXVv dDtkZW1vJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGlzIG1pZ2h0IGdlbmVy YXRlIGFuIGFjY2Vzcy1jb250cm9sbGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IHN1Y2ggYXMgdGhlIGZvbGxvd2luZyAobmV3bGluZXMganVzdCBmb3IgY2xhcml0eSk6PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+aHR0cDovL3NpdGUu Y29tL211c2ljL25leHQtYmlnLWhpdC9kZW1vLwogICAgIDQyYzUzMWQxMzQyM2VlY2FhYWI3 M2EyZGY0M2E4YjdjMzM3YTM2MGEvNGQ5ZDEyYTUKPC9jb2RlPjwvcHJlPgoKCTxwPlNlbmQg dGhhdCBsaW5rIHRvIHlvdXIgZnJpZW5kIGFuZCBzaGUmIzgyMTc7bGwgYmUgYWJsZSB0byBs aXN0ZW4gdG8geW91ciBjb29sIG5ldyBkZW1vIHNvbmcuPC9wPgoKCTxoMz5UYWc6IDxjb2Rl PiZsdDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0IC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+T25j ZSB5b3UmIzgyMTc7dmUgZ2VuZXJhdGVkIGEga2V5LCBpdCYjODIxNztzIHRpbWUgdG8gcHJv dGVjdCBhbGwgb3IgcGFydCBvZiB5b3VyIGNob3NlbiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPi48L3A+CgoJPHVsPgoJCTxsaT5UbyBwcm90ZWN0IGFuIGVudGlyZSBwYWdlLCBw dXQgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0Jmd0OzwvY29kZT4gdGFn IHJpZ2h0IGF0IHRoZSB0b3AsIGFib3ZlIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkRPQ1RZ UEU8L3NwYW4+PC9saT4KCQk8bGk+VG8gb25seSBwcm90ZWN0IHBhcnQgb2YgYSBwYWdlLCB3 cmFwIHRoZSBwcm90ZWN0ZWQgY29udGVudCB3aXRoIHRoZSB0YWc8L2xpPgoJCTxsaT5GaWxl IGRvd25sb2FkcyBhcmUgYXV0b21hdGljYWxseSBwcm90ZWN0ZWQgaWYgeW91IGhhdmUgZ2Vu ZXJhdGVkIGEga2V5IGZvciB0aGVtPC9saT4KCTwvdWw+CgoJPHA+Q29uZmlndXJlIHRoZSBw bHVnaW4gd2l0aCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnRyaWdnZXI8L3NwYW4+IDogdGhlIHNhbWUgdHJpZ2dlciB5 b3Ugc3BlY2lmaWVkIGluIHlvdXIgPGNvZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX2tleSAvJmd0 OzwvY29kZT4gdGFnLiBZb3UgbWF5IHNwZWNpZnkgYSBwYXJ0aWFsIHRyaWdnZXIgaWYgdXRp bGlzaW5nIDxjb2RlPnRyaWdnZXJfbW9kZTwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPnNtZF9h a2V5PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50cmlnZ2VyX21vZGU8 L3NwYW4+IDogdXN1YWxseSB5b3UmIzgyMTc7bGwgd2FudCB0aGUgdHJpZ2dlciB0byBtYXRj aCBleGFjdGx5IGJ1dCB5b3UgbWF5IHdpc2ggdG8gbWF0Y2ggc29tZSBwYXJ0IG9mIHRoZSB0 cmlnZ2VyIChmb3IgYSBwcmFjdGljYWwgZXhhbXBsZSBvZiB0aGlzLCBzZWUgPGEgaHJlZj0i I3NtZF9ha2V5X2VnMyI+ZXhhbXBsZSAzPC9hPikuIENob29zZSBmcm9tOgoJPHVsPgoJCTxs aT48c3Ryb25nPmV4YWN0PC9zdHJvbmc+IDogKGRlZmF1bHQpIGluY29taW5nIHRva2VuJiM4 MjE3O3MgdHJpZ2dlciBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIDxjb2RlPnRyaWdnZXI8L2Nv ZGU+IGF0dHJpYnV0ZTwvbGk+CgkJPGxpPjxzdHJvbmc+YmVnaW5zPC9zdHJvbmc+IDogaW5j b21pbmcgdG9rZW4mIzgyMTc7cyB0cmlnZ2VyIG11c3QgYmVnaW4gd2l0aCA8Y29kZT50cmln Z2VyPC9jb2RlPjwvbGk+CgkJPGxpPjxzdHJvbmc+ZW5kczwvc3Ryb25nPiA6IGluY29taW5n IHRva2VuJiM4MjE3O3MgdHJpZ2dlciBtdXN0IGVuZCB3aXRoIDxjb2RlPnRyaWdnZXI8L2Nv ZGU+PC9saT4KCQk8bGk+PHN0cm9uZz5jb250YWluczwvc3Ryb25nPiA6IGluY29taW5nIHRv a2VuJiM4MjE3O3MgdHJpZ2dlciBtdXN0IGNvbnRhaW4gdGhlIHRleHQgZ2l2ZW4gaW4gPGNv ZGU+dHJpZ2dlcjwvY29kZT48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2l0ZV9uYW1lPC9zcGFuPiA6IGFkZCB0aGUgc2l0ZSBwcmVmaXggdG8gdGhlIDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHdoZW4gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQg aWYgdGhlIHJlc291cmNlIGlzIHByb3RlY3RlZC4gVGhpcyBmdW5jdGlvbnMgaWRlbnRpY2Fs bHkgdG8gdGhlIGF0dHJpYnV0ZSBpbiB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX2tl eSAvJmd0OzwvY29kZT4gdGFnIGFuZCwgaWRlYWxseSwgdGhleSBzaG91bGQgbWF0Y2guIERl ZmF1bHQ6IDEgKHllcyk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9yY2U8L3Nw YW4+IDogaWYgeW91IHdhbnQgdGhlIGNvbnRlbnQgdG8gYmUgdW5hdmFpbGFibGUgZXZlbiBp ZiB5b3UgPGVtPmRvbiYjODIxNzt0PC9lbT4gc3BlY2lmeSB0aGUgYWNjZXNzIHRva2VuIGlu IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiAoZS5nLiBpZiB5b3UgZGlyZWN0 bHkgdmlzaXQgPGNvZGU+L211c2ljL25leHQtYmlnLWhpdDwvY29kZT4pIHRoZW4gc2V0IHRo aXMgdG8gMS4gV2l0aCBpdHMgZGVmYXVsdCB2YWx1ZSAoMCksIHRoZSByZXNvdXJjZSBpcyBz dGlsbCBkaXJlY3RseSBhY2Nlc3NpYmxlLiBUaGlzIGFsbG93cyBvbmUgbWV0aG9kIG9mIHB1 dHRpbmcgdGhlIHRva2VuIGdlbmVyYXRpb24gdGFnIGFuZCB0aGUgcHJvdGVjdGVkIGNvbnRl bnQgb24gdGhlIHNhbWUgcGFnZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHBp cmVzPC9zcGFuPiA6IHRoZSB0aW1lLCBpbiBzZWNvbmRzLCBhZnRlciB3aGljaCB0aGUgcmVz b3VyY2Ugd2lsbCBjZWFzZSB0byBiZSBhdmFpbGFibGUuIERlZmF1bHQ6IDM2MDAgKDEgaG91 cikuIFNldCB0byAwIGZvciB1bmxpbWl0ZWQgdGltZTwvbGk+Cgk8L3VsPgoKCTxwPihpZiB5 b3Ugd2lzaCB0byBsb2cgSVAgYWRkcmVzc2VzIGZvciBlYWNoIGFjY2VzcyBhdHRlbXB0IHlv dSBjYW4gc2V0IHRoZSA8YSBocmVmPSIjc21kX2FrZXlfcHJlZnMiPnByZWY8L2E+KTwvcD4K Cgk8cD5JbiBvdXIgbXVzaWMgZXhhbXBsZSB5b3UmIzgyMTc7bGwgcHJvYmFibHkgd2FudCB0 byBwdXQgdGhlIGZvbGxvd2luZyB0YWcgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZTo8L3A+Cgo8 cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9hY2Nl c3NfcHJvdGVjdCBleHBpcmVzPSZxdW90Ozg2NDAwJnF1b3Q7IHRyaWdnZXI9JnF1b3Q7ZGVt byZxdW90OyBmb3JjZT0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5T byBub2JvZHkgY2FuIHZpc2l0IHRoYXQgcGFnZSB1bmxlc3MgdGhleSBoYXZlIGJlZW4gZ2l2 ZW4gYSB2YWxpZCBhY2Nlc3MgdG9rZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4u IFRoZSBzb25nIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBsaXN0ZW5pbmcgZm9yIGp1c3Qgb25l IGRheSBmcm9tIHRoZSBtb21lbnQgdGhlIHRva2VuIGlzIGdlbmVyYXRlZC48L3A+CgoJPHA+ QWx0ZXJuYXRpdmVseSwgeW91IG1pZ2h0IGFsbG93IHBlb3BsZSB0byBzZWUgdGhlIHN1cnJv dW5kaW5nIHBhZ2UgYW5kIGp1c3Qgd3JhcCB0aGUgbXAzIGl0c2VsZiB3aXRoIHRoZSB0YWc6 PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpz bWRfYWNjZXNzX3Byb3RlY3QgZXhwaXJlcz0mcXVvdDs4NjQwMCZxdW90OyB0cmlnZ2VyPSZx dW90O2RlbW8mcXVvdDsmZ3Q7CiAgJmx0O29iamVjdCB0eXBlPSZxdW90Oy9hdWRpby9tcGVn JnF1b3Q7IGRhdGE9JnF1b3Q7L211c2ljL25leHQtYmlnLWhpdC5tcDMmcXVvdDsgLyZndDsK Jmx0Oy90eHA6c21kX2FjY2Vzc19wcm90ZWN0Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Tm90 ZSB0aGF0IHlvdSBjYW4gcHJvdGVjdCBhcyBtYW55IHBhcnRzIG9mIHRoZSBzYW1lIHBhZ2Ug YXMgeW91IGxpa2UsIGRpZmZlcmluZyBvbmx5IGluIHRoZSA8Y29kZT50cmlnZ2VyPC9jb2Rl Pi4gVGhpcyBhbGxvd3MgeW91IHRvIHVubG9jayB2YXJpb3VzIHBhcnRzIG9mIHlvdXIgcGFn ZXMgdG8gZGlmZmVyZW50IHBlb3BsZSBhbmQgc2V0IGluZGl2aWR1YWwgZXhwaXJ5IHRpbWVz IGZvciBlYWNoIHBvcnRpb24gb2YgdGhlIHBhZ2UuPC9wPgoKCTxwPkFub3RoZXIgb3B0aW9u IGlzIGlzIHRvIGVsZWN0IHRvIGNyZWF0ZSB0aGUgYWNjZXNzIGtleSBkaXJlY3RseSBmb3Ig dGhlIGZpbGVfZG93bmxvYWQgaXRzZWxmLiBJZiB5b3UmIzgyMTc7cmUgZmVlbGluZyBwYXJh bm9pZCB5b3UgY291bGQgZG8gYm90aCA6LSk8L3A+CgoJPGgzPlRhZzogPGNvZGU+Jmx0O3R4 cDpzbWRfaWZfYWNjZXNzX2Vycm9yIC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+Q29uZGl0aW9u YWwgdGFnIHRoYXQgdHJpZ2dlcnMgdGhlIGNvbnRhaW5lZCBjb250ZW50IGlmIGFjY2VzcyB3 YXMgZGVuaWVkIGZvciBzb21lIHJlYXNvbi4gIFN1cHBvcnRzIDxjb2RlPiZsdDt0eHA6ZWxz ZSAvJmd0OzwvY29kZT4uIEF0dHJpYnV0ZXM6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2Ygb25lIG9y IG1vcmUgb2YgdGhlIGZvbGxvd2luZyBhY2Nlc3MgdHlwZXMuIFRoZSBjb3JyZXNwb25kaW5n IDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiBlcnJvciBzdGF0dXMgY29kZSB0aHJv d24gaXMgZ2l2ZW4gaW4gcGFyZW50aGVzZXM6Cgk8dWw+CgkJPGxpPjxzdHJvbmc+c21kX2Fr ZXlfZXJyX2JhZF90b2tlbjwvc3Ryb25nPiAoNDAzKSA6IGlmIHRoZSBhY2Nlc3MgdG9rZW4g aW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGlzIHRvbyBsb25nL3Nob3J0 PC9saT4KCQk8bGk+PHN0cm9uZz5zbWRfYWtleV9lcnJfZXhwaXJlZDwvc3Ryb25nPiAoNDEw KSA6ICBpZiB0aGUgcmVzb3VyY2UgaGFzIHBhc3NlZCBpdHMgZXhwaXJ5PC9saT4KCQk8bGk+ PHN0cm9uZz5zbWRfYWtleV9lcnJfZm9yYmlkZGVuPC9zdHJvbmc+ICg0MDEpIDogdHJpZ2dl cmVkIGlmIHRoZSA8Y29kZT5mb3JjZTwvY29kZT4gYXR0cmlidXRlIGlzIHNldCBhbmQgZGly ZWN0IGFjY2VzcyBoYXMgYmVlbiByZXF1ZXN0ZWQ8L2xpPgoJCTxsaT48c3Ryb25nPnNtZF9h a2V5X2Vycl9pbnZhbGlkX3Rva2VuPC9zdHJvbmc+ICg0MDMpIDogdGhlIGFjY2VzcyBrZXkg aW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGRvZXNuJiM4MjE3O3QgbWF0 Y2ggdGhlIG9uZSB1c2VkIHRvIHByb3RlY3QgdGhlIHJlc291cmNlPC9saT4KCQk8bGk+PHN0 cm9uZz5zbWRfYWtleV9lcnJfbGltaXQ8L3N0cm9uZz4gKDQxMCkgOiB0aGUgbnVtYmVyIG9m IHBlcm1pdHRlZCB2aWV3cyAoc3BlY2lmaWVkIHZpYSB0aGUgPGNvZGU+bWF4PC9jb2RlPiBh dHRyaWJ1dGUpIGhhcyBiZWVuIGV4Y2VlZGVkPC9saT4KCQk8bGk+PHN0cm9uZz5zbWRfYWtl eV9lcnJfbWlzc2luZ190aW1lc3RhbXA8L3N0cm9uZz4gKDQwMykgOiB0aGUgdGltZXN0YW1w IHBvcnRpb24gb2YgdGhlIGFjY2VzcyBrZXkgaXMgbWlzc2luZyBmcm9tIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPjwvbGk+CgkJPGxpPjxzdHJvbmc+c21kX2FrZXlfZXJy X3VuYXZhaWxhYmxlPC9zdHJvbmc+ICg0MTApIDogdGhlIHJlc291cmNlIGlzbiYjODIxNzt0 IHlldCBhdmFpbGFibGUgKHRoZSBzdGFydCB0aW1lIGhhc24mIzgyMTc7dCBiZWVuIHJlYWNo ZWQpPC9saT4KCQk8bGk+PHN0cm9uZz5zbWRfYWtleV9lcnJfdW5hdXRob3JpemVkPC9zdHJv bmc+ICg0MDEpIDogdGhlIHJlc291cmNlIGlzbiYjODIxNzt0IG9uZSB0aGF0IGhhcyBiZWVu IHByb3RlY3RlZCBieSB0aGlzIGFjY2VzcyBrZXk8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+Y29kZTwvc3Bhbj4gOiBjb21tYS1kZWxpbWl0ZWQgbGlzdCBv ZiBvbmUgb3IgbW9yZSBvZiB0aGUgYWNjZXNzIGNvZGVzIGdpdmVuIGluIHRoZSBhYm92ZSBs aXN0PC9saT4KCTwvdWw+CgoJPHA+V2l0aG91dCBhbnkgYXR0cmlidXRlcywgdGhlIHRhZyB0 cmlnZ2VycyB0aGUgY29udGFpbmVkIGNvbnRlbnQgb24gYW55IGVycm9yLiBJZiB5b3Ugc3Bl Y2lmeSBtYW55IDxjb2RlPnR5cGU8L2NvZGU+cyB0aGVuIDxlbT5hbnk8L2VtPiBvZiB0aGUg bGlzdGVkIHR5cGVzIHRoYXQgbWF0Y2ggd2lsbCByZXR1cm4gdHJ1ZS4gVGhlIHNhbWUgZ29l cyBmb3IgPGNvZGU+Y29kZTwvY29kZT5zLiBJZiB5b3UgdXNlIHRoZSB0d28gaW4gdGFuZGVt IHRoZW4gdGhlIGVycm9yIG11c3QgbWF0Y2ggb25lIG9mIHRoZSB0eXBlcyA8c3BhbiBjbGFz cz0iY2FwcyI+QU5EPC9zcGFuPiBvbmUgb2YgdGhlIGNvZGVzIHRvIHJldHVybiB0cnVlLjwv cD4KCgk8aDM+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfZXJyb3IgLyZndDs8L2Nv ZGU+PC9oMz4KCgk8cD5EaXNwbGF5IGFuIGFjY2VzcyBlcnJvciBtZXNzYWdlL2NvZGUuIFR5 cGljYWxseSB1c2VkIGluc2lkZSA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9hY2Nlc3NfZXJyb3Im Z3Q7PC9jb2RlPi4gQXR0cmlidXRlczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+aXRlbTwvc3Bhbj4gOiBvbmUgb3IgbW9yZSBvZiA8Y29kZT5tZXNzYWdlPC9jb2Rl PiAodGhlIGRlZmF1bHQpIG9yIDxjb2RlPmNvZGU8L2NvZGU+IHRvIHNpZ25pZnkgdGhhdCB5 b3Ugd2lzaCB0byBkaXNwbGF5IGEgbWVzc2FnZSBhbmQvb3IgYSBzdGF0dXMgY29kZS4gVXNl IGEgY29tbWEgdG8gZGVsaW1pdCB0aGUgdmFsdWVzIGlmIHVzaW5nIGJvdGg8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+bWVzc2FnZTwvc3Bhbj4gOiBkaXNwbGF5IHRoaXMgbWVz c2FnZSBpbnN0ZWFkIG9mIHRoZSBwbHVnaW4gZGVmYXVsdCBtZXNzYWdlPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogKFgpSFRNTCB0YWcgKHdpdGhv dXQgYW5nbGUgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIHRoZSBvdXRwdXQuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhl IHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pmh0bWxfaWQ8L3NwYW4+IDogPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRv IGFwcGx5IHRvIHRoZSB3cmFwdGFnLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiAoWClIVE1MIHRhZyAod2l0aG91dCBhbmds ZSBicmFja2V0cykgdG8gd3JhcCBhcm91bmQgZWFjaCBpdGVtLiBEZWZhdWx0OiB1bnNldDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVha2NsYXNzPC9zcGFuPiA6IDxzcGFu IGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gZWFjaCBi cmVhayB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgzPlRhZzogPGNvZGU+ Jmx0O3R4cDpzbWRfYWNjZXNzX2luZm8gLyZndDs8L2NvZGU+PC9oMz4KCgk8cD5EaXNwbGF5 IGFjY2VzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjdXJyZW50IHByb3RlY3RlZCBwYWdlLiBB dHRyaWJ1dGVzOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pdGVtPC9z cGFuPiA6IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXRlbXMgKGNvbW1hLWRlbGlt aXRlZCk6Cgk8dWw+CgkJPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiA6IHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgYWNjZXNz IGtleTwvbGk+CgkJPGxpPjxzdHJvbmc+dHJpZ2dlcjwvc3Ryb25nPiA6IHRoZSB0cmlnZ2Vy IGZvciB0aGUgY3VycmVudCBrZXksIGFzIGdpdmVuIGluIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPjwvbGk+CgkJPGxpPjxzdHJvbmc+bWF4aW11bTwvc3Ryb25nPiA6IHRo ZSBtYXhpbXVtIG51bWJlciBvZiBhY2Nlc3MgYXR0ZW1wdHMgYWxsb3dlZCBmb3IgdGhpcyBr ZXk8L2xpPgoJCTxsaT48c3Ryb25nPmFjY2Vzc2VzPC9zdHJvbmc+IDogdGhlIGN1cnJlbnQg bnVtYmVyIG9mIGFjY2VzcyBhdHRlbXB0cyB0aGF0IGhhdmUgYmVlbiBtYWRlIGZvciB0aGlz IGtleTwvbGk+CgkJPGxpPjxzdHJvbmc+bm93PC9zdHJvbmc+IDogdGhlIHJhdyA8c3BhbiBj bGFzcz0iY2FwcyI+VU5JWDwvc3Bhbj4gdGltZXN0YW1wIG9mIHRoZSB0aW1lIHRoZSBhY2Nl c3MgYXR0ZW1wdCB3YXMgbWFkZTwvbGk+CgkJPGxpPjxzdHJvbmc+aXNzdWVkPC9zdHJvbmc+ IDogdGhlIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+VU5JWDwvc3Bhbj4gdGltZXN0YW1wIG9m IHdoZW4gdGhlIGN1cnJlbnQga2V5IHdhcyBjcmVhdGVkPC9saT4KCQk8bGk+PHN0cm9uZz5l eHBpcmVzPC9zdHJvbmc+IDogdGhlIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+VU5JWDwvc3Bh bj4gdGltZXN0YW1wIG9mIHdoZW4gdGhlIGN1cnJlbnQga2V5IGV4cGlyZXM8L2xpPgoJCTxs aT48c3Ryb25nPmhleHRpbWU8L3N0cm9uZz4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVO SVg8L3NwYW4+IHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBjdXJyZW50IGtleSB3YXMgY3JlYXRl ZCwgZW5jb2RlZCBhcyBhIGhleCBzdHJpbmcgKGFzIHVzZWQgaW4gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+KTwvbGk+CgkJPGxpPjxzdHJvbmc+aXA8L3N0cm9uZz4gOiB0 aGUgSVAgYWRkcmVzcyBvZiB0aGUgcmVtb3RlIGFkZHJlc3MgbWFraW5nIHRoZSByZXF1ZXN0 IChpZiBhdmFpbGFibGUpPC9saT4KCQk8bGk+PHN0cm9uZz5leHRyYTwvc3Ryb25nPiA6IHRo ZSBmdWxsIHN0cmluZyBhcyBnaXZlbiBpbiB0aGUgPGNvZGU+ZXh0cmE8L2NvZGU+IGF0dHJp YnV0ZTwvbGk+CgkJPGxpPjxzdHJvbmc+ZXh0cmFfTjwvc3Ryb25nPiAod2hlcmUgTiBpcyBh biBpbnRlZ2VyIGJlZ2lubmluZyBhdCAxKSA6IGlmIHlvdSBoYXZlIHNwZWNpZmllZCBtYW55 IHZhbHVlcyBpbiB5b3VyIDxjb2RlPmV4dHJhPC9jb2RlPiwgZWFjaCBzZXBhcmF0ZWQgd2l0 aCBhIHNsYXNoLCB0aGlzIGRpc3BsYXlzIHRoZSBnaXZlbiBpbmRpdmlkdWFsIGl0ZW08L2xp PgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXNjYXBlPC9zcGFuPiA6 IHdoZXRoZXIgdG8gZXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBlbnRp dGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBhbmQg PGNvZGU+JmFtcDs8L2NvZGU+IGluIHRoZSBpdGVtLiBTZXQgPGNvZGU+ZXNjYXBlPSZxdW90 OyZxdW90OzwvY29kZT4gdG8gdHVybiB0aGlzIG9mZi4gRGVmdWFsdDogPGNvZGU+aHRtbDwv Y29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6IGlm IGRpc3BsYXlpbmcgYSB0aW1lLXJlbGF0ZWQgaXRlbSAobm93LCBpc3N1ZWQsIG9yIGV4cGly ZXMpIHlvdSBjYW4gZm9ybWF0IGl0IHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vcGhwLm5l dC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZnRpbWUucGhwIj5zdHJmdGltZSgpIGZvcm1hdHRp bmcgY29kZXM8L2E+LiBEZWZhdWx0OiA8Y29kZT4lWS0lbS0lZCAlSDolTTolUzwvY29kZT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiAoWClIVE1M IHRhZyAod2l0aG91dCBhbmdsZSBicmFja2V0cykgdG8gd3JhcCBhcm91bmQgdGhlIG91dHB1 dC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8 L3NwYW4+IDogPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBh cHBseSB0byB0aGUgd3JhcHRhZy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+aHRtbF9pZDwvc3Bhbj4gOiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9zcGFuPiA6IChYKUhUTUwgdGFnICh3 aXRob3V0IGFuZ2xlIGJyYWNrZXRzKSB0byB3cmFwIGFyb3VuZCBlYWNoIGl0ZW0uIERlZmF1 bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xhc3M8L3Nw YW4+IDogPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBs eSB0byBlYWNoIGJyZWFrIHRhZy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJPC91bD4KCgk8aDI+ QWRtaW4gc2lkZSBpbnRlcmZhY2U8L2gyPgoKCTxwPlVuZGVyIDxlbT5FeHRlbnNpb25zLSZn dDtBY2Nlc3Mga2V5czwvZW0+IHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgYWxsIGtleXMgdGhh dCBoYXZlIGJlZW4gZ2VuZXJhdGVkLiBZb3UgY2FuIHNvcnQgdGhlIGxpc3QgKGFzY2VuZGlu ZyBvciBkZXNjZW5kaW5nKSBieSBjbGlja2luZyB0aGUgaGVhZGluZ3Mgb3IgeW91IGNhbiBm aWx0ZXIgdGhlbSB1c2luZyB0aGUgc2VsZWN0IGxpc3QgYW5kIHRleHQgYm94IGF0IHRoZSB0 b3AuIFRoZSB1c3VhbCBtdWx0aS1lZGl0IHRvb2xzL2NoZWNrYm94ZXMgYXJlIGF2YWlsYWJs ZSB0byBhbGxvdyB5b3UgdG8gYmF0Y2gtZGVsZXRlIGtleXMuPC9wPgoKCTxwPklmIHlvdSB3 YW50IHRvIG1hbnVhbGx5IGNyZWF0ZSBhbiBhY2Nlc3Mga2V5LCBjbGljayA8ZW0+TmV3IGtl eTwvZW0+IGFuZCBmaWxsIGluIGFzIG1hbnkgb2YgdGhlIHRleHQgYm94ZXMgYXMgeW91IHdp c2guIFRoZSBvbmx5IG9uZSB0aGF0IGlzIG1hbmRhdG9yeSBpcyB0aGUgPGVtPlBhZ2U8L2Vt PiBib3guIFlvdXIgYWNjZXNzIGtleSB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgZGlzcGxheWVk IGluIHRoZSBtZXNzYWdlIGFyZWEgZm9yIHlvdSB0byBjb3B5IGFuZCBwYXN0ZS48L3A+CgoJ PHA+QSBmZXcgdGhpbmdzIHRvIG5vdGUgYWJvdXQgdGhlIGxpc3Q6PC9wPgoKCTx1bD4KCQk8 bGk+SWYgeW91IGhhdmUgZWxlY3RlZCB0byBsb2cgSVAgYWRkcmVzc2VzIChzZWUgPGEgaHJl Zj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVmczwvYT4pIHRoZSBJUHMgb2YgYWxsIGtleS1iYXNl ZCBhY2Nlc3MgYXR0ZW1wdHMgYXJlIGxvZ2dlZC4gRnVydGhlciwgaWYgeW91IGhhdmUgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdmlzaXRvciBsb2dnaW5nIGVuYWJsZWQsIHRo ZSBhZGRyZXNzZXMgaW4gdGhlICYjODIxNjtJUCYjODIxNzsgY29sdW1uIGFyZSBoeXBlcmxp bmtlZCB0byB0aGUgVmlzaXRvciBMb2dzIHRvIHNob3cgeW91IGFsbCBhY2Nlc3NlcyBieSB0 aGUgY2xpY2tlZCBJUC4gQWx0aG91Z2ggdGhlIHBsdWdpbiBjYW4gcG90ZW50aWFsbHkgaG9s ZCBvdmVyIDE2MDAgSVAgYWRkcmVzc2VzIHRoZSBpbnRlcmZhY2UgbWlnaHQgY3J1bWJsZSBi ZWZvcmUgeW91IHJlYWNoIHRoaXMgbGltaXQgc28gaXQmIzgyMTc7cyBiZXN0IHRvIHRyeSBh bmQgbGltaXQgdGhlIG51bWJlciBvZiBhY2Nlc3NlcyBwZXIga2V5IHRvIGtlZXAgdGhlIG51 bWJlciBvZiBhdHRlbXB0cyBsb3cgYW5kIG1ha2UgdGhlIGludGVyZmFjZSBtYW5hZ2VhYmxl PC9saT4KCQk8bGk+VGhlIFBhZ2UgaXMgaHlwZXJsaW5rZWQgdG8gdGhlIHByb3RlY3RlZCA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBidXQgaXQgZG9lcyA8ZW0+bm90PC9lbT4g YXR0ZW1wdCB0byBhY2Nlc3MgaXQgd2l0aCB0aGUga2V5LiBJdCBpcyBqdXN0IGEgY29udmVu aWVuY2UgZm9yIHlvdSB0byBjaGVjayB0aGF0IHRoZSBwYWdlIGlzIHByb3RlY3RlZC4gSWYg eW91IHdhbnQgdG8gYWNjZXNzIHRoZSBwYWdlIHZpYSBpdHMga2V5IHlvdSBjYW4gZG8gc28g ZnJvbSB0aGUgVmlzaXRvciBMb2dzLCBhc3N1bWluZyBzb21lb25lIGhhcyB0cmllZCBhdCBs ZWFzdCBvbmNlIHRvIGFjY2VzcyB0aGUgcmVzb3VyY2UgJiM4MjEyOyB5b3UgY2FuIGp1c3Qg Y2xpY2sgdGhlIHJlbGV2YW50IHZpc2l0b3IgbG9nIFBhZ2UgZW50cnkgd2hpY2ggY29udGFp bnMgdGhlIGZ1bGwgYWNjZXNzIGtleSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPjwv bGk+CgkJPGxpPlRoZSBudW1iZXIgb2YgYWNjZXNzZXMgbWF5IGV4Y2VlZCB0aGUgbWF4aW11 bSBwZXJtaXR0ZWQuIFRoaXMgaXMgYmVjYXVzZSBhdHRlbXB0cyBhcmUgbG9nZ2VkIGFsbCB0 aGUgdGltZSB0aGUgcmVzb3VyY2UgaXMgYXZhaWxhYmxlIChpLmUuIGhhcyBub3QgZXhwaXJl ZCkuIFJlc3QgYXNzdXJlZCBpZiB0aGUgbWF4aW11bSBhY2Nlc3MgbGltaXQgaGFzIGJlZW4g cmVhY2hlZCwgdmlzaXRvcnMgd2l0aCB2YWxpZCBrZXlzIHdpbGwgPHNwYW4gY2xhc3M9ImNh cHMiPk5PVDwvc3Bhbj4gc2VlIHRoZSBwcm90ZWN0ZWQgY29udGVudCwgZXZlbiB0aG91Z2gg dGhlIGNvdW50ZXIgd2lsbCBjb250aW51ZSB0byBsb2cgcmVxdWVzdHMuIFlvdSBjYW4gdXNl IHRoaXMgaW5mb3JtYXRpb24gdG8gY2hlY2sgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IFZpc2l0b3IgTG9ncyBmb3IgSVAgYWRkcmVzc2VzIHRoYXQgdHJ5IHRvIGFjY2Vz cyBhIHJlc291cmNlIGFmdGVyIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBBcyBzb29u IGFzIHRoZSByZXNvdXJjZSBleHBpcmVzLCBhY2Nlc3MgY291bnRpbmcgY2Vhc2VzPC9saT4K CQk8bGk+VGhlIHRyaWdnZXIgZm9yIGZpbGUgZG93bmxvYWRzIGlzIGVtcHR5LiBUaGlzIGlz IGEgc2lkZS1lZmZlY3Qgb2YgdGhlIHdheSB0aGUgcGx1Z2luIG9wZXJhdGVzIGJ1dCBpdCBo YXMgYSB1c2VmdWwgYm9udXM6IHlvdSBjYW4gbGVhdmUgdGhlIHRyaWdnZXIgYmxhbmsgaWYg eW91ciBQYWdlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGNvbnRhaW5zIDxjb2Rl Pi9maWxlX2Rvd25sb2FkPC9jb2RlPiAoYmVjYXVzZSB0aGUgdHJpZ2dlciBpdHNlbGYgaXMg dGhlIHByZXNlbmNlIG9mIDxjb2RlPmZpbGVfZG93bmxvYWQ8L2NvZGU+IGluIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPik8L2xpPgoJPC91bD4KCgk8aDMgaWQ9InNtZF9h a2V5X3ByZWZzIj5QcmVmZXJlbmNlczwvaDM+CgoJPHA+VGhlIHBsdWdpbiBleHBvc2VzIHNv bWUgZ2xvYmFsIHByZWZlcmVuY2Ugc2V0dGluZ3MgdGhhdCBnb3Zlcm4gaXRzIG9wZXJhdGlv bjo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RmlsZSBkb3dubG9hZCBl eHBpcnkgdGltZTwvc3Bhbj4gOiB0aW1lLCBpbiBzZWNvbmRzLCBhZnRlciB3aGljaCB5b3Vy IGZpbGUgZG93bmxvYWRzIHdpbGwgZXhwaXJlLCBmb2xsb3dpbmcgZ2VuZXJhdGlvbiBvZiBh biBhY2Nlc3Mga2V5LiBEZWZhdWx0OiAzNjAwICgxIGhvdXIpPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPlNhbHQgbGVuZ3RoPC9zcGFuPiA6IG51bWJlciBvZiBjaGFyYWN0ZXJz IHRvIHVzZSBhcyBhIHNhbHQgaW4geW91ciBzZWNyZXQga2V5LiBUaGUgZGVmYXVsdCBvZiA4 IGlzIHVzdWFsbHkgZmluZSBidXQgaWYgeW91IHdhbnQgdG8gYWx0ZXIgdGhpcyBmb3IgZ3Jl YXRlci9yZWR1Y2VkIHNlY3VyaXR5IHRoZW4gZG8gc28uIDxzcGFuIGNsYXNzPSJjYXBzIj5J TVBPUlRBTlQ8L3NwYW4+OiBpZiB5b3UgY2hhbmdlIHRoaXMgdmFsdWUgYWxsIHlvdXIgZXhp c3RpbmcgYWNjZXNzIGtleXMgYmVjb21lIGluc3RhbnRseSBpbnZhbGlkPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPkxvZyBJUCBhZGRyZXNzZXM8L3NwYW4+IDogd2hldGhlciB5 b3Ugd2lzaCB0aGUgcGx1Z2luIHRvIGxvZyB0aGUgSVAgYWRkcmVzcyBvZiBlYWNoIHZpc2l0 b3Igd2hvIHRyaWVzIHRvIGFjY2VzcyBhIHByb3RlY3RlZCByZXNvdXJjZTwvbGk+Cgk8L3Vs PgoKCTxoMj5FeGFtcGxlczwvaDI+CgoJPGgzIGlkPSJzbWRfYWtleV9lZzEiPkV4YW1wbGUg MTogUHJvdGVjdCBwYXJ0IG9mIGEgcGFnZTwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9hY2Nlc3NfcHJvdGVjdAogICAgIHRyaWdn ZXI9JnF1b3Q7bGVhZmxldHMmcXVvdDsgZm9yY2U9JnF1b3Q7MSZxdW90OyBleHBpcmVzPSZx dW90Ozg2NDAwJnF1b3Q7Jmd0OwogICAmbHQ7cCZndDtZb3VyIGxlYWZsZXQgY29udGVudHMg Z29lcyBoZXJlJmx0Oy9wJmd0OwombHQ7dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4cDpzbWRf aWZfYWNjZXNzX2Vycm9yCiAgICAgdHlwZT0mcXVvdDtzbWRfYWtleV9lcnJfZm9yYmlkZGVu JnF1b3Q7Jmd0OwogICAgICAmbHQ7cCZndDtCZWZvcmUgeW91IGNhbiBkb3dubG9hZCB0aGlz IGl0ZW0sIHlvdSYjMzk7bGwgbmVlZAogICAgIGFuIGFjY2VzcyBrZXkuCiAgICAgJmx0O2Eg aHJlZj0mcXVvdDsmbHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5IG1heD0mcXVvdDs0JnF1b3Q7CiAg ICAgICAgdHJpZ2dlcj0mcXVvdDtsZWFmbGV0cyZxdW90OyAvJmd0OyZxdW90OyZndDtIZXJl JiMzOTtzIG9uZSZsdDsvYSZndDsmbHQ7L3AmZ3Q7CiAgICZsdDt0eHA6ZWxzZSAvJmd0Owog ICAgICAmbHQ7dHhwOnNtZF9hY2Nlc3NfZXJyb3IgaXRlbT0mcXVvdDtjb2RlLCBtZXNzYWdl JnF1b3Q7CiAgICAgICAgICBicmVhaz0mcXVvdDticiZxdW90OyAvJmd0OwogICAmbHQ7L3R4 cDpzbWRfaWZfYWNjZXNzX2Vycm9yJmd0OwombHQ7L3R4cDpzbWRfYWNjZXNzX3Byb3RlY3Qm Z3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9InNtZF9ha2V5X2VnMiI+RXhhbXBsZSAyOiBQ cm90ZWN0IG11bHRpcGxlIHJlc291cmNlcyB3aXRoIG9uZSB0YWc8L2gzPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYWNjZXNzX3Byb3Rl Y3QKICAgICB0cmlnZ2VyPSZxdW90O2xlYWZsZXQsIGJvb2smcXVvdDsgZXhwaXJlcz0mcXVv dDs4NjQwMCZxdW90OyZndDsKICAgJmx0O3AmZ3Q7WW91ciAmbHQ7dHhwOnNtZF9hY2Nlc3Nf aW5mbyBpdGVtPSZxdW90O3RyaWdnZXImcXVvdDsgLyZndDsKICAgICAgICAgIGNvbnRlbnRz IGdvZXMgaGVyZSZsdDsvcCZndDsKJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICZsdDt0eHA6c21k X2lmX2FjY2Vzc19lcnJvciZndDsKICAgICAgJmx0O3R4cDpzbWRfYWNjZXNzX2Vycm9yIGl0 ZW09JnF1b3Q7Y29kZSwgbWVzc2FnZSZxdW90OwogICAgICAgICAgYnJlYWs9JnF1b3Q7YnIm cXVvdDsgLyZndDsKICAgJmx0Oy90eHA6c21kX2lmX2FjY2Vzc19lcnJvciZndDsKJmx0Oy90 eHA6c21kX2FjY2Vzc19wcm90ZWN0Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+WW91IGNhbiB1 c2Ugc21kX2lmLCBvciBhc3NpZ24gdGhlIG91dHB1dCBvZiA8Y29kZT4mbHQ7dHhwOnNtZF9h Y2Nlc3NfaW5mbyZndDs8L2NvZGU+IHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSZndDs8 L2NvZGU+IGFuZCB1c2UgPGNvZGU+Jmx0O3R4cDppZl92YXJpYWJsZSZndDs8L2NvZGU+LCB0 byBwZXJmb3JtIGNvbmRpdGlvbmFsIGRpc3BsYXkgb2YgYWNjZXNzIGtleSBpbmZvcm1hdGlv bi48L3A+CgoJPGgzIGlkPSJzbWRfYWtleV9lZzMiPkV4YW1wbGUgMzogSXNzdWUgYSByZWdp c3RyYXRpb24gYWN0aXZhdGlvbiBjb2RlPC9oMz4KCgk8cD5JbiB5b3VyIHJlZ2lzdHJhdGlv biBlLW1haWwgZm9ybSwgeW91IGNvdWxkIHB1dCBzb21ldGhpbmcgbGlrZSB0aGlzOjwvcD4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRoYW5rIHlvdSBmb3Ig cmVnaXN0ZXJpbmcgd2l0aCAmbHQ7dHhwOnNpdGVfbmFtZSAvJmd0Oy4KVG8gYWN0aXZhdGUg eW91ciBhY2NvdW50LCBwbGVhc2UgdmlzaXQgdGhlIGZvbGxvd2luZwpsaW5rIHdpdGhpbiB0 aGUgbmV4dCAyNCBob3VyczoKJmx0O3R4cDpzbWRfYWNjZXNzX2tleSB1cmw9JnF1b3Q7L2Fj Y291bnQvYWN0aXZhdGUvJnF1b3Q7IG1heD0mcXVvdDsxJnF1b3Q7CiAgICAgdHJpZ2dlcj0m IzM5O3VzZXJfaWQuJmx0O3R4cDphdXRob3IgdGl0bGU9JnF1b3Q7MCZxdW90OyAvJmd0OyYj Mzk7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5PbmNlIHRoZSB2aXNpdG9yIGhhcyBzaWdu ZWQgdXAgdGhleSBhcmUgZS1tYWlsZWQgYSB1bmlxdWUgYWNjZXNzIHRva2VuIHRvIHRoZSA8 Y29kZT4vYWNjb3VudC9hY3RpdmF0ZTwvY29kZT4gcGFnZS4gWW91IGNhbiBwcm90ZWN0IGl0 IGxpa2UgdGhpczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2Nr Ij4mbHQ7dHhwOnNtZF9hY2Nlc3NfcHJvdGVjdCB0cmlnZ2VyPSZxdW90O3VzZXJfaWQuJnF1 b3Q7CiAgICAgdHJpZ2dlcl9tb2RlPSZxdW90O2JlZ2lucyZxdW90OyBleHBpcmVzPSZxdW90 Ozg2NDAwJnF1b3Q7IGZvcmNlPSZxdW90OzEmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6aGlkZSZn dDsgQWN0aXZhdGlvbiBhY3Rpb25zIGNvdWxkIGdvIGhlcmUgJmx0Oy90eHA6aGlkZSZndDsK ICAgJmx0O3AmZ3Q7Q29uZ3JhdHVsYXRpb25zLCB5b3VyIGFjY291bnQgaXMgYWN0aXZhdGVk LiZsdDsvcCZndDsKJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICZsdDt0eHA6c21kX2FjY2Vzc19l cnJvciAvJmd0OwombHQ7L3R4cDpzbWRfYWNjZXNzX3Byb3RlY3QmZ3Q7CjwvY29kZT48L3By ZT4KCgk8cD5JZiBuZWNlc3NhcnksIHlvdSBjb3VsZCBlbXBsb3kgPGNvZGU+c3RyX3JlcGxh Y2UoKTwvY29kZT4gKG9yIDxjb2RlPiZsdDt0eHA6cmFoX3JlcGxhY2UgLyZndDs8L2NvZGU+ KSB0byByZW1vdmUgdGhlIDxjb2RlPnVzZXJfaWQuPC9jb2RlPiBhbmQgYmUgbGVmdCB3aXRo IHRoZSB1c2VyIG5hbWUgb2YgdGhlIHJlZ2lzdGVyZWQgdXNlciBuYW1lLCBzdWl0YWJsZSBm b3IgZGlzcGxheS4gQWx0ZXJuYXRpdmVseSAmIzgyMTI7IGFuZCBwZXJoYXBzIGVhc2llciAm IzgyMTI7IHlvdSBjb3VsZCBwYXNzIHRoZSBhdXRob3IgYXMgYW4gPGNvZGU+ZXh0cmE8L2Nv ZGU+IHBhcmFtZXRlciB3aGVuIHRoZSBrZXkgaXMgZ2VuZXJhdGVkOjwvcD4KCjxwcmUgY2xh c3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2FjY2Vzc19rZXkg dXJsPSZxdW90Oy9hY2NvdW50L2FjdGl2YXRlLyZxdW90OyBtYXg9JnF1b3Q7MSZxdW90Owog ICAgIHRyaWdnZXI9JnF1b3Q7dXNlcl9pZCZxdW90OyBleHRyYT0mIzM5OyZsdDt0eHA6YXV0 aG9yIHRpdGxlPSZxdW90OzAmcXVvdDsgLyZndDsmIzM5OyAvJmd0Owo8L2NvZGU+PC9wcmU+ CgoJPHA+VGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgZGVmYXVsdCA8Y29kZT50cmlnZ2Vy X21vZGU8L2NvZGU+IGFuZCBoYXMgdGhlIGJlbmVmaXQgdGhhdCB5b3UgY2FuIGRpcmVjdGx5 IGFjY2VzcyB0aGUgYWRkaXRpb25hbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB1c2luZyA8Y29k ZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhXzEmcXVvdDsgLyZn dDs8L2NvZGU+LjwvcD4KCgk8cD5UaGUgPGNvZGU+ZXh0cmE8L2NvZGU+IGF0dHJpYnV0ZSBp cyBldmVuIG1vcmUgcG93ZXJmdWwgaWYgeW91IHBhY2sgbW9yZSBpbmZvcm1hdGlvbiBpbnRv IGl0OiA8Y29kZT5leHRyYT0mIzM5OyZsdDt0eHA6YXV0aG9yIHRpdGxlPSZxdW90OzAmcXVv dDsgLyZndDsvJmx0O3R4cDpzZWN0aW9uIC8mZ3Q7JiMzOTs8L2NvZGU+LiBZb3UgY2FuIHJl dHJpZXZlIGVhY2ggcGllY2UgaW5kaXZpZHVhbGx5OjwvcD4KCgk8dWw+CgkJPGxpPjxjb2Rl PiZsdDt0eHA6c21kX2FjY2Vzc19pbmZvIGl0ZW09JnF1b3Q7ZXh0cmEmcXVvdDsgLyZndDs8 L2NvZGU+ID0mZ3Q7IDxjb2RlPnNkYXdzb24vYWNjb3VudDwvY29kZT48L2xpPgoJCTxsaT48 Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhXzEmcXVvdDsg LyZndDs8L2NvZGU+ID0mZ3Q7IDxjb2RlPnNkYXdzb248L2NvZGU+PC9saT4KCQk8bGk+PGNv ZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX2luZm8gaXRlbT0mcXVvdDtleHRyYV8yJnF1b3Q7IC8m Z3Q7PC9jb2RlPiA9Jmd0OyA8Y29kZT5hY2NvdW50PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxw Pk5vdGUgdGhhdCB5b3UgY2FuIG9ubHkgZXh0cmFjdCBlYWNoIHBpZWNlIGluZGl2aWR1YWxs eSBpZiB5b3UgdXNlIGEgc2xhc2ggYXMgYSBzZXBhcmF0b3IgaW4geW91ciA8Y29kZT5leHRy YTwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8aDI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJ PGxpPjE4IEFwciAxMSB8IDAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJPC91bD4KCjwv ZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2Rl IHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNv dXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMz MzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVy OjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4 OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBz YW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAg aDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7 IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250 OiBib2xkIDE0cHggQXJpYWwsIHNhbnMtc2VyaWY7IG1hcmdpbjogMTBweCAwIDA7IH0KI3Nt ZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXIt c3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJj YXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxw IC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNz bWRfaGVscCB0YWJsZSB7IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmct Ym90dG9tOjFlbTsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9CiNzbWRfaGVscCB0aGVh ZCB7IGJvcmRlci1ib3R0b206ZG91YmxlOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRo IHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW07IH0KI3NtZF9oZWxwIHVs IHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7IGNv bG9yOnJlZDsgfQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0K I3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioq IEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiNThjZWE3YmM0YWI2 ZjljMTQ4NjE1NWQ2ZjdiNWYyOWUiO30=