# Name: smd_featured v0.32 # Type: Admin/Client side plugin # Quickly label and display featured articles for your site's home / landing pages # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfZmVhdHVyZWQiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMzIiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjgwOiJRdWlja2x5IGxhYmVsIGFuZCBkaXNwbGF5IGZlYXR1cmVkIGFydGljbGVzIGZvciB5 b3VyIHNpdGUncyBob21lIC8gbGFuZGluZyBwYWdlcyI7czo0OiJjb2RlIjtzOjMzNDg0OiJp ZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRf ZXZlbnQsICRzbWRfZmVhdHVyZWRfdGV4dGlsZV9vcHRzLCAkc21kX2ZlYXR1cmVkX3N0eWxl czsNCg0KCSRzbWRfZmVhdHVyZWRfZXZlbnQgPSAnc21kX2ZlYXR1cmVkJzsNCgkkc21kX2Zl YXR1cmVkX3ByaXZzID0gZ2V0X3ByZWYoJ3NtZF9mZWF0dXJlZF9wcml2cycsICcxLDInKTsN Cgkkc21kX2ZlYXR1cmVkX3ByZWZfcHJpdnMgPSAnMSwyJzsNCgkkc21kX2ZlYXR1cmVkX3Rl eHRpbGVfb3B0cyA9IGFycmF5KA0KCQkwID0+ICd0aXRsZScsDQoJCTEgPT4gJ2Rlc2MnLA0K CSk7DQoJJHNtZF9mZWF0dXJlZF9zdHlsZXMgPSBhcnJheSgNCgkJJ2NvbW1vbicgPT4NCiAg ICAgICAgICcjc21kX2FsbCBoMyB7IG1hcmdpbjoxNXB4IDA7IH0NCiAgICAgICAgICNzbWRf ZmVhdHVyZWRfY3BhbmVsIGZvcm0gZmllbGRzZXQgeyBib3JkZXI6MDsgfQ0KICAgICAgICAg I3NtZF9mZWF0dXJlZF9jcGFuZWwgZm9ybSBsZWdlbmQgeyBtYXJnaW46MTJweCAwOyB9DQog ICAgICAgICAuZmllbGRzZXRfaW5uZXIgeyBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7IGJhY2tn cm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7IGJvcmRlcjowOyB9DQogICAgICAgICAjc21kX2Zl YXR1cmVkX2NwYW5lbCBzZWxlY3QsICNzbWRfZmVhdHVyZWRfY3BhbmVsIGlucHV0W3R5cGU9 InRleHQiXSB7IG1hcmdpbi1ib3R0b206MTBweDsgfQ0KICAgICAgICAgI3NtZF9mZWF0dXJl ZF9jcGFuZWwgaW5wdXRbdHlwZT0idGV4dCJdIHsgcGFkZGluZzozcHg7IH0NCiAgICAgICAg ICNjb250cm9sIGlucHV0LCAjY29udHJvbCBzZWxlY3QgeyBtYXJnaW46MDsgfQ0KICAgICAg ICAgLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0NCiAgICAgICAgIC5zbWRfZmVhdHVy ZWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlMmRmY2U7IH0NCiAgICAgICAgIC5zbWRfZmVhdHVy ZWQgYSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjojODA1NTFlOyB9DQogICAgICAgICAj c21kX2ZlYXR1cmVkX2NvbnRyb2xfcGFuZWwgeyBtYXJnaW46MCBhdXRvIDIwcHg7IHdpZHRo OjUwMHB4OyB9DQogICAgICAgICAjc21kX2ZlYXR1cmVkX3ByZWZzIHsgbWFyZ2luLWxlZnQ6 MTJweDsgfQ0KICAgICAgICAgLnNtZF9mZWF0dXJlZF9zYXZlIHsgZmxvYXQ6cmlnaHQ7IH0N CiAgICAgICAgIC5zbWRfZmVhdHVyZWRfc3VicGFuZWwgeyBmbG9hdDpsZWZ0OyB9DQogICAg ICAgICAuc21kX2ZlYXR1cmVkX3RhYmxlIHsgd2lkdGg6ODAwcHg7IG1hcmdpbjowIGF1dG8g ODBweDsgfQ0KICAgICAgICAgLnNtZF9jbGVhciB7IGNsZWFyOmJvdGg7IH0NCiAgICAgICAg IC5zbWRfZmVhdHVyZWRfdGFibGUgZGl2IHsgZmxvYXQ6bGVmdDsgd2lkdGg6e2J3fXB4OyBo ZWlnaHQ6e2JofXB4OyBib3JkZXI6MXB4IHNvbGlkICNhYWE7IHBhZGRpbmc6NHB4OyBvdmVy ZmxvdzpoaWRkZW47IH0nLA0KCQknbG9hZGluZycgPT4NCiAgICAgICAgICdjb2xvcjojODA1 NTFlOyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjIwMCU7IGZvbnQtc3R5bGU6aXRh bGljOyB3aWR0aDo1MDBweDsgaGVpZ2h0OjEwMHB4OyBtYXJnaW46MCBhdXRvOyBib3JkZXI6 MXB4IHNvbGlkICM3Nzc7IGJhY2tncm91bmQ6I2UyZGZjZTtkaXNwbGF5OmJsb2NrJywNCgkJ J2xvYWRpbmdfZGl2JyA9Pg0KICAgICAgICAgJ21hcmdpbi10b3A6MzBweDsnLA0KCSk7DQoN CglhZGRfcHJpdnMoJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9wcml2cyk7 DQoJcmVnaXN0ZXJfdGFiKCJjb250ZW50IiwgJHNtZF9mZWF0dXJlZF9ldmVudCwgc21kX2Zl YXR1cmVkX2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfZmVh dHVyZWRfbWFuYWdlJywgJHNtZF9mZWF0dXJlZF9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9mZWF0dXJlZF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuc21kX2ZlYXR1 cmVkJyk7DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX0ZFQVQnKSkgew0KCWRlZmluZSgiU01E X0ZFQVQiLCAnc21kX2ZlYXR1cmVkJyk7DQp9DQoNCi8vICoqKioqKioqKioNCi8vIEFETUlO IFNJREUNCi8vICoqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2ZlYXR1cmVkX21hbmFnZSgkZXZ0LCAkc3RwKSB7DQoJaWYgKCRzdHAgPT0g J3NhdmVfcGFuZV9zdGF0ZScpIHsNCgkJc21kX2ZlYXR1cmVkX3NhdmVfcGFuZV9zdGF0ZSgp Ow0KCX0gZWxzZSB7DQoJCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBhcnJheSgNCgkJ CQknc21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwnLA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFi bGVfcmVtb3ZlJywNCgkJCQknc21kX2ZlYXR1cmVkX3ByZWZzYXZlJywNCgkJCQknc21kX2Zl YXR1cmVkX3NhdmUnLA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFnaXQnLA0KCQkJCSdzbWRfZmVh dHVyZWRfY2hhbmdlX3BhZ2VieScsDQoJCQkpKSkgew0KCQkJc21kX2ZlYXR1cmVkX2xpc3Qo JycpOw0KCQl9IGVsc2UgJHN0cCgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJ JG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJ c21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwoMCk7DQoJCQkkbXNnID0gJ1RoYW5rcyBmb3Ig aW5zdGFsbGluZyBzbWRfZmVhdHVyZWQuIFBsZWFzZSByZWFkIHRoZSBkb2NzIDotKSc7DQoJ CQlicmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfZmVhdHVyZWRfdGFibGVfcmVt b3ZlKDApOw0KCQkJYnJlYWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9saXN0KCRtc2c9Jycp IHsNCglnbG9iYWwgJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9saXN0X3Bh Z2VieSwgJHNtZF9mZWF0dXJlZF90ZXh0aWxlX29wdHMsICRzbWRfZmVhdHVyZWRfc3R5bGVz Ow0KDQoJcGFnZXRvcChzbWRfZmVhdHVyZWRfZ1R4dCgndGFiX25hbWUnKSwgJG1zZyk7DQoJ ZXh0cmFjdChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVhdF9sYWJlbCcsICdz bWRfZmVhdF9zZWFyY2hrZWVwJywgJ3NtZF9mZWF0X2ZpbHRrZWVwJywgJ3BhZ2UnKSkpOw0K DQoJaWYgKHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgxKSkgew0KCQkkZmVhdGxpc3QgPSBz YWZlX3Jvd3MoJyonLCBTTURfRkVBVCwgJzE9MScpOw0KCQkkZmVhdGxpc3QgPSBlbXB0eSgk ZmVhdGxpc3QpID8gYXJyYXkoKSA6ICRmZWF0bGlzdDsNCgkJJGVkaXRuYW1lID0gJGZlYXRf bGFiZWwgPSAkZmVhdF90aXRsZSA9ICRmZWF0X2Rlc2MgPSAnJzsNCg0KCQkkZXR5cGVzID0g JGZ0eXBlcyA9ICRmbGlzdCA9IGFycmF5KCk7DQoJCSRldHlwZXNbJyddID0gc21kX2ZlYXR1 cmVkX2dUeHQoJ3VubGFiZWxsZWQnKTsNCgkJJGZ0eXBlc1snc21kX3VubGFiZWxsZWQnXSA9 IHNtZF9mZWF0dXJlZF9nVHh0KCd1bmxhYmVsbGVkJyk7DQoJCWZvcmVhY2ggKCRmZWF0bGlz dCBhcyAkaXRlbSkgew0KCQkJaWYgKGlzc2V0KCRpdGVtWydsYWJlbCddKSAmJiAhZW1wdHko JGl0ZW1bJ2xhYmVsJ10pKSB7DQoJCQkJJGZ0eXBlc1skaXRlbVsnbGFiZWwnXV0gPSAkZXR5 cGVzWyRpdGVtWydsYWJlbCddXSA9ICRpdGVtWydsYWJlbCddOw0KCQkJfQ0KCQkJJGZsaXN0 WyRpdGVtWydmZWF0X2lkJ11dID0gYXJyYXkoJ2xhYmVsJyA9PiAkaXRlbVsnbGFiZWwnXSwg J3RpdGxlJyA9PiAkaXRlbVsnZmVhdF90aXRsZSddLCAndGl0bGVfaHRtbCcgPT4gJGl0ZW1b J2ZlYXRfdGl0bGVfaHRtbCddLCAnZGVzY3JpcHRpb24nID0+ICRpdGVtWydkZXNjcmlwdGlv biddLCAnZGVzY19odG1sJyA9PiAkaXRlbVsnZGVzY19odG1sJ10pOw0KCQl9DQoNCgkJJGZl YXRsaXN0ID0gJGZsaXN0Ow0KDQoJCS8vIEdldCBhZGRpdGlvbmFsIGZpbHRlcmluZyBmcm9t IGhpZGRlbiBwcmVmcw0KCQkkd2hlcmUgPSBhcnJheSgnMT0xJyk7DQoJCSRzZWNsaXN0ID0g Z2V0X3ByZWYoJ3NtZF9mZWF0dXJlZF9zZWN0aW9uX2xpc3QnLCAnJyk7DQoJCWlmICgkc2Vj bGlzdCkgew0KCQkJJHdoZXJlW10gPSAiU2VjdGlvbiBJTiAoJyIuam9pbigiJywnIiwgZG9f bGlzdCgkc2VjbGlzdCkpLiInKSI7DQoJCX0NCgkJJHdoZXJlW10gPSAiU3RhdHVzIElOICg0 LDUpIjsNCg0KCQkkb3JkZXJieSA9IGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfc29ydCcsICdQ b3N0ZWQgZGVzYycsIDEpOw0KCQkkb3JkZXJxcnkgPSAoJG9yZGVyYnkpID8gJyBPUkRFUiBC WSAnLmRvU2xhc2goJG9yZGVyYnkpIDogJyc7DQoJCSRjdXJyT3JkZXIgPSBleHBsb2RlKCcg JywgJG9yZGVyYnkpOw0KCQkkY3Vyck9yZGVyWzBdID0gKGlzc2V0KCRjdXJyT3JkZXJbMF0p KSA/ICRjdXJyT3JkZXJbMF0gOiAnUG9zdGVkJzsNCgkJJGN1cnJPcmRlclsxXSA9IChpc3Nl dCgkY3Vyck9yZGVyWzFdKSkgPyAkY3Vyck9yZGVyWzFdIDogJ2Rlc2MnOw0KCQkkZGlzcGxh eSA9IGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfZGlzcGxheScsICdhbGwnLCAxKTsNCg0KCQkv LyBHZW5lcmF0ZSB0aGUgZXh0cmEgY3JpdGVyaWEgaWYgaW4gbGlzdCB2aWV3DQoJCWlmICgk ZGlzcGxheT09J3BhZ2luYXRlZCcpIHsNCgkJCWlmICgkc21kX2ZlYXRfc2VhcmNoa2VlcCkg ew0KCQkJCSRpdGVtcyA9IGRvX2xpc3QoJHNtZF9mZWF0X3NlYXJjaGtlZXAsICcgJyk7DQoJ CQkJJGl0bGlzdCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7 DQoJCQkJCWlmICh0cmltKCRpdGVtKSAhPSAnJykgew0KCQkJCQkJJGl0bGlzdFtdID0gIlRp dGxlIGxpa2UgJyUkaXRlbSUnIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkd2hlcmVbXSA9ICco Jy5qb2luKCcgT1IgJywgJGl0bGlzdCkuJyknOw0KCQkJfQ0KCQkJaWYgKCRzbWRfZmVhdF9m aWx0a2VlcCkgew0KCQkJCSRsYmwgPSAoJHNtZF9mZWF0X2ZpbHRrZWVwID09ICdzbWRfdW5s YWJlbGxlZCcpID8gJycgOiAkc21kX2ZlYXRfZmlsdGtlZXA7DQoJCQkJJGlkcyA9IHNhZmVf Y29sdW1uKCdmZWF0X2lkJywgU01EX0ZFQVQsICJCSU5BUlkgbGFiZWwgPSAnJGxibCciKTsN CgkJCQkkd2hlcmVbXSA9ICJJRCBJTiAoJyIuam9pbigiJywnIiwgJGlkcykuIicpIjsNCgkJ CX0NCgkJfQ0KDQoJCSR3aGVyZSA9IGpvaW4oJyBBTkQgJywgJHdoZXJlKTsNCgkJJHRvdGFs ID0gc2FmZV9jb3VudCgndGV4dHBhdHRlcm4nLCAkd2hlcmUpOw0KCQkkZG9fcGFnID0gISRz bWRfZmVhdF9maWx0a2VlcCAmJiAhJHNtZF9mZWF0X3NlYXJjaGtlZXA7DQoNCgkJJGxpbWl0 ID0gKCRkaXNwbGF5PT0ncGFnaW5hdGVkJyAmJiAkZG9fcGFnKSA/IG1heCgkc21kX2ZlYXR1 cmVkX2xpc3RfcGFnZWJ5LCAxNSkgOiA5OTk5OTsNCgkJbGlzdCgkcGFnZSwgJG9mZnNldCwg JG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoNCgkJJHJzID0g c2FmZV9yb3dzKCcqJywgJ3RleHRwYXR0ZXJuJywgJHdoZXJlLiAkb3JkZXJxcnkgLiAiIGxp bWl0ICRvZmZzZXQsICRsaW1pdCIpOw0KCQkkb3V0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAo JHJzIGFzICRyb3cpIHsNCgkJCSRmdHlwZSA9IGlzc2V0KCRmZWF0bGlzdFskcm93WydJRCdd XVsnbGFiZWwnXSkgPyAkZmVhdGxpc3RbJHJvd1snSUQnXV1bJ2xhYmVsJ10gOiAnJzsNCgkJ CSRvdXRbXSA9IGFycmF5KCRyb3dbJ0lEJ10sICRyb3dbJ1RpdGxlJ10sICRmdHlwZSk7DQoJ CQlpZiAoJHNtZF9mZWF0X2lkICYmICRyb3dbJ0lEJ10gPT0gJHNtZF9mZWF0X2lkKSB7DQoJ CQkJJGVkaXRuYW1lID0gJHJvd1snVGl0bGUnXTsNCgkJCQkkZmVhdF9sYWJlbCA9ICRmZWF0 bGlzdFskc21kX2ZlYXRfaWRdWydsYWJlbCddOw0KCQkJCSRmZWF0X3RpdGxlID0gJGZlYXRs aXN0WyRzbWRfZmVhdF9pZF1bJ3RpdGxlJ107DQoJCQkJJGZlYXRfZGVzYyA9IGRvU3RyaXAo c3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsICRmZWF0bGlzdFskc21kX2ZlYXRfaWRdWydkZXNj cmlwdGlvbiddKSk7DQoJCQl9DQoJCX0NCg0KCQkkc29ydG9wdHMgPSBhcnJheSgNCgkJCSdQ b3N0ZWQnID0+ICdQb3N0ZWQnLA0KCQkJJ0V4cGlyZXMnID0+ICdFeHBpcnknLA0KCQkJJ0xh c3RNb2QnID0+ICdNb2RpZmllZCcsDQoJCQknVGl0bGUnID0+ICdUaXRsZScsDQoJCQknU2Vj dGlvbicgPT4gJ1NlY3Rpb24nLA0KCQkJJ0NhdGVnb3J5MScgPT4gJ0NhdGVnb3J5MScsDQoJ CQknQ2F0ZWdvcnkyJyA9PiAnQ2F0ZWdvcnkyJywNCgkJKTsNCgkJJHNvcnRkaXJzID0gYXJy YXkoDQoJCQknYXNjJyA9PiAnQXNjZW5kaW5nJywNCgkJCSdkZXNjJyA9PiAnRGVzY2VuZGlu ZycsDQoJCSk7DQoJCSRkaXNwbGF5b3B0cyA9IGFycmF5KA0KCQkJJ2FsbCcgPT4gJ0FsbCcs DQoJCQkncGFnaW5hdGVkJyA9PiAnUGFnaW5hdGVkJywNCgkJKTsNCgkJJHRleHRpbGVvbm9m ZiA9IHNtZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJHNtZF9mZWF0dXJlZF90ZXh0aWxlX29w dHMsIGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfdGV4dGlsZScsICcxMScsIDEpKTsNCg0KCQkk c2l6ZXMgPSBkb19saXN0KGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfYm94X3NpemUnLCAnMTUw eDQwJywgMSksICd4Jyk7DQoJCSRzaXplc1swXSA9IChpc3NldCgkc2l6ZXNbMF0pICYmIGlz X251bWVyaWMoJHNpemVzWzBdKSkgPyAkc2l6ZXNbMF0gOiAnMTUwJzsNCgkJJHNpemVzWzFd ID0gKGlzc2V0KCRzaXplc1sxXSkgJiYgaXNfbnVtZXJpYygkc2l6ZXNbMV0pKSA/ICRzaXpl c1sxXSA6ICc0MCc7DQoJCSRkaXNwbGF5X2pzID0gKCRkaXNwbGF5PT0nYWxsJykgPyAxIDog MDsNCgkJJHN0eWxlcmVwcyA9IGFycmF5KA0KCQkJJ3tid30nID0+ICRzaXplc1swXSwNCgkJ CSd7Ymh9JyA9PiAkc2l6ZXNbMV0sDQoJCSk7DQoNCgkJZWNobyAnPGRpdiBpZD0ic21kX2xv YWRpbmciIHN0eWxlPSInLiRzbWRfZmVhdHVyZWRfc3R5bGVzWydsb2FkaW5nJ10uJyI+PGRp diBzdHlsZT0iJy4kc21kX2ZlYXR1cmVkX3N0eWxlc1snbG9hZGluZ19kaXYnXS4nIj5Mb2Fk aW5nLi4uPC9kaXY+PC9kaXY+JzsNCgkJZWNobyAnPGRpdiBpZD0ic21kX2NvbnRhaW5lciIg c3R5bGU9ImRpc3BsYXk6bm9uZTsiPic7DQoJCWVjaG8gJzxmaWVsZHNldCBpZD0ic21kX2Zl YXR1cmVkX2NvbnRyb2xfcGFuZWwiIGNsYXNzPSJ0eHAtY29udHJvbC1wYW5lbCI+PGxlZ2Vu ZCBjbGFzcz0icGxhaW4gbGV2ZXInLihnZXRfcHJlZigncGFuZV9zbWRfZmVhdHVyZWRfY3Bh bmVsX3Zpc2libGUnKSA/ICcgZXhwYW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNzbWRfZmVh dHVyZWRfY3BhbmVsIj4nLnNtZF9mZWF0dXJlZF9nVHh0KCdjb250cm9sX3BhbmVsJykuJzwv YT48L2xlZ2VuZD4nOw0KCQllY2hvICc8ZGl2IGlkPSJzbWRfZmVhdHVyZWRfY3BhbmVsIiBj bGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfZmVh dHVyZWRfY3BhbmVsX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoNCgkJ ZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X2ZpbHRmb3JtIiBhY3Rpb249ImluZGV4LnBocCIg bWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0ic21kX2ZlYXR1cmVkX2VkaXRrZWVwKDApO3JldHVy biBmYWxzZTsiPic7DQoJCWVjaG8gJzxmaWVsZHNldCBpZD0ic21kX2ZlYXR1cmVkX2ZpbHQi IGNsYXNzPSJzbWRfZmVhdHVyZWRfc3VicGFuZWwiPjxsZWdlbmQ+Jy5zbWRfZmVhdHVyZWRf Z1R4dCgoKCRkaXNwbGF5PT0nYWxsJykgPyAnc2VhcmNoX2xpdmUnIDogJ3NlYXJjaF9zdGFu ZGFyZCcpKS4nPC9sZWdlbmQ+JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2ZlYXRfc2Vh cmNoIj4nLnNtZF9mZWF0dXJlZF9nVHh0KCdieV9uYW1lJykuJzwvbGFiZWw+Jy5mSW5wdXQo J3RleHQnLCAnc21kX2ZlYXRfc2VhcmNoJywgJHNtZF9mZWF0X3NlYXJjaGtlZXAsICcnLCAn JywgJycsICcnLCAnJywgJ3NtZF9mZWF0X3NlYXJjaCcpLg0KCQkJKCgkZnR5cGVzKSA/ICc8 ZGl2IGlkPSJzbWRfZmVhdHVyZWRfYnlsYWJlbCI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgnYnlf bGFiZWwnKS5zZWxlY3RJbnB1dCgnc21kX2ZlYXRfZmlsdCcsICRmdHlwZXMsICRzbWRfZmVh dF9maWx0a2VlcCwgMSwgJycsICdzbWRfZmVhdF9maWx0JykuJzwvZGl2PicgOiAnJyk7DQoJ CWVjaG8gKCRkaXNwbGF5PT0ncGFnaW5hdGVkJykgPyBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBn VHh0KCdnbycpLCAnc21hbGxlcmJveCBzbWRfZmVhdHVyZWRfc2F2ZScsICcnLCAncmV0dXJu IHNtZF9mZWF0dXJlZF9lZGl0a2VlcCgwKTsnKSA6ICcnOw0KCQllY2hvIGVJbnB1dCgkc21k X2ZlYXR1cmVkX2V2ZW50KS5zSW5wdXQoJ3NtZF9mZWF0dXJlZF9saXN0Jyk7DQoJCWVjaG8g JzwvZmllbGRzZXQ+JzsNCgkJZWNobyAnPC9mb3JtPic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9 InNtZF9mZWF0X3ByZWZzIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nOw0K CQllY2hvICc8ZmllbGRzZXQgaWQ9InNtZF9mZWF0dXJlZF9wcmVmcyIgY2xhc3M9InNtZF9m ZWF0dXJlZF9zdWJwYW5lbCI+PGxlZ2VuZD4nLnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVmcycp Lic8L2xlZ2VuZD4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9wcmVm Ij4nOw0KCQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9kaXNwbGF5Ij4nLnNtZF9mZWF0 dXJlZF9nVHh0KCdwcmVmX2Rpc3BsYXknKS4nPC9sYWJlbD4nLnNlbGVjdElucHV0KCdzbWRf ZmVhdF9kaXNwbGF5JywgJGRpc3BsYXlvcHRzLCAkZGlzcGxheSwgJycsICcnLCAnc21kX2Zl YXRfZGlzcGxheScpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9 InNtZF9mZWF0dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9z b3J0Ij4nLnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVmX3NvcnQnKS4nPC9sYWJlbD4nLnNlbGVj dElucHV0KCdzbWRfZmVhdF9zb3J0JywgJHNvcnRvcHRzLCAkY3Vyck9yZGVyWzBdLCAnJywg JycsICdzbWRfZmVhdF9zb3J0JykuDQoJCQlzZWxlY3RJbnB1dCgnc21kX2ZlYXRfc29ydGRp cicsICRzb3J0ZGlycywgJGN1cnJPcmRlclsxXSwgJycsICcnLCAnc21kX2ZlYXRfc29ydGRp cicpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0 dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8ZGl2IGlkPSJzbWRfZmVhdF9kaXNwbGF5X2JveCI+ JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2ZlYXRfYm94c2l6ZSI+Jy5zbWRfZmVhdHVy ZWRfZ1R4dCgncHJlZl9ib3hzaXplJykuJzwvbGFiZWw+Jy5mSW5wdXQoJ3RleHQnLCAnc21k X2ZlYXRfYm94X3gnLCAkc2l6ZXNbMF0sICcnLCAnJywgJycsICczJywgJycsICdzbWRfZmVh dF9ib3hzaXplJykuDQoJCQlzbWRfZmVhdHVyZWRfZ1R4dCgncHJlZl9ib3hzaXplYnknKS5m SW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRfYm94X3knLCAkc2l6ZXNbMV0sICcnLCAnJywgJycs ICczJyk7DQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2Zl YXR1cmVkX3ByZWYgc21kX2ZlYXRfdGV4dGlsZSI+JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0i c21kX2ZlYXRfdGV4dGlsZSI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgndGV4dGlsZScpLic8L2xh YmVsPic7DQoJCWZvcmVhY2ggKCR0ZXh0aWxlb25vZmYgYXMgJGtleSA9PiAkdmFsKSB7DQoJ CQllY2hvIGNoZWNrYm94KCdzbWRfZmVhdF90ZXh0aWxlXycuJGtleSwgMSwgJHRleHRpbGVv bm9mZlska2V5XSwgJycsICdzbWRfZmVhdF90ZXh0aWxlXycuJGtleSkuc3Auc21kX2ZlYXR1 cmVkX2dUeHQoJ3RleHRpbGVfJy4ka2V5KTsNCgkJfQ0KCQllY2hvIGZJbnB1dCgnaGlkZGVu JywgJ3NtZF9mZWF0X3RleHRpbGUnLCBpbXBsb2RlKCR0ZXh0aWxlb25vZmYpLCcnLCcnLCcn LCcnLCcnLCdzbWRfZmVhdF90ZXh0aWxlJyk7DQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNo byAnPC9kaXY+JzsNCg0KCQllY2hvIGVJbnB1dCgkc21kX2ZlYXR1cmVkX2V2ZW50KS5zSW5w dXQoJ3NtZF9mZWF0dXJlZF9wcmVmc2F2ZScpOw0KCQllY2hvIGZJbnB1dCgnc3VibWl0Jywg JycsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3ggc21kX2ZlYXR1cmVkX3NhdmUnLCAnJywg J3NtZF9mZWF0X3ByZXN1YigpOycpOw0KCQllY2hvICc8L2ZpZWxkc2V0Pic7DQoJCWVjaG8g JzwvZm9ybT4nOw0KDQoJCWVjaG8gJyZuYnNwOyc7IC8vIFdpdGhvdXQgdGhpcyAnY29udGVu dCcgalF1ZXJ5IDEuMy4yIHdvbid0IC50b2dnbGUoKSBhbiBlbGVtZW50IHdpdGggZW50aXJl bHkgZmxvYXRlZCBpbm5lciBlbGVtZW50cyA6LXMNCgkJZWNobyAnPC9kaXY+JzsNCgkJZWNo byAnPC9maWVsZHNldD4nOw0KDQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfZmVhdF9lZGl0Zm9y bSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyBoSW5wdXQo J3NtZF9mZWF0X3NlYXJjaGtlZXAnLCAnJykuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9maWx0 a2VlcCcsICcnKS4NCgkJCQloSW5wdXQoJ3NtZF9mZWF0X2lkJywgJycpLg0KCQkJCWVJbnB1 dCgkc21kX2ZlYXR1cmVkX2V2ZW50KS4NCgkJCQlzSW5wdXQoJ3NtZF9mZWF0dXJlZF9saXN0 Jyk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KDQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfZmVhdF9z YXZlZm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InJl dHVybiBzbWRfZmVhdHVyZWRfc2F2ZWtlZXAoKTsiPic7DQoJCWVjaG8gc3RhcnRUYWJsZSgn Y29udHJvbCcsJycsJycsJzMnKTsNCgkJaWYgKCRzbWRfZmVhdF9pZCkgew0KCQkJZWNobyB0 cigNCgkJCQl0ZCgnJm5ic3A7JykudGRjcyhnVHh0KCdlZGl0Jykuc3Auc3Ryb25nKCRlZGl0 bmFtZSksIDIpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKGdUeHQoJ2xh YmVsJyksICcnLCAnc21kX2ZlYXRfbGFiZWwnKS4NCgkJCQl0ZCgNCgkJCQkJZklucHV0KCd0 ZXh0JywgJ3NtZF9mZWF0X2xhYmVsJywgJGZlYXRfbGFiZWwsICcnLCAnJywgJycsICcnLCAn JywgJ3NtZF9mZWF0X2xhYmVsJykuDQoJCQkJCXNlbGVjdElucHV0KCdzbWRfZmVhdF9sYWJl bGNob29zZScsICRldHlwZXMsICRmZWF0X2xhYmVsLCAwLCAnJywgJ3NtZF9mZWF0X2xhYmVs Y2hvb3NlJykNCgkJCQkpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKGdU eHQoJ3RpdGxlJyksICcnLCAnc21kX2ZlYXRfdGl0bGUnKS4NCgkJCQl0ZCgNCgkJCQkJZklu cHV0KCd0ZXh0JywgJ3NtZF9mZWF0X3RpdGxlJywgJGZlYXRfdGl0bGUsICcnLCAnJywgJycs ICcnLCAnJywgJ3NtZF9mZWF0X3RpdGxlJykNCgkJCQkpDQoJCQkpOw0KCQkJZWNobyB0cigN CgkJCQlmTGFiZWxDZWxsKGdUeHQoJ2Rlc2NyaXB0aW9uJyksICcnLCAnc21kX2ZlYXRfZGVz YycpLg0KCQkJCXRkKHRleHRfYXJlYSgnc21kX2ZlYXRfZGVzYycsIDgwLCA0MDAsICRmZWF0 X2Rlc2MsICdzbWRfZmVhdF9kZXNjJykpLg0KCQkJCXRkKGZJbnB1dCgnc3VibWl0JywgJycs IGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3gnKSkuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9z ZWFyY2hrZWVwJywgJycpLg0KCQkJCWhJbnB1dCgnc21kX2ZlYXRfZmlsdGtlZXAnLCAnJyku DQoJCQkJaElucHV0KCdzbWRfZmVhdF9pZCcsICRzbWRfZmVhdF9pZCkuDQoJCQkJZUlucHV0 KCRzbWRfZmVhdHVyZWRfZXZlbnQpLg0KCQkJCXNJbnB1dCgnc21kX2ZlYXR1cmVkX3NhdmUn KQ0KCQkJKTsNCgkJfQ0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8gJzwvZm9ybT4nOw0K DQoJCSRlZGJ0biA9IHNtYWxsKCdbJy5nVHh0KCdlZGl0JykuJ10nKTsNCg0KCQlpZiAoJG91 dCkgew0KCQkJJHJvd3MgPSBjb3VudCgkcnMpOw0KCQkJJHRibG91dCA9IGFycmF5KCk7DQoJ CQkkYXR0cyA9ICcgY2xhc3M9InNtZF9mZWF0dXJlZF90YWJsZSBzbWRfY2xlYXIiIGlkPSJz bWRfJy4kZGlzcGxheS4nIiBhbGlnbj0iY2VudGVyIic7DQoNCgkJCSR0YmxvdXRbXSA9IGhl ZChzbWRfZmVhdHVyZWRfZ1R4dCgnbWFuYWdlX2xibCcsIGFycmF5KCksICdyYXcnKSwgMywg JyBjbGFzcz0ic21kX2NsZWFyIicpOw0KCQkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRyb3dz OyAkaWR4KyspIHsNCgkJCQkkaXNmZWF0ID0gKGlzc2V0KCRvdXRbJGlkeF0pICYmIGFycmF5 X2tleV9leGlzdHMoJG91dFskaWR4XVswXSwgJGZlYXRsaXN0KSk7DQoJCQkJJGNlbGxjbGFz cyA9ICRpc2ZlYXQgPyAnIGNsYXNzPSJzbWRfZmVhdHVyZWQiJyA6ICcnOw0KCQkJCSRlZGxp bmsgPSAkaXNmZWF0ID8gJzxhIGNsYXNzPSJlZGxpbmsiIGhyZWY9IiMiIG9uY2xpY2s9InJl dHVybiBzbWRfZmVhdHVyZWRfZWRpdGtlZXAoXCcnLiRvdXRbJGlkeF1bMF0uJ1wnKTsiPicu JGVkYnRuLic8L2E+Jy5zcCA6ICcnOw0KCQkJCSRyb3dkYXRhID0gKGlzc2V0KCRvdXRbJGlk eF0pKSA/ICc8c3BhbiBuYW1lPSJzbWRfZmVhdF9uYW1lIiBjbGFzcz0ic21kX2hpZGRlbiI+ Jy4kb3V0WyRpZHhdWzFdLic8L3NwYW4+JyA6ICcnOw0KCQkJCSRyb3dkYXRhIC49ICRpc2Zl YXQgPyAnPHNwYW4gbmFtZT0ic21kX2ZlYXRfbGFiZWwiIGNsYXNzPSJleHRyYSBzbWRfaGlk ZGVuIj4nLiRvdXRbJGlkeF1bMl0uJzwvc3Bhbj4nIDogJyc7DQoJCQkJJHRibG91dFtdID0g KGlzc2V0KCRvdXRbJGlkeF0pKSA/ICc8ZGl2Jy4kY2VsbGNsYXNzLic+Jy4kZWRsaW5rLic8 YSBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2ZlYXR1cmVkX3NlbGVjdCh0aGlzLCBc JycuJG91dFskaWR4XVswXS4nXCcpIj4nLiRvdXRbJGlkeF1bMV0uJzwvYT4nLiRyb3dkYXRh Lic8L2Rpdj4nIDogJzxkaXY+PC9kaXY+JzsNCgkJCX0NCgkJCWVjaG8gdGFnKGpvaW4oIiIs JHRibG91dCksICdkaXYnLCAkYXR0cyk7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xl YXIiPjwvZGl2Pic7DQoJCQlpZiAoJGRpc3BsYXk9PSdwYWdpbmF0ZWQnICYmICRkb19wYWcp IHsNCgkJCQllY2hvIG4uJzxkaXYgaWQ9IicuJHNtZF9mZWF0dXJlZF9ldmVudC4nX25hdmln YXRpb24iIGNsYXNzPSJ0eHAtbmF2aWdhdGlvbiI+Jy4NCgkJCQkJbi5uYXZfZm9ybSgkc21k X2ZlYXR1cmVkX2V2ZW50LCAkcGFnZSwgJG51bVBhZ2VzLCAnJywgJycsICcnLCAnJywgJHRv dGFsLCAkbGltaXQpLg0KCQkJCQluLnBhZ2VieV9mb3JtKCRzbWRfZmVhdHVyZWRfZXZlbnQs ICRzbWRfZmVhdHVyZWRfbGlzdF9wYWdlYnkpOw0KCQkJCQluLic8L2Rpdj4nOw0KCQkJfQ0K CQl9DQoNCgkJJHFzID0gYXJyYXkoDQoJCQkiZXZlbnQiID0+ICRzbWRfZmVhdHVyZWRfZXZl bnQsDQoJCSk7DQoNCgkJJHFzVmFycyA9ICJpbmRleC5waHAiLmpvaW5fcXMoJHFzKTsNCgkJ JHZlcmlmeVR4dCA9IHNtZF9mZWF0dXJlZF9nVHh0KCd1bmZlYXR1cmVfY29uZmlybScpOw0K DQoJCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLy8g Q29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQ0KZnVuY3Rpb24gc21k X2ZlYXRfcHJlc3ViKCkgew0KCXZhciBzbWRfb3V0ID0gIiI7DQoJalF1ZXJ5KCIuc21kX2Zl YXRfdGV4dGlsZSA6Y2hlY2tib3giKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlzbWRfb3V0ICs9 ICh0aGlzLmNoZWNrZWQpID8gMSA6IDA7DQoJfSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfdGV4 dGlsZSIpLnZhbChzbWRfb3V0KTsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQpmdW5jdGlvbiBz bWRfZmVhdHVyZWRfc2VsZWN0KG9iaiwgaWQpIHsNCglvYmogPSBqUXVlcnkob2JqKS5wYXJl bnQoKTsNCg0KCS8vIE4uQi4gTmVnYXRpdmUgbG9naWMgdXNlZCBoZXJlIGJlY2F1c2Ugd2Un cmUgY2hlY2tpbmcgdGhlIGNsYXNzIF9iZWZvcmVfIGl0J3MgYmVlbiB0b2dnbGVkDQoJdmFy IGFjdGlvbiA9ICgob2JqKS5oYXNDbGFzcygic21kX2ZlYXR1cmVkIikpID8gJ3JlbW92ZScg OiAnYWRkJzsNCglpZiAoYWN0aW9uID09ICdyZW1vdmUnKSB7DQoJCXZhciByZXQgPSBjb25m aXJtKCd7JHZlcmlmeVR4dH0nKTsNCgkJaWYgKHJldCA9PSBmYWxzZSkgew0KCQkJcmV0dXJu IGZhbHNlOw0KCQl9DQoJfQ0KCWpRdWVyeS5wb3N0KCd7JHFzVmFyc30nLCB7IHN0ZXA6ICJz bWRfZmVhdHVyZWRfdGFnaXQiLCBzbWRfZmVhdF9pZDogaWQsIHNtZF9mZWF0X2FjdGlvbjog YWN0aW9uIH0sDQoJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCW9iai50b2dnbGVDbGFzcygnc21k X2ZlYXR1cmVkJyk7DQoJCQlpZiAoYWN0aW9uID09ICdhZGQnKSB7DQoJCQkJb2JqLnByZXBl bmQoJzxhIGNsYXNzPSJlZGxpbmsiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBzbWRfZmVh dHVyZWRfZWRpdGtlZXAoXCcnK2lkKydcJykiPnskZWRidG59PC9hPiZuYnNwOycpOw0KCQkJ CW9iai5hcHBlbmQoJzxzcGFuIG5hbWU9InNtZF9mZWF0X2xhYmVsIiBjbGFzcz0iZXh0cmEg c21kX2hpZGRlbiI+PC9zcGFuPicpOw0KCQkJfSBlbHNlIHsNCgkJCQlvYmouZmluZCgnYS5l ZGxpbmsnKS5yZW1vdmUoKTsNCgkJCQlvYmouZmluZCgnc3Bhbi5leHRyYScpLnJlbW92ZSgp Ow0KCQkJCWlmIChqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS52YWwoKSAhPSAnJykgalF1 ZXJ5KCIjc21kX2ZlYXRfc2VhcmNoIikua2V5dXAoKTsNCgkJCQlpZiAoalF1ZXJ5KCIjc21k X2ZlYXRfZmlsdCIpLnZhbCgpICE9ICcnKSBqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikuY2hh bmdlKCk7DQoJCQl9DQoJCX0NCgkpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24g c21kX2ZlYXR1cmVkX2VkaXRrZWVwKGlkKSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZv cm0gW25hbWU9J3NtZF9mZWF0X3NlYXJjaGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVh dF9zZWFyY2giKS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25hbWU9 J3NtZF9mZWF0X2ZpbHRrZWVwJ10iKS52YWwoalF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFi ZWwgI3NtZF9mZWF0X2ZpbHQgb3B0aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KCWpRdWVyeSgi I3NtZF9mZWF0X2VkaXRmb3JtIFtuYW1lPSdzbWRfZmVhdF9pZCddIikudmFsKGlkKTsNCglq UXVlcnkoIiNzbWRfZmVhdF9lZGl0Zm9ybSIpLnN1Ym1pdCgpOw0KfQ0KDQpmdW5jdGlvbiBz bWRfZmVhdHVyZWRfc2F2ZWtlZXAoKSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfc2F2ZWZvcm0g W25hbWU9J3NtZF9mZWF0X3NlYXJjaGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVhdF9z ZWFyY2giKS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfc2F2ZWZvcm0gW25hbWU9J3Nt ZF9mZWF0X2ZpbHRrZWVwJ10iKS52YWwoalF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFiZWwg I3NtZF9mZWF0X2ZpbHQgb3B0aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KfQ0KDQpmdW5jdGlv biBzbWRfZmVhdF9maWx0ZXIoc2VsZWN0b3IsIHF1ZXJ5LCBuYW0sIGNzZW5zZSwgZXhhY3Qp IHsNCglpZiAoeyRkaXNwbGF5X2pzfSA9PSAxKSB7DQoJCXZhciBxdWVyeSA9IGpRdWVyeS50 cmltKHF1ZXJ5KTsNCgkJY3NlbnNlID0gKGNzZW5zZSkgPyAiIiA6ICJpIjsNCgkJcXVlcnkg PSBxdWVyeS5yZXBsYWNlKC8gL2dpLCAnfCcpOyAvLyBhZGQgT1IgZm9yIHJlZ2V4IHF1ZXJ5 DQoJCWlmIChleGFjdCkgew0KCQkJdG1wID0gcXVlcnkuc3BsaXQoJ3wnKTsNCgkJCWZvciAo dmFyIGlkeCA9IDA7IGlkeCA8IHRtcC5sZW5ndGg7IGlkeCsrKSB7DQoJCQkJdG1wW2lkeF0g PSAnXicrdG1wW2lkeF0rJyQnOw0KCQkJfQ0KCQkJcXVlcnkgPSB0bXAuam9pbignfCcpOw0K CQl9DQoJCXZhciByZSA9IG5ldyBSZWdFeHAocXVlcnksIGNzZW5zZSk7DQoJCWpRdWVyeShz ZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXNlbCA9ICh0eXBlb2YgbmFtPT0idW5k ZWZpbmVkIiB8fCBuYW09PScnKSA/IGpRdWVyeSh0aGlzKSA6IGpRdWVyeSh0aGlzKS5maW5k KCJzcGFuW25hbWU9JyIrbmFtKyInXSIpOw0KCQkJaWYgKHF1ZXJ5ID09ICcnKSB7DQoJCQkJ aWYgKHNlbC5sZW5ndGggPT0gMSAmJiBzZWwudGV4dCgpID09ICcnKSB7DQoJCQkJCWpRdWVy eSh0aGlzKS5zaG93KCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmhpZGUo KTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCWlmIChzZWwudGV4dCgpLnNlYXJjaChyZSkg PCAwKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5oaWRlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJ alF1ZXJ5KHRoaXMpLnNob3coKTsNCgkJCQl9DQoJCQl9DQoJCX0pOw0KCX0NCn0NCg0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIpLmtleXVwKGZ1 bmN0aW9uKGV2ZW50KSB7DQoJCWpRdWVyeSgiI3NtZF9mZWF0X2ZpbHQiKS52YWwoJzAnKTsg Ly8gQ2xlYXIgdGhlIGZpbHRlciBkcm9wZG93bg0KCQkvLyBpZiBlc2MgaXMgcHJlc3NlZCBv ciBub3RoaW5nIGlzIGVudGVyZWQNCgkJaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcgfHwgalF1 ZXJ5KHRoaXMpLnZhbCgpID09ICcnKSB7DQoJCQlqUXVlcnkodGhpcykudmFsKCcnKTsNCgkJ CWlmICh7JGRpc3BsYXlfanN9ID09IDEpIHsNCgkJCQlqUXVlcnkoIi5zbWRfZmVhdHVyZWRf dGFibGUgZGl2Om5vdCgudGJsaGVhZCkiKS5zaG93KCk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJ CQlzbWRfZmVhdF9maWx0ZXIoJy5zbWRfZmVhdHVyZWRfdGFibGUgZGl2Om5vdCgudGJsaGVh ZCknLCBqUXVlcnkodGhpcykudmFsKCksICdzbWRfZmVhdF9uYW1lJywgMCwgMCk7DQoJCX0N Cgl9KTsNCglpZiAoJ3skc21kX2ZlYXRfc2VhcmNoa2VlcH0nICE9ICcnKSB7DQoJCWpRdWVy eSgiI3NtZF9mZWF0X3NlYXJjaCIpLmtleXVwKCk7DQoJfQ0KCWpRdWVyeSgiI3NtZF9mZWF0 X2ZpbHQiKS5jaGFuZ2UoZnVuY3Rpb24oZXZlbnQpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRf c2VhcmNoIikudmFsKCcnKTsgLy8gRW1wdHkgdGhlIHNlYXJjaCBib3gNCgkJaWYgKGpRdWVy eSh0aGlzKS52YWwoKSA9PSAnJykgew0KCQkJaWYgKHskZGlzcGxheV9qc30gPT0gMSkgew0K CQkJCWpRdWVyeSgnLnNtZF9mZWF0dXJlZF90YWJsZSBkaXY6bm90KC50YmxoZWFkKScpLnNo b3coKTsNCgkJCX0NCgkJfSBlbHNlIGlmIChqUXVlcnkodGhpcykudmFsKCkgPT0gJ3NtZF91 bmxhYmVsbGVkJykgew0KCQkJc21kX2ZlYXRfZmlsdGVyKCcuc21kX2ZlYXR1cmVkX3RhYmxl IGRpdjpub3QoLnRibGhlYWQpJywgJycsICdzbWRfZmVhdF9sYWJlbCcsIDAsIDApOw0KCQl9 IGVsc2Ugew0KCQkJc21kX2ZlYXRfZmlsdGVyKCcuc21kX2ZlYXR1cmVkX3RhYmxlIGRpdjpu b3QoLnRibGhlYWQpJywgalF1ZXJ5KHRoaXMpLnZhbCgpLCAnc21kX2ZlYXRfbGFiZWwnLCAx LCAxKTsNCgkJfQ0KCX0pOw0KCWlmICgneyRzbWRfZmVhdF9maWx0a2VlcH0nICE9ICcnKSB7 DQoJCWpRdWVyeSgiI3NtZF9mZWF0X2ZpbHQiKS5jaGFuZ2UoKTsNCgl9DQoJaWYgKCd7JHNt ZF9mZWF0X2lkfScgIT0gJycpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfbGFiZWwiKS5mb2N1 cygpOw0KCQlqUXVlcnkoIiNzbWRfZmVhdF9sYWJlbGNob29zZSIpLmNoYW5nZShmdW5jdGlv bihldmVudCkgew0KCQkJalF1ZXJ5KCIjc21kX2ZlYXRfbGFiZWwiKS52YWwoalF1ZXJ5KHRo aXMpLnZhbCgpKTsNCgkJfSk7DQoJfQ0KCWpRdWVyeSgiI3NtZF9sb2FkaW5nIikuaGlkZSgp Ow0KCWpRdWVyeSgiI3NtZF9jb250YWluZXIiKS5zaG93KCk7DQp9KTsNCg0KPC9zY3JpcHQ+ DQpFT0pTOw0KDQoJCS8vIEluamVjdCBzdHlsZXMNCgkJZWNobyAnPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4nOw0KCQllY2hvIHN0cnRyKCRzbWRfZmVhdHVyZWRfc3R5bGVzWydjb21tb24n XSwgJHN0eWxlcmVwcyk7DQoJCWVjaG8gJzwvc3R5bGU+JzsNCgkJZWNobyAnPC9kaXY+JzsN Cgl9IGVsc2Ugew0KCQkvLyBUYWJsZSBub3QgaW5zdGFsbGVkDQoJCSRidG5JbnN0YWxsID0g Jzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2ZlYXR1cmVkX2V2 ZW50LmEuJ3N0ZXA9c21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5 OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfZmVhdHVyZWRfZ1R4 dCgndGJsX2luc3RhbGxfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nOw0KCQkkYnRu U3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCQllY2hvIHN0YXJ0 VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9mZWF0dXJlZF9nVHh0 KCdwcmVmc19zb21lX3RibCcpKS5ici5icg0KCQkJCS5zbWRfZmVhdHVyZWRfZ1R4dCgncHJl ZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQkuc21kX2ZlYXR1cmVkX2dUeHQoJ3ByZWZz X3NvbWVfb3B0cycpLCAnIGNvbHNwYW49IjIiJykNCgkJKTsNCgkJZWNobyB0cih0ZGEoJGJ0 bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfQ0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfY2hhbmdlX3BhZ2VieSgpIHsNCgln bG9iYWwgJHNtZF9mZWF0dXJlZF9ldmVudDsNCgkNCglldmVudF9jaGFuZ2VfcGFnZWJ5KCRz bWRfZmVhdHVyZWRfZXZlbnQpOw0KCXNtZF9mZWF0dXJlZF9saXN0KCk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXBkYXRlIHRoZSBwYXNzZWQgcmVjb3JkIGlu IHRoZSBmZWF0dXJlZCB0YWJsZQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3NhdmUoKSB7DQoJ Z2xvYmFsICRzbWRfZmVhdHVyZWRfZXZlbnQsICRzbWRfZmVhdHVyZWRfdGV4dGlsZV9vcHRz Ow0KDQoJZXh0cmFjdChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVhdF9sYWJl bCcsICdzbWRfZmVhdF90aXRsZScsICdzbWRfZmVhdF9kZXNjJykpKTsNCglhc3NlcnRfaW50 KCRzbWRfZmVhdF9pZCk7DQoNCgkkc21kX2ZlYXRfdGl0bGV0aWxlID0gJHNtZF9mZWF0X3Rp dGxlOw0KCSRzbWRfZmVhdF9kZXNjdGlsZSA9ICRzbWRfZmVhdF9kZXNjOw0KCSRzbWRfZmVh dF9sYWJlbCA9IGRvU2xhc2goJHNtZF9mZWF0X2xhYmVsKTsNCg0KCWlmIChzbWRfZmVhdHVy ZWRfdGFibGVfZXhpc3QoKSkgew0KCQlAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFz c1RleHRpbGUucGhwJzsNCgkJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoLnBocCc7 DQoNCgkJJHRleHRpbGVvbm9mZiA9IHNtZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJHNtZF9m ZWF0dXJlZF90ZXh0aWxlX29wdHMsIGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfdGV4dGlsZScs ICcxMScpKTsNCg0KCQlpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsNCgkJCSR0ZXh0 aWxlID0gbmV3IFRleHRpbGUoKTsNCgkJCSRzbWRfZmVhdF90aXRsZXRpbGUgPSBkb1NsYXNo KCgoJHRleHRpbGVvbm9mZlsndGl0bGUnXSA9PSAnMScpID8gJHRleHRpbGUtPlRleHRpbGVU aGlzKHBhcnNlKCRzbWRfZmVhdF90aXRsZSkpIDogcGFyc2UoJHNtZF9mZWF0X3RpdGxlKSkp Ow0KCQkJJHNtZF9mZWF0X2Rlc2N0aWxlID0gZG9TbGFzaCgoKCR0ZXh0aWxlb25vZmZbJ2Rl c2MnXSA9PSAnMScpID8gJHRleHRpbGUtPlRleHRpbGVUaGlzKHBhcnNlKCRzbWRfZmVhdF9k ZXNjKSkgOiBwYXJzZSgkc21kX2ZlYXRfZGVzYykpKTsNCgkJfQ0KDQoJCSRzbWRfZmVhdF90 aXRsZSA9IGRvU2xhc2goJHNtZF9mZWF0X3RpdGxlKTsNCgkJJHNtZF9mZWF0X2Rlc2MgPSBk b1NsYXNoKCRzbWRfZmVhdF9kZXNjKTsNCgkJJHJldCA9IHNhZmVfdXBzZXJ0KFNNRF9GRUFU LCAibGFiZWw9JyRzbWRfZmVhdF9sYWJlbCcsIGZlYXRfdGl0bGU9JyRzbWRfZmVhdF90aXRs ZScsIGZlYXRfdGl0bGVfaHRtbD0nJHNtZF9mZWF0X3RpdGxldGlsZScsIGRlc2NyaXB0aW9u PSckc21kX2ZlYXRfZGVzYycsIGRlc2NfaHRtbD0nJHNtZF9mZWF0X2Rlc2N0aWxlJyIsICJm ZWF0X2lkPSckc21kX2ZlYXRfaWQnIik7DQoJCXVuc2V0KCRfUE9TVFsnc21kX2ZlYXRfaWQn XSk7DQoJfQ0KDQoJc21kX2ZlYXR1cmVkX2xpc3Qoc21kX2ZlYXR1cmVkX2dUeHQoJ3NhdmVk JykpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENyZWF0ZSBhbiBl bXB0eSBlbnRyeSBpbiB0aGUgZmVhdHVyZWQgdGFibGUgb3IgZGVzdHJveSBpdA0KZnVuY3Rp b24gc21kX2ZlYXR1cmVkX3RhZ2l0KCkgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX2V2ZW50 Ow0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVh dF9hY3Rpb24nKSkpKTsNCg0KCWFzc2VydF9pbnQoJHNtZF9mZWF0X2lkKTsNCg0KCWlmICgk c21kX2ZlYXRfYWN0aW9uID09ICdhZGQnKSB7DQoJCSRyZXQgPSBzYWZlX3Vwc2VydChTTURf RkVBVCwgImxhYmVsPScnIiwgImZlYXRfaWQ9JyRzbWRfZmVhdF9pZCciKTsNCgl9IGVsc2Ug aWYgKCRzbWRfZmVhdF9hY3Rpb24gPT0gJ3JlbW92ZScpIHsNCgkJJHJldCA9IHNhZmVfZGVs ZXRlKFNNRF9GRUFULCAiZmVhdF9pZD0nJHNtZF9mZWF0X2lkJyIpOw0KCX0NCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3ByZWZzYXZlKCkgew0KCWV4dHJhY3Qo Z3BzYShhcnJheSgnc21kX2ZlYXRfZGlzcGxheScsICdzbWRfZmVhdF9zb3J0JywgJ3NtZF9m ZWF0X3NvcnRkaXInLCAnc21kX2ZlYXRfYm94X3gnLCAnc21kX2ZlYXRfYm94X3knLCAnc21k X2ZlYXRfdGV4dGlsZScpKSk7DQoJJG1zZyA9ICcnOw0KDQoJaWYgKCRzbWRfZmVhdF9kaXNw bGF5KSB7DQoJCXNldF9wcmVmKCJzbWRfZmVhdHVyZWRfZGlzcGxheSIsICRzbWRfZmVhdF9k aXNwbGF5LCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwg UFJFRl9QUklWQVRFKTsNCgkJJG1zZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJ fQ0KDQoJaWYgKCRzbWRfZmVhdF9zb3J0ICYmICRzbWRfZmVhdF9zb3J0ZGlyKSB7DQoJCSRz b3J0X2NyaXQgPSAkc21kX2ZlYXRfc29ydC4nICcuICRzbWRfZmVhdF9zb3J0ZGlyOw0KCQlz ZXRfcHJlZigic21kX2ZlYXR1cmVkX3NvcnQiLCAkc29ydF9jcml0LCAnc21kX2ZlYXR1cmVk JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJG1z ZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0KDQoJaWYgKCRzbWRfZmVhdF9i b3hfeCAmJiAkc21kX2ZlYXRfYm94X3kpIHsNCgkJJGRpbXMgPSAkc21kX2ZlYXRfYm94X3gu J3gnLiRzbWRfZmVhdF9ib3hfeTsNCgkJc2V0X3ByZWYoInNtZF9mZWF0dXJlZF9ib3hfc2l6 ZSIsICRkaW1zLCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jywg MCwgUFJFRl9QUklWQVRFKTsNCgkJJG1zZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7 DQoJfQ0KDQoJaWYgKCRzbWRfZmVhdF90ZXh0aWxlKSB7DQoJCXNldF9wcmVmKCJzbWRfZmVh dHVyZWRfdGV4dGlsZSIsICRzbWRfZmVhdF90ZXh0aWxlLCAnc21kX2ZlYXR1cmVkJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJG1zZyA9IGdU eHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0KDQoJc21kX2ZlYXR1cmVkX2xpc3QoJG1z Zyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gU3BsaXQgYSBtdWx0 aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50byBhbiBhcnJheSBvZiBrZXlzL3ZhbHVlcy4N Ci8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJlYWQgZGlyZWN0bHkgZnJv bSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGludGVudGlvbmFsbHkNCmZ1 bmN0aW9uIHNtZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJGl0ZW1zLCAkb3B0dmFsKSB7DQoJ JG9ub2ZmID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJG9wdHZhbCwgLTEsIFBS RUdfU1BMSVRfTk9fRU1QVFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRpdGVt cyBhcyAka2V5ID0+ICR2YWx1ZSkgew0KCQkkb3V0WyhzdHJpbmcpJHZhbHVlXSA9ICRvbm9m Zlska2V5XTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9mZWF0dXJlZF9zYXZlX3BhbmVfc3RhdGUoKSB7DQoJJHBhbmVzID0gYXJyYXkoJ3Nt ZF9mZWF0dXJlZF9jcGFuZWwnKTsNCgkkcGFuZSA9IGdwcygncGFuZScpOw0KCWlmIChpbl9h cnJheSgkcGFuZSwgJHBhbmVzKSkNCgl7DQoJCXNldF9wcmVmKCJwYW5lX3skcGFuZX1fdmlz aWJsZSIsIChncHMoJ3Zpc2libGUnKSA9PSAndHJ1ZScgPyAnMScgOiAnMCcpLCAnc21kX2Zl YXR1cmVkJywgUFJFRl9ISURERU4sICd5ZXNub3JhZGlvJywgMCwgUFJFRl9QUklWQVRFKTsN CgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9IGVsc2Ugew0KCQlzZW5kX3htbF9yZXNwb25z ZShhcnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkZCBmZWF0dXJlZCB0YWJsZSBp ZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQNCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9p bnN0YWxsKCRzaG93cGFuZT0nMScpIHsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0g MDsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJHNxbFtdID0gIkNSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTIGAiLlBGWC5TTURfRkVBVC4iYCAoDQoJCWBmZWF0X2lkYCBp bnQoOCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCWBsYWJlbGAgdmFyY2hhcigzMikgTlVM TCBkZWZhdWx0ICcnLA0KCQlgZmVhdF90aXRsZWAgdmFyY2hhcigyNTUpIE5VTEwgZGVmYXVs dCAnJywNCgkJYGZlYXRfdGl0bGVfaHRtbGAgdmFyY2hhcigyNTUpIE5VTEwgZGVmYXVsdCAn JywNCgkJYGRlc2NyaXB0aW9uYCB0ZXh0IE5VTEwgZGVmYXVsdCAnJywNCgkJYGRlc2NfaHRt bGAgdGV4dCBOVUxMIGRlZmF1bHQgJycsDQoJCVBSSU1BUlkgS0VZIChgZmVhdF9pZGApDQoJ KSBFTkdJTkU9TXlJU0FNIjsNCg0KCWlmKGdwcygnZGVidWcnKSkgew0KCQlkbXAoJHNxbCk7 DQoJfQ0KCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkkcmV0ID0gc2FmZV9xdWVyeSgk cXJ5KTsNCgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291 bnQnXSsrOw0KCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9i PiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxu LS0+XG4iOw0KCQl9DQoJfQ0KDQoJLy8gSGFuZGxlIHVwZ3JhZGVzIGZyb20gcHJldmlvdXMg dmVyc2lvbnMNCgkkY29scyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLlNNRF9GRUFU LidgJyk7DQoJaWYgKCFpbl9hcnJheSgnZmVhdF9pZCcsICRjb2xzKSkgew0KCQlzYWZlX2Fs dGVyKFNNRF9GRUFULCAiQ0hBTkdFIGBpZGAgYGZlYXRfaWRgIGludCggOCApIE5PVCBOVUxM IERFRkFVTFQgJzAnIik7DQoJfQ0KCWlmICghaW5fYXJyYXkoJ2ZlYXRfdGl0bGUnLCAkY29s cykpIHsNCgkJc2FmZV9hbHRlcihTTURfRkVBVCwgIkFERCBgZmVhdF90aXRsZWAgdmFyY2hh ciggMjU1ICkgTlVMTCBERUZBVUxUICcnIEFGVEVSIGBsYWJlbGAiKTsNCgl9DQoJaWYgKCFp bl9hcnJheSgnZmVhdF90aXRsZV9odG1sJywgJGNvbHMpKSB7DQoJCXNhZmVfYWx0ZXIoU01E X0ZFQVQsICJBREQgYGZlYXRfdGl0bGVfaHRtbGAgdmFyY2hhciggMjU1ICkgTlVMTCBERUZB VUxUICcnIEFGVEVSIGBmZWF0X3RpdGxlYCIpOw0KCX0NCg0KCS8vIFNwaXQgb3V0IHJlc3Vs dHMNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCWlmICgkc2hv d3BhbmUpIHsNCgkJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9pbnN0YWxs ZWQnKTsNCgkJCXNtZF9mZWF0dXJlZF9saXN0KCRtZXNzYWdlKTsNCgkJfQ0KCX0gZWxzZSB7 DQoJCWlmICgkc2hvd3BhbmUpIHsNCgkJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQo J3RibF9ub3RfaW5zdGFsbGVkJyk7DQoJCQlzbWRfZmVhdHVyZWRfbGlzdCgkbWVzc2FnZSk7 DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0 YWJsZSBpZiBpbiBkYXRhYmFzZQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3RhYmxlX3JlbW92 ZSgpIHsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9l cnJfY291bnQnXSA9IDA7DQoJaWYgKHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgpKSB7DQoJ CSRzcWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5QRlguU01EX0ZFQVQuICI7ICI7 DQoJCWlmKGdwcygnZGVidWcnKSkgew0KCQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVhY2gg KCRzcWwgYXMgJHFyeSkgew0KCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAo JHJldD09PWZhbHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJ CWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9l cnJvcigpLiI8YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJ CQl9DQoJCX0NCgl9DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0K CQkkbWVzc2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd0YmxfcmVtb3ZlZCcpOw0KCX0gZWxz ZSB7DQoJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9ub3RfcmVtb3ZlZCcp Ow0KCQlzbWRfZmVhdHVyZWRfbGlzdCgkbWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgk YWxsPScnKSB7DQoJaWYgKCRhbGwpIHsNCgkJJHRibHMgPSBhcnJheShTTURfRkVBVCA9PiA2 KTsNCgkJJG91dCA9IGNvdW50KCR0YmxzKTsNCgkJZm9yZWFjaCAoJHRibHMgYXMgJHRibCA9 PiAkY29scykgew0KCQkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJCWVjaG8gIisrIFRBQkxF ICIuJHRibC4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBD T0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xzLiIgKysiLmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50 KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07 DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0K CQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJCQllY2hvICIrKyBUQUJMRSAiLlNNRF9GRUFULiIg SEFTICIuY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9GRUFUKSkuIiBDT0xVTU5T OyI7DQoJCX0NCgkJcmV0dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfRkVBVCkpOw0K CX0NCn0NCg0KLy8gKioqKioqKioqKioqKioqKg0KLy8gUFVCTElDIFNJREUgVEFHUw0KLy8g KioqKioqKioqKioqKioqKg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfZmVhdHVyZWQoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVk X2luZm8sICRzbWRfcHJpb3JfZmVhdHVyZWQsICRwcmVmczsNCg0KCWV4dHJhY3QobEF0dHMo YXJyYXkoDQoJCSdsYWJlbCcgICAgPT4gJycsDQoJCSd1bmxhYmVsJyAgPT4gJ0ZlYXR1cmVk JywNCgkJJ2xhYmVsdGFnJyA9PiAnJywNCgkJJ3RpbWUnICAgICA9PiAncGFzdCcsDQoJCSdz dGF0dXMnICAgPT4gJzQsNScsDQoJCSdzZWN0aW9uJyAgPT4gJycsDQoJCSdsaW1pdCcgICAg PT4gJzEwJywNCgkJJ3NvcnQnICAgICA9PiAnJywNCgkJJ2Zvcm0nICAgICA9PiAnJywNCgkJ J3dyYXB0YWcnICA9PiAnJywNCgkJJ2JyZWFrJyAgICA9PiAnJywNCgkJJ2NsYXNzJyAgICA9 PiAnJywNCgkJJ2h0bWxfaWQnICA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCglpZiAoaXNzZXQo JGF0dHNbJ2xhYmVsJ10pKSB7DQoJCWlmICgkbGFiZWwpIHsNCgkJCSR3aGVyZSA9ICJCSU5B UlkgbGFiZWwgUkVHRVhQICciLiRhdHRzWydsYWJlbCddLiInIjsNCgkJfSBlbHNlIHsNCgkJ CSR3aGVyZSA9ICJsYWJlbD0nJyI7DQoJCX0NCgkJdW5zZXQoJGF0dHNbJ2xhYmVsJ10pOw0K CX0gZWxzZSB7DQoJCS8vIElmIG5vIGxhYmVsIGF0dHJpYnV0ZSBoYXMgYmVlbiBnaXZlbiwg dHJlYXQgdGhpcyBhcyAnYWxsIGZlYXR1cmVkIGl0ZW1zJw0KCQkkaWRzID0gc2FmZV9jb2x1 bW4oJ2ZlYXRfaWQnLCBTTURfRkVBVCwgJzE9MScpOw0KCQkkaWRzID0gam9pbigiJywnIiwg ZG9TbGFzaCgkaWRzKSk7DQoJCSR3aGVyZSA9ICJzbWRmZWF0LmZlYXRfaWQgSU4gKCckaWRz JykiOw0KCX0NCg0KCS8vIEV4Y2x1ZGUgcHJldmlvdXNseSBzZWVuIGFydGljbGVzDQoJaWYg KCFlbXB0eSgkc21kX3ByaW9yX2ZlYXR1cmVkKSkgew0KCQkkd2hlcmUgLj0gJyBBTkQgc21k ZmVhdC5mZWF0X2lkIE5PVCBJTignIC4gam9pbignLCcsICRzbWRfcHJpb3JfZmVhdHVyZWQp IC4gJyknOw0KCX0NCg0KCS8vIE5PVEU6IHRpbWUgaXMgbGVmdCBpbiB0aGUgJGF0dHMgYXJy YXkgYW5kIHBhc3NlZCB0byBhcnRpY2xlX2N1c3RvbS4gT3RoZXJ3aXNlIHRoZSBkZWZhdWx0 DQoJLy8gdGltZSB2YWx1ZSAocGFzdCkgd2lsbCBiZSB1c2VkDQoJaWYgKCR0aW1lKSB7DQoJ CXN3aXRjaCAoJHRpbWUpIHsNCgkJCWNhc2UgJ2FueSc6DQoJCQkJYnJlYWs7DQoJCQljYXNl ICdmdXR1cmUnOg0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQgPiBub3coKSI7DQoJCQkJ YnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQgPD0gbm93 KCkiOw0KCQl9DQoJCWlmICghJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXSkg ew0KCQkJJHdoZXJlIC49ICIgQU5EIChub3coKSA8PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAi Lk5VTExEQVRFVElNRS4iKSI7DQoJCX0NCgl9DQoNCglpZiAoJHN0YXR1cykgew0KCQkkd2hl cmUgLj0gJyBBTkQgU3RhdHVzIElOICgnLmpvaW4oJywnLCBkb19saXN0KCRzdGF0dXMpKS4n KSc7DQoJCXVuc2V0KCRhdHRzWydzdGF0dXMnXSk7DQoJfQ0KDQoJaWYgKCRzZWN0aW9uKSB7 DQoJCSR3aGVyZSAuPSAiIEFORCBTZWN0aW9uIElOICgnIi5qb2luKCInLCciLCBkb19saXN0 KCRzZWN0aW9uKSkuIicpIjsNCgkJdW5zZXQoJGF0dHNbJ3NlY3Rpb24nXSk7DQoJfQ0KDQoJ aWYgKCRzb3J0KSB7DQoJCSR3aGVyZSAuPScgT1JERVIgQlkgJy4kc29ydDsNCgkJdW5zZXQo JGF0dHNbJ3NvcnQnXSk7DQoJfQ0KDQoJLy8gTGVhdmUgbGltaXQgaW4gdGhlICRhdHRzIGFy cmF5IHRvbyBzbyBpdCBkb2Vzbid0IGRlZmF1bHQgdG8gYXJ0aWNsZV9jdXN0b20ncyB2YWx1 ZSBpZiBzZXQgaGVyZQ0KCWlmICgkbGltaXQpIHsNCgkJJHdoZXJlIC49JyBMSU1JVCAnLiRs aW1pdDsNCgl9DQoNCgkvLyBEb24ndCBwYXNzIHRoZSByZW1haW5pbmcgYXR0cmlidXRlcyB3 ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgb250byB0aGUgYXJ0aWNsZV9jdXN0b20gdGFnDQoJdW5z ZXQoDQoJCSRhdHRzWydsYWJlbCddLA0KCQkkYXR0c1sndW5sYWJlbCddLA0KCQkkYXR0c1sn bGFiZWx0YWcnXSwNCgkJJGF0dHNbJ3dyYXB0YWcnXSwNCgkJJGF0dHNbJ2JyZWFrJ10sDQoJ CSRhdHRzWydjbGFzcyddLA0KCQkkYXR0c1snaHRtbF9pZCddDQoJKTsNCg0KCSRycyA9IGdl dFJvd3MoJ1NFTEVDVCAqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVu aXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzLCB1bml4X3RpbWVzdGFtcChMYXN0 TW9kKSBhcyB1TGFzdE1vZCBGUk9NICcuUEZYLid0ZXh0cGF0dGVybiBBUyB0eHAgTEVGVCBK T0lOICcuUEZYLlNNRF9GRUFULicgQVMgc21kZmVhdCBPTiB0eHAuSUQ9c21kZmVhdC5mZWF0 X2lkIFdIRVJFICcuJHdoZXJlKTsNCg0KCSRvdXQgPSBhcnJheSgpOw0KCWlmICgkcnMpIHsN CgkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCSRzbWRfZmVhdHVyZWRfaW5mb1snbGFi ZWwnXSA9ICRyb3dbJ2xhYmVsJ107DQoJCQkkc21kX2ZlYXR1cmVkX2luZm9bJ3RpdGxlJ10g PSAkcm93WydmZWF0X3RpdGxlX2h0bWwnXTsNCgkJCSRzbWRfZmVhdHVyZWRfaW5mb1snZGVz Y3JpcHRpb24nXSA9ICRyb3dbJ2Rlc2NfaHRtbCddOw0KCQkJJGF0dHNbJ2lkJ10gPSAkcm93 WydJRCddOw0KDQoJCQkkYXJ0b3V0ID0gYXJ0aWNsZV9jdXN0b20oJGF0dHMsICR0aGluZyk7 DQoNCgkJCWlmICgkYXJ0b3V0KSB7DQoJCQkJJHNtZF9wcmlvcl9mZWF0dXJlZFtdID0gJHJv d1snSUQnXTsNCgkJCQkkb3V0W10gPSAkYXJ0b3V0Ow0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgk b3V0KSB7DQoJCXJldHVybiAoKCRsYWJlbHRhZykgPyBkb0xhYmVsKCAoICgkbGFiZWwgPT0g JycpID8gJHVubGFiZWwgOiAkbGFiZWwpLCAkbGFiZWx0YWcgKSA6ICcnKQ0KCQkJLmRvV3Jh cCgkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICcnLCAnJywgJycsICRodG1sX2lk KTsNCgl9DQoJcmV0dXJuICcnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF91bmZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNt ZF9wcmlvcl9mZWF0dXJlZCwgJHRoaXNwYWdlLCAkcHJldGV4dDsNCg0KCSR0aW1lID0gKGlz c2V0KCRhdHRzWyd0aW1lJ10pKSA/ICRhdHRzWyd0aW1lJ10gOiAnJzsNCgkkc3RhdHVzID0g KGlzc2V0KCRhdHRzWydzdGF0dXMnXSkpID8gJGF0dHNbJ3N0YXR1cyddIDogNDsNCgkkc2Vj dGlvbiA9IChpc3NldCgkYXR0c1snc2VjdGlvbiddKSkgPyAkYXR0c1snc2VjdGlvbiddIDog Jyc7DQoNCgkkd2hlcmUgPSAiMT0xIjsNCg0KCWlmICgkdGltZSkgew0KCQlzd2l0Y2ggKCR0 aW1lKSB7DQoJCQljYXNlICdhbnknOg0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnZnV0dXJlJzoN CgkJCQkkd2hlcmUgLj0gIiBBTkQgUG9zdGVkID4gbm93KCkiOw0KCQkJCWJyZWFrOw0KCQkJ ZGVmYXVsdDoNCgkJCQkkd2hlcmUgLj0gIiBBTkQgUG9zdGVkIDw9IG5vdygpIjsNCgkJfQ0K CQlpZiAoISRwcmVmc1sncHVibGlzaF9leHBpcmVkX2FydGljbGVzJ10pIHsNCgkJCSR3aGVy ZSAuPSAiIEFORCAobm93KCkgPD0gRXhwaXJlcyBPUiBFeHBpcmVzID0gIi5OVUxMREFURVRJ TUUuIikiOw0KCQl9DQoJfQ0KDQoJaWYgKCRzdGF0dXMpIHsNCgkJJHdoZXJlIC49ICcgQU5E IFN0YXR1cyBJTiAoJy5qb2luKCcsJywgZG9fbGlzdCgkc3RhdHVzKSkuJyknOw0KCX0NCg0K CWlmICgkc2VjdGlvbikgew0KCQkkd2hlcmUgLj0gIiBBTkQgU2VjdGlvbiBJTiAoJyIuam9p bigiJywnIiwgZG9fbGlzdCgkc2VjdGlvbikpLiInKSI7DQoJfQ0KDQoJLy8gRXhjbHVkZSBw cmV2aW91c2x5IHNlZW4gYXJ0aWNsZXMNCglpZiAoIWVtcHR5KCRzbWRfcHJpb3JfZmVhdHVy ZWQpKSB7DQoJCSR3aGVyZSAuPSAnIEFORCBpZCBOT1QgSU4oJyAuIGpvaW4oJywnLCAkc21k X3ByaW9yX2ZlYXR1cmVkKSAuICcpJzsNCgl9DQoNCgkkb2Zmc2V0ID0gKGlzc2V0KCRhdHRz WydvZmZzZXQnXSkpID8gJGF0dHNbJ29mZnNldCddIDogMDsNCg0KCWlmIChpc3NldCgkYXR0 c1snbGltaXQnXSkgJiYgaXNzZXQoJGF0dHNbJ3BhZ2VieSddKSkgew0KCQkkbGltaXQgPSAk YXR0c1snbGltaXQnXTsNCgkJJHBhZ2VieSA9ICRhdHRzWydwYWdlYnknXTsNCgkJJHBhZ2Vi eSA9ICgkcGFnZWJ5ID09ICdsaW1pdCcpID8gJGxpbWl0IDogJHBhZ2VieTsNCgkJJHBnID0g Z3BzKCdwZycpOw0KDQoJCSRncmFuZF90b3RhbCA9IHNhZmVfY291bnQoJ3RleHRwYXR0ZXJu Jywkd2hlcmUpOw0KCQkkdG90YWwgPSAkZ3JhbmRfdG90YWwgLSAkb2Zmc2V0Ow0KCQkkbnVt UGFnZXMgPSBjZWlsKCR0b3RhbC8kcGFnZWJ5KTsNCgkJJHBnID0gKCEkcGcpID8gMSA6ICRw ZzsNCgkJJHBnb2Zmc2V0ID0gJG9mZnNldCArICgoJHBnIC0gMSkgKiAkcGFnZWJ5KTsNCgkJ Ly8gc2VuZCBwYWdpbmcgaW5mbyB0byB0eHA6bmV3ZXIgYW5kIHR4cDpvbGRlcg0KCQkkcGFn ZW91dFsncGcnXSAgICAgICAgICA9ICRwZzsNCgkJJHBhZ2VvdXRbJ251bVBhZ2VzJ10gICAg PSAkbnVtUGFnZXM7DQoJCSRwYWdlb3V0WydzJ10gICAgICAgICAgID0gJHByZXRleHRbJ3Mn XTsNCgkJJHBhZ2VvdXRbJ2MnXSAgICAgICAgICAgPSAkcHJldGV4dFsnYyddOw0KCQkkcGFn ZW91dFsnY29udGV4dCddICAgICA9ICdhcnRpY2xlJzsNCgkJJHBhZ2VvdXRbJ2dyYW5kX3Rv dGFsJ10gPSAkZ3JhbmRfdG90YWw7DQoJCSRwYWdlb3V0Wyd0b3RhbCddICAgICAgID0gJHRv dGFsOw0KDQoJCWlmIChlbXB0eSgkdGhpc3BhZ2UpKSB7DQoJCQkkdGhpc3BhZ2UgPSAkcGFn ZW91dDsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRwZ29mZnNldCA9ICRvZmZzZXQ7DQoJfQ0KDQoJ JHJzID0gc2FmZV9jb2x1bW4oJ0lEJywgJ3RleHRwYXR0ZXJuJywgJHdoZXJlKTsNCgkkYXR0 c1snb2Zmc2V0J10gPSAkcGdvZmZzZXQ7DQoJJGF0dHNbJ2lkJ10gPSBqb2luKCcsJywgJHJz KTsNCgkkb3V0ID0gYXJ0aWNsZSgkYXR0cywgJHRoaW5nKTsNCg0KCXJldHVybiAkb3V0Ow0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJl ZF9pbmZvKCRhdHRzKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRfaW5mbzsNCg0KCWV4dHJh Y3QobEF0dHMoYXJyYXkoDQoJCSdpdGVtJyA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCglyZXR1 cm4gKGlzc2V0KCRzbWRfZmVhdHVyZWRfaW5mb1skaXRlbV0pID8gJHNtZF9mZWF0dXJlZF9p bmZvWyRpdGVtXSA6ICcnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfaWZfZmVhdHVyZWQoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21k X2ZlYXR1cmVkX2luZm8sICR0aGlzYXJ0aWNsZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSdpZCcgPT4gJycsDQoJCSdsYWJlbCcgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJaWYg KCRpZCkgew0KCQkkaWQgPSBqb2luKCInLCciLCBkb19saXN0KGRvU2xhc2goJGlkKSkpOw0K CX0NCg0KCWlmICghJGlkICYmICR0aGlzYXJ0aWNsZSkgew0KCQkkaWQgPSAkdGhpc2FydGlj bGVbJ3RoaXNpZCddOw0KCX0NCg0KCSR3aGVyZVtdID0gImZlYXRfaWQgSU4gKCciLiRpZC4i JykiOw0KDQoJaWYgKGlzc2V0KCRhdHRzWydsYWJlbCddKSkgew0KCQkkbGFiZWwgPSBleHBs b2RlKCcsJywgZG9TbGFzaCgkbGFiZWwpKTsNCgkJJGxibHdoZXJlID0gYXJyYXkoKTsNCgkJ Zm9yZWFjaCAoJGxhYmVsIGFzICRsYmwpIHsNCgkJCSRsYmx3aGVyZVtdID0gIiciLnRyaW0o JGxibCkuIiciOw0KCQl9DQoJCWlmICgkbGJsd2hlcmUpIHsNCgkJCSR3aGVyZVtdID0gJygg QklOQVJZIGxhYmVsIElOICgnIC4gam9pbignLCcsICRsYmx3aGVyZSkgLiAnKSApJzsNCgkJ fQ0KCX0NCg0KCSRyZXQgPSBzYWZlX3JvdygnZmVhdF9pZCcsIFNNRF9GRUFULCBqb2luKCcg QU5EJywgJHdoZXJlKSk7DQoNCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkcmV0 KSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNp ZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KLy8gVE9E TzogbWFrZSB0aGVzZSBpbnRvIGEgdGV4dHBhY2sgd2hlbiBwbHVnaW4gY29tcG9zZXIgc3Vw cG9ydHMgdGhlbQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX2dUeHQoJHdoYXQsICRhdHRzID0g YXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdieV9sYWJlbCcgPT4gJ0J5IGxhYmVs OiAnLA0KCQknYnlfbmFtZScgPT4gJ0J5IG5hbWU6ICcsDQoJCSdjb250cm9sX3BhbmVsJyA9 PiAnQ29udHJvbCBwYW5lbCcsDQoJCSdtYW5hZ2VfbGJsJyA9PiAnQ2xpY2sgdG8gc2VsZWN0 IGZlYXR1cmVkIGFydGljbGVzLCB3aGljaCB3aWxsIHRoZW4gYmUgZGlzcGxheWVkIDxzcGFu IGNsYXNzPSJzbWRfZmVhdHVyZWQiPjxhIGhyZWY9IiMiIHN0eWxlPSJtYXJnaW46MCA4cHg7 Ij5IaWdobGlnaHRlZDwvYT48L3NwYW4+LicsDQoJCSdwcmVmcycgPT4gJ1ByZWZlcmVuY2Vz JywNCgkJJ3ByZWZfYm94c2l6ZScgPT4gJ0JveCBzaXplOiAnLA0KCQkncHJlZl9ib3hzaXpl YnknID0+ICcgeCAnLA0KCQkncHJlZl9kaXNwbGF5JyA9PiAnRGlzcGxheTogJywNCgkJJ3By ZWZfc29ydCcgPT4gJ1NvcnQgYnk6ICcsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdU aGlzIGlzIGVpdGhlciBhIG5ldyBpbnN0YWxsYXRpb24gb3IgYSBkaWZmZXJlbnQgdmVyc2lv bicuYnIuJ29mIHRoZSBwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlLicsDQoJCSdwcmVm c19zb21lX29wdHMnID0+ICdDbGljayAiSW5zdGFsbCB0YWJsZSIgdG8gYWRkIG9yIHVwZGF0 ZSB0aGUgdGFibGUnLmJyLidsZWF2aW5nIGFsbCBleGlzdGluZyBkYXRhIHVudG91Y2hlZC4n LA0KCQkncHJlZnNfc29tZV90YmwnID0+ICdOb3QgYWxsIHRhYmxlIGluZm8gYXZhaWxhYmxl LicsDQoJCSdzYXZlZCcgPT4gJ0FydGljbGUgaW5mbyB1cGRhdGVkJywNCgkJJ3NlYXJjaF9s aXZlJyA9PiAnQXJ0aWNsZSBsaXZlIHNlYXJjaCcsDQoJCSdzZWFyY2hfc3RhbmRhcmQnID0+ ICdBcnRpY2xlIHNlYXJjaCcsDQoJCSd0YWJfbmFtZScgPT4gJ0ZlYXR1cmVkIGFydGljbGVz JywNCgkJJ3RibF9pbnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgdGFibGUnLA0KCQkndGJsX2lu c3RhbGxlZCcgPT4gJ1RhYmxlIGluc3RhbGxlZCcsDQoJCSd0Ymxfbm90X2luc3RhbGxlZCcg PT4gJ1RhYmxlIG5vdCBpbnN0YWxsZWQnLA0KCQkndGJsX3JlbW92ZWQnID0+ICdUYWJsZSBy ZW1vdmVkJywNCgkJJ3RibF9ub3RfcmVtb3ZlZCcgPT4gJ1RhYmxlIG5vdCByZW1vdmVkJywN CgkJJ3RleHRpbGUnID0+ICdUZXh0aWxlOiAnLA0KCQkndGV4dGlsZV9kZXNjJyA9PiAnRGVz Y3JpcHRpb24nLA0KCQkndGV4dGlsZV90aXRsZScgPT4gJ1RpdGxlJywNCgkJJ3VuZmVhdHVy ZV9jb25maXJtJyA9PiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGFy dGljbGUgZnJvbSB0aGUgZmVhdHVyZWQgbGlzdD8nLA0KCQkndW5sYWJlbGxlZCcgPT4gJ1t1 bmxhYmVsbGVkXScsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7 DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdz IjtzOjE6IjIiO3M6NDoiaGVscCI7czoyMTEwNDoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxo MT5zbWRfZmVhdHVyZWQ8L2gxPgoKCTxwPlB1bGwgb25lIG9yIG1vcmUgYXJ0aWNsZXMgb3V0 IG9mIHRoZSByZWd1bGFyIGFydGljbGUgZmxvdyBhbmQgcGltcCB0aGVtICYjODIxMjsgcGVy aGFwcyBvbiBhIHNlY3Rpb24gbGFuZGluZyBwYWdlIG9yIHlvdXIgaG9tZSBwYWdlLjwvcD4K Cgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+T25lLWNsaWNrIHNlbGVjdGlvbiBv ZiBhcnRpY2xlcyB0byBmZWF0dXJlPC9saT4KCQk8bGk+TGFiZWwgeW91ciBmZWF0dXJlZCBh cnRpY2xlcywgYWxsb3dpbmcgeW91IHRvIGdyb3VwIHRoZW0gaW50byBhcmVhcyBsaWtlIEZl YXR1cmVkLCBUZWFzZXJzLCBldGM8L2xpPgoJCTxsaT5BZGQgYW4gb3B0aW9uYWwgdGl0bGUv ZGVzY3JpcHRpb24gdG8gZWFjaCBhcnRpY2xlIHNvIHlvdSBjYW4gdXNlIHRoYXQgYXMgY29w eSwgaW5zdGVhZCBvZiBzb21ldGhpbmcgZnJvbSB0aGUgYXJ0aWNsZSBpdHNlbGYgKHN1cHBv cnRzIFRleHRpbGUgYW5kIHNvbWUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFn cyk8L2xpPgoJCTxsaT5TZWFyY2ggeW91ciBmZWF0dXJlZCBhcnRpY2xlcyBieSBuYW1lIG9y IGxhYmVsOyBmaWx0ZXJpbmcgaW4gcmVhbC10aW1lIGlmIHlvdSB3aXNoPC9saT4KCQk8bGk+ SGlkZGVuIHByZWYgYWxsb3dzIHByZS1maWx0ZXJpbmcgYnkgYW4gYWRtaW5pc3RyYXRvciBz byBvbmx5IGFydGljbGVzIGZyb20gY2VydGFpbiBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlIGZv ciBwaW1wYWdlPC9saT4KCQk8bGk+RGlzcGxheSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmZWF0 dXJlZCBhcnRpY2xlcyB1c2luZyByZWd1bGFyIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IGFydGljbGUgdGFnczwvbGk+CgkJPGxpPktlZXBzIHRyYWNrIG9mIHdoaWNoIGFydGlj bGVzIGhhdmUgYmVlbiBzZWVuIGFscmVhZHkgb24gdGhlIHBhZ2Ugc28gbGF0ZXIgZmVhdHVy ZWQgKG9yIHVuZmVhdHVyZWQpIGFydGljbGVzIGFyZW4mIzgyMTc7dCBkdXBsaWNhdGVkPC9s aT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIENyZWRpdHM8L2gyPgoKCTxwPjxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT48L3A+CgoJPGgy Pkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0 YW50Ij5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjIuMCsgKDQuMy4wKyByZWNvbW1lbmRlZCk8 L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTE3NC9zbWRfZmVhdHVyZWQiPnRleHRwYXR0 ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ci PnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwg YW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMzOTM4Ij5mb3J1bSB0aHJlYWQ8 L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVy d2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5XaGVuIHlvdSBpbnN0YWxsIHRoZSBwbHVn aW4sIHRoZSBuZWNlc3NhcnkgdGFibGUgaXMgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgZm9y IHlvdS4gVGhlcmUmIzgyMTc7cyBjdXJyZW50bHkgbm8gZmFjaWxpdHkgZm9yIHJlbW92aW5n IGl0IGR1cmluZyBwbHVnaW4gb3BlcmF0aW9uLCBidXQgaXQgd2lsbCBiZSBkZWxldGVkIGlm IHRoZSBwbHVnaW4gaXMgZGVsZXRlZCBmcm9tIHlvdXIgc3lzdGVtLjwvcD4KCgk8cD5UbyB1 bmluc3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBmcm9tIHRoZSA8ZW0+QWRtaW4t Jmd0O1BsdWdpbnM8L2VtPiBwYWdlLjwvcD4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5VbmRl ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjIuMCwgaWYgeW91IGNoYW5nZSBh bnkgb2YgdGhlIHByZWZzIGFuZCBzYXZlIHRoZW0sIHlvdSBuZWVkIHRvIHJlbG9hZCB0aGUg cGx1Z2luIHRhYiAoanVzdCBjbGljayBpdCkgdG8gYWN0dWFsbHkgc2VlIHRoZW0gdGFrZSBl ZmZlY3QuIFRoaXMgc2l0dWF0aW9uIGlzIGZpeGVkIHVuZGVyIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IDQuMy4wLjwvcD4KCgk8aDI+Q29uZmlndXJpbmcgZmVhdHVyZWQgYXJ0 aWNsZXM8L2gyPgoKCTxwPlZpc2l0IHRoZSA8ZW0+Q29udGVudC0mZ3Q7RmVhdHVyZWQgYXJ0 aWNsZXM8L2VtPiB0YWIuIEEgbGlzdCBvZiBhbGwgYXJ0aWNsZXMgKGZyb20gdGhlIGFkbWlu LXNlbGVjdGVkIHNlY3Rpb25zKSBhcmUgcHJlc2VudGVkIGluIGEgZ3JpZC48L3A+CgoJPGgz PlRvIGZlYXR1cmUgYW4gYXJ0aWNsZTwvaDM+CgoJPHA+Q2xpY2sgaXRzIG5hbWUuIEl0IHdp bGwgYmUgaGlnaGxpZ2h0ZWQgYW5kIGFuIDxjb2RlPltFZGl0XTwvY29kZT4gYnV0dG9uIGFw cGVhcnMgYmVzaWRlIGl0LiBJZiB5b3UgY2hvb3NlIG5vdCB0byBlZGl0IHRoZSBhcnRpY2xl IGluZm9ybWF0aW9uLCBpdCB3aWxsIGJlIGZlYXR1cmVkIGJ1dCB1bmxhYmVsbGVkLjwvcD4K Cgk8cD5DbGlja2luZyA8Y29kZT5bRWRpdF08L2NvZGU+IHdpbGwgZGlzcGxheSB0aHJlZSBp bnB1dCBib3hlczo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPkxhYmVsPC9zdHJvbmc+IDog YWxsb3dzIHlvdSB0byBsYWJlbCAoZ3JvdXApIHRoZSBhcnRpY2xlIHdpdGggb3RoZXJzIG9m IGEgc2ltaWxhciBmZWF0dXJlZCBzdGF0dXMuIEZvciBleGFtcGxlLCB5b3UgY291bGQgbGFi ZWwgc29tZSBhcnRpY2xlcyB0byBnbyBpbiBhICYjODIxNjt0ZWFzZXJzJiM4MjE3OyBibG9j ayBvbiB5b3VyIGhvbWUgcGFnZSBieSBsYWJlbGxpbmcgZWFjaCBwb3RlbnRpYWwgYXJ0aWNs ZSB3aXRoIDxjb2RlPlRlYXNlcjwvY29kZT4uIEJlIGNhcmVmdWw6IDxzdHJvbmc+bGFiZWxz IGFyZSBjYXNlIHNlbnNpdGl2ZTwvc3Ryb25nPi4gVG8gaGVscCwgeW91IG1heSBjaG9vc2Ug YSBsYWJlbCBmcm9tIHRoZSBkcm9wZG93biBsaXN0IG9mIGFsbCBjdXJyZW50bHkgZGVmaW5l ZCBsYWJlbHM8L2xpPgoJCTxsaT48c3Ryb25nPlRpdGxlPC9zdHJvbmc+IDogYWxsb3dzIHlv dSB0byBzdG9yZSBzb21lIFRleHRpbGUtYXdhcmUgdGl0bGUgcmVsYXRlZCB0byB0aGUgYXJ0 aWNsZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYXJ0aWNsZSYjODIxNztzIGFjdHVh bCBUaXRsZSBhbmQgY2FuIGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlIHlvdSBzZWUgZml0PC9s aT4KCQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IGFsbG93cyB5b3UgdG8g c3RvcmUgc29tZSBUZXh0aWxlLWF3YXJlIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gYWJvdXQg dGhlIGFydGljbGUuIFRoaXMgY291bGQgc2ltcGx5IGJlIGFkZGl0aW9uYWwgaW5mb3JtYXRp b24gZm9yIHlvdXIgb3duIHVzZSwgb3Igc29tZSBjb3B5IHRoYXQgeW91IG1heSB3aXNoIHRv IGRpc3BsYXkgaW4geW91ciB0ZWFzZXJzIGJsb2NrIHRvIGVudGljZSBwZW9wbGUgdG8gcmVh ZCB0aGUgYXJ0aWNsZS4gSXQgY2FuIGJlIGFzIHNpbXBsZSBvciBhcyBjb21wbGV4IGFzIHlv dSBsaWtlIGFuZCBjYW4gY29udGFpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0 YWdzIChpZiB0aGV5IG1ha2Ugc2Vuc2UgdG8gdXNlIGF0IHRoYXQgcG9pbnQgJiM4MjEyOyBh cnRpY2xlIHRhZ3MgY2Fubm90IGJlIHVzZWQsIGZvciBleGFtcGxlLCBidXQgPGNvZGU+Jmx0 O3R4cDpzaXRlX3VybCAvJmd0OzwvY29kZT4gY2FuKTwvbGk+Cgk8L3VsPgoKCTxwPldoZW4g eW91JiM4MjE3O3JlIGhhcHB5IHdpdGggeW91ciBjYXRlZ29yaXNhdGlvbiBhbmQvb3IgZGVz Y3JpcHRpb24gdGV4dCwgaGl0IFNhdmUgdG8gc3RvcmUgaXQuIFlvdSBjYW4gZWRpdCB0aGUg aW5mb3JtYXRpb24gYXQgYW55IHRpbWUgYnkgY2xpY2tpbmcgdGhlIGFwcHJvcHJpYXRlIDxj b2RlPltFZGl0XTwvY29kZT4gYnV0dG9uIGZyb20gdGhlIGZlYXR1cmVkIGFydGljbGUgbGlz dC48L3A+CgoJPGgzPlRvIHVuZmVhdHVyZSBhbiBhcnRpY2xlPC9oMz4KCgk8cD5DbGljayBp dHMgbmFtZSBhZ2Fpbi4gV2hlbiB5b3UgY29uZmlybSB0aGF0IHlvdSBhcmUgc3VyZSwgdGhl IGFydGljbGUmIzgyMTc7cyBsYWJlbCBhbmQgZGVzY3JpcHRpb24gYXJlIGRlbGV0ZWQsIHNv IGJlIHN1cmUgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSB0aGVtLCBvciBoYXZlIGJhY2tl ZCB0aGUgaW5mb3JtYXRpb24gdXAgc29tZXdoZXJlLjwvcD4KCgk8aDM+RmluZGluZyBhcnRp Y2xlcyB0byBmZWF0dXJlPC9oMz4KCgk8cD5XaXRoIGxhcmdlIGFydGljbGUgbGlzdHMgaXQg Y2FuIGJlY29tZSBkaWZmaWN1bHQgdG8gZmluZCB0aGUgb25lIHlvdSB3YW50LiBBYm92ZSB0 aGUgZ3JpZCBpcyBhIGNvbnRyb2wgcGFuZWwuIENsaWNrIGl0IHRvIHJldmVhbCB0aGUgcGx1 Z2luIG9wdGlvbnMuICBPbiB0aGUgbGVmdCBpcyB0aGUgQXJ0aWNsZSBzZWFyY2ggYXJlYSBh bmQgb24gdGhlIHJpZ2h0IGFyZSB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLiBJZiB5b3UgYXJl IGluIDxlbT5EaXNwbGF5OiBBbGw8L2VtPiBtb2RlLCBzaW1wbHkgc3RhcnQgdHlwaW5nIGlu IHRoZSA8ZW0+QnkgbmFtZTwvZW0+IGJveCBhbmQgeW91ciBhcnRpY2xlIGxpc3Qgd2lsbCBi ZSByZWR1Y2VkIGFzIHlvdSB0eXBlIHRvIG9ubHkgdGhvc2UgdGhhdCBtYXRjaC4gVHlwZSBt dWx0aXBsZSB3b3JkcyB0byBmaW5kIGFydGljbGVzIHRoYXQgY29udGFpbiBhbnkgb2YgdGhl IGdpdmVuIHdvcmRzLiBUbyBxdWlja2x5IGNsZWFyIHRoZSBib3gsIGhpdCB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPkVTQzwvc3Bhbj5hcGUga2V5LjwvcD4KCgk8cD5BbHRlcm5hdGl2ZWx5 LCB5b3UgY2FuIHVzZSB0aGUgc2VsZWN0IGxpc3QgdG8gY2hvb3NlIGFsbCBhcnRpY2xlcyB3 aXRoIGEgcGFydGljdWxhciBsYWJlbC4gVGhlIGVtcHR5IGVudHJ5IGF0IHRoZSB0b3Agb2Yg dGhlIGxpc3QgbWVhbnMgJiM4MjIwO2FsbCBhcnRpY2xlcyYjODIyMTsuIElmIHlvdSBoYXZl IGZlYXR1cmVkIGFuIGFydGljbGUgYnV0IGRvbiYjODIxNzt0IHN1cHBseSBhIGxhYmVsIHlv dSBjYW4gZmlsdGVyIGl0IGJ5IGNob29zaW5nIHRoZSA8Y29kZT5bdW5sYWJlbGxlZF08L2Nv ZGU+IGl0ZW0gZnJvbSB0aGUgbGlzdC4gSWYgeW91IGhhdmUgbGFiZWxsZWQgYW55IGFydGlj bGVzLCBlYWNoIGxhYmVsIHlvdSBoYXZlIHN1cHBsaWVkIHdpbGwgYWxzbyBiZSBhbiBvcHRp b24gaW4gdGhlIGxpc3QuIFJlbWVtYmVyIHRoYXQgbGFiZWxzIGFyZSBjYXNlIHNlbnNpdGl2 ZS48L3A+CgoJPHA+Tm90ZSB0aGF0IGZpbHRlcmluZyBieSBuYW1lIG9yIGJ5IGxhYmVsIGFy ZSBtdXR1YWxseSBleGNsdXNpdmUgYWN0aW9uczogc2VsZWN0aW5nIHNvbWV0aGluZyBmcm9t IHRoZSBkcm9wZG93biB3aWxsIGNsZWFyIHRoZSB0ZXh0IGJveCwgYW5kIHR5cGluZyBzb21l dGhpbmcgaW4gdGhlIHRleHQgYm94IHdpbGwgcmVzZXQgdGhlIGRyb3Bkb3duLjwvcD4KCgk8 cD5Zb3VyIHNlYXJjaCBjcml0ZXJpYSBhcmUgcmVtZW1iZXJlZCBiZXR3ZWVuIGVkaXQvbGlz dCB2aWV3cyBzbyB5b3Ugd29uJiM4MjE3O3QgbG9zZSB5b3VyIHBsYWNlLiBJZiB5b3UgYXJl IGluIDxlbT5EaXNwbGF5OiBQYWdpbmF0ZWQ8L2VtPiBtb2RlLCB0aGUgc2VhcmNoIHdvcmtz IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGJ1dCB5b3UgaGF2ZSB0byBoaXQgRW50ZXIgb3Ig Y2xpY2sgPGVtPkdvPC9lbT4gdG8gc3VibWl0IHRoZSBzZWFyY2ggY3JpdGVyaWEuPC9wPgoK CTxoMz5QbHVnaW4gcHJlZmVyZW5jZXM8L2gzPgoKCTxwPlVzZXJzIG9mIHRoZSA8ZW0+RmVh dHVyZWQgYXJ0aWNsZXM8L2VtPiB0YWIgYWxzbyBoYXZlIGEgZmV3IHByZWZlcmVuY2VzIGF0 IHRoZWlyIGRpc3Bvc2FsIHdoaWNoIGNhbiBiZSBhbHRlcmVkIGF0IHdpbGw6PC9wPgoKCTxv bD4KCQk8bGk+PHN0cm9uZz5EaXNwbGF5PC9zdHJvbmc+IDogY2hvb3NlIHdoZXRoZXIgeW91 IHdpc2ggdG8gZGlzcGxheSBhbGwgYXJ0aWNsZXMgb24gb25lIHBhZ2UgKGFuZCB1c2UgdGhl IGxpdmUgc2VhcmNoIHRvIGZpbHRlciB0aGVtKSBvciBjaG9vc2UgYSBwYWdpbmF0ZWQgdmll dyAoYW5kIHVzZSB0aGUgdHJhZGl0aW9uYWwgc2VhcmNoKS4gVGhlIHRyYWRpdGlvbmFsIHNl YXJjaCBtaWdodCBiZSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsb3Qgb2YgYXJ0aWNsZXMgKG92 ZXIgMTAwMCkgYmVjYXVzZSB0aGUgbGl2ZSBzZWFyY2ggbWlnaHQgc2xvdyBkb3duIHNpZ25p ZmljYW50bHkuIE5vdGUgdGhhdCB3aGVuIHlvdSBzZWFyY2ggZm9yIHNvbWV0aGluZyBpbiBw YWdpbmF0ZWQgbW9kZSwgdGhlIHJlc3VsdHMgdGhlbXNlbHZlcyBhcmVuJiM4MjE3O3QgcGFn aW5hdGVkPC9saT4KCQk8bGk+PHN0cm9uZz5Tb3J0IGJ5PC9zdHJvbmc+IDogZGVmaW5lIHRo ZSBzb3J0IG9yZGVyIG9mIHRoZSBhcnRpY2xlIGxpc3Q8L2xpPgoJCTxsaT48c3Ryb25nPkJv eCBzaXplPC9zdHJvbmc+IDogc3BlY2lmeSB0aGUgPGNvZGU+d2lkdGg8L2NvZGU+IGFuZCA8 Y29kZT5oZWlnaHQ8L2NvZGU+IHZhbHVlcyBpbiBwaXhlbHMgb2YgZWFjaCBjZWxsIGluIHRo ZSBncmlkLiBEZWZhdWx0IGlzIDxjb2RlPjE1MHg0MDwvY29kZT48L2xpPgoJCTxsaT48c3Ry b25nPlRleHRpbGU8L3N0cm9uZz46IGNob29zZSB0aGUgaXRlbXMgdG8gd2hpY2ggeW91IHdp c2ggdG8gYXBwbHkgVGV4dGlsZSB3aGVuIHlvdSBFZGl0IGFuZCBTYXZlIGEgZmVhdHVyZWQg YXJ0aWNsZS4gPHN0cm9uZz5Ob3RlIHRoaXMgb25seSBhZmZlY3RzIGZlYXR1cmVkIGFydGlj bGVzIHNhdmVkIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkPC9zdHJvbmc+LiBUaHVzIGlmIHlv dSB3aXNoIHRvIGFwcGx5IGEgbmV3IFRleHRpbGUgc2V0dGluZyB0byBleGlzdGluZyBhcnRp Y2xlcyB5b3UgbmVlZCB0byB2aXNpdCBlYWNoIG9uZSBpbiB0dXJuIGJ5IGNsaWNraW5nIDxj b2RlPltFZGl0XTwvY29kZT4gYW5kIHRoZW4gPGVtPlNhdmU8L2VtPi48L2xpPgoJPC9vbD4K Cgk8cD5Zb3UgKGFzIGFkbWluaXN0cmF0b3IpIGNhbiBhbHNvIGFsdGVyIHRoZSBiZWhhdmlv dXIgb2YgdGhlIHBsdWdpbiBieSBjcmVhdGluZyBzb21lIGhpZGRlbiBwcmVmZXJlbmNlcyAo dGhlIHNtZF9wcmVmYWxpemVyIHBsdWdpbiBjYW4gaGVscCBoZXJlKS4gVGhlcmUgYXJlIHR3 byBwcmVmcyB5b3UgbWF5IGRlZmluZTo8L3A+CgoJPG9sPgoJCTxsaT48c3Ryb25nPnNtZF9m ZWF0dXJlZF9wcml2czwvc3Ryb25nPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcHJp diBsZXZlbCBudW1iZXJzIHRoYXQgY2FuIGFjY2VzcyB0aGUgPGVtPkZlYXR1cmVkIGFydGlj bGVzPC9lbT4gdGFiLiBEZWZhdWx0OiA8Y29kZT4xLDI8L2NvZGU+PC9saT4KCQk8bGk+PHN0 cm9uZz5zbWRfZmVhdHVyZWRfc2VjdGlvbl9saXN0PC9zdHJvbmc+OiBkZWZpbmUgYSBjb21t YS1zZXBhcmF0ZWQgbGlzdCBvZiBzZWN0aW9uIG5hbWVzLiBUaGVzZSB3aWxsIGJlIHRoZSBv bmx5IHNlY3Rpb25zIGZyb20gd2hpY2ggYXJ0aWNsZXMgYXJlIGFsbG93ZWQgdG8gYmUgZmVh dHVyZWQ8L2xpPgoJPC9vbD4KCgk8cD5JZiB1c2luZyBzbWRfcHJlZmFsaXplciB0byBjcmVh dGUgdGhlIHByZWZzLCBzZXQgdGhlIG5hbWUgYW5kIHZhbHVlIGFzIGFib3ZlIGFuZCB0aGVu IHNldCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcGFyYW1ldGVyczo8L3A+CgoJPHVsPgoJ CTxsaT48c3Ryb25nPnR5cGU8L3N0cm9uZz4gOiBoaWRkZW48L2xpPgoJCTxsaT48c3Ryb25n PmV2ZW50PC9zdHJvbmc+IDogc21kX2ZlYXR1cmVkPC9saT4KCQk8bGk+PHN0cm9uZz5pbnB1 dCBjb250cm9sPC9zdHJvbmc+IDogdGV4dF9pbnB1dDwvbGk+CgkJPGxpPjxzdHJvbmc+dXNl cjwvc3Ryb25nPiA6IC8gZW1wdHkgLzwvbGk+CgkJPGxpPjxzdHJvbmc+cG9zaXRpb248L3N0 cm9uZz46IDA8L2xpPgoJPC91bD4KCgk8aDI+RGlzcGxheWluZyBmZWF0dXJlZCBhcnRpY2xl czwvaDI+CgoJPHA+T25jZSB5b3UgaGF2ZSBjaG9zZW4geW91ciBmZWF0dXJlZCBhcnRpY2xl cywgeW91IG5lZWQgYSB3YXkgdG8gZGlzcGxheSB0aGVtOjwvcD4KCgk8aDM+PGNvZGU+Jmx0 O3R4cDpzbWRfZmVhdHVyZWQgLyZndDs8L2NvZGU+PC9oMz4KCgk8cD5BY3RzIGEgYml0IGxp a2UgdGhlIHN0YW5kYXJkIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0OzwvY29kZT4gdGFn IHRvIGRpc3BsYXkgZmVhdHVyZWQgYXJ0aWNsZXMuIEF0dHJpYnV0ZXM6PC9wPgoKCTx1bD4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsPC9zcGFuPiA6IGRpc3BsYXkgZmVhdHVy ZWQgYXJ0aWNsZXMgd2l0aCB0aGlzIGxhYmVsLiBTcGVjaWZ5IDxjb2RlPmxhYmVsPSZxdW90 OyZxdW90OzwvY29kZT4gdG8gZGlzcGxheSB1bmxhYmVsbGVkIGFydGljbGVzICh3aGljaCBh cmUgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gdGhlIHNhbWUgYXMgdW5mZWF0dXJlZCBhcnRpY2xl cykuIElmIHRoaXMgYXR0cmlidXRlIGlzIG9taXR0ZWQsIGFsbCBmZWF0dXJlZCBhcnRpY2xl cyAmIzgyMTI7IGlycmVzcGVjdGl2ZSBvZiBsYWJlbCAmIzgyMTI7IHdpbGwgYmUgZGlzcGxh eWVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsdGFnPC9zcGFuPiA6IHRo ZSAoWClIVE1MIHRhZyAmIzgyMTI7IHdpdGhvdXQgYnJhY2tldHMgJiM4MjEyOyB0byBhcHBs eSB0byB0aGUgbGFiZWwgYXR0cmlidXRlLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZp ZWQgdGhlIGxhYmVsIGl0c2VsZiBpcyBkaXNwbGF5ZWQgYXQgdGhlIGhlYWQgb2YgeW91ciBm ZWF0dXJlZCBhcnRpY2xlIGxpc3QuIElmIHlvdSB3aXNoIHRvIGRpc3BsYXkgdW5sYWJlbGxl ZCBhcnRpY2xlcyB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSA8Y29kZT51bmxhYmVsPC9jb2Rl PiBhdHRyaWJ1dGUgb3IgeW91JiM4MjE3O2xsIHNlZSBubyBsYWJlbC4gTm90ZSB0aGF0IHRo aXMgdGFnIGRpZmZlcnMgZnJvbSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g Y29udmVudGlvbjogeW91IHdpbGwgPGVtPm9ubHk8L2VtPiBzZWUgdGhlIGxhYmVsIGlmIHlv dSBzcGVjaWZ5IHRoZSA8Y29kZT5sYWJlbHRhZzwvY29kZT4uIFlvdSBjYW4gZGlzcGxheSB0 aGUgbGFiZWwgaW5zaWRlIHlvdXIgYXJ0aWNsZXMgdXNpbmcgdGhlIDxjb2RlPiZsdDt0eHA6 ZmVhdHVyZWRfaW5mbyAvJmd0OzwvY29kZT4gdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPnVubGFiZWw8L3NwYW4+IDogd2hlbiB1c2luZyA8Y29kZT5sYWJlbD0mcXVvdDsm cXVvdDs8L2NvZGU+ICh0byBzaG93IHVubGFiZWxsZWQgYXJ0aWNsZXMpIHRoaXMgYXR0cmli dXRlIHNwZWNpZmllcyB0aGUgbGFiZWwgdG8gdXNlIGluc2lkZSB0aGUgPGNvZGU+bGFiZWx0 YWc8L2NvZGU+LiBEZWZhdWx0OiAmIzgyMjA7RmVhdHVyZWQmIzgyMjE7PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+IDogbGltaXQgdGhlIGFydGljbGVzIHRv IHRob3NlIGluIHRoZSA8Y29kZT5wYXN0PC9jb2RlPiwgdGhlIDxjb2RlPmZ1dHVyZTwvY29k ZT4gb3IgPGNvZGU+YW55PC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+cGFzdDwvY29kZT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdHVzPC9zcGFuPiA6IG9ubHkgZGlzcGxh eSBhcnRpY2xlcyBvZiB0aGUgZ2l2ZW4gc3RhdHVzIG51bWJlcihzKS4gRGVmYXVsdDogPGNv ZGU+NCw1PC9jb2RlPiAoYS5rLmEuIGxpdmUgYW5kIHN0aWNreSkuIE5vdGUgdGhhdCB0aGlz IGF0dHJpYnV0ZSBtYXkgYmUgaWdub3JlZCBpZiB5b3UgYXJlIHRyeWluZyB0byB2aWV3IGFu eXRoaW5nIG90aGVyIGxpdmUgYW5kIHN0aWNreSBhcnRpY2xlcyAoc2luY2UgYXJ0aWNsZV9j dXN0b20gZG9lcyB0aGUgc2FtZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2Vj dGlvbjwvc3Bhbj4gOiBvbmx5IGRpc3BsYXkgYXJ0aWNsZXMgZnJvbSB0aGUgZ2l2ZW4gc2Vj dGlvbihzKS4gSWYgdGhlIHNlY3Rpb24gbGlzdCBpcyByZXN0cmljdGVkIHVzaW5nIHRoZSBw bHVnaW4gcHJlZmVyZW5jZXMsIHRoZSBzZWN0aW9ucyB1c2VkIGhlcmUgbXVzdCBhbHNvIGJl IGluIHRoYXQgbGlzdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFu PiA6IHVzZSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm0gdG8gZGlz cGxheSBlYWNoIGFydGljbGUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGNvbnRhaW5lciBjb250 ZW50czwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5saW1pdDwvc3Bhbj4gOiBtYXhp bXVtIG51bWJlciBvZiBmZWF0dXJlZCBhcnRpY2xlcyB0byBkaXNwbGF5LiBEZWZhdWx0OiAx MDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zb3J0PC9zcGFuPiA6IG9yZGVyIHRo ZSBmZWF0dXJlZCBhcnRpY2xlcyBieSA8Y29kZT5pZDwvY29kZT4sIDxjb2RlPmxhYmVsPC9j b2RlPiwgPGNvZGU+VGl0bGU8L2NvZGU+LCA8Y29kZT5Qb3N0ZWQ8L2NvZGU+LCBhbmQgc28g b24uIFRoZSBzYW1lIGxpc3QgYXZhaWxhYmxlIGZvciB0aGUgPGNvZGU+Jmx0O3R4cDphcnRp Y2xlIC8mZ3Q7PC9jb2RlPiB0YWcgYXJlIHVzYWJsZSBoZXJlLiBBZGQgPGNvZGU+YXNjPC9j b2RlPiBvciA8Y29kZT5kZXNjPC9jb2RlPiB0byB0aGUgYXR0cmlidXRlIHRvIGFsdGVyIHRo ZSBkaXJlY3Rpb24gb2YgdGhlIHNvcnQuIFlvdSBtYXkgYWxzbyB1c2UgPGNvZGU+cmFuZCgp PC9jb2RlPiB0byBzb3J0IHRoZSBhcnRpY2xlcyByYW5kb21seTwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyAmIzgyMTI7 IHdpdGhvdXQgYnJhY2tldHMgJiM4MjEyOyB0byB3cmFwIGFyb3VuZCB0aGUgbGlzdCBvZiBm ZWF0dXJlZCBhcnRpY2xlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwv c3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgJiM4MjEyOyB3aXRob3V0IGJyYWNrZXRzICYjODIx Mjsgb3IgdGV4dCB0byBwdXQgYmV0d2VlbiBlYWNoIGFydGljbGU8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWc8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+aHRtbF9pZDwvc3Bhbj4gOiBhIDxzcGFuIGNsYXNzPSJj YXBzIj5ET008L3NwYW4+IElEIHRvIGFwcGx5IHRvIHRoZSB3cmFwdGFnPC9saT4KCTwvdWw+ CgoJPHA+WW91IG1heSB1c2UgdGhlIHRhZyBhcyBhIGNvbnRhaW5lciBhbmQgYW55IHRhZ3Mg eW91IHNwZWNpZnkgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBmZWF0dXJlZCBhcnRpY2xl LiBZb3UgY2FuIHVzZSBzdGFuZGFyZCBhcnRpY2xlIHRhZ3Mgc3VjaCBhcyA8Y29kZT4mbHQ7 dHhwOnRpdGxlIC8mZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7PC9j b2RlPiwgPGNvZGU+Jmx0O3R4cDpwZXJtbGluayAvJmd0OzwvY29kZT4sIGV0YywgYWx0aG91 Z2ggc29tZSBhcnRpY2xlcyBhcmUgbm90IGRpc3BsYXlhYmxlIGJ5IFRleHRwYXR0ZXJuIChl LmcuIGhpZGRlbiwgcGVuZGluZyBhbmQgZHJhZnQgYXJ0aWNsZXMpLjwvcD4KCgk8cCBjbGFz cz0iaW1wb3J0YW50Ij5Ob3RlIHRoYXQgeW91IGNhbiYjODIxNzt0IHVzZSA8Y29kZT4mbHQ7 dHhwOnNtZF9mZWF0dXJlZCZndDs8L2NvZGU+IGluc2lkZSBhbiBhcnRpY2xlIG9yIGFuIEFy dGljbGUgRm9ybS4gRG9pbmcgc28gd2lsbCB0cmlnZ2VyIGEgd2FybmluZyBiZWNhdXNlIGl0 JiM4MjE3O3MgdGhlIHNhbWUgYXMgcHV0dGluZyBhbm90aGVyIGFydGljbGUgdGFnIGluc2lk ZSBhbiBhcnRpY2xlLiBVc2UgdGhlIHRhZyBvbmx5IGluIFBhZ2VzLCBvciBpbiBhIEZvcm0g dGhhdCBpcyBuZXZlciBkaXJlY3RseSB1c2VkIHRvIGRpc3BsYXkgYXJ0aWNsZSBjb250ZW50 LjwvcD4KCgk8cD5FYWNoIHRpbWUgeW91IHVzZSA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJl ZCAvJmd0OzwvY29kZT4gaXQgbWFrZXMgYSBub3RlIG9mIHRoZSBhcnRpY2xlcyBpdCBoYXMg ZGlzcGxheWVkIGFuZCB3aWxsIG5vdCBkdXBsaWNhdGUgYXJ0aWNsZXMgaW4gbGF0ZXIgdGFn cy48L3A+CgoJPGgzPjxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1cmVkX2luZm8gLyZndDs8L2Nv ZGU+PC9oMz4KCgk8cD5BbGxvd3MgeW91IHRvIGRpc3BsYXkgdGhlIGxhYmVsIG9yIHRoZSBk ZXNjcmlwdGlvbiB3aXRoaW4geW91ciA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0 OzwvY29kZT4gIGZvcm0vY29udGFpbmVyLjwvcD4KCgk8cD5IYXMgb25lIGF0dHJpYnV0ZTo8 L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXRlbTwvc3Bhbj4gOiB0aGUg dGhpbmcgeW91IHdhbnQgdG8gZGlzcGxheS4gQ2hvb3NlIGZyb206Cgk8dWw+CgkJPGxpPjxz dHJvbmc+bGFiZWw8L3N0cm9uZz46IHRoZSBsYWJlbDwvbGk+CgkJPGxpPjxzdHJvbmc+dGl0 bGU8L3N0cm9uZz46IHRoZSAocG9zc2libHkgVGV4dGlsZS1wcm9jZXNzZWQpIHRpdGxlPC9s aT4KCQk8bGk+PHN0cm9uZz5kZXNjcmlwdGlvbjwvc3Ryb25nPjogdGhlIChwb3NzaWJseSBU ZXh0aWxlLXByb2Nlc3NlZCkgZGVzY3JpcHRpb248L2xpPgoJPC91bD48L2xpPgoJPC91bD4K Cgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfdW5mZWF0dXJlZCAvJmd0OzwvY29kZT48L2gzPgoK CTxwPlVzZSB0aGlzIHRhZyBpZiB5b3Ugd2lzaCB0byBzaG93IHRoZSAmIzgyMTY7cmVtYWlu aW5nJiM4MjE3OyBhcnRpY2xlcyAmIzgyMTI7IGkuZS4gb25lcyBub3QgYWxyZWFkeSBkaXNw bGF5ZWQgYnkgYW55IHByZWNlZGluZyA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0 OzwvY29kZT4gdGFncy4gSXQgYWN0cyB2ZXJ5IG11Y2ggbGlrZSB0aGUgYnVpbHQtaW4gYXJ0 aWNsZV9jdXN0b20gdGFnLCBhbmQgdGFrZXMgYWxsIHRoZSBzYW1lIGF0dHJpYnV0ZXMuIFRo dXMsIGJ5IGRlZmF1bHQsIGl0cyBjb250ZXh0IGlzICYjODIyMDthbnkgYXJ0aWNsZXMgZnJv bSBhbnkgc2VjdGlvbiBkZWZpbmVkIGluIHRoZSBzbWRfZmVhdHVyZWQgcGx1Z2luIHRoYXQg aGF2ZSBub3QgYmVlbiBkaXNwbGF5ZWQgYWxyZWFkeSYjODIyMTsuIFlvdSBjYW4gcmVkdWNl IHRoaXMgbGlzdCBieSA8Y29kZT5zZWN0aW9uPC9jb2RlPiwgPGNvZGU+dGltZTwvY29kZT4g b3IgPGNvZGU+c3RhdHVzPC9jb2RlPi4gVW5saWtlIGFydGljbGVfY3VzdG9tLCA8Y29kZT4m bHQ7dHhwOnNtZF91bmZlYXR1cmVkIC8mZ3Q7PC9jb2RlPiBzdXBwb3J0cyBwYWdpbmF0aW9u LjwvcD4KCgk8cD5Ob3Rlczo8L3A+CgoJPHVsPgoJCTxsaT50byB1c2UgcGFnaW5hdGlvbiwg cmVtb3ZlIGFueSBhcnRpY2xlIHRhZyBhbmQgYWRkIHRoZSA8Y29kZT5wYWdlYnk8L2NvZGU+ IGF0dHJpYnV0ZSAoYW5kIG9mIGNvdXJzZSA8Y29kZT5saW1pdDwvY29kZT4pIHRvIHRoZSBz bWRfdW5mZWF0dXJlZCB0YWcuIE5vdGUgeW91IG1heSBnZXQgYSB3YXJuaW5nIGFib3V0IG5v IGFydGljbGUgdGFnIG9uIHRoZSBwYWdlLCBidXQgeW91IGNhbiBpZ25vcmUgaXQ8L2xpPgoJ CTxsaT5pZiB5b3Ugd2lzaCB0aGUgPGNvZGU+cGFnZWJ5PC9jb2RlPiBhdHRyaWJ1dGUgdG8g dHJhY2sgYW55IDxjb2RlPmxpbWl0PC9jb2RlPiB5b3Ugc2V0LCBzcGVjaWZ5IDxjb2RlPnBh Z2VieT0mcXVvdDtsaW1pdCZxdW90OzwvY29kZT48L2xpPgoJCTxsaT5pZiB5b3UgaGF2ZSBh bnkgb3RoZXIgcGFnaW5nIGluIGVmZmVjdCBvbiB0aGUgcGFnZSwgdW5mZWF0dXJlZCBwYWdp bmF0aW9uIHdpbGwgYmUgaWdub3JlZDwvbGk+Cgk8L3VsPgoKCTxoMz48Y29kZT4mbHQ7dHhw OnNtZF9pZl9mZWF0dXJlZCZndDs8L2NvZGU+PC9oMz4KCgk8cD5UaGlzIHRhZyBhbGxvd3Mg eW91IHRvIGRldGVjdCBpZiB0aGUgY3VycmVudCAoaW5kaXZpZHVhbCkgYXJ0aWNsZSBpcyBm ZWF0dXJlZCBhbmQvb3IgaGFzIGEgcGFydGljdWxhciBsYWJlbC4gWW91IG1heSBhbHNvIHVz ZSB0aGlzIG91dHNpZGUgYW4gYXJ0aWNsZSBjb250ZXh0IGJ5IHN1cHBseWluZyBhIGxpc3Qg b2YgYXJ0aWNsZSBJRHMuPC9wPgoKCTxwPkhhcyB0d28gYXR0cmlidXRlczo8L3A+CgoJPHVs PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aWQ8L3NwYW4+IDogbGlzdCBvZiBhcnRpY2xl IElEcyBvZiB3aGljaCB5b3Ugd2lzaCB0byBjaGVjayB0aGUgZmVhdHVyZWQgc3RhdHVzLiBJ ZiBvbWl0dGVkLCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBhcnRpY2xlIChpZiB1c2VkIGlu c2lkZSBhIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0OzwvY29kZT4gY29udGFpbmVyL2Zv cm0pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsPC9zcGFuPiA6IGxpc3Qg b2YgbGFiZWxzIHRvIGNvbXBhcmUgdGhlIGdpdmVuIElEKHMpIHdpdGguIFNwZWNpZnkgPGNv ZGU+bGFiZWw9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0byBjaGVjayBmb3IgdW5sYWJlbGxlZCBh cnRpY2xlcywgb3IgdXNlIGFuIGVtcHR5IGl0ZW0gaWYgc3BlY2lmeWluZyBhIGxpc3QsIGUu Zy4gPGNvZGU+bGFiZWw9JnF1b3Q7LCBGZWF0dXJlZCwgVGVhc2VyJnF1b3Q7PC9jb2RlPi4g UmVtZW1iZXIgdGhhdCBsYWJlbHMgYXJlIGNhc2Ugc2Vuc2l0aXZlPC9saT4KCTwvdWw+CgoJ PHA+SWYgdGhlIGFydGljbGUgbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIGxhYmVscyB0aGUg Y29udGFpbmVkIGNvbnRlbnQgd2lsbCBiZSBleGVjdXRlZC4gSWYgbm8gbGFiZWwgaXMgZ2l2 ZW4gdGhlIGFydGljbGUocykgd2lsbCBiZSBjaGVja2VkIGlmIHRoZXkgYXJlIGZlYXR1cmVk LCBpcnJlc3BlY3RpdmUgb2YgbGFiZWwuPC9wPgoKCTxoMj5FeGFtcGxlczwvaDI+CgoJPGgz IGlkPSJlZzEiPkV4YW1wbGUgMTogQ29tcGxldGUgZGlyZWN0b3J5IG9mIGZlYXR1cmVkIGFy dGljbGVzPC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZs dDt0eHA6c21kX2ZlYXR1cmVkIGxhYmVsdGFnPSZxdW90O2gyJnF1b3Q7IGxpbWl0PSZxdW90 OzIwJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDtkbCZxdW90OyBzb3J0PSZxdW90O2xhYmVs JnF1b3Q7Jmd0OwogICAmbHQ7dHhwOmlmX2RpZmZlcmVudCZndDsKICAgICAgJmx0O2gyJmd0 OyZsdDt0eHA6c21kX2ZlYXR1cmVkX2luZm8gaXRlbT0mcXVvdDtsYWJlbCZxdW90OyAvJmd0 OyZsdDsvaDImZ3Q7CiAgICZsdDsvdHhwOmlmX2RpZmZlcmVudCZndDsKICAgJmx0O2R0Jmd0 OwogICAgICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4 cDpwZXJtbGluayZndDsKICAgJmx0Oy9kdCZndDsKICAgJmx0O2RkJmd0OwogICAgICAmbHQ7 dHhwOmV4Y2VycHQgLyZndDsKICAgJmx0Oy9kZCZndDsKJmx0Oy90eHA6c21kX2ZlYXR1cmVk Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjogT25lIGZlYXR1 cmVkIGFydGljbGUgYW5kIHNpeCB0ZWFzZXJzIG9uIHRoZSBob21lIHBhZ2U8L2gzPgoKCTxw PlNlbGVjdCBhbiBhcnRpY2xlIGFuZCBsYWJlbCBpdCA8Y29kZT5mZWF0dXJlPC9jb2RlPi4g U2VsZWN0IHNpeCBvdGhlcnMgYW5kIGxhYmVsIHRoZW0gPGNvZGU+dGVhc2VyczwvY29kZT4u IEFkZCBzb21lIGRlc2NyaXB0aW9uIHRleHQgdG8geW91ciB0ZWFzZXIgYXJ0aWNsZXMuPC9w PgoKCTxwPkluIHlvdXIgZGVmYXVsdCBQYWdlLCBwdXQgdGhpczo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJl bD0mcXVvdDtmZWF0dXJlJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDtkaXYmcXVvdDsgaHRt bF9pZD0mcXVvdDttYWluX2ZlYXR1cmUmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsm Z3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAmbHQ7dHhw OmFydGljbGVfaW1hZ2UgY2xhc3M9JnF1b3Q7ZmVhdF9pbWFnZSZxdW90OyAvJmd0OwogICAm bHQ7cCBjbGFzcz0mcXVvdDtsZWFkaW4mcXVvdDsmZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7 Jmx0Oy9wJmd0OwombHQ7L3R4cDpzbWRfZmVhdHVyZWQmZ3Q7CjwvY29kZT48L3ByZT4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2ZlYXR1 cmVkIGxhYmVsPSZxdW90O3RlYXNlcnMmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O3VsJnF1 b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7IGh0bWxfaWQ9JnF1b3Q7dGVhc2VyX2Jsb2NrJnF1 b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7 L3R4cDpwZXJtbGluayZndDsKICAgJmx0O3AgY2xhc3M9JnF1b3Q7bGVhZGluJnF1b3Q7Jmd0 OyZsdDt0eHA6ZXhjZXJwdCAvJmd0OyZsdDsvcCZndDsKJmx0Oy90eHA6c21kX2ZlYXR1cmVk Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91IHdhbnRlZCB0byBoYXZlIHNvbWUgb3Ro ZXIgYXJ0aWNsZXMgYmVuZWF0aCB0aG9zZSwgYnV0IGRpZG4mIzgyMTc7dCB3YW50IGFueSBk dXBsaWNhdGVzIHRvIGFwcGVhciB5b3UgY291bGQgdXNlOjwvcD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3VuZmVhdHVyZWQgZm9ybT0m cXVvdDtteV9saXN0JnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVnMyI+ RXhhbXBsZSAzOiBQZXItc2VjdGlvbiBsYW5kaW5nIHBhZ2UgZmVhdHVyZWQgYXJ0aWNsZXM8 L2gzPgoKCTxwPklmIHlvdSBoYWQgYSB6b28gc2l0ZSB3aXRoIGEgc2VjdGlvbiBmb3IgcHJp bWF0ZXMsIGEgc2VjdGlvbiBmb3IgbWFtbWFscyBhbmQgYSBzZWN0aW9uIGZvciByZXB0aWxl cywgd2hlbiB5b3Ugc2V0IHVwIHlvdXIgZmVhdHVyZWQgYXJ0aWNsZSBsaXN0IGRlZmluZSB0 aGVpciBuYW1lcyBsaWtlIHRoaXM6PC9wPgoKCTx1bD4KCQk8bGk+RmVhdHVyZWQgcHJpbWF0 ZXM8L2xpPgoJCTxsaT5GZWF0dXJlZCBtYW1tYWxzPC9saT4KCQk8bGk+RmVhdHVyZWQgcmVw dGlsZXM8L2xpPgoJPC91bD4KCgk8cD5PbiB5b3VyIHNlY3Rpb24gbGFuZGluZyBwYWdlIHRl bXBsYXRlIHlvdSBjYW4gdGhlbiBkbyB0aGlzIHRvIGRpc3BsYXkgZm91ciBhcnRpY2xlcyBm cm9tIHRoZSByZWxldmFudCAoY3VycmVudCkgc2VjdGlvbjo8L3A+Cgo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aDImZ3Q7TG9vayB3aG8mIzM5O3MgaGVy ZTombHQ7L2gyJmd0OwombHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJlbD0mIzM5O0ZlYXR1cmVk ICZsdDt0eHA6c2VjdGlvbiAvJmd0OyYjMzk7CiAgICAgc2VjdGlvbj0mIzM5OyZsdDt0eHA6 c2VjdGlvbiAvJmd0OyYjMzk7IGxpbWl0PSZxdW90OzQmcXVvdDsKICAgICB3cmFwdGFnPSZx dW90O2RpdiZxdW90OyBodG1sX2lkPSZxdW90O2ZlYXRfYmxvY2smcXVvdDsmZ3Q7CiAgICZs dDtkaXYgY2xhc3M9JnF1b3Q7cGltcGVkX2FydGljbGUmcXVvdDsmZ3Q7CiAgICAgICZsdDt0 eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0 OwogICAgICAmbHQ7dHhwOnNtZF9mZWF0dXJlZF9pbmZvIGl0ZW09JnF1b3Q7ZGVzY3JpcHRp b24mcXVvdDsgLyZndDsKICAgJmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9mZWF0dXJlZCZn dDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWc0Ij5FeGFtcGxlIDQ6IENvbmRpdGlvbmFs IGNoZWNrIGZvciBmZWF0dXJlZC1uZXNzPC9oMz4KCgk8cD5JZiBhIHNpdGUgdmlzaXRvciBo YXMgbmF2aWdhdGVkIGF3YXkgZnJvbSB5b3VyIGZyb250IHBhZ2UgYW5kIGlzIHZpZXdpbmcg YW4gYXJ0aWNsZSwgeW91IG1heSB3aXNoIHRvIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGUgY3Vy cmVudCBhcnRpY2xlIGlzIGEgZmVhdHVyZWQgcHJvZHVjdC4gU28sIHNvbWV3aGVyZSBpbnNp ZGUgeW91IGFydGljbGUgZm9ybSBhZGQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfZmVhdHVyZWQmZ3Q7CiAgICZsdDtwIGNs YXNzPSZxdW90O2hpbGlnaHQmcXVvdDsmZ3Q7RkVBVFVSRUQgUFJPRFVDVCZsdDsvcCZndDsK Jmx0Oy90eHA6c21kX2lmX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+T3IgaWYg eW91IHdhbnRlZCB0byBvbmx5IGhpZ2hsaWdodCB0aGUgYXJ0aWNsZSBpZiBpdCB3YXMgYSBm ZWF0dXJlZCBvciBvbiBzcGVjaWFsIG9mZmVyOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2ZlYXR1cmVkIGxhYmVsPSZxdW90 O0ZlYXR1cmVkLCBTcGVjaWFsJnF1b3Q7Jmd0OwogICAmbHQ7cCBjbGFzcz0mcXVvdDtoaWxp Z2h0JnF1b3Q7Jmd0O0FzIGZlYXR1cmVkIG9uIHRoZSBmcm9udCBwYWdlISZsdDsvcCZndDsK Jmx0Oy90eHA6c21kX2lmX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgyIGlkPSJj aGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xOCBKdW4gMTAgfCAwLjEw IHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MDcgU2VwIDEwIHwgMC4yMCB8IFJlbmFt ZWQgaWQgY29sdW1uIHRvIGZlYXRfaWQgOyBmaXhlZCA8Y29kZT5sYWJlbDwvY29kZT4gYXR0 cmlidXRlIGJ1ZyAoYm90aCB0aGFua3MgcGllbWFuKSA7IGxhYmVsIHNlYXJjaGVzIGFyZSBu b3cgZXhhY3QgbWF0Y2hlcyA7IGFkZGVkIHByZWZzIGFuZCBwYWdpbmF0aW9uIHN1cHBvcnQg Zm9yIGFkbWluIHNpZGUgOyBhZGRlZCA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9mZWF0dXJlZCZn dDs8L2NvZGU+IDsgYWRkZWQgbGFiZWwgc2VsZWN0aW9uIGZyb20gZHJvcGRvd24gZHVyaW5n IGVkaXRpbmcgKHRoYW5rcyB0eWUpPC9saT4KCQk8bGk+MTMgU2VwIDEwIHwgMC4yMSB8IEFk ZGVkICYjODIxNjt0aXRsZSYjODIxNzsgYW5kIFRleHRpbGUgb3B0aW9ucyAoYm90aCB0aGFu a3MgYmcpPC9saT4KCQk8bGk+MTMgU2VwIDEwIHwgMC4yMiB8IEZpeGVkIG1pc3NpbmcgZG9T bGFzaCgpIG9uIHVudGV4dGlsZWQgaHRtbCBjb250ZW50ICh0aGFua3MgYmcpPC9saT4KCQk8 bGk+MDUgT2N0IDEwIHwgMC4zMCB8IFVzZSA8Y29kZT5hcnRpY2xlX2N1c3RvbSgpPC9jb2Rl PiBub3QgPGNvZGU+YXJ0aWNsZSgpPC9jb2RlPiB0byBzaWRlc3RlcCBpbmRpdmlkdWFsIGFy dGljbGUgY29udGV4dCAodGhhbmtzIGpvaG5zdGVwaGVucykgOyBwYXNzIDxjb2RlPnRpbWU8 L2NvZGU+IGFuZCA8Y29kZT5saW1pdDwvY29kZT4gdG8gPGNvZGU+YXJ0aWNsZV9jdXN0b20o KTwvY29kZT4gOyA8Y29kZT5saW1pdDwvY29kZT4gaGFzIGRlZmF1bHQgb2YgMTA8L2xpPgoJ CTxsaT4xMSBPY3QgMTAgfCAwLjMxIHwgQmV0dGVyIHRoZW1lIGludGVncmF0aW9uICh0aGFu a3MgdGhlYm9tYnNpdGUpPC9saT4KCQk8bGk+MDEgTm92IDEwIHwgMC4zMiB8IEFkZGVkIG9s ZGVyL25ld2VyIHBhZ2luYXRpb24gc3VwcG9ydCB0byA8Y29kZT4mbHQ7dHhwOnNtZF91bmZl YXR1cmVkIC8mZ3Q7PC9jb2RlPiBhbmQgcGVybWl0dGVkIDxjb2RlPnNlY3Rpb248L2NvZGU+ LCA8Y29kZT5zdGF0dXM8L2NvZGU+IGFuZCA8Y29kZT50aW1lPC9jb2RlPiBmaWx0ZXJpbmcg OyBmaXhlZCBzb21lIHN0eWxpbmcgaXNzdWVzPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAq KiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNz bWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2Vp Z2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25v c3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9o ZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzox MHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg bWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVy LWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4 IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHgg MCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxp bmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7 IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoj c21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5 OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9y ZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBs aXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6 cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21k X2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5E IFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJlNWEzMzNkZmU0NWRiYjYz ZGRkMWU2ZDQ5MWNjOTUyOSI7fQ==