# Name: smd_access_keys v0.11 # 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 YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjc2OiJQZXJtaXQgYWNjZXNzIHRvIGNvbnRlbnQgZm9yIGEgY2VydGFpbiB0aW1lIHBl cmlvZC9udW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzIjtzOjQ6ImNvZGUiO3M6MzgwMzU6Ii8q Kg0KICogc21kX2FjY2Vzc19rZXlzDQogKg0KICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2lu IGZvciBzZWN1cmUgdG9rZW5pemVkIGFjY2VzcyB0byByZXNvdXJjZXM6DQogKiAgLT4gVGlt ZS1iYXNlZCBvciBhY2Nlc3MgYXR0ZW1wdCBsaW1pdHMNCiAqICAtPiBVbnRhbXBlcmFibGUg VVJMLWJhc2VkIGtleXMNCiAqICAtPiBPcHRpb25hbCBJUCBsb2dnaW5nDQogKg0KICogQGF1 dGhvciBTdGVmIERhd3Nvbg0KICogQGxpbmsgICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vDQog Ki8NCi8vIFRPRE86IEFkZCBzaG9ydGN1dCB0byBzZW5kIGEgbmV3bHktZ2VuZXJhdGVkIGFk bWluLXNpZGUga2V5IHRvIGEgdXNlcj8gKGRyb3Bkb3duIG9mIHVzZXJzICsgZS1tYWlsIHRl bXBsYXRlIGluIHByZWZzPykNCi8vICAgICAgIEFkZCBhdXRvLWRlbGV0aW9uIG9mIGV4cGly ZWQga2V5cyBwcmVmOg0KLy8gICAgICAgIC0+IEZpbGUgZG93bmxvYWQga2V5cyBjYW4gYmUg ZGVsZXRlZCBvbiBhbnkga2V5IGFjY2VzcyAoZXhwaXJ5IHdpbmRvdyBpcyBrbm93biB2aWEg cHJlZnMpDQovLyAgICAgICAgLT4gT3RoZXIga2V5IGFjY2Vzc2VzIGNhbiBvbmx5IGJlIGRl bGV0ZWQgd2hlbiB0aGF0IGtleSBpcyB1c2VkDQovLyAgICAgICAgLT4gQ29uZmlndXJhYmxl IGdyYWNlIHBlcmlvZCBhZnRlciBleHBpcnksIGJlZm9yZSBkZWxldGlvbg0KLy8gICAgICAg T2JmdXNjdGFlZCBVUkxzIChzZWUgaHR0cDovL3JhZGlvYXJ0bmV0Lm5ldC8xMS8yMDExLzA3 LzA1L3NhbXVlbC1iZWNrZXR0LXdvcmRzLWFuZC1tdXNpYy8pDQovLyAgICAgICBRdWVyeSBh biBhY2Nlc3Mga2V5IGFuZCBzZXBhcmF0ZSBpdCBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMg Zm9yIGNvbnZlbmllbnQgdGVzdGluZw0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfYWtleV9ldmVudCwgJHNtZF9ha2V5X3N0eWxlczsNCgkkc21kX2Fr ZXlfZXZlbnQgPSAnc21kX2FrZXknOw0KDQoJJHNtZF9ha2V5X3N0eWxlcyA9IGFycmF5KA0K CQknbGlzdCcgPT4NCiAgICAgICAgICcuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgfScs DQoJKTsNCg0KCWFkZF9wcml2cygkc21kX2FrZXlfZXZlbnQsICcxJyk7DQoJYWRkX3ByaXZz KCdwbHVnaW5fcHJlZnMuc21kX2FjY2Vzc19rZXlzJywgJzEnKTsNCglyZWdpc3Rlcl90YWIo J2V4dGVuc2lvbnMnLCAkc21kX2FrZXlfZXZlbnQsIHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5 X3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYWtleV9kaXNwYXRjaGVy JywgJHNtZF9ha2V5X2V2ZW50KTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FrZXlfd2Vs Y29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLnNtZF9hY2Nlc3Nfa2V5cycpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYWtleV9wcmVmcycsICdwbHVnaW5fcHJlZnMuc21kX2FjY2Vzc19r ZXlzJyk7DQp9DQoNCmdsb2JhbCAkc21kX2FrZXlfcHJlZnM7DQokc21kX2FrZXlfcHJlZnMg PSBhcnJheSgNCgknc21kX2FrZXlfZmlsZV9kb3dubG9hZF9leHBpcmVzJyA9PiBhcnJheSgN CgkJJ2h0bWwnICAgICA9PiAndGV4dF9pbnB1dCcsDQoJCSd0eXBlJyAgICAgPT4gUFJFRl9I SURERU4sDQoJCSdwb3NpdGlvbicgPT4gMTAsDQoJCSdkZWZhdWx0JyAgPT4gJzM2MDAnLA0K CSksDQoJJ3NtZF9ha2V5X3NhbHRfbGVuZ3RoJyA9PiBhcnJheSgNCgkJJ2h0bWwnICAgICA9 PiAndGV4dF9pbnB1dCcsDQoJCSd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4sDQoJCSdwb3Np dGlvbicgPT4gMjAsDQoJCSdkZWZhdWx0JyAgPT4gJzgnLA0KCSksDQoJJ3NtZF9ha2V5X2xv Z19pcCcgPT4gYXJyYXkoDQoJCSdodG1sJyAgICAgPT4gJ3llc25vcmFkaW8nLA0KCQkndHlw ZScgICAgID0+IFBSRUZfSElEREVOLA0KCQkncG9zaXRpb24nID0+IDMwLA0KCQknZGVmYXVs dCcgID0+ICcwJywNCgkpLA0KKTsNCg0KaWYgKCFkZWZpbmVkKCdTTURfQUtFWVMnKSkgZGVm aW5lKCJTTURfQUtFWVMiLCAnc21kX2FrZXlzJyk7DQoNCnJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfYWNjZXNzX3Byb3RlY3RfZG93bmxvYWQnLCAnZmlsZV9kb3dubG9hZCcpOw0KDQovLyAq KioqKioqKioqKioqKioqKioqKg0KLy8gQURNSU4gU0lERSBJTlRFUkZBQ0UNCi8vICoqKioq KioqKioqKioqKioqKioqDQovLyBKdW1wIG9mZiBwb2ludCBmb3IgZXZlbnQvc3RlcHMNCmZ1 bmN0aW9uIHNtZF9ha2V5X2Rpc3BhdGNoZXIoJGV2dCwgJHN0cCkgew0KCWlmKCEkc3RwIG9y ICFpbl9hcnJheSgkc3RwLCBhcnJheSgNCgkJCSdzbWRfYWtleV90YWJsZV9pbnN0YWxsJywN CgkJCSdzbWRfYWtleV90YWJsZV9yZW1vdmUnLA0KCQkJJ3NtZF9ha2V5X2NyZWF0ZScsDQoJ CQknc21kX2FrZXlfcHJlZnMnLA0KCQkJJ3NtZF9ha2V5X3ByZWZzYXZlJywNCgkJCSdzbWRf YWtleV9tdWx0aV9lZGl0JywNCgkJCSdzbWRfYWtleV9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkp IHsNCgkJc21kX2FrZXkoJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8vIEJvb3RzdHJh cCB3aGVuIGluc3RhbGxlZC9kZWxldGVkDQpmdW5jdGlvbiBzbWRfYWtleV93ZWxjb21lKCRl dnQsICRzdHApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3RwKSB7DQoJCWNhc2UgJ2lu c3RhbGxlZCc6DQoJCQlzbWRfYWtleV90YWJsZV9pbnN0YWxsKDApOw0KCQkJJG1zZyA9ICdS ZXN0cmljdCB5b3VyIFR4cCB3b3JsZCA6LSknOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0 ZWQnOg0KCQkJc21kX2FrZXlfdGFibGVfcmVtb3ZlKDApOw0KCQkJYnJlYWs7DQoJfQ0KCXJl dHVybiAkbXNnOw0KfQ0KDQovLyBNYWluIGFkbWluIGludGVyZmFjZQ0KZnVuY3Rpb24gc21k X2FrZXkoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX2FrZXlfZXZlbnQsICRzbWRfYWtleV9s aXN0X3BhZ2VieSwgJHNtZF9ha2V5X3N0eWxlcywgJGxvZ2dpbmcsICRzbWRfYWtleV9wcmVm czsNCg0KCXBhZ2V0b3Aoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfdGFiX25hbWUnKSwgJG1z Zyk7DQoNCglpZiAoc21kX2FrZXlfdGFibGVfZXhpc3QoMSkpIHsNCgkJZXh0cmFjdChncHNh KGFycmF5KCdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcp KSk7DQoJCWlmICgkc29ydCA9PT0gJycpICRzb3J0ID0gZ2V0X3ByZWYoJ3NtZF9ha2V5X3Nv cnRfY29sdW1uJywgJ3RpbWUnKTsNCgkJaWYgKCRkaXIgPT09ICcnKSAkZGlyID0gZ2V0X3By ZWYoJ3NtZF9ha2V5X3NvcnRfZGlyJywgJ2Rlc2MnKTsNCgkJJGRpciA9ICgkZGlyID09ICdh c2MnKSA/ICdhc2MnIDogJ2Rlc2MnOw0KDQoJCXN3aXRjaCAoJHNvcnQpIHsNCgkJCWNhc2Ug J3BhZ2UnOg0KCQkJCSRzb3J0X3NxbCA9ICdwYWdlICcuJGRpci4nLCB0aW1lIGRlc2MnOw0K CQkJYnJlYWs7DQoNCgkJCWNhc2UgJ3RyaWdnYWgnOg0KCQkJCSRzb3J0X3NxbCA9ICd0cmln Z2FoICcuJGRpci4nLCB0aW1lIGRlc2MnOw0KCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ21heGlt dW0nOg0KCQkJCSRzb3J0X3NxbCA9ICdtYXhpbXVtICcuJGRpci4nLCB0aW1lIGRlc2MnOw0K CQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2FjY2Vzc2VzJzoNCgkJCQkkc29ydF9zcWwgPSAnYWNj ZXNzZXMgJy4kZGlyLicsIHRpbWUgZGVzYyc7DQoJCQlicmVhazsNCg0KCQkJY2FzZSAnaXAn Og0KCQkJCSRzb3J0X3NxbCA9ICdpcCAnLiRkaXIuJywgdGltZSBkZXNjJzsNCgkJCWJyZWFr Ow0KDQoJCQlkZWZhdWx0Og0KCQkJCSRzb3J0ID0gJ3RpbWUnOw0KCQkJCSRzb3J0X3NxbCA9 ICd0aW1lICcuJGRpcjsNCgkJCWJyZWFrOw0KCQl9DQoNCgkJc2V0X3ByZWYoJ3NtZF9ha2V5 X3NvcnRfY29sdW1uJywgJHNvcnQsICdzbWRfYWtleScsIFBSRUZfSElEREVOLCAnJywgMCwg UFJFRl9QUklWQVRFKTsNCgkJc2V0X3ByZWYoJ3NtZF9ha2V5X3NvcnRfZGlyJywgJGRpciwg J3NtZF9ha2V5JywgUFJFRl9ISURERU4sICcnLCAwLCBQUkVGX1BSSVZBVEUpOw0KDQoJCSRz d2l0Y2hfZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2MnOw0KDQoJCSRj cml0ZXJpYSA9IDE7DQoNCgkJaWYgKCRzZWFyY2hfbWV0aG9kIGFuZCAkY3JpdCkgew0KCQkJ JGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goc3RyX3JlcGxhY2UoYXJyYXkoJ1xcJywnJScsJ18n LCdcJycpLCBhcnJheSgnXFxcXCcsJ1xcJScsJ1xcXycsICdcXFwnJyksICRjcml0KSk7DQoJ CQkkY3JpdHNxbCA9IGFycmF5KA0KCQkJCSdwYWdlJyAgICAgPT4gInBhZ2UgbGlrZSAnJSRj cml0X2VzY2FwZWQlJyIsDQoJCQkJJ3RyaWdnYWgnICA9PiAidHJpZ2dhaCBsaWtlICclJGNy aXRfZXNjYXBlZCUnIiwNCgkJCQknbWF4aW11bScgID0+ICJtYXhpbXVtID0gJyRjcml0X2Vz Y2FwZWQnIiwNCgkJCQknYWNjZXNzZXMnID0+ICJhY2Nlc3NlcyA9ICckY3JpdF9lc2NhcGVk JyIsDQoJCQkJJ2lwJyAgICAgICA9PiAiaXAgbGlrZSAnJSRjcml0X2VzY2FwZWQlJyIsDQoJ CQkpOw0KDQoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2VhcmNoX21ldGhvZCwgJGNyaXRz cWwpKSB7DQoJCQkJJGNyaXRlcmlhID0gJGNyaXRzcWxbJHNlYXJjaF9tZXRob2RdOw0KCQkJ CSRsaW1pdCA9IDUwMDsNCgkJCX0gZWxzZSB7DQoJCQkJJHNlYXJjaF9tZXRob2QgPSAnJzsN CgkJCQkkY3JpdCA9ICcnOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJJHNlYXJjaF9tZXRob2Qg PSAnJzsNCgkJCSRjcml0ID0gJyc7DQoJCX0NCg0KCQkkdG90YWwgPSBzYWZlX2NvdW50KFNN RF9BS0VZUywgIiRjcml0ZXJpYSIpOw0KDQoJCWVjaG8gJzxkaXYgaWQ9IicuJHNtZF9ha2V5 X2V2ZW50LidfY29udHJvbCIgY2xhc3M9InR4cC1jb250cm9sLXBhbmVsIj4nOw0KDQoJCWlm ICgkdG90YWwgPCAxKSB7DQoJCQlpZiAoJGNyaXRlcmlhICE9IDEpIHsNCgkJCQllY2hvIG4u c21kX2FrZXlfc2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4NCgkJCQkJbi5n cmFmKGdUeHQoJ25vX3Jlc3VsdHNfZm91bmQnKSwgJyBjbGFzcz0iaW5kaWNhdG9yIicpLic8 L2Rpdj4nOw0KCQkJCQlyZXR1cm47DQoJCQl9DQoJCX0NCg0KCQkkbGltaXQgPSBtYXgoJHNt ZF9ha2V5X2xpc3RfcGFnZWJ5LCAxNSk7DQoNCgkJbGlzdCgkcGFnZSwgJG9mZnNldCwgJG51 bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoNCgkJZWNobyBuLnNt ZF9ha2V5X3NlYXJjaF9mb3JtKCRjcml0LCAkc2VhcmNoX21ldGhvZCkuJzwvZGl2Pic7DQoN CgkJLy8gUmV0cmlldmUgdGhlIHNlY3JldCBrZXlyaW5nIHRhYmxlIGVudHJpZXMNCgkJJHNl Y3JpbmcgPSBzYWZlX3Jvd3MoJyonLCBTTURfQUtFWVMsICIkY3JpdGVyaWEgb3JkZXIgYnkg JHNvcnRfc3FsIGxpbWl0ICRvZmZzZXQsICRsaW1pdCIpOw0KDQoJCS8vIFNldCB1cCB0aGUg YnV0dG9ucyBhbmQgY29sdW1uIGluZm8NCgkJJG5ld2J0biA9ICc8YSBjbGFzcz0ibmF2bGlu ayIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIHNtZF9ha2V5X3RvZ2dsZW5ldygpOyI+Jy5z bWRfYWtleV9nVHh0KCdzbWRfYWtleV9idG5fbmV3JykuJzwvYT4nOw0KCQkkcHJlZmJ0biA9 ICc8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9ha2V5X2V2ZW50LmEu J3N0ZXA9c21kX2FrZXlfcHJlZnMiPicuc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfYnRuX3By ZWYnKS4nPC9hPic7DQoJCSRzaG93aXAgPSBnZXRfcHJlZignc21kX2FrZXlfbG9nX2lwJywg JHNtZF9ha2V5X3ByZWZzWydzbWRfYWtleV9sb2dfaXAnXVsnZGVmYXVsdCddLCAxKTsNCg0K CQllY2hvIDw8PEVPQw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rp b24gc21kX2FrZXlfdG9nZ2xlbmV3KCkgew0KCWJveCA9IGpRdWVyeSgiI3NtZF9ha2V5X2Ny ZWF0ZSIpOw0KCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCWJveC5z aG93KCk7DQoJfSBlbHNlIHsNCgkJYm94LmhpZGUoKTsNCgl9DQoJalF1ZXJ5KCJpbnB1dC5z bWRfZm9jdXMiKS5mb2N1cygpOw0KCXJldHVybiBmYWxzZTsNCn0NCmpRdWVyeShmdW5jdGlv bigpIHsNCglqUXVlcnkoIiNzbWRfYWtleV9hZGQiKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJ CWpRdWVyeSgiI3NtZF9ha2V5X3N0ZXAiKS52YWwoJ3NtZF9ha2V5X2NyZWF0ZScpOw0KCQlq UXVlcnkoIiNzbWRfYWtleV9mb3JtIikucmVtb3ZlQXR0cignb25zdWJtaXQnKS5zdWJtaXQo KTsNCgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0M7DQoJCS8vIEluamVjdCBzdHlsZXMNCgkJ ZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF9ha2V5X3N0eWxlc1snbGlz dCddIC4gJzwvc3R5bGU+JzsNCg0KCQkvLyBBY2Nlc3Mga2V5IGxpc3QNCgkJZWNobyBuLic8 ZGl2IGlkPSInLiRzbWRfYWtleV9ldmVudC4nX2NvbnRhaW5lciIgY2xhc3M9InR4cC1jb250 YWluZXIgdHhwLWxpc3QiPic7DQoJCWVjaG8gJzxmb3JtIG5hbWU9Imxvbmdmb3JtIiBpZD0i c21kX2FrZXlfZm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgb25zdWJt aXQ9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPic7DQoJ CWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQllY2hvIG4uJzx0aGVhZD4nDQoJCQkubi50 cih0ZGEoJG5ld2J0biAuIHNwIC4gJHByZWZidG4sICcgY2xhc3M9Im5vbGluZSInKSkNCgkJ CS5uLnRyKA0KCQkJCW4uY29sdW1uX2hlYWQoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfcGFn ZScpLCAncGFnZScsICRzbWRfYWtleV9ldmVudCwgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0 LCAkc2VhcmNoX21ldGhvZCwgKCgncGFnZScgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKS4n cGFnZScpLg0KCQkJCW4uY29sdW1uX2hlYWQoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfdHJp Z2dlcicpLCAndHJpZ2dhaCcsICRzbWRfYWtleV9ldmVudCwgdHJ1ZSwgJHN3aXRjaF9kaXIs ICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCgndHJpZ2dhaCcgPT0gJHNvcnQpID8gIiRkaXIg IiA6ICcnKSkuDQoJCQkJbi5jb2x1bW5faGVhZChzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90 aW1lJyksICd0aW1lJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVlLCAkc3dpdGNoX2RpciwgJGNy aXQsICRzZWFyY2hfbWV0aG9kLCAoKCd0aW1lJyA9PSAkc29ydCkgPyAiJGRpciAiIDogJycp LidkYXRlIHRpbWUnKS4NCgkJCQluLmhDZWxsKGdUeHQoJ2V4cGlyZXMnKSwgJ2V4cGlyZXMn LCAnIGNsYXNzPSJkYXRlIHRpbWUiJykuDQoJCQkJbi5jb2x1bW5faGVhZChzbWRfYWtleV9n VHh0KCdzbWRfYWtleV9tYXgnKSwgJ21heGltdW0nLCAkc21kX2FrZXlfZXZlbnQsIHRydWUs ICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgoJ21heGltdW0nID09ICRz b3J0KSA/ICIkZGlyICIgOiAnJykpLg0KCQkJCW4uY29sdW1uX2hlYWQoc21kX2FrZXlfZ1R4 dCgnc21kX2FrZXlfYWNjZXNzZXMnKSwgJ2FjY2Vzc2VzJywgJHNtZF9ha2V5X2V2ZW50LCB0 cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdhY2Nlc3Nlcycg PT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKSkuDQoJCQkJKCgkc2hvd2lwKSA/IG4uY29sdW1u X2hlYWQoJ0lQJywgJ2lwJywgJHNtZF9ha2V5X2V2ZW50LCB0cnVlLCAkc3dpdGNoX2Rpciwg JGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdpcCcgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcn KS4naXAnKSA6ICcnKS4NCgkJCQluLmhDZWxsKCcnLCAnJywgJyBjbGFzcz0ibXVsdGktZWRp dCInKQ0KCQkJKS4NCgkJCW4uJzwvdGhlYWQ+JzsNCg0KCQkkbXVsdGlPcHRzID0gYXJyYXko J3NtZF9ha2V5X2RlbGV0ZScgPT4gZ1R4dCgnZGVsZXRlJykpOw0KDQoJCWVjaG8gJzx0Zm9v dD4nIC4gdHIodGRhKA0KCQkJCXNlbGVjdF9idXR0b25zKCkNCgkJCQkubi5zZWxlY3RJbnB1 dCgnc21kX2FrZXlfbXVsdGlfZWRpdCcsICRtdWx0aU9wdHMsICcnLCB0cnVlKQ0KCQkJCS5u LmVJbnB1dCgkc21kX2FrZXlfZXZlbnQpDQoJCQkJLm4uZklucHV0KCdzdWJtaXQnLCAnJywg Z1R4dCgnZ28nKSwgJ3NtYWxsZXJib3gnKQ0KCQkJLCcgY2xhc3M9Im11bHRpLWVkaXQiIGNv bHNwYW49IicgLiAoKCRzaG93aXApID8gNyA6IDYpIC4gJyIgc3R5bGU9InRleHQtYWxpZ246 IHJpZ2h0OyBib3JkZXI6IG5vbmU7IicpKTsNCgkJZWNobyAnPC90Zm9vdD4nOw0KCQllY2hv ICc8dGJvZHk+JzsNCg0KCQkvLyBOZXcgYWNjZXNzIGtleSByb3cNCgkJZWNobyAnPHRyIGlk PSJzbWRfYWtleV9jcmVhdGUiIGNsYXNzPSJzbWRfaGlkZGVuIj4nOw0KCQllY2hvIHRkKGZJ bnB1dCgnaGlkZGVuJywgJ3N0ZXAnLCAnc21kX2FrZXlfbXVsdGlfZWRpdCcsICcnLCAnJywg JycsICcnLCAnJywgJ3NtZF9ha2V5X3N0ZXAnKS5mSW5wdXQoJ3RleHQnLCAnc21kX2FrZXlf bmV3cGFnZScsICcnLCAnc21kX2ZvY3VzJywgJycsICcnLCAnNjAnKSkNCgkJCS50ZChmSW5w dXQoJ3RleHQnLCAnc21kX2FrZXlfdHJpZ2dhaCcsICcnKSkNCgkJCS50ZChmSW5wdXQoJ3Rl eHQnLCAnc21kX2FrZXlfdGltZScsIHNhZmVfc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNOiVT JyksICcnLCAnJywgJycsICcyNScpKQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfYWtl eV9leHBpcmVzJywgJycsICcnLCAnJywgJycsICcyNScpKQ0KCQkJLnRkKGZJbnB1dCgndGV4 dCcsICdzbWRfYWtleV9tYXhpbXVtJywgJycsICcnLCAnJywgJycsICc1JykpDQoJCQkudGQo JyZuYnNwOycpDQoJCQkuICgoJHNob3dpcCkgPyB0ZCgnJm5ic3A7JykgOiAnJykNCgkJCS50 ZChmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfYWtleV9hZGQnLCBnVHh0KCdhZGQnKSwgJ3NtYWxs ZXJib3gnLCAnJywgJycsICcnLCAnJywgJ3NtZF9ha2V5X2FkZCcpKTsNCgkJZWNobyAnPC90 cj4nOw0KDQoJCS8vIFJlbWFpbmluZyBhY2Nlc3Mga2V5cw0KCQlmb3JlYWNoICgkc2Vjcmlu ZyBhcyAkc2VjaWR4ID0+ICRkYXRhKSB7DQoJCQlpZiAoJHNob3dpcCkgew0KCQkJCSRpcHMg PSBkb19saXN0KCRkYXRhWydpcCddLCAnICcpOw0KCQkJCSRpcGxpc3QgPSBhcnJheSgpOw0K CQkJCWZvcmVhY2ggKCRpcHMgYXMgJGlwKSB7DQoJCQkJCSRpcGxpc3RbXSA9ICgkbG9nZ2lu ZyA9PSAnbm9uZScpID8gJGlwIDogZUxpbmsoJ2xvZycsICdsb2dfbGlzdCcsICdzZWFyY2hf bWV0aG9kJywgJ2lwJywgJGlwLCAnY3JpdCcsICRpcCk7DQoJCQkJfQ0KCQkJfQ0KCQkJJGRr ZXkgPSAkZGF0YVsncGFnZSddLid8Jy4kZGF0YVsndF9oZXgnXTsNCgkJCSR0aW1lcGFydHMg PSBkb19saXN0KCRkYXRhWyd0X2hleCddLCAnLScpOw0KCQkJJGV4cGlyeSA9IChpc3NldCgk dGltZXBhcnRzWzFdKSkgPyBoZXhkZWMoJHRpbWVwYXJ0c1sxXSkgOiAnJzsNCgkJCWVjaG8g dHIoDQoJCQkJdGQoJzxhIGhyZWY9IicuJGRhdGFbJ3BhZ2UnXS4nIj4nLiRkYXRhWydwYWdl J10uJzwvYT4nLCAnJywgJ3BhZ2UnKQ0KCQkJCS4gdGQoJGRhdGFbJ3RyaWdnYWgnXSkNCgkJ CQkuIHRkKHNhZmVfc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNOiVTJywgJGRhdGFbJ3RpbWUn XSksIDg1LCAnZGF0ZSB0aW1lJykNCgkJCQkuIHRkKCAoKCRleHBpcnkpID8gc2FmZV9zdHJm dGltZSgnJVktJW0tJWQgJUg6JU06JVMnLCAkZXhwaXJ5KSA6ICctJyksIDg1LCAnZGF0ZSB0 aW1lJykNCgkJCQkuIHRkKCRkYXRhWydtYXhpbXVtJ10pDQoJCQkJLiB0ZCgkZGF0YVsnYWNj ZXNzZXMnXSkNCgkJCQkuICggKCRzaG93aXApID8gdGQoIHRyaW0oam9pbignICcsICRpcGxp c3QpKSwgMjAsICdpcCcgKSA6ICcnICkNCgkJCQkuIHRkKCBmSW5wdXQoJ2NoZWNrYm94Jywg J3NlbGVjdGVkW10nLCAkZGtleSwgJ2NoZWNrYm94JyksICcnLCAnbXVsdGktZWRpdCcpDQoJ CQkpOw0KCQl9DQoJCWVjaG8gJzwvdGJvZHk+JzsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCQll Y2hvICc8L2Zvcm0+JzsNCg0KCQllY2hvICc8ZGl2IGlkPSInLiRzbWRfYWtleV9ldmVudC4n X25hdmlnYXRpb24iIGNsYXNzPSJ0eHAtbmF2aWdhdGlvbiI+Jy4NCgkJCW4ubmF2X2Zvcm0o JHNtZF9ha2V5X2V2ZW50LCAkcGFnZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpciwgJGNyaXQs ICRzZWFyY2hfbWV0aG9kLCAkdG90YWwsICRsaW1pdCkuDQoNCgkJCW4ucGFnZWJ5X2Zvcm0o JHNtZF9ha2V5X2V2ZW50LCAkc21kX2FrZXlfbGlzdF9wYWdlYnkpLg0KCQkJbi4nPC9kaXY+ Jy5uLic8L2Rpdj4nOw0KDQoJfSBlbHNlIHsNCgkJLy8gVGFibGUgbm90IGluc3RhbGxlZA0K CQkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScu JHNtZF9ha2V5X2V2ZW50LmEuJ3N0ZXA9c21kX2FrZXlfdGFibGVfaW5zdGFsbCIgc3R5bGU9 ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9ha2V5 X2dUeHQoJ3NtZF9ha2V5X3RibF9pbnN0YWxsX2xibCcpLCAnc21hbGxlcmJveCcpLic8L2Zv cm0+JzsNCgkJJGJ0blN0eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsN CgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRf YWtleV9nVHh0KCdzbWRfYWtleV9wcmVmc19zb21lX3RibCcpKS5ici5icg0KCQkJCS5zbWRf YWtleV9nVHh0KCdzbWRfYWtleV9wcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5z bWRfYWtleV9nVHh0KCdzbWRfYWtleV9wcmVmc19zb21lX29wdHMnKSwgJyBjb2xzcGFuPSIy IicpDQoJCSk7DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJ ZWNobyBlbmRUYWJsZSgpOw0KCX0NCn0NCg0KLy8gQ2hhbmdlIGFuZCBzdG9yZSBxdHktcGVy LXBhZ2UgdmFsdWUNCmZ1bmN0aW9uIHNtZF9ha2V5X2NoYW5nZV9wYWdlYnkoKSB7DQoJZXZl bnRfY2hhbmdlX3BhZ2VieSgnc21kX2FrZXknKTsNCglzbWRfYWtleSgpOw0KfQ0KDQovLyBU aGUgc2VhcmNoIGRyb3Bkb3duIGxpc3QNCmZ1bmN0aW9uIHNtZF9ha2V5X3NlYXJjaF9mb3Jt KCRjcml0LCAkbWV0aG9kKSB7DQoJZ2xvYmFsICRzbWRfYWtleV9ldmVudCwgJHNtZF9ha2V5 X3ByZWZzOw0KDQoJJGRvaXAgPSBnZXRfcHJlZignc21kX2FrZXlfbG9nX2lwJywgJHNtZF9h a2V5X3ByZWZzWydzbWRfYWtleV9sb2dfaXAnXVsnZGVmYXVsdCddLCAxKTsNCg0KCSRtZXRo b2RzID0JYXJyYXkoDQoJCSdwYWdlJyAgICAgPT4gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlf cGFnZScpLA0KCQkndHJpZ2dhaCcgID0+IHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X3RyaWdn ZXInKSwNCgkJJ21heGltdW0nICA9PiBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9tYXgnKSwN CgkJJ2FjY2Vzc2VzJyA9PiBzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9hY2Nlc3NlcycpLA0K CSk7DQoNCglpZiAoJGRvaXApIHsNCgkJJG1ldGhvZHNbJ2lwJ10gPSBnVHh0KCdJUCcpOw0K CX0NCg0KCXJldHVybiBzZWFyY2hfZm9ybSgkc21kX2FrZXlfZXZlbnQsICcnLCAkY3JpdCwg JG1ldGhvZHMsICRtZXRob2QsICdwYWdlJyk7DQp9DQoNCi8vIENyZWF0ZSBhIGtleSBmcm9t IHRoZSBhZG1pbiBzaWRlJ3MgJ05ldyBrZXknIGJ1dHRvbg0KZnVuY3Rpb24gc21kX2FrZXlf Y3JlYXRlKCkgew0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc21kX2FrZXlfbmV3cGFnZScsICdz bWRfYWtleV90cmlnZ2FoJywgJ3NtZF9ha2V5X3RpbWUnLCAnc21kX2FrZXlfZXhwaXJlcycs ICdzbWRfYWtleV9tYXhpbXVtJykpKTsNCg0KCWlmICgkc21kX2FrZXlfbmV3cGFnZSkgew0K CQkvLyBKdXN0IGNhbGwgdGhlIHB1YmxpYyB0YWcgd2l0aCB0aGUgcmVsZXZhbnQgb3B0aW9u cw0KCQkka2V5ID0gc21kX2FjY2Vzc19rZXkoDQoJCQlhcnJheSgNCgkJCQkndXJsJyAgICAg PT4gJHNtZF9ha2V5X25ld3BhZ2UsDQoJCQkJJ3RyaWdnZXInID0+ICRzbWRfYWtleV90cmln Z2FoLA0KCQkJCSdzdGFydCcgICA9PiAkc21kX2FrZXlfdGltZSwNCgkJCQknZXhwaXJlcycg PT4gJHNtZF9ha2V5X2V4cGlyZXMsDQoJCQkJJ21heCcgICAgID0+ICRzbWRfYWtleV9tYXhp bXVtLA0KCQkJKQ0KCQkpOw0KCQkkbXNnID0gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZ2Vu ZXJhdGVkJywgYXJyYXkoJ3trZXl9JyA9PiAka2V5KSk7DQoJfSBlbHNlIHsNCgkJJG1zZyA9 IGFycmF5KHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X25lZWRfcGFnZScpLCBFX0VSUk9SKTsN Cgl9DQoJc21kX2FrZXkoJG1zZyk7DQp9DQoNCi8vIEhhbmRsZSBzdWJtaXNzaW9uIG9mIHRo ZSBtdWx0aS1lZGl0IGRyb3Bkb3duIG9wdGlvbnMNCmZ1bmN0aW9uIHNtZF9ha2V5X211bHRp X2VkaXQoKSB7DQoJJHNlbGVjdGVkID0gZ3BzKCdzZWxlY3RlZCcpOw0KCSRvcGVyYXRpb24g PSBncHMoJ3NtZF9ha2V5X211bHRpX2VkaXQnKTsNCgkkZGVsID0gMDsNCgkkbXNnID0gJyc7 DQoNCglzd2l0Y2ggKCRvcGVyYXRpb24pIHsNCgkJY2FzZSAnc21kX2FrZXlfZGVsZXRlJzoN CgkJCWlmICgkc2VsZWN0ZWQpIHsNCgkJCQlmb3JlYWNoICgkc2VsZWN0ZWQgYXMgJHNlbCkg ew0KCQkJCQkkcGFydHMgPSBleHBsb2RlKCd8JywgJHNlbCk7DQoJCQkJCSRyZXQgPSBzYWZl X2RlbGV0ZShTTURfQUtFWVMsICJwYWdlID0gJyIgLiAkcGFydHNbMF0gLiAiJyBBTkQgdF9o ZXggPSAnIiAuICRwYXJ0c1sxXSAuICInIik7DQoJCQkJCSRkZWwgPSAoJHJldCkgPyAkZGVs KzEgOiAkZGVsOw0KCQkJCX0NCgkJCQkkbXNnID0gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlf ZGVsZXRlZCcsIGFycmF5KCd7ZGVsZXRlZH0nID0+ICRkZWwpKTsNCgkJCX0NCgkJYnJlYWs7 DQoJfQ0KDQoJc21kX2FrZXkoJG1zZyk7DQp9DQoNCi8vIERpc3BsYXkgdGhlIHByZWZzDQpm dW5jdGlvbiBzbWRfYWtleV9wcmVmcygpIHsNCglnbG9iYWwgJHNtZF9ha2V5X2V2ZW50LCAk c21kX2FrZXlfcHJlZnM7DQoNCglwYWdldG9wKHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X3By ZWZfbGVnZW5kJykpOw0KDQoJJG91dCA9IGFycmF5KCk7DQoJJG91dFtdID0gJzxmb3JtIG5h bWU9InNtZF9ha2V5X3ByZWZzIiBpZD0ic21kX2FrZXlfcHJlZnMiIGFjdGlvbj0iaW5kZXgu cGhwIiBtZXRob2Q9InBvc3QiPic7DQoJJG91dFtdID0gZUlucHV0KCRzbWRfYWtleV9ldmVu dCkuc0lucHV0KCdzbWRfYWtleV9wcmVmc2F2ZScpOw0KCSRvdXRbXSA9IHN0YXJ0VGFibGUo J2xpc3QnKTsNCgkkb3V0W10gPSB0cih0ZGNzKHN0cm9uZyhzbWRfYWtleV9nVHh0KCdzbWRf YWtleV9wcmVmX2xlZ2VuZCcpKSwgMikpOw0KCWZvcmVhY2ggKCRzbWRfYWtleV9wcmVmcyBh cyAkaWR4ID0+ICRwcmVmb2JqKSB7DQoJCSRzdWJvdXQgPSBhcnJheSgpOw0KCQkkc3Vib3V0 W10gPSB0ZGEoJzxsYWJlbCBmb3I9IicuJGlkeC4nIj4nLnNtZF9ha2V5X2dUeHQoJGlkeCku JzwvbGFiZWw+JywgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7 IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOw0KCQkkdmFsID0gZ2V0X3ByZWYoJGlkeCwg JHByZWZvYmpbJ2RlZmF1bHQnXSk7DQoJCXN3aXRjaCAoJHByZWZvYmpbJ2h0bWwnXSkgew0K CQkJY2FzZSAndGV4dF9pbnB1dCc6DQoJCQkJJHN1Ym91dFtdID0gZklucHV0Q2VsbCgkaWR4 LCAkdmFsLCAnJywgJycsICcnLCAkaWR4KTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAneWVzbm9y YWRpbyc6DQoJCQkJJHN1Ym91dFtdID0gdGRhKHllc25vUmFkaW8oJGlkeCwgJHZhbCksJyBj bGFzcz0ibm9saW5lIicpOw0KCQkJYnJlYWs7DQoJCX0NCgkJJG91dFtdID0gdHIoam9pbihu ICwkc3Vib3V0KSk7DQoJfQ0KDQoJJG91dFtdID0gdHIodGRhKCcmbmJzcDsnLCAnIGNsYXNz PSJub2xpbmUiJykgLiB0ZGEoZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAn cHVibGlzaCcpLCAnIGNsYXNzPSJub2xpbmUiJykpOw0KCSRvdXRbXSA9IGVuZFRhYmxlKCk7 DQoJJG91dFtdID0gJzwvZm9ybT4nOw0KDQoJZWNobyBqb2luKG4sICRvdXQpOw0KfQ0KDQov LyBTYXZlIHRoZSBwcmVmcw0KZnVuY3Rpb24gc21kX2FrZXlfcHJlZnNhdmUoKSB7DQoJZ2xv YmFsICRzbWRfYWtleV9ldmVudCwgJHNtZF9ha2V5X3ByZWZzOw0KDQoJZm9yZWFjaCAoJHNt ZF9ha2V5X3ByZWZzIGFzICRpZHggPT4gJHByZWZvYmopIHsNCgkJJHZhbCA9IHBzKCRpZHgp Ow0KCQlzZXRfcHJlZigkaWR4LCAkdmFsLCAkc21kX2FrZXlfZXZlbnQsICRwcmVmb2JqWyd0 eXBlJ10sICRwcmVmb2JqWydodG1sJ10sICRwcmVmb2JqWydwb3NpdGlvbiddKTsNCgl9DQoN CgkkbXNnID0gc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfcHJlZnNfc2F2ZWQnKTsNCg0KCXNt ZF9ha2V5KCRtc2cpOw0KfQ0KDQovLyBBZGQgYWtleSB0YWJsZSBpZiBub3QgYWxyZWFkeSBp bnN0YWxsZWQNCmZ1bmN0aW9uIHNtZF9ha2V5X3RhYmxlX2luc3RhbGwoJHNob3dwYW5lPScx Jykgew0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCSRyZXQgPSAnJzsNCgkk c3FsID0gYXJyYXkoKTsNCg0KCS8vIFVzZSAndHJpZ2dhaCcgYW5kICdtYXhpbXVtJyBiZWNh dXNlICd0cmlnZ2VyJyBhbmQgJ21heCcgYXJlIHJlc2VydmVkIHdvcmRzLg0KCSRzcWxbXSA9 ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX0FLRVlTLiJgICgNCgkJ YHBhZ2VgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQlgdF9oZXhgIHZh cmNoYXIoMTcpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCWB0aW1lYCBpbnQoMTQpIE5PVCBO VUxMIGRlZmF1bHQgMCwNCgkJYHNlY3JldGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1 bHQgJycsDQoJCWB0cmlnZ2FoYCB2YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnLA0KCQlg bWF4aW11bWAgaW50KDExKSBOVUxMIGRlZmF1bHQgMCwNCgkJYGFjY2Vzc2VzYCBpbnQoMTEp IE5VTEwgZGVmYXVsdCAwLA0KCQlgaXBgIHRleHQgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJ UFJJTUFSWSBLRVkgKGBwYWdlYCxgdF9oZXhgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCglp ZihncHMoJ2RlYnVnJykpIHsNCgkJZG1wKCRzcWwpOw0KCX0NCglmb3JlYWNoICgkc3FsIGFz ICRxcnkpIHsNCgkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCWlmICgkcmV0PT09ZmFs c2UpIHsNCgkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCWVjaG8gIjxiPiIu JEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIg Lz5cbiI7DQoJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJfQ0KCX0NCg0KCS8v IFNwaXQgb3V0IHJlc3VsdHMNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAw KSB7DQoJCWlmICgkc2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfYWtleV9nVHh0KCdzbWRf YWtleV90YmxfaW5zdGFsbGVkJyk7DQoJCQlzbWRfYWtleSgkbXNnKTsNCgkJfQ0KCX0gZWxz ZSB7DQoJCWlmICgkc2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfYWtleV9nVHh0KCdzbWRf YWtleV90Ymxfbm90X2luc3RhbGxlZCcpOw0KCQkJc21kX2FrZXkoJG1zZyk7DQoJCX0NCgl9 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWJsZSBpZiBp biBkYXRhYmFzZQ0KZnVuY3Rpb24gc21kX2FrZXlfdGFibGVfcmVtb3ZlKCkgew0KCSRyZXQg PSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0g MDsNCglpZiAoc21kX2FrZXlfdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBU QUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9BS0VZUy4gIjsgIjsNCgkJaWYoZ3BzKCdkZWJ1 ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7 DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsN CgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xP QkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxu IjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCglp ZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtc2cgPSBzbWRfYWtl eV9nVHh0KCdzbWRfYWtleV90YmxfcmVtb3ZlZCcpOw0KCX0gZWxzZSB7DQoJCSRtc2cgPSBz bWRfYWtleV9nVHh0KCdzbWRfYWtleV90Ymxfbm90X3JlbW92ZWQnKTsNCgkJc21kX2FrZXko JG1zZyk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9ha2V5X3RhYmxlX2V4aXN0KCR0eXBlPScnKSB7DQoJZ2xvYmFsICRwbHVnaW5zX3Zl ciwgJERCOw0KDQoJLy8gVXBncmFkZSBjaGVjaw0KCSR2ZXIgPSBnZXRfcHJlZignc21kX2Fr ZXlfaW5zdGFsbGVkX3ZlcnNpb24nLCAnJyk7DQoJaWYgKCEkdmVyIHx8ICRwbHVnaW5zX3Zl clsnc21kX2FjY2Vzc19rZXlzJ10gIT0gJHZlcikgew0KCQkvLyBJbmNyZWFzZSB0aGUgc2l6 ZSBvZiB0aGUgdF9oZXggZmllbGQgdG8gYWxsb3cgZm9yIGV4cGlyeSB0aW1lcw0KCQkkcmV0 ID0gQHNhZmVfZmllbGQoIkNIQVJBQ1RFUl9NQVhJTVVNX0xFTkdUSCIsICJJTkZPUk1BVElP Tl9TQ0hFTUEuQ09MVU1OUyIsICJ0YWJsZV9uYW1lID0gJyIuUEZYLlNNRF9BS0VZUy4iJyBB TkQgdGFibGVfc2NoZW1hID0gJyIgLiAkREItPmRiIC4gIicgQU5EIGNvbHVtbl9uYW1lID0g J3RfaGV4JyIpOw0KCQlpZiAoJHJldCAhPSAnMTcnKSB7DQoJCQlzYWZlX2FsdGVyKFNNRF9B S0VZUywgIkNIQU5HRSBgdF9oZXhgIGB0X2hleGAgVkFSQ0hBUiggMTcgKSBOT1QgTlVMTCBE RUZBVUxUICcnIik7DQoJCQlzZXRfcHJlZignc21kX2FrZXlfaW5zdGFsbGVkX3ZlcnNpb24n LCAkcGx1Z2luc192ZXJbJ3NtZF9hY2Nlc3Nfa2V5cyddLCAnc21kX2FrZXknLCBQUkVGX0hJ RERFTiwgJycsIDApOw0KCQl9DQoJfQ0KDQoJaWYgKCR0eXBlID09ICcxJykgew0KCQkkdGJs cyA9IGFycmF5KFNNRF9BS0VZUyA9PiA4KTsNCgkJJG91dCA9IGNvdW50KCR0YmxzKTsNCgkJ Zm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGNvdW50KEBzYWZl X3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9 DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlyZXR1 cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9BS0VZUykpOw0KCX0NCn0NCg0KLy8qKioq KioqKioqKioqKioqKioqKioqDQovLyBQVUJMSUMgU0lERSBJTlRFUkZBQ0UNCi8vKioqKioq KioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gc21kX2FjY2Vzc19rZXkoJGF0dHMsICR0aGlu Zz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRfYWtleV9wcmVmcywgJHNtZF9ha2V5X2luZm87DQoN CgkvLyBJbiBjYXNlIHRoaXMgdGFnIGlzIGNhbGxlZCBmcm9tIHRoZSBhZG1pbiBzaWRlIC0g bmVlZHMgcGFyc2UoKQ0KCWluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoLnBocCc7DQoN CglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknc2VjcmV0JyAgICAgICA9PiAnJywNCgkJJ3Vy bCcgICAgICAgICAgPT4gJycsDQoJCSdzaXRlX25hbWUnICAgID0+ICcxJywNCgkJJ3NlY3Rp b25fbW9kZScgPT4gJzAnLA0KCQknc3RhcnQnICAgICAgICA9PiAnJywNCgkJJ2V4cGlyZXMn ICAgICAgPT4gJycsDQoJCSd0cmlnZ2VyJyAgICAgID0+ICdzbWRfYWtleScsDQoJCSdtYXgn ICAgICAgICAgID0+ICcnLA0KCQknZXh0cmEnICAgICAgICA9PiAnJywNCgkJJ2Zvcm0nICAg ICAgICAgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJaWYgKHNtZF9ha2V5X3RhYmxlX2V4aXN0 KDEpKSB7DQoJCSR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gJHRoaW5nIDogZmV0Y2hfZm9y bSgkZm9ybSk7DQoJCSR0aGluZyA9IChlbXB0eSgkdGhpbmcpKSA/ICc8dHhwOnNtZF9hY2Nl c3NfaW5mbyBpdGVtPSJrZXkiIC8+JyA6ICR0aGluZzsNCg0KCQkkdHJpZ2dlciA9IHRyaW0o JHRyaWdnZXIpOw0KCQkkdHJpZ2dlciA9ICgkdHJpZ2dlciA9PSAnZmlsZV9kb3dubG9hZCcp ID8gJycgOiAkdHJpZ2dlcjsNCg0KCQkkc21kX2FrZXlfc2FsdF9sZW5ndGggPSBnZXRfcHJl Zignc21kX2FrZXlfc2FsdF9sZW5ndGgnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9ha2V5X3Nh bHRfbGVuZ3RoJ11bJ2RlZmF1bHQnXSk7DQoNCgkJLy8gV2l0aG91dCBhIFVSTCwgYXNzdW1l IGN1cnJlbnQgcGFnZQ0KCQkkcGFnZSA9IHJ0cmltKCAoKCR1cmwpID8gJHVybCA6IHNlcnZl clNldCgnUkVRVUVTVF9VUkknKSksICcvJyk7DQoNCgkJaWYgKCRzaXRlX25hbWUgJiYgKHN0 cnBvcygkcGFnZSwgJ2h0dHAnKSAhPT0gMCkpIHsNCgkJCS8vIENhbid0IHVzZSByYXcgaHUg c2luY2UgaXQgY29udGFpbnMgdGhlIHN1YmRpciAoYXMgZG9lcyB0aGUgUkVRVUVTVF9VUkkp DQoJCQkvLyBzbyBkdXBsaWNhdGUgcG9ydGlvbnMgd291bGQgb2NjdXIgaW4gdGhlIGdlbmVy YXRlZCBVUkwNCgkJCSR1cmxwYXJ0cyA9IHBhcnNlX3VybChodSk7DQoJCQkkcGFnZSA9ICR1 cmxwYXJ0c1snc2NoZW1lJ10gLiAnOi8vJyAuICR1cmxwYXJ0c1snaG9zdCddIC4gJHBhZ2U7 DQoJCX0NCg0KCQlpZiAoISRzZWNyZXQpIHsNCgkJCSRzZWNyZXQgPSB1bmlxaWQoJycsIHRy dWUpOw0KCQl9DQoNCgkJJHNhbHQgPSBzdWJzdHIobWQ1KHVuaXFpZChyYW5kKCksIHRydWUp KSwgMCwgJHNtZF9ha2V5X3NhbHRfbGVuZ3RoKTsNCgkJJHBsZW4gPSBzdHJsZW4oJHBhZ2Up ICUgMzI7IC8vIEJlY2F1c2UgMzIgaXMgdGhlIHNpemUgb2YgYW4gbWQ1IHN0cmluZyBhbmQg d2UgZG9uJ3Qgd2FudCB0byBmYWxsIG9mZiB0aGUgZW5kDQoNCgkJLy8gR2VuZXJhdGUgYSB0 aW1lc3RhbXAuIFRoZSBjbG9jayBzdGFydHMgdGlja2luZyBmcm9tIHRoaXMgbW9tZW50DQoJ CSR0cyA9ICgkc3RhcnQpID8gc2FmZV9zdHJ0b3RpbWUoJHN0YXJ0KSA6IHRpbWUoKTsNCgkJ JHRzID0gKCR0cyA9PT0gZmFsc2UpID8gdGltZSgpIDogJHRzOw0KCQkkdF9oZXggPSBkZWNo ZXgoJHRzKTsNCg0KCQkvLyBBbnkgZXhwaXJ5IHRvIGFkZD8NCgkJaWYgKCRleHBpcmVzKSB7 DQoJCQkvLyBSZWxhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgdGltZSwgb3IgYW4gYWJz b2x1dGUgZXhwaXJ5Pw0KCQkJJHJlbCA9IChzdHJwb3MoJGV4cGlyZXMsICcrJykgPT09IDAp ID8gdHJ1ZSA6IGZhbHNlOw0KCQkJaWYgKCRyZWwpIHsNCgkJCQkkZXhwID0gc2FmZV9zdHJ0 b3RpbWUoJGV4cGlyZXMsICR0cyk7DQoJCQl9IGVsc2Ugew0KCQkJCSRleHAgPSBzYWZlX3N0 cnRvdGltZSgkZXhwaXJlcyk7DQoJCQl9DQoJCQlpZiAoJGV4cCAhPT0gZmFsc2UpIHsNCgkJ CQkkdF9oZXggLj0gJy0nIC4gZGVjaGV4KCRleHApOw0KCQkJfQ0KCQl9DQoNCgkJLy8gVXBk YXRlL2luc2VydCB0aGUgcmVtYWluaW5nIGRhdGENCgkJJGV4aXN0cyA9IHNhZmVfZmllbGQo J3BhZ2UnLCBTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiInIEFORCB0X2hl eD0nIi5kb1NsYXNoKCR0X2hleCkuIiciKTsNCgkJJG1heGluZm8gPSAnJzsNCgkJaWYgKCRt YXgpIHsNCgkJCSRtYXhpbmZvID0gIiwgbWF4aW11bSA9ICciLmRvU2xhc2goJG1heCkuIics IGFjY2Vzc2VzID0gJzAnIjsNCgkJfQ0KCQlpZiAoJGV4aXN0cykgew0KCQkJc2FmZV91cGRh dGUoU01EX0FLRVlTLCAidHJpZ2dhaD0nIi5kb1NsYXNoKCR0cmlnZ2VyKS4iJywgdGltZT0n Ii5kb1NsYXNoKCR0cykuIicsIHNlY3JldD0nIi5kb1NsYXNoKCRzZWNyZXQpLiInIiAuICRt YXhpbmZvLCAicGFnZT0nIi5kb1NsYXNoKCRwYWdlKS4iJyBBTkQgdF9oZXg9JyIuZG9TbGFz aCgkdF9oZXgpLiInIik7DQoJCX0gZWxzZSB7DQoJCQlzYWZlX2luc2VydChTTURfQUtFWVMs ICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiInLCB0X2hleD0nIi5kb1NsYXNoKCR0X2hleCku IicsIHRyaWdnYWg9JyIuZG9TbGFzaCgkdHJpZ2dlcikuIicsIHNlY3JldD0nIi5kb1NsYXNo KCRzZWNyZXQpLiInLCB0aW1lPSciLmRvU2xhc2goJHRzKS4iJyIgLiAkbWF4aW5mbyk7DQoJ ICAgfQ0KDQoJCS8vIFRhY2sgb24gbWF4IGlmIGFwcGxpY2FibGUNCgkJJG1heF9zYWZlID0g JG1heDsNCgkJJG1heCA9ICgkbWF4KSA/ICcuJy4kbWF4IDogJyc7DQoNCgkJLy8gQW5kIGFu eSBleHRyYQ0KCQkkZXh0cmF0b2sgPSAoJGV4dHJhKSA/ICcvJy4kZXh0cmEgOiAnJzsNCg0K CQkvLyBDcmVhdGUgdGhlIHJhdyB0b2tlbi4uLg0KCQkkdG9rZW4gPSBtZDUoJHNhbHQuJHNl Y3JldC4kcGFnZS4kdHJpZ2dlci4kdF9oZXguJG1heC4kZXh0cmEpOw0KCQkvLyAuLi4gYW5k IGluc2VydCB0aGUgc2FsdCBwYXJ0d2F5IHRocm91Z2gNCgkJJHNhbHR5X3Rva2VuID0gc3Vi c3RyKCR0b2tlbiwgMCwgJHBsZW4pIC4gJHNhbHQgLiBzdWJzdHIoJHRva2VuLCAkcGxlbik7 DQoJCSR0b2tlbnNlcCA9ICgkc2VjdGlvbl9tb2RlKSA/ICc/JyA6ICcvJzsNCgkJJGtleSA9 ICRwYWdlIC4gKCgkdHJpZ2dlcikgPyAkdG9rZW5zZXAgLiAkdHJpZ2dlciA6ICcnKSAuICcv JyAuICRzYWx0eV90b2tlbiAuICcvJyAuICR0X2hleCAuICRtYXggLiAkZXh0cmF0b2s7DQoN CgkJJHNtZF9ha2V5X2luZm8gPSBhcnJheSgNCgkJCSdha19wYWdlJyAgICAgID0+ICRwYWdl LA0KCQkJJ2FrX2V4dHJhJyAgICAgPT4gJGV4dHJhLA0KCQkJJ2FrX2hleHRpbWUnICAgPT4g JHRfaGV4LA0KCQkJJ2FrX2lzc3VlZCcgICAgPT4gJHRzLA0KCQkJJ2FrX25vdycgICAgICAg PT4gdGltZSgpLA0KCQkJJ2FrX2V4cGlyZXMnICAgPT4gKCRleHBpcmVzKSA/ICRleHAgOiAn JywNCgkJCSdha190cmlnZ2VyJyAgID0+ICR0cmlnZ2VyLA0KCQkJJ2FrX21heGltdW0nICAg PT4gJG1heF9zYWZlLA0KCQkJJ2FrX3NlcGFyYXRvcicgPT4gJHRva2Vuc2VwLA0KCQkJJ2Fr X2tleScgICAgICAgPT4gJGtleSwNCgkJKTsNCg0KCQlyZXR1cm4gcGFyc2UoJHRoaW5nKTsN Cgl9IGVsc2Ugew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X3Ri bF9ub3RfaW5zdGFsbGVkJyksIEVfVVNFUl9OT1RJQ0UpOw0KCX0NCn0NCg0KLy8gUHJvdGVj dCBhIHBhZ2UgZm9yIGEgZ2l2ZW4gdGltZSBsaW1pdCBmcm9tIHRoZSBtb21lbnQgdGhlDQov LyBhY2Nlc3MgdG9rZW4gaGFzIGJlZW4gZ2VuZXJhdGVkLiBFbWJlZCB0aGlzIHRhZyBhdCB0 aGUgdG9wDQovLyBvZiB0aGUgcGFnZSB5b3Ugd2FudCB0byBwcm90ZWN0IG9yIHdyYXAgaXQg YXJvdW5kIHBhcnQgb2YgYQ0KLy8gcGFnZSB5b3Ugd2lzaCB0byBwcm90ZWN0LiBUaGUgdW5p cXVlIFVSTCB0byB0aGUgcmVzb3VyY2UNCi8vIGlzIGdlbmVyYXRlZCBieSA8dHhwOnNtZF9h Y2Nlc3Nfa2V5IC8+DQpmdW5jdGlvbiBzbWRfYWNjZXNzX3Byb3RlY3QoJGF0dHMsICR0aGlu Zz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRfYWNjZXNzX2Vycm9yLCAkc21kX2FjY2Vzc19lcnJj b2RlLCAkc21kX2FrZXlfcHJvdGVjdGVkX2luZm8sICRzbWRfYWtleV9wcmVmcywgJHBlcm1s aW5rX21vZGUsICRwbHVnaW5zOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RyaWdn ZXInICAgICAgPT4gJ3NtZF9ha2V5JywNCgkJJ3RyaWdnZXJfbW9kZScgPT4gJ2V4YWN0Jywg Ly8gZXhhY3QsIGJlZ2lucywgZW5kcywgY29udGFpbnMNCgkJJ3NpdGVfbmFtZScgICAgPT4g JzEnLA0KCQknc2VjdGlvbl9tb2RlJyA9PiAnMCcsDQoJCSdmb3JjZScgICAgICAgID0+ICcw JywNCgkJJ2V4cGlyZXMnICAgICAgPT4gJzM2MDAnLCAvLyBpbiBzZWNvbmRzDQoJKSwkYXR0 cykpOw0KDQoJaWYgKHNtZF9ha2V5X3RhYmxlX2V4aXN0KDEpKSB7DQoJCSR1cmwgPSBzZXJ2 ZXJTZXQoJ1JFUVVFU1RfVVJJJyk7DQoNCgkJaWYgKCRzaXRlX25hbWUgJiYgKHN0cnBvcygk dXJsLCBodSkgPT09IGZhbHNlKSkgew0KCQkJJHVybHBhcnRzID0gcGFyc2VfdXJsKGh1KTsN CgkJCS8vIENhbid0IHVzZSByYXcgaHUgc2luY2UgaXQgY29udGFpbnMgdGhlIHN1YmRpciAo YXMgZG9lcyB0aGUgUkVRVUVTVF9VUkkpDQoJCQkvLyBzbyBkdXBsaWNhdGVzIHdvdWxkIG9j Y3VyIGluIHRoZSBnZW5lcmF0ZWQgVVJMDQoJCQkkdXJsID0gJHVybHBhcnRzWydzY2hlbWUn XSAuICc6Ly8nIC4gJHVybHBhcnRzWydob3N0J10gLiAkdXJsOw0KCQl9DQoNCgkJaWYgKCRz ZWN0aW9uX21vZGUgPT0gJzEnKSB7DQoJCQkkaGFsdmVzID0gZXhwbG9kZSgnPycsICR1cmwp Ow0KCQkJJGhhbGYxID0gZXhwbG9kZSgnLycsICRoYWx2ZXNbMF0pOw0KCQkJJGhhbGYyID0g KGlzc2V0KCRoYWx2ZXNbMV0pKSA/IGV4cGxvZGUoJy8nLCAkaGFsdmVzWzFdKSA6IGFycmF5 KCk7DQoNCgkJCSRwYXJ0cyA9IGFycmF5X21lcmdlKCRoYWxmMSwgJGhhbGYyKTsNCgkJfSBl bHNlIHsNCgkJCSRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkdXJsKTsNCgkJfQ0KDQoJCXRyYWNl X2FkZCgnW3NtZF9hY2Nlc3Nfa2V5IFVSTCBlbGVtZW50czogJyAuIGpvaW4oJ3wnLCAkcGFy dHMpLiddJyk7DQoNCgkJLy8gTG9vayBmb3Igb25lIG9mIHRoZSB0cmlnZ2VycyBpbiB0aGUg VVJMIGFuZCBib21iIG91dCBpZiB3ZSBmaW5kIGl0DQoJCSR0cmlnZ2VycyA9IGRvX2xpc3Qo JHRyaWdnZXIpOw0KCQkkdHJpZ2dlciA9ICR0cmlnZ2Vyc1swXTsgLy8gSW5pdGlhbGlzZSB0 byB0aGUgZmlyc3QgdmFsdWUgaW4gY2FzZSBubyBvdGhlcnMgYXJlIGZvdW5kDQoNCgkJJHRy aWdvZmYgPSBmYWxzZTsNCgkJZm9yZWFjaCAoJHRyaWdnZXJzIGFzICR0cmlnKSB7DQoJCQlz d2l0Y2ggKCR0cmlnZ2VyX21vZGUpIHsNCgkJCQljYXNlICdleGFjdCc6DQoJCQkJCSR0cmln b2ZmID0gYXJyYXlfc2VhcmNoKCR0cmlnLCAkcGFydHMpOw0KCQkJCQkkcmVhbFRyaWcgPSAk dHJpZzsNCgkJCQlicmVhazsNCgkJCQljYXNlICdiZWdpbnMnOg0KCQkJCQkkY291bnQgPSAw Ow0KCQkJCQlmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsNCgkJCQkJCWlmIChzdHJwb3Mo JHBhcnQsICR0cmlnKSA9PT0gMCkgew0KCQkJCQkJCSR0cmlnb2ZmID0gJGNvdW50Ow0KCQkJ CQkJCSRyZWFsVHJpZyA9ICRwYXJ0Ow0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJfQ0KCQkJCQkJ JGNvdW50Kys7DQoJCQkJCX0NCgkJCQlicmVhazsNCgkJCQljYXNlICdlbmRzJzoNCgkJCQkJ JGNvdW50ID0gMDsNCgkJCQkJZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7DQoJCQkJCQkk cmUgPSAnLy4rJy5wcmVnX3F1b3RlKCR0cmlnKS4nJC9pJzsNCgkJCQkJCWlmIChwcmVnX21h dGNoKCRyZSwgJHBhcnQpID09PSAxKSB7DQoJCQkJCQkJJHRyaWdvZmYgPSAkY291bnQ7DQoJ CQkJCQkJJHJlYWxUcmlnID0gJHBhcnQ7DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJ CQkkY291bnQrKzsNCgkJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NvbnRhaW5zJzoN CgkJCQkJJGNvdW50ID0gMDsNCgkJCQkJZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7DQoJ CQkJCQkkcmUgPSAnLy4qJy5wcmVnX3F1b3RlKCR0cmlnKS4nLiokL2knOw0KCQkJCQkJaWYg KHByZWdfbWF0Y2goJHJlLCAkcGFydCkgPT09IDEpIHsNCgkJCQkJCQkkdHJpZ29mZiA9ICRj b3VudDsNCgkJCQkJCQkkcmVhbFRyaWcgPSAkcGFydDsNCgkJCQkJCQlicmVhazsNCgkJCQkJ CX0NCgkJCQkJCSRjb3VudCsrOw0KCQkJCQl9DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlpZiAo JHRyaWdvZmYgIT09IGZhbHNlKSB7DQoJCQkJLy8gRm91bmQgaXQgc28gc2V0IHRoZSB0cmln Z2VyIHRvIGJlIHRoZSBjdXJyZW50IGl0ZW0gYW5kIGp1bXAgb3V0DQoJCQkJJHRyaWdvZmYg PSAoJHRyaWdnZXIgPT0gJ2ZpbGVfZG93bmxvYWQnKSA/ICR0cmlnb2ZmICsgMiA6ICR0cmln b2ZmOw0KCQkJCSR0cmlnZ2VyID0gJHJlYWxUcmlnOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9 DQoNCgkJdHJhY2VfYWRkKCdbc21kX2FjY2Vzc19rZXkgdHJpZ2dlcjogJyAuICR0cmlnZ2Vy IC4gKCR0cmlnb2ZmID8gJyBmb3VuZCBhdCAnIC4gJHRyaWdvZmYgOiAnJykgLiAnXScpOw0K DQoJCSRyZXQgPSBmYWxzZTsNCgkJJHNtZF9hY2Nlc3NfZXJyb3IgPSAkc21kX2FjY2Vzc19l cnJjb2RlID0gJyc7DQoJCSRzbWRfYWtleV9zYWx0X2xlbmd0aCA9IGdldF9wcmVmKCdzbWRf YWtleV9zYWx0X2xlbmd0aCcsICRzbWRfYWtleV9wcmVmc1snc21kX2FrZXlfc2FsdF9sZW5n dGgnXVsnZGVmYXVsdCddKTsNCgkJJGRvaXAgPSBnZXRfcHJlZignc21kX2FrZXlfbG9nX2lw JywgJHNtZF9ha2V5X3ByZWZzWydzbWRfYWtleV9sb2dfaXAnXVsnZGVmYXVsdCddKTsNCg0K CQlpZiAoJHRyaWdvZmYgIT09IGZhbHNlKSB7DQoJCQkkdG9raWR4ID0gJHRyaWdvZmYgKyAx Ow0KCQkJJHRpbWVpZHggPSAkdHJpZ29mZiArIDI7DQoJCQkkZXh0cmFpZHggPSAkdHJpZ29m ZiArIDM7DQoNCgkJCS8vIE9LLCBvbiBhIHRyaWdnZXIgcGFnZSwgc28gcmVhZCB0aGUgdG9r ZW4gZnJvbSB0aGUgVVJMDQoJCQkkdG9rID0gKGlzc2V0KCRwYXJ0c1skdG9raWR4XSkgJiYg c3RybGVuKCRwYXJ0c1skdG9raWR4XSkgPT0gaW50dmFsKDMyICsgJHNtZF9ha2V5X3NhbHRf bGVuZ3RoKSkgPyAkcGFydHNbJHRva2lkeF0gOiAwOw0KDQoJCQl0cmFjZV9hZGQoJ1tzbWRf YWNjZXNzX2tleSB0b2tlbjogJyAuICR0b2sgLiddJyk7DQoNCgkJCWlmICgkdG9rKSB7DQoJ CQkJLy8gVGhlIHRva2VuIGlzIHByZXNlbnQsIHNvIHJlYWQgdGhlIHRpbWVzdGFtcCBmcm9t IHRoZSBVUkwNCgkJCQkkdF9oZXggPSAoaXNzZXQoJHBhcnRzWyR0aW1laWR4XSkpID8gJHBh cnRzWyR0aW1laWR4XSA6IDA7DQoNCgkJCQkvLyBJcyB0aGVyZSBhIGRvd25sb2FkIGxpbWl0 PyBFeHRyYWN0IGl0IGlmIHNvDQoJCQkJJHRpbWVwYXJ0cyA9IGRvX2xpc3QoJHRfaGV4LCAn LicpOw0KCQkJCSRtYXggPSAoaXNzZXQoJHRpbWVwYXJ0c1sxXSkpID8gJHRpbWVwYXJ0c1sx XSA6ICcwJzsNCgkJCQkkbWF4dG9rID0gKCRtYXgpID8gJy4nLiRtYXggOiAnJzsNCgkJCQkk dF9oZXggPSAkdGltZXBhcnRzWzBdOw0KDQoJCQkJLy8gQW55IGV4dHJhIGluZm8/DQoJCQkJ JGV4dHJhcyA9IChpc3NldCgkcGFydHNbJGV4dHJhaWR4XSkpID8gYXJyYXlfc2xpY2UoJHBh cnRzLCAkZXh0cmFpZHgpIDogYXJyYXkoKTsNCg0KCQkJCS8vIFJlY3JlYXRlIHRoZSBvcmln aW5hbCBwYWdlIFVSTCwgc2FucyAvdHJpZ2dlci90b2tlbi90aW1lDQoJCQkJaWYgKCR0cmln Z2VyID09ICdmaWxlX2Rvd25sb2FkJykgew0KCQkJCQkkdHJpZ29mZisrOw0KCQkJCQkkdHJp Z2dlciA9ICcnOw0KCQkJCX0NCg0KCQkJCS8vIGdicF9wZXJtYW5lbnRfbGlua3Mgc2V0cyBt ZXNzeSBtb2RlIGJlaGluZCB0aGUgc2NlbmVzIGJ1dCBzdGlsbCB1c2VzIG5vbi1tZXNzeSBV UkxzDQoJCQkJLy8gc28gaXQgcmVxdWlyZXMgYW4gZXhjZXB0aW9uDQoJCQkJJGdicF9wbCA9 IChpc19hcnJheSgkcGx1Z2lucykgJiYgaW5fYXJyYXkoJ2dicF9wZXJtYW5lbnRfbGlua3Mn LCAkcGx1Z2lucykpOw0KDQoJCQkJaWYgKCRwZXJtbGlua19tb2RlID09ICdtZXNzeScgJiYg ISRnYnBfcGwpIHsNCgkJCQkJLy8gRG9uJ3Qgd2FudCBhIHNsYXNoIGJldHdlZW4gc2l0ZSBh bmQgc3RhcnQgb2YgcXVlcnkgcGFyYW1zDQoJCQkJCSRwYWdlID0gcnRyaW0oam9pbignLycs IGFycmF5X3NsaWNlKCRwYXJ0cywgMCwgJHRyaWdvZmYtMSkpLCAnLycpIC4gJHBhcnRzWyR0 cmlnb2ZmLTFdOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRwYWdlID0gcnRyaW0oam9pbignLycs IGFycmF5X3NsaWNlKCRwYXJ0cywgMCwgJHRyaWdvZmYpKSwgJy8nKTsNCgkJCQl9DQoNCgkJ CQkvLyBJbiBjYXNlIHRoZSBVUkwgY29udGFpbnMgbm9uLWFzY2lpIGNoYXJzDQoJCQkJJHBh Z2UgPSByYXd1cmxkZWNvZGUoJHBhZ2UpOw0KDQoJCQkJdHJhY2VfYWRkKCdbc21kX2FjY2Vz c19rZXkgcGFnZSB8IHRpbWVzdGFtcCB8IG1heCB8IGV4dHJhczogJyAuIGpvaW4oJ3wnLCBh cnJheSgkcGFnZSwgJHRfaGV4LCAkbWF4LCAkZXh0cmFzKSkgLiAnXScpOw0KDQoJCQkJaWYg KCR0X2hleCkgew0KCQkJCQkvLyBUaGUgdGltZXN0YW1wIGlzIHByZXNlbnQuIE5leHQsIGdl dCB0aGUgc2VjcmV0IGtleQ0KCQkJCQkkc2VjcmV0ID0gZmFsc2U7DQoJCQkJCSRzZWNyaW5n ID0gc2FmZV9yb3coJyonLCBTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiIn IEFORCB0X2hleCA9ICciLmRvU2xhc2goJHRfaGV4KS4iJyIpOw0KDQoJCQkJCWlmICgkc2Vj cmluZykgew0KCQkJCQkJJHNlY3JldCA9ICRzZWNyaW5nWydzZWNyZXQnXTsNCg0KCQkJCQkJ Ly8gRXh0cmFjdCB0aGUgc2FsdCBmcm9tIHRoZSB0b2tlbg0KCQkJCQkJJHBsZW4gPSBzdHJs ZW4oJHBhZ2UpICUgMzI7DQoJCQkJCQkkc2FsdCA9IHN1YnN0cigkdG9rLCAkcGxlbiwgJHNt ZF9ha2V5X3NhbHRfbGVuZ3RoKTsNCgkJCQkJCSR0b2sgPSBzdWJzdHIoJHRvaywgMCwgJHBs ZW4pLnN1YnN0cigkdG9rLCAkcGxlbiskc21kX2FrZXlfc2FsdF9sZW5ndGgpOw0KCQkJCQkJ JGV4dCA9ICgoJGV4dHJhcykgPyB1cmxkZWNvZGUoam9pbignLycsICRleHRyYXMpKSA6ICcn KTsNCg0KCQkJCQkJLy8gUmVnZW5lcmF0ZSB0aGUgb3JpZ2luYWwgdG9rZW4uLi4NCgkJIAkJ CQkkY2hlY2tfdG9rZW4gPSBtZDUoJHNhbHQuJHNlY3JldC4kcGFnZS4kdHJpZ2dlci4kdF9o ZXguJG1heHRvay4kZXh0KTsNCg0KCQkJCQkJdHJhY2VfYWRkKCdbc21kX2FjY2Vzc19rZXkg cmVjb25zdHJ1Y3RlZCB0b2tlbjogJyAuICRjaGVja190b2tlbiAuICddJyk7DQoNCgkJCQkJ CS8vIC4uLiBhbmQgY29tcGFyZSBpdCB0byB0aGUgb25lIGluIHRoZSBVUkwNCgkJCQkJCWlm ICgkY2hlY2tfdG9rZW4gPT0gJHRvaykgew0KCQkJCQkJCS8vIFRva2VuIGlzIHZhbGlkLiBO b3cgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIGV4cGlyZWQNCg0KCQkJCQkJCS8vIElzIHRoZXJl IGFuIGV4cGxpY2l0IGFjY2VzcyBrZXkgZXhwaXJ5PyBFeHRyYWN0IHRoYXQgaWYgc28NCgkJ CQkJCQkkdGltZXBhcnRzID0gZG9fbGlzdCgkdF9oZXgsICctJyk7DQoJCQkJCQkJJHRfZXhw ID0gKGlzc2V0KCR0aW1lcGFydHNbMV0pKSA/IGhleGRlYygkdGltZXBhcnRzWzFdKSA6ICcn Ow0KCQkJCQkJCSR0X2JlZyA9ICR0aW1lcGFydHNbMF07DQoNCgkJCQkJCQkkdF9kZWMgPSBo ZXhkZWMoJHRfYmVnKTsNCgkJCQkJCQkkbm93ID0gdGltZSgpOw0KDQoJCQkJCQkJLy8gSGFz IHRoZSByZXNvdXJjZSBiZWNvbWUgYXZhaWxhYmxlIHlldD8NCgkJCQkJCQlpZiAoJG5vdyA8 ICR0X2RlYykgew0KCQkJCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsNCgkJCQkJCQkJCXR4 cF9kaWUoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZXJyX3VuYXZhaWxhYmxlJyksIDQxMCk7 DQoJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRf YWtleV9lcnJfdW5hdmFpbGFibGUnOw0KCQkJCQkJCQkJJHNtZF9hY2Nlc3NfZXJyY29kZSA9 IDQxMDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCS8vIEhhcyB0b2tl bidzIGV4cGlyeSBiZWVuIHJlYWNoZWQsIG9yIGlzICdub3cnIGdyZWF0ZXIgdGhhbiAndGhl bicgKHdoZW4gdG9rZW4gZ2VuZXJhdGVkKSArIGV4cGlyeSBwZXJpb2Q/DQoJCQkJCQkJCWlm ICgkdF9leHApIHsNCgkJCQkJCQkJCSR0ZXN0ZXIgPSB0cnVlOw0KCQkJCQkJCQkJJGNvbXBh cmVfdG8gPSAkdF9leHA7DQoJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkkdGVzdGVyID0g KCRleHBpcmVzICE9IDApOw0KCQkJCQkJCQkJJGNvbXBhcmVfdG8gPSAkdF9kZWMgKyAkZXhw aXJlczsNCgkJCQkJCQkJfQ0KDQoJCQkJCQkJCWlmICgkdGVzdGVyICYmICgkbm93ID4gJGNv bXBhcmVfdG8pKSB7DQoJCQkJCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsNCgkJCQkJCQkJ CQl0eHBfZGllKHNtZF9ha2V5X2dUeHQoJ3NtZF9ha2V5X2Vycl9leHBpcmVkJyksIDQxMCk7 DQoJCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJCSRzbWRfYWNjZXNzX2Vycm9yID0gJ3Nt ZF9ha2V5X2Vycl9leHBpcmVkJzsNCgkJCQkJCQkJCQkkc21kX2FjY2Vzc19lcnJjb2RlID0g NDEwOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJLy8gQ2hlY2sg aWYgdGhlIGRvd25sb2FkIGxpbWl0IGhhcyBiZWVuIGV4Y2VlZGVkDQoJCQkJCQkJCQkkdnVf cXR5ID0gJHNlY3JpbmdbJ2FjY2Vzc2VzJ107DQoJCQkJCQkJCQlpZiAoJG1heCkgew0KCQkJ CQkJCQkJCWlmICgkdnVfcXR5IDwgJG1heCkgew0KCQkJCQkJCQkJCQkkcmV0ID0gdHJ1ZTsN CgkJCQkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsN CgkJCQkJCQkJCQkJCXR4cF9kaWUoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZXJyX2xpbWl0 JyksIDQxMCk7DQoJCQkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJCQkkc21kX2FjY2Vz c19lcnJvciA9ICdzbWRfYWtleV9lcnJfbGltaXQnOw0KCQkJCQkJCQkJCQkJJHNtZF9hY2Nl c3NfZXJyY29kZSA9IDQxMDsNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJ CX0gZWxzZSB7DQoJCQkJCQkJCQkJJHJldCA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJ CQkvLyBJbmNyZW1lbnQgdGhlIGFjY2VzcyBjb3VudGVyDQoJCQkJCQkJCQkkdnVfcXR5Kys7 DQoJDQoJCQkJCQkJCQkvLyBHcmFiIHRoZSBJUCBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9m IElQcyBzbyBmYXINCgkJCQkJCQkJCWlmICgkZG9pcCkgew0KCQkJCQkJCQkJCSRpcHMgPSBk b19saXN0KCRzZWNyaW5nWydpcCddLCAnICcpOw0KCQkJCQkJCQkJCSRpcCA9IHJlbW90ZV9h ZGRyKCk7DQoJCQkJCQkJCQkJaWYgKCFpbl9hcnJheSgkaXAsICRpcHMpKSB7DQoJCQkJCQkJ CQkJCSRpcHNbXSA9ICRpcDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJJGlwdXAgPSAiLCBp cD0nIi5kb1NsYXNoKHRyaW0oam9pbignICcsICRpcHMpKSkuIiciOw0KCQkJCQkJCQkJfSBl bHNlIHsNCgkJCQkJCQkJCQkkaXB1cCA9ICcnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJc2Fm ZV91cGRhdGUoU01EX0FLRVlTLCAiYWNjZXNzZXM9JyIuZG9TbGFzaCgkdnVfcXR5KS4iJyIg LiAkaXB1cCwgInBhZ2U9JyIuZG9TbGFzaCgkcGFnZSkuIicgQU5EIHRfaGV4ID0gJyIuZG9T bGFzaCgkdF9oZXgpLiInIik7DQoNCgkJCQkJCQkJCS8vIExvYWQgdXAgdGhlIGdsb2JhbCBh cnJheSBzbyA8dHhwOnNtZF9hY2Nlc3NfaW5mbz4gYW5kIDx0eHA6aWZfc21kX2FjY2Vzc19p bmZvPiB3b3JrDQoJCQkJCQkJCQkkc21kX2FrZXlfcHJvdGVjdGVkX2luZm8gPSBhcnJheSgN CgkJCQkJCQkJCQkncGFnZScgICAgID0+ICRzZWNyaW5nWydwYWdlJ10sDQoJCQkJCQkJCQkJ J2hleHRpbWUnICA9PiAkc2VjcmluZ1sndF9oZXgnXSwNCgkJCQkJCQkJCQknaXNzdWVkJyAg ID0+ICRzZWNyaW5nWyd0aW1lJ10sDQoJCQkJCQkJCQkJJ25vdycgICAgICA9PiAkbm93LA0K CQkJCQkJCQkJCSdleHBpcmVzJyAgPT4gJGNvbXBhcmVfdG8sDQoJCQkJCQkJCQkJJ3RyaWdn ZXInICA9PiAkc2VjcmluZ1sndHJpZ2dhaCddLA0KCQkJCQkJCQkJCSdtYXhpbXVtJyAgPT4g JHNlY3JpbmdbJ21heGltdW0nXSwNCgkJCQkJCQkJCQknYWNjZXNzZXMnID0+ICR2dV9xdHks DQoJCQkJCQkJCQkpOw0KCQkJCQkJCQkJaWYgKCRkb2lwKSB7DQoJCQkJCQkJCQkJJHNtZF9h a2V5X3Byb3RlY3RlZF9pbmZvWydpcCddID0gJGlwOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJ aWYgKCRleHRyYXMpIHsNCgkJCQkJCQkJCQkkc21kX2FrZXlfcHJvdGVjdGVkX2luZm9bJ2V4 dHJhJ10gPSB1cmxkZWNvZGUoam9pbignLycsICRleHRyYXMpKTsNCgkJCQkJCQkJCQlmb3Jl YWNoKCRleHRyYXMgYXMgJGlkeCA9PiAkZXh0cmEpIHsNCgkJCQkJCQkJCQkJJHNtZF9ha2V5 X3Byb3RlY3RlZF9pbmZvWydleHRyYV8nLmludHZhbCgkaWR4KzEpXSA9IHVybGRlY29kZSgk ZXh0cmEpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0N Cg0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsNCgkJCQkJ CQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9lcnJfaW52YWxpZF90b2tlbicp LCA0MDMpOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSRzbWRfYWNjZXNzX2Vycm9yID0g J3NtZF9ha2V5X2Vycl9pbnZhbGlkX3Rva2VuJzsNCgkJCQkJCQkJJHNtZF9hY2Nlc3NfZXJy Y29kZSA9IDQwMzsNCgkJCQkJCQl9DQoJCQkJCQl9DQoNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ CWlmICgkdGhpbmcgPT0gTlVMTCkgew0KCQkJCQkJCXR4cF9kaWUoc21kX2FrZXlfZ1R4dCgn c21kX2FrZXlfZXJyX3VuYXV0aG9yaXplZCcpLCA0MDEpOw0KCQkJCQkJfSBlbHNlIHsNCgkJ CQkJCQkkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtleV9lcnJfdW5hdXRob3JpemVkJzsN CgkJCQkJCQkkc21kX2FjY2Vzc19lcnJjb2RlID0gNDAxOw0KCQkJCQkJfQ0KCQkJCQl9DQoN CgkJCQl9IGVsc2Ugew0KCQkJCQlpZiAoJHRoaW5nID09IE5VTEwpIHsNCgkJCQkJCXR4cF9k aWUoc21kX2FrZXlfZ1R4dCgnc21kX2FrZXlfZXJyX21pc3NpbmdfdGltZXN0YW1wJyksIDQw Myk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkc21kX2FjY2Vzc19lcnJvciA9ICdzbWRfYWtl eV9lcnJfbWlzc2luZ190aW1lc3RhbXAnOw0KCQkJCQkJJHNtZF9hY2Nlc3NfZXJyY29kZSA9 IDQwMzsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoJHRoaW5nID09 IE5VTEwpIHsNCgkJCQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9lcnJfYmFk X3Rva2VuJyksIDQwMyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHNtZF9hY2Nlc3NfZXJyb3Ig PSAnc21kX2FrZXlfZXJyX2JhZF90b2tlbic7DQoJCQkJCSRzbWRfYWNjZXNzX2VycmNvZGUg PSA0MDM7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJLy8gSWYgd2UgYWx3YXlzIHdh bnQgdG8gZm9yYmlkIGFjY2VzcyB0byB0aGlzIHBhZ2UgcmVnYXJkbGVzcyBpZiB0aGUgdHJp Z2dlciBleGlzdHMNCgkJCWlmICgkZm9yY2UpIHsNCgkJCQlpZiAoJHRoaW5nID09IE5VTEwp IHsNCgkJCQkJdHhwX2RpZShzbWRfYWtleV9nVHh0KCdzbWRfYWtleV9lcnJfZm9yYmlkZGVu JyksIDQwMSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHNtZF9hY2Nlc3NfZXJyb3IgPSAnc21k X2FrZXlfZXJyX2ZvcmJpZGRlbic7DQoJCQkJCSRzbWRfYWNjZXNzX2VycmNvZGUgPSA0MDE7 DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkcmV0ID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KDQoJ CWlmICgkc21kX2FjY2Vzc19lcnJvciB8fCAkc21kX2FjY2Vzc19lcnJjb2RlKSB7DQoJCQl0 cmFjZV9hZGQoJ1tzbWRfYWNjZXNzX2tleSBlcnJvciBzdGF0ZTogJyAuICRzbWRfYWNjZXNz X2VycmNvZGUgLiAnfCcgLiAkc21kX2FjY2Vzc19lcnJvciAuICddJyk7DQoJCX0NCg0KCQkv LyBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IGl0J3MgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIGNv bnRhaW5lcg0KCQlyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkcmV0KSk7DQoJfSBl bHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfYWtleV9nVHh0KCdzbWRfYWtleV90Ymxfbm90 X2luc3RhbGxlZCcpLCBFX1VTRVJfTk9USUNFKTsNCgl9DQp9DQoNCi8vIENhbGxlZCBqdXN0 IGJlZm9yZSBhIGRvd25sb2FkIGlzIGluaXRpYXRlZA0KZnVuY3Rpb24gc21kX2FjY2Vzc19w cm90ZWN0X2Rvd25sb2FkKCRldnQsICRzdHApIHsNCglnbG9iYWwgJHNtZF9ha2V5X3ByZWZz LCAkaWQsICRmaWxlX2Vycm9yOw0KDQoJaWYgKHNtZF9ha2V5X3RhYmxlX2V4aXN0KDEpICYm ICFpc3NldCgkZmlsZV9lcnJvcikpIHsNCgkJJGZpbGVpZCA9IGludHZhbCgkaWQpOw0KDQoJ CS8vIEluIGNhc2UgdGhlIHBhZ2Ugd2FzIGNhbGxlZCB3aXRoIGEgYm9ndXMgZmlsZW5hbWUs IGdldCB0aGUgInRydWUiIGZpbGVuYW1lDQoJCS8vIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBt YWtlIHVwIHRoZSB2YWxpZCBVUkwNCgkJJHJlYWxfZmlsZSA9IHNhZmVfZmllbGQoImZpbGVu YW1lIiwgInR4cF9maWxlIiwgImlkPSIuZG9TbGFzaCgkZmlsZWlkKSk7DQoJCSRwYWdlID0g ZmlsZWRvd25sb2FkdXJsKCRmaWxlaWQsICRyZWFsX2ZpbGUpOw0KCQkkc2VjcmluZyA9IHNh ZmVfZmllbGQoJ3BhZ2UnLCBTTURfQUtFWVMsICJwYWdlPSciLmRvU2xhc2goJHBhZ2UpLiIn Iik7DQoNCgkJLy8gT25seSB3YW50IHRvIHByb3RlY3QgcGFnZXMgdGhhdCB3ZSd2ZSBnZW5l cmF0ZWQgdG9rZW5zIGZvcg0KCQlpZiAoJHNlY3JpbmcpIHsNCgkJCS8vIFBhc3MgaW4gYSBk ZWZhdWx0IGV4cGlyeSBmcm9tIHRoZSBwcmVmLCBidXQgaXQgY2FuIGJlIG92ZXJyaWRkZW4g YnkgdGhlIGtleSdzIGV4cGlyeQ0KCQkJcmV0dXJuIHNtZF9hY2Nlc3NfcHJvdGVjdCgNCgkJ CQlhcnJheSgNCgkJCQkJJ3RyaWdnZXInID0+ICdmaWxlX2Rvd25sb2FkJywNCgkJCQkJJ2Zv cmNlJyAgID0+ICcxJywNCgkJCQkJJ2V4cGlyZXMnID0+IGdldF9wcmVmKCdzbWRfYWtleV9m aWxlX2Rvd25sb2FkX2V4cGlyZXMnLCAkc21kX2FrZXlfcHJlZnNbJ3NtZF9ha2V5X2ZpbGVf ZG93bmxvYWRfZXhwaXJlcyddWydkZWZhdWx0J10pLA0KCQkJCSkNCgkJCSk7DQoJCX0NCgl9 DQoJLy8gcmVtb3RlIGRvd25sb2FkIG5vdCBkb25lIC0gbGVhdmUgdG8gVHhwIHRvIGhhbmRs ZSBlcnJvciBvciAibG9jYWwiIGZpbGUgZG93bmxvYWQNCglyZXR1cm47DQp9DQoNCi8vIENv bmRpdGlvbmFsIHRhZyBmb3IgY2hlY2tpbmcgZXJyb3Igc3RhdHVzIGZyb20gc21kX2FjY2Vz c19wcm90ZWN0DQpmdW5jdGlvbiBzbWRfaWZfYWNjZXNzX2Vycm9yKCRhdHRzLCAkdGhpbmc9 TlVMTCkgew0KCWdsb2JhbCAkc21kX2FjY2Vzc19lcnJvciwgJHNtZF9hY2Nlc3NfZXJyY29k ZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyAgID0+ICcnLA0KCQknY29k ZScgICA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCgkkZXJyID0gYXJyYXkoKTsNCgkkY29kZXMg PSBkb19saXN0KCRjb2RlKTsNCgkkdHlwZXMgPSBkb19saXN0KCR0eXBlKTsNCg0KCWlmICgk c21kX2FjY2Vzc19lcnJvcikgew0KCQlpZiAoJGNvZGUgJiYgJHR5cGUpIHsNCgkJCSRlcnJb J2NvZGUnXSA9IChpbl9hcnJheSgkc21kX2FjY2Vzc19lcnJjb2RlLCAkY29kZXMpKSA/IHRy dWUgOiBmYWxzZTsNCgkJCSRlcnJbJ21zZyddID0gKGluX2FycmF5KCRzbWRfYWNjZXNzX2Vy cm9yLCAkdHlwZXMpKSA/IHRydWUgOiBmYWxzZTsNCgkJfSBlbHNlIGlmICgkY29kZSkgew0K CQkJJGVyclsnY29kZSddID0gKGluX2FycmF5KCRzbWRfYWNjZXNzX2VycmNvZGUsICRjb2Rl cykpID8gdHJ1ZSA6IGZhbHNlOw0KCQl9IGVsc2UgaWYgKCR0eXBlKSB7DQoJCQkkZXJyWydt c2cnXSA9IChpbl9hcnJheSgkc21kX2FjY2Vzc19lcnJvciwgJHR5cGVzKSkgPyB0cnVlIDog ZmFsc2U7DQoJCX0gZWxzZSB7DQoJCQkkZXJyWydtc2cnXSA9IHRydWU7DQoJCX0NCgl9DQoN Cgkkb3V0ID0gaW5fYXJyYXkoZmFsc2UsICRlcnIpID8gZmFsc2UgOiB0cnVlOyAvLyBBTkQg bG9naWMNCg0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRvdXQpKTsNCn0NCg0K Ly8gRGlzcGxheSBhY2Nlc3MgZXJyb3IgaW5mb3JtYXRpb24NCmZ1bmN0aW9uIHNtZF9hY2Nl c3NfZXJyb3IoJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRfYWNjZXNzX2Vy cm9yLCAkc21kX2FjY2Vzc19lcnJjb2RlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJ J2l0ZW0nICAgID0+ICdtZXNzYWdlJywNCgkJJ21lc3NhZ2UnID0+ICcnLA0KCQknd3JhcHRh ZycgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICA9PiAnJywNCgkJJ2h0bWxfaWQnICAgID0+ ICcnLA0KCQknYnJlYWsnICAgICAgPT4gJycsDQoJCSdicmVha2NsYXNzJyA9PiAnJywNCgkp LCRhdHRzKSk7DQoNCgkkb3V0ID0gYXJyYXkoKTsNCgkkaXRlbXMgPSBkb19saXN0KCRpdGVt KTsNCg0KCWlmICgkc21kX2FjY2Vzc19lcnJjb2RlICYmIGluX2FycmF5KCdjb2RlJywgJGl0 ZW1zKSkgew0KCQkkb3V0W10gPSAkc21kX2FjY2Vzc19lcnJjb2RlOw0KCX0NCg0KCWlmICgk c21kX2FjY2Vzc19lcnJvciAmJiBpbl9hcnJheSgnbWVzc2FnZScsICRpdGVtcykpIHsNCgkJ JG91dFtdID0gKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21kX2FrZXlfZ1R4dCgkc21kX2Fj Y2Vzc19lcnJvcik7DQoJfQ0KDQoJaWYgKCRvdXQpIHsNCgkJcmV0dXJuIGRvV3JhcCgkb3V0 LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzLCAnJywgJycsICRodG1s X2lkKTsNCgl9DQoNCglyZXR1cm4gJyc7DQp9DQoNCi8vIERpc3BsYXkgYWNjZXNzIGluZm9y bWF0aW9uIGZvciBjdXN0b20gZm9ybWF0dGVkIG1lc3NhZ2VzDQpmdW5jdGlvbiBzbWRfYWNj ZXNzX2luZm8oJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRfYWtleV9wcm90 ZWN0ZWRfaW5mbywgJHNtZF9ha2V5X2luZm87DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0K CQknaXRlbScgICAgICAgPT4gJ3BhZ2UnLA0KCQknZXNjYXBlJyAgICAgPT4gJ2h0bWwnLA0K CQknZm9ybWF0JyAgICAgPT4gJyVZLSVtLSVkICVIOiVNOiVTJywNCgkJJ3dyYXB0YWcnICAg ID0+ICcnLA0KCQknY2xhc3MnICAgICAgPT4gJycsDQoJCSdodG1sX2lkJyAgICA9PiAnJywN CgkJJ2JyZWFrJyAgICAgID0+ICcnLA0KCQknYnJlYWtjbGFzcycgPT4gJycsDQoJKSwkYXR0 cykpOw0KDQoJJG91dCA9IGFycmF5KCk7DQoJJGl0ZW1zID0gZG9fbGlzdCgkaXRlbSk7DQoN Cglmb3JlYWNoICgkaXRlbXMgYXMgJGlkeCkgew0KCQkkYWtfaWR4ID0gJ2FrXycuJGlkeDsN CgkJaWYgKCRzbWRfYWtleV9wcm90ZWN0ZWRfaW5mbyAmJiBhcnJheV9rZXlfZXhpc3RzKCRp ZHgsICRzbWRfYWtleV9wcm90ZWN0ZWRfaW5mbykpIHsNCgkJCSR2YWwgPSAoJGVzY2FwZSA9 PSAnaHRtbCcpID8gaHRtbHNwZWNpYWxjaGFycygkc21kX2FrZXlfcHJvdGVjdGVkX2luZm9b JGlkeF0pIDogJHNtZF9ha2V5X3Byb3RlY3RlZF9pbmZvWyRpZHhdOw0KCQkJaWYgKGluX2Fy cmF5KCRpZHgsIGFycmF5KCd0aW1lJywgJ25vdycsICdleHBpcmVzJykpICYmICRmb3JtYXQp IHsNCgkJCQkkdmFsID0gc2FmZV9zdHJmdGltZSgkZm9ybWF0LCAkdmFsKTsNCgkJCX0NCgkJ CSRvdXRbXSA9ICR2YWw7DQoJCX0NCgkJaWYgKCRzbWRfYWtleV9pbmZvICYmIGFycmF5X2tl eV9leGlzdHMoJGFrX2lkeCwgJHNtZF9ha2V5X2luZm8pKSB7DQoJCQkkdmFsID0gKCRlc2Nh cGUgPT0gJ2h0bWwnKSA/IGh0bWxzcGVjaWFsY2hhcnMoJHNtZF9ha2V5X2luZm9bJGFrX2lk eF0pIDogJHNtZF9ha2V5X2luZm9bJGFrX2lkeF07DQoJCQlpZiAoaW5fYXJyYXkoJGlkeCwg YXJyYXkoJ3RpbWUnLCAnbm93JywgJ2V4cGlyZXMnKSkgJiYgJGZvcm1hdCkgew0KCQkJCSR2 YWwgPSBzYWZlX3N0cmZ0aW1lKCRmb3JtYXQsICR2YWwpOw0KCQkJfQ0KCQkJJG91dFtdID0g JHZhbDsNCgkJfQ0KCX0NCg0KCWlmICgkb3V0KSB7DQoJCXJldHVybiBkb1dyYXAoJG91dCwg JHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcywgJycsICcnLCAkaHRtbF9p ZCk7DQoJfQ0KDQoJcmV0dXJuICcnOw0KfQ0KDQovKioNCiAqIHNtZF9ha2V5X2dUeHQJQ29u dmVydCBzdHJpbmdzIGZvciBpMThuIHB1cnBvc2VzDQogKg0KICogQHBhcmFtCXN0cmluZwkk d2hhdCBbK10gW3ByaXZhdGVdIFtzdGF0aWNdCQlOYW1lIG9mIHRoZSBpdGVtIGZyb20gdGhl IGFycmF5IHRvIHJldHJpZXZlDQogKiBAcGFyYW0JYXJyYXkJJGF0dHMgWytdCShEZWZhdWx0 OiBBcnJheSkJQXJyYXkgb2YgJ3NlYXJjaCcgPT4gJ3JlcGxhY2VtZW50cycgdG8gbWFrZQ0K ICovDQpmdW5jdGlvbiBzbWRfYWtleV9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsN CgkkbGFuZyA9IGFycmF5KA0KCQknZW4tZ2InID0+IGFycmF5KA0KCQkJJ3NtZF9ha2V5X2Fj Y2Vzc2VzJyA9PiAnQWNjZXNzIGF0dGVtcHRzJywNCgkJCSdzbWRfYWtleV9idG5fbmV3JyA9 PiAnTmV3IGtleScsDQoJCQknc21kX2FrZXlfYnRuX3ByZWYnID0+ICdQcmVmcycsDQoJCQkn c21kX2FrZXlfZGVsZXRlZCcgPT4gJ0tleXMgZGVsZXRlZDoge2RlbGV0ZWR9JywNCgkJCSdz bWRfYWtleV9lcnJfYmFkX3Rva2VuJyA9PiAnTWlzc2luZyBvciBtYW5nbGVkIGFjY2VzcyBr ZXknLA0KCQkJJ3NtZF9ha2V5X2Vycl9leHBpcmVkJyA9PiAnQWNjZXNzIGV4cGlyZWQnLA0K CQkJJ3NtZF9ha2V5X2Vycl9mb3JiaWRkZW4nID0+ICdGb3JiaWRkZW4gYWNjZXNzJywNCgkJ CSdzbWRfYWtleV9lcnJfaW52YWxpZF90b2tlbicgPT4gJ0ludmFsaWQgYWNjZXNzIGtleScs DQoJCQknc21kX2FrZXlfZXJyX21pc3NpbmdfdGltZXN0YW1wJyA9PiAnTWlzc2luZyB0aW1l c3RhbXAnLA0KCQkJJ3NtZF9ha2V5X2Vycl91bmF2YWlsYWJsZScgPT4gJ05vdCBhdmFpbGFi bGUnLA0KCQkJJ3NtZF9ha2V5X2Vycl91bmF1dGhvcml6ZWQnID0+ICdVbmF1dGhvcml6ZWQg YWNjZXNzJywNCgkJCSdzbWRfYWtleV9lcnJfbGltaXQnID0+ICdBY2Nlc3MgbGltaXQgcmVh Y2hlZCcsDQoJCQknc21kX2FrZXlfZmlsZV9kb3dubG9hZF9leHBpcmVzJyA9PiAnRmlsZSBk b3dubG9hZCBleHBpcnkgdGltZSAoc2Vjb25kcyknLA0KCQkJJ3NtZF9ha2V5X2dlbmVyYXRl ZCcgPT4gJ0FjY2VzcyBrZXk6IHtrZXl9JywNCgkJCSdzbWRfYWtleV9sb2dfaXAnID0+ICdM b2cgSVAgYWRkcmVzc2VzJywNCgkJCSdzbWRfYWtleV9tYXgnID0+ICdNYXhpbXVtJywNCgkJ CSdzbWRfYWtleV9uZWVkX3BhZ2UnID0+ICdZb3UgbmVlZCB0byBlbnRlciBhIHBhZ2UgVVJM JywNCgkJCSdzbWRfYWtleV9wYWdlJyA9PiAnUGFnZScsDQoJCQknc21kX2FrZXlfcHJlZl9s ZWdlbmQnID0+ICdBY2Nlc3Mga2V5IHByZWZlcmVuY2VzJywNCgkJCSdzbWRfYWtleV9wcmVm c19zYXZlZCcgPT4gJ1ByZWZlcmVuY2VzIHNhdmVkJywNCgkJCSdzbWRfYWtleV9wcmVmc19z b21lX3RibCcgPT4gJ05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuJywNCgkJCSdzbWRf YWtleV9wcmVmc19zb21lX2V4cGxhaW4nID0+ICdUaGlzIGlzIGVpdGhlciBhIG5ldyBpbnN0 YWxsYXRpb24gb3IgYSBkaWZmZXJlbnQgdmVyc2lvbicuYnIuJ29mIHRoZSBwbHVnaW4gdG8g b25lIHlvdSBoYWQgYmVmb3JlLicsDQoJCQknc21kX2FrZXlfcHJlZnNfc29tZV9vcHRzJyA9 PiAnQ2xpY2sgIkluc3RhbGwgdGFibGUiIHRvIGFkZCBvciB1cGRhdGUgdGhlIHRhYmxlJy5i ci4nbGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuJywNCgkJCSdzbWRfYWtl eV9wcmVmc19zb21lX3RibCcgPT4gJ05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUuJywN CgkJCSdzbWRfYWtleV9zYWx0X2xlbmd0aCcgPT4gJ1NhbHQgbGVuZ3RoIChjaGFyYWN0ZXJz KScsDQoJCQknc21kX2FrZXlfdGFiX25hbWUnID0+ICdBY2Nlc3Mga2V5cycsDQoJCQknc21k X2FrZXlfdGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCB0YWJsZScsDQoJCQknc21kX2Fr ZXlfdGJsX2luc3RhbGxlZCcgPT4gJ1RhYmxlIGluc3RhbGxlZCcsDQoJCQknc21kX2FrZXlf dGJsX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZSBub3QgaW5zdGFsbGVkJywNCgkJCSdzbWRf YWtleV90YmxfcmVtb3ZlZCcgPT4gJ1RhYmxlIHJlbW92ZWQnLA0KCQkJJ3NtZF9ha2V5X3Ri bF9ub3RfcmVtb3ZlZCcgPT4gJ1RhYmxlIG5vdCByZW1vdmVkJywNCgkJCSdzbWRfYWtleV90 aW1lJyA9PiAnSXNzdWVkJywNCgkJCSdzbWRfYWtleV90cmlnZ2VyJyA9PiAnVHJpZ2dlcics DQoJCSksDQoJKTsNCg0KCSR0aGlzbGFuZyA9IGdldF9wcmVmKCdsYW5ndWFnZScsICdlbi1n YicpOw0KCSR0aGlzbGFuZyA9IChpc3NldCgkbGFuZ1skdGhpc2xhbmddWyR3aGF0XSkpID8g JHRoaXNsYW5nIDogJ2VuLWdiJzsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHRoaXNsYW5nXVsk d2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6 IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjI5MDIwOiI8ZGl2IGlkPSJz bWRfaGVscCI+CgoJPGgxPnNtZF9hY2Nlc3Nfa2V5czwvaDE+CgoJPHA+UGVybWl0IGFjY2Vz cyB0byBkb3dubG9hZHMsIHBhZ2VzIG9yIHBhcnRzIG9mIHBhZ2VzIGZvciBhIGNlcnRhaW4g Y29uZmlndXJhYmxlIHRpbWUgcGVyaW9kIGFuZC9vciBmb3IgYSBkZWZpbmVkIG51bWJlciBv ZiBhY2Nlc3MgYXR0ZW1wdHMuIFRoZSBhY2Nlc3Mga2V5IGlzIHRhbXBlci1wcm9vZi48L3A+ CgoJPGgyPkluc3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0i aW1wb3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjQu MCs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJo dHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTIyMi9zbWRfYWNjZXNzX2tleXMiPnRl eHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiBw YW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVGhlIHRhYmxlIHdpbGwgYmUg aW5zdGFsbGVkIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSB1c2UgdGhlIHBsdWdpbiBmcm9t IHRoZSBjYWNoZSBkaXJlY3Rvcnk7IGluIHdoaWNoIGNhc2UsIHZpc2l0IHRoZSA8ZW0+RXh0 ZW5zaW9ucy0mZ3Q7QWNjZXNzIGtleXM8L2VtPiB0YWIgYW5kIGNsaWNrIHRoZSA8ZW0+SW5z dGFsbCB0YWJsZTwvZW0+IGJ1dHRvbiBiZWZvcmUgdHJ5aW5nIHRvIHVzZSB0aGUgcGx1Z2lu LjwvcD4KCgk8cD5UbyB1bmluc3RhbGwgdGhlIHBsdWdpbiwgZGVsZXRlIGZyb20gdGhlIDxl bT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2UuIFRoZSBhY2Nlc3Mga2V5cyB0YWJsZSB3 aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseS48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNTk5 NiI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPk92ZXJ2aWV3 PC9oMj4KCgk8cD5UaGUgcGx1Z2luIGFsbG93cyB5b3UgdG8gY3JlYXRlIGtleXMgZm9yIGFu eSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBhbmQgeW91IGNhbiB0aGVuIHByb3Rl Y3QgYWxsIG9yIHBhcnQgb2YgdGhhdCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBi eSBlaXRoZXI6PC9wPgoKCTxwPmEpIHdyYXBwaW5nIGEgdGFnIGFyb3VuZCB0aGUgcGFydHMg eW91IHdhbnQgcHJvdGVjdGluZzxiciAvPgpiKSBwdXR0aW5nIGEgcHJvdGVjdGlvbiB0YWcg YXQgdGhlIHRvcCBvZiB0aGUgcGFnZSB0byBwcm90ZWN0IGl0cyBlbnRpcmV0eTxiciAvPgpj KSBmbGFnZ2luZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gYXMgYSBmaWxl X2Rvd25sb2FkIHdoZXJlYnkgaXQmIzgyMTc7cyBhdXRvbWF0aWNhbGx5IHJlc3RyaWN0ZWQg dG8gb25seSB0aG9zZSBpbiBwb3NzZXNzaW9uIG9mIHRoZSBrZXk8L3A+CgoJPHA+QW4gYWNj ZXNzIGtleSBpcyBhIGxvbmcgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdGhhdCBs b29rcyBsaWtlIHRoaXM6IDxjb2RlPnNpdGUuY29tL3NvbWUvcHJvdGVjdGVkL3VybC8mbHQ7 dHJpZ2dlciZndDsvJmx0O3Rva2VuJmd0Oy8mbHQ7dGltZXN0YW1wcyZndDsuJmx0O21heF9h Y2Nlc3NlcyZndDs8L2NvZGU+LiBBbnkgZGV2aWF0aW9uIG9yIGFsdGVyYXRpb24gb2YgdGhl IHRva2VuIHJlc3VsdHMgaW4gcmVqZWN0aW9uLiBUaGUgc2VjcmV0IGtleSB1c2VkIHRvIHBy b3RlY3QgdGhlIHJlc291cmNlcyBjYW4gYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkg dGhlIHBsdWdpbiBvciBzdXBwbGllZCBieSB5b3UuIEEgdXNlci1jb25maWd1cmFibGUgc2Fs dCBpcyBhcHBsaWVkIGFzIHdlbGwuIEZvciBiZXN0IHJlc3VsdHMsIGxldCB0aGUgcGx1Z2lu IGNob29zZSwgYmVjYXVzZSB0aGVuIG5vIHR3byBzZWNyZXQga2V5cy9zYWx0cyB3aWxsIGV2 ZXIgYmUgdGhlIHNhbWUsIGV2ZW4gaWYgdGhleSBwcm90ZWN0IHRoZSBleGFjdCBzYW1lIHJl c291cmNlLjwvcD4KCgk8cD5Zb3UgY2FuIHRpbWUtbGltaXQgdGhlIGFjY2VzcyB0byB0aGUg cmVzb3VyY2UgaWYgeW91IGxpa2UgJiM4MjEyOyBmcm9tIHRoZSBtb21lbnQgdGhlIGtleSBp cyBnZW5lcmF0ZWQgb3IgZnJvbSBzb21lIGFyYml0cmFyeSBwb2ludCBpbiB0aGUgZnV0dXJl ICYjODIxMjsgYW5kL29yIHlvdSBjYW4gbGltaXQgdGhlIG51bWJlciBvZiBhY2Nlc3NlcyAo dmlld3MvZG93bmxvYWRzKSB0aGF0IHJlc291cmNlIGNhbiBoYXZlLiBXaGVuIHRoZSByZXNv dXJjZSBoYXMgZXhwaXJlZCwgaXQmIzgyMTc7cyBnb25lLjwvcD4KCgk8cD5LZXlzIGNhbiBi ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgYWRtaW4gc2lkZSBpbnRlcmZhY2UgKDxlbT5FeHRlbnNp b25zLSZndDtBY2Nlc3Mga2V5czwvZW0+KSBvciB2aWEgYSBwdWJsaWMgdGFnLiBUaGUgbGF0 dGVyIGFsbG93cyB5b3UgdG8gb2ZmZXIgc2VsZi1rZXkgZ2VuZXJhdGlvbiwgcGVyaGFwcyBp biByZXNwb25zZSB0byBhIG1lbV9zZWxmX3JlZ2lzdGVyIHJlcXVlc3Qgb3IgemVtX2NvbnRh Y3RfcmVib3JuIGZvcm0gc3VibWlzc2lvbiwgb3IgZnJvbSBhbiBhZG1pbi1zaWRlIGRhc2hi b2FyZC48L3A+CgoJPGgyPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX2tleSAvJmd0 OzwvY29kZT48L2gyPgoKCTxwPkdlbmVyYXRlcyBhbiBhY2Nlc3MgdG9rZW4gZm9yIGEgZ2l2 ZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIENvbmZpZ3VyZSBpdCB1c2luZyB0 aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9wPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9 ImF0bm0iPnVybDwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gb2YgdGhlIHJlc291cmNlIHlvdSB3YW50IHRvIHByb3RlY3QuIENhbiBiZSBl aXRoZXIgYSBmdWxseSBxdWFsaWZpZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g b3IgcmVsYXRpdmUuPC9kZD4KCQk8ZGQ+RGVmYXVsdDogdGhlIGN1cnJlbnQgcGFnZTwvZGQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj50cmlnZ2VyPC9zcGFuPjwvZHQ+CgkJPGRkPlRo aXMgc3RyaW5nIGlzIGFkZGVkIHRvIHlvdXIgdXJsIHNvIHRoZSBwbHVnaW4ga25vd3MgaXQg aXMgcHJvdGVjdGVkIGNvbnRlbnQuPC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNvZGU+c21kX2Fr ZXk8L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnNpdGVfbmFtZTwvc3Bh bj48L2R0PgoJCTxkZD5XaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgYWRkIHRoZSBzaXRlIG5h bWUgKGh0dHA6Ly9zaXRlLmNvbSkgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IG9yIG5vdC4gQ2hvb3NlIGZyb206Cgk8ZGw+CgkJPGRkPjA6IGxlYXZlIHRoZSBzaXRl IG91dDwvZGQ+CgkJPGRkPjE6IGFkZCB0aGUgc2l0ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiAoYnV0IG9ubHkgaWYgaXRzIG5vdCBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gYWxyZWFkeSk8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiAx PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnNlY3Rpb25fbW9kZTwvc3Bhbj48L2R0 PgoJCTxkZD5JZiB5b3UgYXJlIHRyeWluZyB0byBwcm90ZWN0IGEgc2VjdGlvbiBsYW5kaW5n IHBhZ2UgKGkuZS4gbm90IGFuIGFydGljbGUpIHRoZW4geW91IHdpbGwgbGlrZWx5IHJlY2Vp dmUgYSA0MDQgZXJyb3Igd2hlbiB0cnlpbmcgdG8gYWNjZXNzIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+cyB0aGF0IGVudGlyZWx5IHVzZSAmIzgyMTY7LyYjODIxNzsgYXMgdGhl aXIgc2VwYXJhdG9yLiBCeSBzZXR0aW5nIDxjb2RlPnNlY3Rpb25fbW9kZT0mcXVvdDsxJnF1 b3Q7PC9jb2RlPiB5b3UgdGVsbCB0aGUgcGx1Z2luIHRvIHNlcGFyYXRlIHRoZSBwYWdlIDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGZyb20gdGhlIGFjY2VzcyBrZXkgaW5mb3Jt YXRpb24gd2l0aCBhICYjODIxNjs/JiM4MjE3OyBpbnN0ZWFkLjwvZGQ+CgkJPGRkPk5vdGUg dGhpcyBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgcGx1Z2luIHdpdGggdGhlIG1lc3N5IG1v ZGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RydWN0dXJlLCBub3IgY2FuIHlv dSBwYXNzIGFueSB0cmFkaXRpb25hbCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBw YXJhbWV0ZXJzIHRvIHRoZSBwYWdlLiBZb3UgY2FuLCBob3dldmVyLCBlbmNvZGUgc3VjaCBw YXJhbWV0ZXJzIGludG8gdGhlIDxjb2RlPmV4dHJhPC9jb2RlPiBhcmVhIG9mIHRoZSBrZXku PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5z ZWNyZXQ8L3NwYW4+PC9kdD4KCQk8ZGQ+QSBzZWNyZXQga2V5IHVzZWQgdG8gdW5sb2NrIHRo ZSBwYWdlLiBDaG9vc2UgYW55IHRleHQgeW91IHdpc2ggaGVyZSBvciBsZWF2ZSBibGFuayB0 byBoYXZlIHRoZSBwbHVnaW4gY2hvb3NlIGEgcmFuZG9tIG51bWJlciBmb3IgeW91LjwvZGQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zdGFydDwvc3Bhbj48L2R0PgoJCTxkZD5BbiBF bmdsaXNoLWZvcm1hdHRlZCBkYXRlIHN0YW1wIGZyb20gd2hlbiB5b3Ugd2FudCB0aGUgcmVz b3VyY2UgdG8gYmVjb21lIGF2YWlsYWJsZS4gSXQgaXMgb2Z0ZW4gYmVzdCB0byB1c2UgPGNv ZGU+WVlZWS1NTU0tREQgSEg6TU06U1M8L2NvZGU+IGZvcm1hdCBhcyBpdCBpcyB0aGUgbGVh c3QgYW1iaWd1b3VzLjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGVtcHR5IChpLmUuIG5vdyk8L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXhwaXJlczwvc3Bhbj48L2R0PgoJCTxkZD5B biBFbmdsaXNoLWZvcm1hdHRlZCBkYXRlIHN0YW1wIGF0IHdoaWNoIHlvdSB3aXNoIHRoZSBy ZXNvdXJjZSB0byBleHBpcmUsIE9SIGFuIG9mZnNldCBiZWdpbm5pbmcgd2l0aCAmIzgyMTY7 KyYjODIxNzssIGZvciBleGFtcGxlIDxjb2RlPmV4cGlyZXM9JnF1b3Q7KzI0IGhvdXJzJnF1 b3Q7PC9jb2RlPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGtleSBleHBp cnk6IGdldCB0aGUgZXhwaXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIHByb3RlY3RlZCByZXNv dXJjZSBpdHNlbGYpPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm1heDwvc3Bhbj48 L2R0PgoJCTxkZD5JZiB5b3Ugd2lzaCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRo aXMgcmVzb3VyY2UgY2FuIGJlIHJlcXVlc3RlZCwgc2V0IGl0cyB2YWx1ZSBoZXJlLjwvZGQ+ CgkJPGRkPkRlZmF1bHQ6IHVuc2V0IChpLmUuIHVubGltaXRlZCk8L2RkPgoJCTxkdD48c3Bh biBjbGFzcz0iYXRubSI+ZXh0cmE8L3NwYW4+PC9kdD4KCQk8ZGQ+SWYgeW91IHdhbnQgdG8g YWRkIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiAoYWZ0ZXIgdGhlIHRva2VuKSB0aGVuIHNwZWNpZnkgaXQgaGVyZS4g SWYgc2V0LCBhIHNsYXNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IGFuZCB0aGVuIHlvdXIgZ2l2ZW4gY29udGVudCB3aWxsIGJlIGFwcGVu ZGVkLiBJdCYjODIxNztzIHVwIHRvIHlvdSB0byBlbnN1cmUgaXQgaXMgc3VpdGFibHkgZW5j b2RlZC4gTm90ZSB0aGF0IHlvdSBjYW4gYWRkIG11bHRpcGxlIGl0ZW1zLCBzZXBhcmF0aW5n IGVhY2ggd2l0aCBhIHNsYXNoIGNoYXJhY3RlciBpZiB5b3Ugd2lzaC4gQWRkaXRpb25hbCB2 YWx1ZXMgYWRkZWQgdXNpbmcgdGhpcyBhdHRyaWJ1dGUgYXJlIGRpcmVjdGx5IGFjY2Vzc2li bGUgdXNpbmcgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19pbmZvIC8mZ3Q7PC9jb2Rl PiB0YWc8L2RkPgoJPC9kbD4KCgk8cD5BIGZldyB3b3JkcyBhYm91dCB0aGlzIHRhZzo8L3A+ CgoJPG9sPgoJCTxsaT5UaGUgY2xvY2sgc3RhcnRzIHRpY2tpbmcgdGhlIG1vbWVudCB0aGUg dG9rZW4gaXMgZ2VuZXJhdGVkIChvciBhdCB0aGUgdGltZSBnaXZlbiBpbiB0aGUgPGNvZGU+ c3RhcnQ8L2NvZGU+IGF0dHJpYnV0ZSk8L2xpPgoJCTxsaT5Zb3UgY2FuIHBhc3MgdGhlIHJl dHVybmVkIGFjY2VzcyBsaW5rIGFyb3VuZCBhcyBvZnRlbiBhcyB5b3UgbGlrZSB0byBhcyBt YW55IHBlb3BsZSBhcyB5b3UgbGlrZSBhbmQgaXQmIzgyMTc7bGwga2VlcCB3b3JraW5nIHVu dGlsIGl0cyBleHBpcnkvYWNjZXNzIGxpbWl0IGlzIG1ldDwvbGk+CgkJPGxpPkVhY2ggdGlt ZSB5b3UgY3JlYXRlIGEgbmV3IHRva2VuIChldmVuIGZvciB0aGUgc2FtZSBwYWdlKSBhIG5l dyBhY2Nlc3MgY291bnRlciBpcyBnZW5lcmF0ZWQ7IGFueSBwcmV2aW91c2x5IGNyZWF0ZWQg dG9rZW5zIHRoYXQgc3RpbGwgaGF2ZSBhdmFpbGFibGUgYWNjZXNzIGF0dGVtcHRzIHdpbGwg Y29udGludWUgdG8gZnVuY3Rpb24gdW50aWwgdGhlIGxpbWl0IGlzIHJlYWNoZWQgb3IgdGhl eSBleHBpcmU8L2xpPgoJCTxsaT5EaXJlY3QgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gZmlsZSBkb3dubG9hZHMgY2FuIGJlIHByb3RlY3RlZCB0b28uIEp1c3Qgc3VwcGx5IDxj b2RlPnRyaWdnZXI9JnF1b3Q7ZmlsZV9kb3dubG9hZCZxdW90OzwvY29kZT4gYW5kIDxjb2Rl PnVybD0mcXVvdDsvZmlsZV9kb3dubG9hZC8mbHQ7aWQmZ3Q7LyZsdDtmaWxlbmFtZSZndDsm cXVvdDs8L2NvZGU+LiBZb3Ugd2lsbCB0aGVuIG5vdCBiZSBwZXJtaXR0ZWQgdG8gYWNjZXNz IHRoZSBzaXRlLmNvbS9maWxlX2Rvd25sb2FkLzxpZD4gbGluayB3aXRob3V0IHRoZSBhY2Nl c3MgdG9rZW4gYmVpbmcgcHJlc2VudC4gRm9yIHRoaXMgdG8gYmUgZWZmZWN0aXZlIHlvdSBz aG91bGQgbW92ZSB5b3VyIDxjb2RlPi9maWxlczwvY29kZT4gZGlyZWN0b3J5IG91dCBvZiBh IHdlYi1hY2Nlc3NpYmxlIGxvY2F0aW9uIG9yIGVtcGxveSBhbiAuaHRhY2Nlc3MgZmlsZSB0 aGF0IGZvcmJpZHMgYnlwYXNzaW5nIHRoZSA8Y29kZT5zaXRlLmNvbS9maWxlcy8mbHQ7Zmls ZW5hbWUmZ3Q7PC9jb2RlPiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBmb3JtYXQu IE5vdGUgdGhhdCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBub3JtYWxseSBhbGxv d3MgeW91IHRvIHR5cGUgYW55dGhpbmcgYWZ0ZXIgdGhlIDxjb2RlPi9pZC88L2NvZGU+IGFz IGEgZmlsZW5hbWUgYW5kIHN0aWxsIHJldHJpZXZlIHRoZSBmaWxlOyBzbWRfYWNjZXNzX2tl eSB3aWxsIG5vdDogdGhlIGZpbGVuYW1lIG11c3QgbWF0Y2ggZXhhY3RseTwvbGk+CgkJPGxp PklmIHRoZSA8Y29kZT5zdGFydDwvY29kZT4gZGF0ZSBpcyBtYW5nbGVkIGluIGFueSB3YXks IHRoZSBrZXkgd2lsbCBiZSBnZW5lcmF0ZWQgJiM4MjE2O25vdyYjODIxNzs8L2xpPgoJCTxs aT5JZiB0aGUgPGNvZGU+ZXhwaXJlczwvY29kZT4gaXMgbWFuZ2xlZCBpbiBhbnkgd2F5LCBu byBlcHhpcnkgd2lsbCBiZSBzZXQ8L2xpPgoJCTxsaT5Zb3VyIHNlY3JldCBrZXkgaXMgc2Fs dGVkIHVzaW5nIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIHNhbHQuIFRoZSBkZWZhdWx0IGxlbmd0 aCBvZiB0aGUgc2FsdCBpcyA4IGNoYXJhY3RlcnMgYnV0IHlvdSBjYW4gYWx0ZXIgdGhpcyB2 aWEgYSA8YSBocmVmPSIjc21kX2FrZXlfcHJlZnMiPnByZWY8L2E+PC9saT4KCQk8bGk+WW91 IG1heSBjb250cm9sIHRoZSBleHBpcnkgdGltZSBvZiA8ZW0+YWxsPC9lbT4gb2YgeW91ciBk aXJlY3QgZmlsZV9kb3dubG9hZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgYnkg YWx0ZXJpbmcgYSA8YSBocmVmPSIjc21kX2FrZXlfcHJlZnMiPnByZWY8L2E+PC9saT4KCTwv b2w+CgoJPGgzPkV4YW1wbGU6IENyZWF0aW5nIGEga2V5PC9oMz4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2FjY2Vzc19rZXkKICAgICB1 cmw9JnF1b3Q7L211c2ljL25leHQtYmlnLWhpdCZxdW90OyB0cmlnZ2VyPSZxdW90O2RlbW8m cXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoaXMgbWlnaHQgZ2VuZXJhdGUgYW4g YWNjZXNzLWNvbnRyb2xsZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3VjaCBh cyB0aGUgZm9sbG93aW5nIChuZXdsaW5lcyBqdXN0IGZvciBjbGFyaXR5KTo8L3A+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5odHRwOi8vc2l0ZS5jb20vbXVz aWMvbmV4dC1iaWctaGl0L2RlbW8vCiAgICAgNDJjNTMxZDEzNDIzZWVjYWFhYjczYTJkZjQz YThiN2MzMzdhMzYwYS80ZDlkMTJhNQo8L2NvZGU+PC9wcmU+CgoJPHA+U2VuZCB0aGF0IGxp bmsgdG8geW91ciBmcmllbmQgYW5kIHNoZSYjODIxNztsbCBiZSBhYmxlIHRvIGxpc3RlbiB0 byB5b3VyIGNvb2wgbmV3IGRlbW8gc29uZy48L3A+CgoJPGgyPlRhZzogPGNvZGU+Jmx0O3R4 cDpzbWRfYWNjZXNzX3Byb3RlY3QgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5PbmNlIHlvdSYj ODIxNzt2ZSBnZW5lcmF0ZWQgYSBrZXksIGl0JiM4MjE3O3MgdGltZSB0byBwcm90ZWN0IGFs bCBvciBwYXJ0IG9mIHlvdXIgY2hvc2VuIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ LjwvcD4KCgk8dWw+CgkJPGxpPlRvIHByb3RlY3QgYW4gZW50aXJlIHBhZ2UsIHB1dCB0aGUg PGNvZGU+Jmx0O3R4cDpzbWRfYWNjZXNzX3Byb3RlY3QmZ3Q7PC9jb2RlPiB0YWcgcmlnaHQg YXQgdGhlIHRvcCwgYWJvdmUgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RE9DVFlQRTwvc3Bh bj48L2xpPgoJCTxsaT5UbyBvbmx5IHByb3RlY3QgcGFydCBvZiBhIHBhZ2UsIHdyYXAgdGhl IHByb3RlY3RlZCBjb250ZW50IHdpdGggdGhlIHRhZzwvbGk+CgkJPGxpPkZpbGUgZG93bmxv YWRzIGFyZSBhdXRvbWF0aWNhbGx5IHByb3RlY3RlZCBpZiB5b3UgaGF2ZSBnZW5lcmF0ZWQg YSBrZXkgZm9yIHRoZW08L2xpPgoJPC91bD4KCgk8cD5Db25maWd1cmUgdGhlIHBsdWdpbiB3 aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8L3A+CgoJPGRsPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+dHJpZ2dlcjwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgc2FtZSB0cmlnZ2Vy IHlvdSBzcGVjaWZpZWQgaW4geW91ciA8Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5IC8m Z3Q7PC9jb2RlPiB0YWcuIFlvdSBtYXkgc3BlY2lmeSBhIHBhcnRpYWwgdHJpZ2dlciBpZiB1 dGlsaXNpbmcgPGNvZGU+dHJpZ2dlcl9tb2RlPC9jb2RlPi48L2RkPgoJCTxkZD5EZWZhdWx0 OiA8Y29kZT5zbWRfYWtleTwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ dHJpZ2dlcl9tb2RlPC9zcGFuPjwvZHQ+CgkJPGRkPlVzdWFsbHkgeW91JiM4MjE3O2xsIHdh bnQgdGhlIHRyaWdnZXIgdG8gbWF0Y2ggZXhhY3RseSwgYnV0IHlvdSBtYXkgd2lzaCB0byBt YXRjaCBzb21lIHBhcnQgb2YgdGhlIHRyaWdnZXIgKGZvciBhIHByYWN0aWNhbCBleGFtcGxl IG9mIHRoaXMsIHNlZSA8YSBocmVmPSIjc21kX2FrZXlfZWczIj5leGFtcGxlIDM8L2E+KS4g Q2hvb3NlIGZyb206Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+ZXhhY3Q8L3N0cm9uZz4gOiAoZGVm YXVsdCkgaW5jb21pbmcgdG9rZW4mIzgyMTc7cyB0cmlnZ2VyIG11c3QgZXhhY3RseSBtYXRj aCB0aGUgPGNvZGU+dHJpZ2dlcjwvY29kZT4gYXR0cmlidXRlPC9kZD4KCQk8ZGQ+PHN0cm9u Zz5iZWdpbnM8L3N0cm9uZz4gOiBpbmNvbWluZyB0b2tlbiYjODIxNztzIHRyaWdnZXIgbXVz dCBiZWdpbiB3aXRoIDxjb2RlPnRyaWdnZXI8L2NvZGU+PC9kZD4KCQk8ZGQ+PHN0cm9uZz5l bmRzPC9zdHJvbmc+IDogaW5jb21pbmcgdG9rZW4mIzgyMTc7cyB0cmlnZ2VyIG11c3QgZW5k IHdpdGggPGNvZGU+dHJpZ2dlcjwvY29kZT48L2RkPgoJCTxkZD48c3Ryb25nPmNvbnRhaW5z PC9zdHJvbmc+IDogaW5jb21pbmcgdG9rZW4mIzgyMTc7cyB0cmlnZ2VyIG11c3QgY29udGFp biB0aGUgdGV4dCBnaXZlbiBpbiA8Y29kZT50cmlnZ2VyPC9jb2RlPjwvZGQ+Cgk8L2RsPjwv ZGQ+CgkJPGRkPkRlZmF1bHQ6IDxjb2RlPmV4YWN0PC9jb2RlPjwvZGQ+CgkJPGR0PjxzcGFu IGNsYXNzPSJhdG5tIj5zaXRlX25hbWU8L3NwYW4+PC9kdD4KCQk8ZGQ+QWRkIHRoZSBzaXRl IHByZWZpeCB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gd2hlbiB0cnlp bmcgdG8gZmlndXJlIG91dCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJvdGVjdGVkLiBUaGlzIGZ1 bmN0aW9ucyBpZGVudGljYWxseSB0byB0aGUgYXR0cmlidXRlIGluIHRoZSA8Y29kZT4mbHQ7 dHhwOnNtZF9hY2Nlc3Nfa2V5IC8mZ3Q7PC9jb2RlPiB0YWcgYW5kLCBpZGVhbGx5LCB0aGV5 IHNob3VsZCBtYXRjaC48L2RkPgoJCTxkZD5EZWZhdWx0OiAxICh5ZXMpPC9kZD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPnNlY3Rpb25fbW9kZTwvc3Bhbj48L2R0PgoJCTxkZD5Xb3Jr cyBpbiBhbiBpZGVudGljYWwgbWFubmVyIHRvIHRoZSBhdHRyaWJ1dGUgaW4gdGhlIDxjb2Rl PiZsdDt0eHA6c21kX2FjY2Vzc19rZXkgLyZndDs8L2NvZGU+IHRhZyBhbmQgdGhleSBzaG91 bGQgbWF0Y2guPC9kZD4KCQk8ZGQ+RGVmYXVsdDogMCAobm8pPC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPmZvcmNlPC9zcGFuPjwvZHQ+CgkJPGRkPkNvbnRyb2xzIGNvbnRlbnQg YXZhaWxhYmlsaXR5LiBUaGlzIGlzIG9uZSBtZXRob2Qgb2YgcHV0dGluZyB0aGUgdG9rZW4g Z2VuZXJhdGlvbiB0YWcgYW5kIHRoZSBwcm90ZWN0ZWQgY29udGVudCBvbiB0aGUgc2FtZSBw YWdlLiBDaG9vc2UgZnJvbToKCTxkbD4KCQk8ZGQ+MDogcGVybWl0IHRoZSByZXNvdXJjZSB0 byBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlPC9kZD4KCQk8ZGQ+MTogdGhlIGNvbnRlbnQgaXMg dW5hdmFpbGFibGUgZXZlbiBpZiB5b3UgPGVtPmRvbiYjODIxNzt0PC9lbT4gc3BlY2lmeSB0 aGUgYWNjZXNzIHRva2VuIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiAo ZS5nLiBpZiB5b3UgZGlyZWN0bHkgdmlzaXQgPGNvZGU+L211c2ljL25leHQtYmlnLWhpdDwv Y29kZT4pPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5leHBpcmVzPC9zcGFuPjwvZHQ+CgkJPGRkPlRoZSB0aW1lLCBp biBzZWNvbmRzLCBhZnRlciB3aGljaCB0aGUgcmVzb3VyY2Ugd2lsbCBjZWFzZSB0byBiZSBh dmFpbGFibGUuIFNldCB0byAwIGZvciB1bmxpbWl0ZWQgdGltZS48L2RkPgoJCTxkZD5JZiB5 b3UgaGF2ZSBzZXQgYW4gZXhwaXJ5IGluIHRoZSBrZXkgaXRzZWxmLCB0aGlzIGF0dHJpYnV0 ZSBpcyBpZ25vcmVkIHdoZW4gdGhhdCBrZXkgaXMgcHJlc2VudGVkLjwvZGQ+CgkJPGRkPkRl ZmF1bHQ6IDM2MDAgKDEgaG91cik8L2RkPgoJPC9kbD4KCgk8cD4oaWYgeW91IHdpc2ggdG8g bG9nIElQIGFkZHJlc3NlcyBmb3IgZWFjaCBhY2Nlc3MgYXR0ZW1wdCB5b3UgY2FuIHNldCB0 aGUgPGEgaHJlZj0iI3NtZF9ha2V5X3ByZWZzIj5wcmVmPC9hPik8L3A+CgoJPHA+SW4gb3Vy IG11c2ljIGV4YW1wbGUgeW91JiM4MjE3O2xsIHByb2JhYmx5IHdhbnQgdG8gcHV0IHRoZSBm b2xsb3dpbmcgdGFnIGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2U6PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYWNjZXNzX3Byb3RlY3Qg ZXhwaXJlcz0mcXVvdDs4NjQwMCZxdW90OyB0cmlnZ2VyPSZxdW90O2RlbW8mcXVvdDsgZm9y Y2U9JnF1b3Q7MSZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+U28gbm9ib2R5IGNh biB2aXNpdCB0aGF0IHBhZ2UgdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIGdpdmVuIGEgdmFsaWQg YWNjZXNzIHRva2VuIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBUaGUgc29uZyB3 aWxsIGJlIGF2YWlsYWJsZSBmb3IgbGlzdGVuaW5nIGZvciBqdXN0IG9uZSBkYXkgZnJvbSB0 aGUgbW9tZW50IHRoZSB0b2tlbiBpcyBnZW5lcmF0ZWQuPC9wPgoKCTxwPkFsdGVybmF0aXZl bHksIHlvdSBtaWdodCBhbGxvdyBwZW9wbGUgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBwYWdl IGFuZCBqdXN0IHdyYXAgdGhlIG1wMyBpdHNlbGYgd2l0aCB0aGUgdGFnOjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2FjY2Vzc19w cm90ZWN0IGV4cGlyZXM9JnF1b3Q7ODY0MDAmcXVvdDsgdHJpZ2dlcj0mcXVvdDtkZW1vJnF1 b3Q7Jmd0OwogICZsdDtvYmplY3QgdHlwZT0mcXVvdDsvYXVkaW8vbXBlZyZxdW90OyBkYXRh PSZxdW90Oy9tdXNpYy9uZXh0LWJpZy1oaXQubXAzJnF1b3Q7IC8mZ3Q7CiZsdDsvdHhwOnNt ZF9hY2Nlc3NfcHJvdGVjdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGUgdGhhdCB5b3Ug Y2FuIHByb3RlY3QgYXMgbWFueSBwYXJ0cyBvZiB0aGUgc2FtZSBwYWdlIGFzIHlvdSBsaWtl LCBkaWZmZXJpbmcgb25seSBpbiB0aGUgPGNvZGU+dHJpZ2dlcjwvY29kZT4uIFRoaXMgYWxs b3dzIHlvdSB0byB1bmxvY2sgdmFyaW91cyBwYXJ0cyBvZiB5b3VyIHBhZ2VzIHRvIGRpZmZl cmVudCBwZW9wbGUgYW5kIHNldCBpbmRpdmlkdWFsIGV4cGlyeSB0aW1lcyBmb3IgZWFjaCBw b3J0aW9uIG9mIHRoZSBwYWdlLCBvciBzZXQgZXhwaXJ5IHRpbWVzIGluIHRoZSBhY2Nlc3Mg dG9rZW5zIHRoZW1zZWx2ZXMuPC9wPgoKCTxwPkFub3RoZXIgb3B0aW9uIGlzIGlzIHRvIGVs ZWN0IHRvIGNyZWF0ZSB0aGUgYWNjZXNzIGtleSBkaXJlY3RseSBmb3IgdGhlIGZpbGVfZG93 bmxvYWQgaXRzZWxmLiBJZiB5b3UmIzgyMTc7cmUgZmVlbGluZyBwYXJhbm9pZCB5b3UgY291 bGQgZG8gYm90aCA6LSk8L3A+CgoJPGgyPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfaWZfYWNj ZXNzX2Vycm9yIC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+Q29uZGl0aW9uYWwgdGFnIHRoYXQg dHJpZ2dlcnMgdGhlIGNvbnRhaW5lZCBjb250ZW50IGlmIGFjY2VzcyB3YXMgZGVuaWVkIGZv ciBzb21lIHJlYXNvbi4gIFN1cHBvcnRzIDxjb2RlPiZsdDt0eHA6ZWxzZSAvJmd0OzwvY29k ZT4uIEF0dHJpYnV0ZXM6PC9wPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnR5 cGU8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29tbWEtZGVsaW1pdGVkIGxpc3Qgb2Ygb25lIG9yIG1v cmUgb2YgdGhlIGZvbGxvd2luZyBhY2Nlc3MgdHlwZXMuIFRoZSBjb3JyZXNwb25kaW5nIDxz cGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiBlcnJvciBzdGF0dXMgY29kZSB0aHJvd24g aXMgZ2l2ZW4gaW4gcGFyZW50aGVzZXM6Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+c21kX2FrZXlf ZXJyX2JhZF90b2tlbjwvc3Ryb25nPiAoNDAzKSA6IGlmIHRoZSBhY2Nlc3MgdG9rZW4gaW4g dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGlzIHRvbyBsb25nL3Nob3J0PC9k ZD4KCQk8ZGQ+PHN0cm9uZz5zbWRfYWtleV9lcnJfZXhwaXJlZDwvc3Ryb25nPiAoNDEwKSA6 ICBpZiB0aGUgcmVzb3VyY2UgaGFzIHBhc3NlZCBpdHMgZXhwaXJ5PC9kZD4KCQk8ZGQ+PHN0 cm9uZz5zbWRfYWtleV9lcnJfZm9yYmlkZGVuPC9zdHJvbmc+ICg0MDEpIDogdHJpZ2dlcmVk IGlmIHRoZSA8Y29kZT5mb3JjZTwvY29kZT4gYXR0cmlidXRlIGlzIHNldCBhbmQgZGlyZWN0 IGFjY2VzcyBoYXMgYmVlbiByZXF1ZXN0ZWQ8L2RkPgoJCTxkZD48c3Ryb25nPnNtZF9ha2V5 X2Vycl9pbnZhbGlkX3Rva2VuPC9zdHJvbmc+ICg0MDMpIDogdGhlIGFjY2VzcyBrZXkgaW4g dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGRvZXNuJiM4MjE3O3QgbWF0Y2gg dGhlIG9uZSB1c2VkIHRvIHByb3RlY3QgdGhlIHJlc291cmNlPC9kZD4KCQk8ZGQ+PHN0cm9u Zz5zbWRfYWtleV9lcnJfbGltaXQ8L3N0cm9uZz4gKDQxMCkgOiB0aGUgbnVtYmVyIG9mIHBl cm1pdHRlZCB2aWV3cyAoc3BlY2lmaWVkIHZpYSB0aGUgPGNvZGU+bWF4PC9jb2RlPiBhdHRy aWJ1dGUpIGhhcyBiZWVuIGV4Y2VlZGVkPC9kZD4KCQk8ZGQ+PHN0cm9uZz5zbWRfYWtleV9l cnJfbWlzc2luZ190aW1lc3RhbXA8L3N0cm9uZz4gKDQwMykgOiB0aGUgdGltZXN0YW1wIHBv cnRpb24gb2YgdGhlIGFjY2VzcyBrZXkgaXMgbWlzc2luZyBmcm9tIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPjwvZGQ+CgkJPGRkPjxzdHJvbmc+c21kX2FrZXlfZXJyX3Vu YXZhaWxhYmxlPC9zdHJvbmc+ICg0MTApIDogdGhlIHJlc291cmNlIGlzbiYjODIxNzt0IHll dCBhdmFpbGFibGUgKHRoZSBzdGFydCB0aW1lIGhhc24mIzgyMTc7dCBiZWVuIHJlYWNoZWQp PC9kZD4KCQk8ZGQ+PHN0cm9uZz5zbWRfYWtleV9lcnJfdW5hdXRob3JpemVkPC9zdHJvbmc+ ICg0MDEpIDogdGhlIHJlc291cmNlIGlzbiYjODIxNzt0IG9uZSB0aGF0IGhhcyBiZWVuIHBy b3RlY3RlZCBieSB0aGlzIGFjY2VzcyBrZXk8L2RkPgoJPC9kbD48L2RkPgoJCTxkdD48c3Bh biBjbGFzcz0iYXRubSI+Y29kZTwvc3Bhbj48L2R0PgoJCTxkZD5Db21tYS1kZWxpbWl0ZWQg bGlzdCBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgYWNjZXNzIGNvZGVzIGdpdmVuIGluIHRoZSBh Ym92ZSBsaXN0PC9kZD4KCTwvZGw+CgoJPHA+V2l0aG91dCBhbnkgYXR0cmlidXRlcywgdGhl IHRhZyB0cmlnZ2VycyB0aGUgY29udGFpbmVkIGNvbnRlbnQgb24gYW55IGVycm9yLiBJZiB5 b3Ugc3BlY2lmeSBtYW55IDxjb2RlPnR5cGU8L2NvZGU+cyB0aGVuIDxlbT5hbnk8L2VtPiBv ZiB0aGUgbGlzdGVkIHR5cGVzIHRoYXQgbWF0Y2ggd2lsbCByZXR1cm4gdHJ1ZS4gVGhlIHNh bWUgZ29lcyBmb3IgPGNvZGU+Y29kZTwvY29kZT5zLiBJZiB5b3UgdXNlIHRoZSB0d28gaW4g dGFuZGVtIHRoZW4gdGhlIGVycm9yIG11c3QgbWF0Y2ggb25lIG9mIHRoZSB0eXBlcyA8c3Bh biBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBvbmUgb2YgdGhlIGNvZGVzIHRvIHJldHVybiB0 cnVlLjwvcD4KCgk8aDI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9hY2Nlc3NfZXJyb3IgLyZn dDs8L2NvZGU+PC9oMj4KCgk8cD5EaXNwbGF5IGFuIGFjY2VzcyBlcnJvciBtZXNzYWdlL2Nv ZGUuIFR5cGljYWxseSB1c2VkIGluc2lkZSA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9hY2Nlc3Nf ZXJyb3ImZ3Q7PC9jb2RlPi4gQXR0cmlidXRlczo8L3A+CgoJPGRsPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+aXRlbTwvc3Bhbj48L2R0PgoJCTxkZD5XaGljaCBlcnJvciBpbmZvcm1h dGlvbiB0byBkaXNwbGF5LiBDb21tYS1zZXBhcmF0ZSB0aGUgdmFsdWVzIGlmIHlvdSB3aXNo IHRvIHVzZSBib3RoLiBDaG9vc2UgZnJvbToKCTxkbD4KCQk8ZGQ+PGNvZGU+bWVzc2FnZTwv Y29kZT46IHRoZSBlcnJvciBzdHJpbmc8L2RkPgoJCTxkZD48Y29kZT5jb2RlPC9jb2RlPjog dGhlIHN0YXR1cyBjb2RlPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNvZGU+ bWVzc2FnZTwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bWVzc2FnZTwv c3Bhbj48L2R0PgoJCTxkZD5EaXNwbGF5IHRoaXMgbWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSBw bHVnaW4gZGVmYXVsdCBtZXNzYWdlLjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj53 cmFwdGFnPC9zcGFuPjwvZHQ+CgkJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiB0YWcgKHdpdGhvdXQgYW5nbGUgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIHRoZSBvdXRw dXQuPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPjwvZHQ+CgkJ PGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkg dG8gdGhlIHdyYXB0YWcuPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmh0bWxfaWQ8 L3NwYW4+PC9kdD4KCQk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRv IGFwcGx5IHRvIHRoZSB3cmFwdGFnLjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5i cmVhazwvc3Bhbj48L2R0PgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4g dGFnICh3aXRob3V0IGFuZ2xlIGJyYWNrZXRzKSB0byB3cmFwIGFyb3VuZCBlYWNoIGl0ZW0u PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xhc3M8L3NwYW4+PC9kdD4K CQk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBs eSB0byBlYWNoIGJyZWFrIHRhZzwvZGQ+Cgk8L2RsPgoKCTxoMj5UYWc6IDxjb2RlPiZsdDt0 eHA6c21kX2FjY2Vzc19pbmZvIC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+RGlzcGxheSBhY2Nl c3MgaW5mb3JtYXRpb24gZnJvbSB0aGUgY3VycmVudCBwcm90ZWN0ZWQgcGFnZS4gQXR0cmli dXRlczo8L3A+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aXRlbTwvc3Bhbj48 L2R0PgoJCTxkZD5PbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGl0ZW1zIChjb21tYS1k ZWxpbWl0ZWQpOgoJPGRsPgoJCTxkZD48c3Ryb25nPnBhZ2U8L3N0cm9uZz4gOiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IGFj Y2VzcyBrZXk8L2RkPgoJCTxkZD48c3Ryb25nPnRyaWdnZXI8L3N0cm9uZz4gOiB0aGUgdHJp Z2dlciBmb3IgdGhlIGN1cnJlbnQga2V5LCBhcyBnaXZlbiBpbiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj48L2RkPgoJCTxkZD48c3Ryb25nPm1heGltdW08L3N0cm9uZz4g OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWNjZXNzIGF0dGVtcHRzIGFsbG93ZWQgZm9yIHRo aXMga2V5PC9kZD4KCQk8ZGQ+PHN0cm9uZz5hY2Nlc3Nlczwvc3Ryb25nPiA6IHRoZSBjdXJy ZW50IG51bWJlciBvZiBhY2Nlc3MgYXR0ZW1wdHMgdGhhdCBoYXZlIGJlZW4gbWFkZSBmb3Ig dGhpcyBrZXk8L2RkPgoJCTxkZD48c3Ryb25nPm5vdzwvc3Ryb25nPiA6IHRoZSByYXcgPHNw YW4gY2xhc3M9ImNhcHMiPlVOSVg8L3NwYW4+IHRpbWVzdGFtcCBvZiB0aGUgdGltZSB0aGUg YWNjZXNzIGF0dGVtcHQgd2FzIG1hZGU8L2RkPgoJCTxkZD48c3Ryb25nPmlzc3VlZDwvc3Ry b25nPiA6IHRoZSByYXcgPHNwYW4gY2xhc3M9ImNhcHMiPlVOSVg8L3NwYW4+IHRpbWVzdGFt cCBvZiB3aGVuIHRoZSBjdXJyZW50IGtleSB3YXMgY3JlYXRlZDwvZGQ+CgkJPGRkPjxzdHJv bmc+ZXhwaXJlczwvc3Ryb25nPiA6IHRoZSByYXcgPHNwYW4gY2xhc3M9ImNhcHMiPlVOSVg8 L3NwYW4+IHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBjdXJyZW50IGtleSBleHBpcmVzPC9kZD4K CQk8ZGQ+PHN0cm9uZz5oZXh0aW1lPC9zdHJvbmc+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VTklYPC9zcGFuPiB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgY3VycmVudCBrZXkgd2FzIGNy ZWF0ZWQsIGVuY29kZWQgYXMgYSBoZXggc3RyaW5nIChhcyB1c2VkIGluIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPik8L2RkPgoJCTxkZD48c3Ryb25nPmlwPC9zdHJvbmc+ IDogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBhZGRyZXNzIG1ha2luZyB0aGUgcmVx dWVzdCAoaWYgYXZhaWxhYmxlKTwvZGQ+CgkJPGRkPjxzdHJvbmc+ZXh0cmE8L3N0cm9uZz4g OiB0aGUgZnVsbCBzdHJpbmcgYXMgZ2l2ZW4gaW4gdGhlIDxjb2RlPmV4dHJhPC9jb2RlPiBh dHRyaWJ1dGU8L2RkPgoJCTxkZD48c3Ryb25nPmV4dHJhX048L3N0cm9uZz4gKHdoZXJlIE4g aXMgYW4gaW50ZWdlciBiZWdpbm5pbmcgYXQgMSkgOiBpZiB5b3UgaGF2ZSBzcGVjaWZpZWQg bWFueSB2YWx1ZXMgaW4geW91ciA8Y29kZT5leHRyYTwvY29kZT4sIGVhY2ggc2VwYXJhdGVk IHdpdGggYSBzbGFzaCwgdGhpcyBkaXNwbGF5cyB0aGUgZ2l2ZW4gaW5kaXZpZHVhbCBpdGVt PC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNvZGU+cGFnZTwvY29kZT48L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXNjYXBlPC9zcGFuPjwvZHQ+CgkJPGRkPldo ZXRoZXIgdG8gZXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBlbnRpdGll cyBzdWNoIGFzIDxjb2RlPiZsdDs8L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPiBhbmQgPGNv ZGU+JmFtcDs8L2NvZGU+IGluIHRoZSBpdGVtLiBTZXQgPGNvZGU+ZXNjYXBlPSZxdW90OyZx dW90OzwvY29kZT4gdG8gdHVybiB0aGlzIG9mZi48L2RkPgoJCTxkZD5EZWZ1YWx0OiA8Y29k ZT5odG1sPC9jb2RlPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtYXQ8L3Nw YW4+PC9kdD4KCQk8ZGQ+SWYgZGlzcGxheWluZyBhIHRpbWUtcmVsYXRlZCBpdGVtIChub3cs IGlzc3VlZCwgb3IgZXhwaXJlcykgeW91IGNhbiBmb3JtYXQgaXQgdXNpbmcgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJmdGltZS5waHAiPnN0 cmZ0aW1lKCkgZm9ybWF0dGluZyBjb2RlczwvYT4uPC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNv ZGU+JVktJW0tJWQgJUg6JU06JVM8L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPndyYXB0YWc8L3NwYW4+PC9kdD4KCQk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8 L3NwYW4+IHRhZyAod2l0aG91dCBhbmdsZSBicmFja2V0cykgdG8gd3JhcCBhcm91bmQgdGhl IG91dHB1dC48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDo8 YnIgLz4KPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBs eSB0byB0aGUgd3JhcHRhZy48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aHRtbF9p ZDwvc3Bhbj48L2R0PgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQg dG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0i PmJyZWFrPC9zcGFuPjwvZHQ+CgkJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiB0YWcgKHdpdGhvdXQgYW5nbGUgYnJhY2tldHMpIHRvIHdyYXAgYXJvdW5kIGVhY2ggaXRl bS48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+YnJlYWtjbGFzczwvc3Bhbj48L2R0 PgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1lIHRvIGFw cGx5IHRvIGVhY2ggYnJlYWsgdGFnLjwvZGQ+Cgk8L2RsPgoKCTxoMj5BZG1pbiBzaWRlIGlu dGVyZmFjZTwvaDI+CgoJPHA+VW5kZXIgPGVtPkV4dGVuc2lvbnMtJmd0O0FjY2VzcyBrZXlz PC9lbT4geW91IHdpbGwgc2VlIGEgbGlzdCBvZiBhbGwga2V5cyB0aGF0IGhhdmUgYmVlbiBn ZW5lcmF0ZWQuIFlvdSBjYW4gc29ydCB0aGUgbGlzdCAoYXNjZW5kaW5nIG9yIGRlc2NlbmRp bmcpIGJ5IGNsaWNraW5nIHRoZSBoZWFkaW5ncyBvciB5b3UgY2FuIGZpbHRlciB0aGVtIHVz aW5nIHRoZSBzZWxlY3QgbGlzdCBhbmQgdGV4dCBib3ggYXQgdGhlIHRvcC4gVGhlIHVzdWFs IG11bHRpLWVkaXQgdG9vbHMvY2hlY2tib3hlcyBhcmUgYXZhaWxhYmxlIHRvIGFsbG93IHlv dSB0byBiYXRjaC1kZWxldGUga2V5cy48L3A+CgoJPHA+SWYgeW91IHdhbnQgdG8gbWFudWFs bHkgY3JlYXRlIGFuIGFjY2VzcyBrZXksIGNsaWNrIDxlbT5OZXcga2V5PC9lbT4gYW5kIGZp bGwgaW4gYXMgbWFueSBvZiB0aGUgdGV4dCBib3hlcyBhcyB5b3Ugd2lzaC4gVGhlIG9ubHkg b25lIHRoYXQgaXMgbWFuZGF0b3J5IGlzIHRoZSA8ZW0+UGFnZTwvZW0+IGJveC4gWW91ciBh Y2Nlc3Mga2V5IHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBkaXNwbGF5ZWQgaW4gdGhlIG1lc3Nh Z2UgYXJlYSBmb3IgeW91IHRvIGNvcHkgYW5kIHBhc3RlLjwvcD4KCgk8cD5BIGZldyB0aGlu Z3MgdG8gbm90ZSBhYm91dCB0aGUgbGlzdDo8L3A+CgoJPHVsPgoJCTxsaT5JZiB5b3UgaGF2 ZSBlbGVjdGVkIHRvIGxvZyBJUCBhZGRyZXNzZXMgKHNlZSA8YSBocmVmPSIjc21kX2FrZXlf cHJlZnMiPnByZWZzPC9hPikgdGhlIElQcyBvZiBhbGwga2V5LWJhc2VkIGFjY2VzcyBhdHRl bXB0cyBhcmUgbG9nZ2VkLiBGdXJ0aGVyLCBpZiB5b3UgaGF2ZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiB2aXNpdG9yIGxvZ2dpbmcgZW5hYmxlZCwgdGhlIGFkZHJlc3NlcyBp biB0aGUgJiM4MjE2O0lQJiM4MjE3OyBjb2x1bW4gYXJlIGh5cGVybGlua2VkIHRvIHRoZSBW aXNpdG9yIExvZ3MgdG8gc2hvdyB5b3UgYWxsIGFjY2Vzc2VzIGJ5IHRoZSBjbGlja2VkIElQ LiBBbHRob3VnaCB0aGUgcGx1Z2luIGNhbiBwb3RlbnRpYWxseSBob2xkIG92ZXIgMTYwMCBJ UCBhZGRyZXNzZXMgdGhlIGludGVyZmFjZSBtaWdodCBjcnVtYmxlIGJlZm9yZSB5b3UgcmVh Y2ggdGhpcyBsaW1pdCBzbyBpdCYjODIxNztzIGJlc3QgdG8gdHJ5IGFuZCBsaW1pdCB0aGUg bnVtYmVyIG9mIGFjY2Vzc2VzIHBlciBrZXkgdG8ga2VlcCB0aGUgbnVtYmVyIG9mIGF0dGVt cHRzIGxvdyBhbmQgbWFrZSB0aGUgaW50ZXJmYWNlIG1hbmFnZWFibGU8L2xpPgoJCTxsaT5U aGUgUGFnZSBpcyBoeXBlcmxpbmtlZCB0byB0aGUgcHJvdGVjdGVkIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IGJ1dCBpdCBkb2VzIDxlbT5ub3Q8L2VtPiBhdHRlbXB0IHRvIGFj Y2VzcyBpdCB3aXRoIHRoZSBrZXkuIEl0IGlzIGp1c3QgYSBjb252ZW5pZW5jZSBmb3IgeW91 IHRvIGNoZWNrIHRoYXQgdGhlIHBhZ2UgaXMgcHJvdGVjdGVkLiBJZiB5b3Ugd2FudCB0byBh Y2Nlc3MgdGhlIHBhZ2UgdmlhIGl0cyBrZXkgeW91IGNhbiBkbyBzbyBmcm9tIHRoZSBWaXNp dG9yIExvZ3MsIGFzc3VtaW5nIHNvbWVvbmUgaGFzIHRyaWVkIGF0IGxlYXN0IG9uY2UgdG8g YWNjZXNzIHRoZSByZXNvdXJjZSAmIzgyMTI7IHlvdSBjYW4ganVzdCBjbGljayB0aGUgcmVs ZXZhbnQgdmlzaXRvciBsb2cgUGFnZSBlbnRyeSB3aGljaCBjb250YWlucyB0aGUgZnVsbCBh Y2Nlc3Mga2V5IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9saT4KCQk8bGk+VGhl IG51bWJlciBvZiBhY2Nlc3NlcyBtYXkgZXhjZWVkIHRoZSBtYXhpbXVtIHBlcm1pdHRlZC4g VGhpcyBpcyBiZWNhdXNlIGF0dGVtcHRzIGFyZSBsb2dnZWQgYWxsIHRoZSB0aW1lIHRoZSBy ZXNvdXJjZSBpcyBhdmFpbGFibGUgKGkuZS4gaGFzIG5vdCBleHBpcmVkKS4gUmVzdCBhc3N1 cmVkIGlmIHRoZSBtYXhpbXVtIGFjY2VzcyBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLCB2aXNp dG9ycyB3aXRoIHZhbGlkIGtleXMgd2lsbCA8c3BhbiBjbGFzcz0iY2FwcyI+Tk9UPC9zcGFu PiBzZWUgdGhlIHByb3RlY3RlZCBjb250ZW50LCBldmVuIHRob3VnaCB0aGUgY291bnRlciB3 aWxsIGNvbnRpbnVlIHRvIGxvZyByZXF1ZXN0cy4gWW91IGNhbiB1c2UgdGhpcyBpbmZvcm1h dGlvbiB0byBjaGVjayB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gVmlzaXRv ciBMb2dzIGZvciBJUCBhZGRyZXNzZXMgdGhhdCB0cnkgdG8gYWNjZXNzIGEgcmVzb3VyY2Ug YWZ0ZXIgdGhlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuIEFzIHNvb24gYXMgdGhlIHJlc291 cmNlIGV4cGlyZXMsIGFjY2VzcyBjb3VudGluZyBjZWFzZXM8L2xpPgoJCTxsaT5UaGUgdHJp Z2dlciBmb3IgZmlsZSBkb3dubG9hZHMgaXMgZW1wdHkuIFRoaXMgaXMgYSBzaWRlLWVmZmVj dCBvZiB0aGUgd2F5IHRoZSBwbHVnaW4gb3BlcmF0ZXMgYnV0IGl0IGhhcyBhIHVzZWZ1bCBi b251czogeW91IGNhbiBsZWF2ZSB0aGUgdHJpZ2dlciBibGFuayBpZiB5b3VyIFBhZ2UgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gY29udGFpbnMgPGNvZGU+L2ZpbGVfZG93bmxv YWQ8L2NvZGU+IChiZWNhdXNlIHRoZSB0cmlnZ2VyIGl0c2VsZiBpcyB0aGUgcHJlc2VuY2Ug b2YgPGNvZGU+ZmlsZV9kb3dubG9hZDwvY29kZT4gaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0ic21kX2FrZXlfcHJlZnMiPlBy ZWZlcmVuY2VzPC9oMj4KCgk8cD5UaGUgcGx1Z2luIGV4cG9zZXMgc29tZSBnbG9iYWwgcHJl ZmVyZW5jZSBzZXR0aW5ncyB0aGF0IGdvdmVybiBpdHMgb3BlcmF0aW9uOjwvcD4KCgk8ZGw+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5GaWxlIGRvd25sb2FkIGV4cGlyeSB0aW1lPC9z cGFuPjwvZHQ+CgkJPGRkPlRpbWUsIGluIHNlY29uZHMsIGFmdGVyIHdoaWNoIHlvdXIgZmls ZSBkb3dubG9hZHMgd2lsbCBleHBpcmUsIGZvbGxvd2luZyBnZW5lcmF0aW9uIG9mIGFuIGFj Y2VzcyBrZXkuPC9kZD4KCQk8ZGQ+RGVmYXVsdDogMzYwMCAoMSBob3VyKTwvZGQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5TYWx0IGxlbmd0aDwvc3Bhbj48L2R0PgoJCTxkZD5OdW1i ZXIgb2YgY2hhcmFjdGVycyB0byB1c2UgYXMgYSBzYWx0IGluIHlvdXIgc2VjcmV0IGtleS4g VGhlIGRlZmF1bHQgaXMgdXN1YWxseSBmaW5lIGJ1dCBpZiB5b3Ugd2FudCB0byBhbHRlciB0 aGlzIGZvciBncmVhdGVyL3JlZHVjZWQgc2VjdXJpdHkgdGhlbiBkbyBzby4gPHNwYW4gY2xh c3M9ImNhcHMiPklNUE9SVEFOVDwvc3Bhbj46IGlmIHlvdSBjaGFuZ2UgdGhpcyB2YWx1ZSwg YWxsIHlvdXIgZXhpc3RpbmcgYWNjZXNzIGtleXMgYmVjb21lIGluc3RhbnRseSBpbnZhbGlk LjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDg8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ TG9nIElQIGFkZHJlc3Nlczwvc3Bhbj48L2R0PgoJCTxkZD5XaGV0aGVyIHlvdSB3aXNoIHRo ZSBwbHVnaW4gdG8gbG9nIHRoZSBJUCBhZGRyZXNzIG9mIGVhY2ggdmlzaXRvciB3aG8gdHJp ZXMgdG8gYWNjZXNzIGEgcHJvdGVjdGVkIHJlc291cmNlPC9kZD4KCQk8ZGQ+RGVmYXVsdDog bm88L2RkPgoJPC9kbD4KCgk8aDIgaWQ9InNtZF9ha2V5X2VnMSI+RXhhbXBsZSAxOiBQcm90 ZWN0IHBhcnQgb2YgYSBwYWdlPC9oMj4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFz cz0iYmxvY2siPiZsdDt0eHA6c21kX2FjY2Vzc19wcm90ZWN0CiAgICAgdHJpZ2dlcj0mcXVv dDtsZWFmbGV0cyZxdW90OyBmb3JjZT0mcXVvdDsxJnF1b3Q7IGV4cGlyZXM9JnF1b3Q7ODY0 MDAmcXVvdDsmZ3Q7CiAgICZsdDtwJmd0O1lvdXIgbGVhZmxldCBjb250ZW50cyBnb2VzIGhl cmUmbHQ7L3AmZ3Q7CiZsdDt0eHA6ZWxzZSAvJmd0OwogICAmbHQ7dHhwOnNtZF9pZl9hY2Nl c3NfZXJyb3IKICAgICB0eXBlPSZxdW90O3NtZF9ha2V5X2Vycl9mb3JiaWRkZW4mcXVvdDsm Z3Q7CiAgICAgICZsdDtwJmd0O0JlZm9yZSB5b3UgY2FuIGRvd25sb2FkIHRoaXMgaXRlbSwg eW91JiMzOTtsbCBuZWVkCiAgICAgYW4gYWNjZXNzIGtleS4KICAgICAmbHQ7YSBocmVmPSZx dW90OyZsdDt0eHA6c21kX2FjY2Vzc19rZXkgbWF4PSZxdW90OzQmcXVvdDsKICAgICAgICB0 cmlnZ2VyPSZxdW90O2xlYWZsZXRzJnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0O0hlcmUmIzM5O3Mg b25lJmx0Oy9hJmd0OyZsdDsvcCZndDsKICAgJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICAgICZs dDt0eHA6c21kX2FjY2Vzc19lcnJvciBpdGVtPSZxdW90O2NvZGUsIG1lc3NhZ2UmcXVvdDsK ICAgICAgICAgIGJyZWFrPSZxdW90O2JyJnF1b3Q7IC8mZ3Q7CiAgICZsdDsvdHhwOnNtZF9p Zl9hY2Nlc3NfZXJyb3ImZ3Q7CiZsdDsvdHhwOnNtZF9hY2Nlc3NfcHJvdGVjdCZndDsKPC9j b2RlPjwvcHJlPgoKCTxoMiBpZD0ic21kX2FrZXlfZWcyIj5FeGFtcGxlIDI6IFByb3RlY3Qg bXVsdGlwbGUgcmVzb3VyY2VzIHdpdGggb25lIHRhZzwvaDI+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9hY2Nlc3NfcHJvdGVjdAogICAg IHRyaWdnZXI9JnF1b3Q7bGVhZmxldCwgYm9vayZxdW90OyBleHBpcmVzPSZxdW90Ozg2NDAw JnF1b3Q7Jmd0OwogICAmbHQ7cCZndDtZb3VyICZsdDt0eHA6c21kX2FjY2Vzc19pbmZvIGl0 ZW09JnF1b3Q7dHJpZ2dlciZxdW90OyAvJmd0OwogICAgICAgICAgY29udGVudHMgZ29lcyBo ZXJlJmx0Oy9wJmd0OwombHQ7dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4cDpzbWRfaWZfYWNj ZXNzX2Vycm9yJmd0OwogICAgICAmbHQ7dHhwOnNtZF9hY2Nlc3NfZXJyb3IgaXRlbT0mcXVv dDtjb2RlLCBtZXNzYWdlJnF1b3Q7CiAgICAgICAgICBicmVhaz0mcXVvdDticiZxdW90OyAv Jmd0OwogICAmbHQ7L3R4cDpzbWRfaWZfYWNjZXNzX2Vycm9yJmd0OwombHQ7L3R4cDpzbWRf YWNjZXNzX3Byb3RlY3QmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Zb3UgY2FuIHVzZSBzbWRf aWYsIG9yIGFzc2lnbiB0aGUgb3V0cHV0IG9mIDxjb2RlPiZsdDt0eHA6c21kX2FjY2Vzc19p bmZvJmd0OzwvY29kZT4gdG8gYSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlJmd0OzwvY29kZT4g YW5kIHVzZSA8Y29kZT4mbHQ7dHhwOmlmX3ZhcmlhYmxlJmd0OzwvY29kZT4sIHRvIHBlcmZv cm0gY29uZGl0aW9uYWwgZGlzcGxheSBvZiBhY2Nlc3Mga2V5IGluZm9ybWF0aW9uLjwvcD4K Cgk8aDIgaWQ9InNtZF9ha2V5X2VnMyI+RXhhbXBsZSAzOiBJc3N1ZSBhIHJlZ2lzdHJhdGlv biBhY3RpdmF0aW9uIGNvZGU8L2gyPgoKCTxwPkluIHlvdXIgcmVnaXN0cmF0aW9uIGUtbWFp bCBmb3JtLCB5b3UgY291bGQgcHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+VGhhbmsgeW91IGZvciByZWdpc3Rl cmluZyB3aXRoICZsdDt0eHA6c2l0ZV9uYW1lIC8mZ3Q7LgpUbyBhY3RpdmF0ZSB5b3VyIGFj Y291bnQsIHBsZWFzZSB2aXNpdCB0aGUgZm9sbG93aW5nCmxpbmsgd2l0aGluIHRoZSBuZXh0 IDI0IGhvdXJzOgombHQ7dHhwOnNtZF9hY2Nlc3Nfa2V5IHVybD0mcXVvdDsvYWNjb3VudC9h Y3RpdmF0ZS8mcXVvdDsgbWF4PSZxdW90OzEmcXVvdDsKICAgICB0cmlnZ2VyPSYjMzk7dXNl cl9pZC4mbHQ7dHhwOmF1dGhvciB0aXRsZT0mcXVvdDswJnF1b3Q7IC8mZ3Q7JiMzOTsgLyZn dDsKPC9jb2RlPjwvcHJlPgoKCTxwPk9uY2UgdGhlIHZpc2l0b3IgaGFzIHNpZ25lZCB1cCB0 aGV5IGFyZSBlLW1haWxlZCBhIHVuaXF1ZSBhY2Nlc3MgdG9rZW4gdG8gdGhlIDxjb2RlPi9h Y2NvdW50L2FjdGl2YXRlPC9jb2RlPiBwYWdlLiBZb3UgY2FuIHByb3RlY3QgaXQgbGlrZSB0 aGlzOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0 eHA6c21kX2FjY2Vzc19wcm90ZWN0IHRyaWdnZXI9JnF1b3Q7dXNlcl9pZC4mcXVvdDsKICAg ICB0cmlnZ2VyX21vZGU9JnF1b3Q7YmVnaW5zJnF1b3Q7IGV4cGlyZXM9JnF1b3Q7ODY0MDAm cXVvdDsgZm9yY2U9JnF1b3Q7MSZxdW90OyZndDsKICAgJmx0O3R4cDpoaWRlJmd0OyBBY3Rp dmF0aW9uIGFjdGlvbnMgY291bGQgZ28gaGVyZSAmbHQ7L3R4cDpoaWRlJmd0OwogICAmbHQ7 cCZndDtDb25ncmF0dWxhdGlvbnMsIHlvdXIgYWNjb3VudCBpcyBhY3RpdmF0ZWQuJmx0Oy9w Jmd0OwombHQ7dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4cDpzbWRfYWNjZXNzX2Vycm9yIC8m Z3Q7CiZsdDsvdHhwOnNtZF9hY2Nlc3NfcHJvdGVjdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxw PklmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGVtcGxveSA8Y29kZT5zdHJfcmVwbGFjZSgpPC9j b2RlPiAob3IgPGNvZGU+Jmx0O3R4cDpyYWhfcmVwbGFjZSAvJmd0OzwvY29kZT4pIHRvIHJl bW92ZSB0aGUgPGNvZGU+dXNlcl9pZC48L2NvZGU+IGFuZCBiZSBsZWZ0IHdpdGggdGhlIHVz ZXIgbmFtZSBvZiB0aGUgcmVnaXN0ZXJlZCB1c2VyIG5hbWUsIHN1aXRhYmxlIGZvciBkaXNw bGF5LiBBbHRlcm5hdGl2ZWx5ICYjODIxMjsgYW5kIHBlcmhhcHMgZWFzaWVyICYjODIxMjsg eW91IGNvdWxkIHBhc3MgdGhlIGF1dGhvciBhcyBhbiA8Y29kZT5leHRyYTwvY29kZT4gcGFy YW1ldGVyIHdoZW4gdGhlIGtleSBpcyBnZW5lcmF0ZWQ6PC9wPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYWNjZXNzX2tleSB1cmw9JnF1 b3Q7L2FjY291bnQvYWN0aXZhdGUvJnF1b3Q7IG1heD0mcXVvdDsxJnF1b3Q7CiAgICAgdHJp Z2dlcj0mcXVvdDt1c2VyX2lkJnF1b3Q7IGV4dHJhPSYjMzk7Jmx0O3R4cDphdXRob3IgdGl0 bGU9JnF1b3Q7MCZxdW90OyAvJmd0OyYjMzk7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5U aGlzIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBkZWZhdWx0IDxjb2RlPnRyaWdnZXJfbW9kZTwv Y29kZT4gYW5kIGhhcyB0aGUgYmVuZWZpdCB0aGF0IHlvdSBjYW4gZGlyZWN0bHkgYWNjZXNz IHRoZSBhZGRpdGlvbmFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHVzaW5nIDxjb2RlPiZsdDt0 eHA6c21kX2FjY2Vzc19pbmZvIGl0ZW09JnF1b3Q7ZXh0cmFfMSZxdW90OyAvJmd0OzwvY29k ZT4uPC9wPgoKCTxwPlRoZSA8Y29kZT5leHRyYTwvY29kZT4gYXR0cmlidXRlIGlzIGV2ZW4g bW9yZSBwb3dlcmZ1bCBpZiB5b3UgcGFjayBtb3JlIGluZm9ybWF0aW9uIGludG8gaXQ6IDxj b2RlPmV4dHJhPSYjMzk7Jmx0O3R4cDphdXRob3IgdGl0bGU9JnF1b3Q7MCZxdW90OyAvJmd0 Oy8mbHQ7dHhwOnNlY3Rpb24gLyZndDsmIzM5OzwvY29kZT4uIFlvdSBjYW4gcmV0cmlldmUg ZWFjaCBwaWVjZSBpbmRpdmlkdWFsbHk6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Jmx0O3R4 cDpzbWRfYWNjZXNzX2luZm8gaXRlbT0mcXVvdDtleHRyYSZxdW90OyAvJmd0OzwvY29kZT4g PSZndDsgPGNvZGU+c2Rhd3Nvbi9hY2NvdW50PC9jb2RlPjwvbGk+CgkJPGxpPjxjb2RlPiZs dDt0eHA6c21kX2FjY2Vzc19pbmZvIGl0ZW09JnF1b3Q7ZXh0cmFfMSZxdW90OyAvJmd0Ozwv Y29kZT4gPSZndDsgPGNvZGU+c2Rhd3NvbjwvY29kZT48L2xpPgoJCTxsaT48Y29kZT4mbHQ7 dHhwOnNtZF9hY2Nlc3NfaW5mbyBpdGVtPSZxdW90O2V4dHJhXzImcXVvdDsgLyZndDs8L2Nv ZGU+ID0mZ3Q7IDxjb2RlPmFjY291bnQ8L2NvZGU+PC9saT4KCTwvdWw+CgoJPHA+Tm90ZSB0 aGF0IHlvdSBjYW4gb25seSBleHRyYWN0IGVhY2ggcGllY2UgaW5kaXZpZHVhbGx5IGlmIHlv dSB1c2UgYSBzbGFzaCBhcyBhIHNlcGFyYXRvciBpbiB5b3VyIDxjb2RlPmV4dHJhPC9jb2Rl PiBhdHRyaWJ1dGUuPC9wPgoKCTxoMj5BdXRob3I8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48 L3A+CgoJPGgyPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xOCBBcHIgMjAxMSB8IDAu MTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4zMCBKYW4gMjAxMiB8IDAuMTEgfCBB ZGRlZCA8Y29kZT5leHBpcmVzPC9jb2RlPiB0byBzbWRfYWNjZXNzX2tleSA7IGZpeGVkIG5v LWNyaXRlcmlhIG91dHB1dCA7IHBsYXlzIG5pY2VseSB3aXRoIGdicF9wZXJtYW5lbnRfbGlu a3MgKHRoYW5rcyBqYWtvYikgOyBmaXhlZCBzdWJkaXIgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gZXJyb3IsIGFkZGVkIDxjb2RlPnNlY3Rpb25fbW9kZTwvY29kZT4gYXR0cmli dXRlIGFuZCBmaXhlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBkZWNvZGluZyAo dGhhbmtzIHNhY3JpcGFudCk8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQ TFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsg bGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Zm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFj a2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5i bG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlz cGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3Nt ZF9oZWxwIGgxIHsgZm9udDogMjJweCBHZW9yZ2lhLCBzZXJpZjsgbWFyZ2luOiAwOyB0ZXh0 LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNv bGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxOHB4IEdlb3JnaWEsIHNlcmlm OyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTNweCBHZW9yZ2lhLCBzZXJpZjsgbGV0 dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAyMHB4IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVu ZGVybGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEycHggR2VvcmdpYSwgc2Vy aWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsg fQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRl cjsgcGFkZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KI3Nt ZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRp bmc6LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNz bWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdp bjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1 cHg7IH0KI3NtZF9oZWxwIGRsIGRkIHsgbWFyZ2luOjJweCAxNXB4OyB9CiNzbWRfaGVscCBk bCBkZDpiZWZvcmUgeyBjb250ZW50OiAiXDIwMjJcMDBhMCI7IH0KI3NtZF9oZWxwIGRsIGRk IGRsIHsgcGFkZGluZzogMCAxNXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4g Q1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiMmVmN2E5NTdiZDY3ZjQ2MGU2OWM3NzU1 NDI5YTg0M2YiO30=