# Name: smd_calendar v0.21 # Type: Client side plugin # Calendar / event / schedule system with events as TXP articles # 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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjM1MjcyOiIvLyBCYXNlZCBoZWF2aWx5IG9u IG1kcF9jYWxlbmRhciAtIHRoYW5rcyENCi8vVE9ETzogSW52ZXN0aWdhdGUNCi8qDQokZCA9 IG5ldyBEYXRlVGltZSgnMjAwOC0xMi0yMiAxMjo1MicpOw0KZWNobyAkZC0+Z2V0VGltZXpv bmUoKS0+Z2V0TmFtZSgpOw0KKi8NCg0KaWYoICRkYXRlID0gZ3BzKCdkYXRlJykgKSB7DQoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR2YXJpYWJsZSwgJHByZWZz LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZCwgJHNtZF95ZWFyLCAkc21kX21vbnRoLCAk c21kX3dlZWssICRzbWRfZGF5Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUn ID0+ICdhbnknLCAvLyBwYXN0LCBmdXR1cmUsIGFueQ0KCQknc2l6ZScgPT4gJ2xhcmdlJywg Ly8gc21hbGwgb3IgbGFyZ2UgKGNhbGVuZGFyKQ0KCQknZXhwaXJlZCcgPT4gJycsIC8vIDA9 bm8sIDE9eWVzIHB1Ymxpc2ggZXhwaXJlZCBldmVudHMsIGVtcHR5PXVzZSBwcmVmcw0KCQkn Y2F0ZWdvcnknID0+ICRwcmV0ZXh0WydjJ10sDQoJCSdzZWN0aW9uJyA9PiAkcHJldGV4dFsn cyddLA0KCQknYXV0aG9yJyA9PiAkcHJldGV4dFsnYXV0aG9yJ10sDQoJCSdzdGF0dXMnID0+ ICdsaXZlJywNCgkJJ3N0YXRpYycgPT4gJycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3NwYW5m b3JtJyA9PiAnU01EX1NBTUUnLA0KCQknc3RlcGZpZWxkJyA9PiAnJywNCgkJJ3NraXBmaWVs ZCcgPT4gJycsDQoJCSdzaG93c2tpcHBlZCcgPT4gJzAnLA0KCQknc2hvd3NwYW5uZWQnID0+ ICcxJywNCgkJJ2hvbGlkYXlzJyA9PiAnJywNCgkJJ2hvbGlkYXlmbGFncycgPT4gJ2V2ZW50 JywgLy8gcGVybWl0IHRoZXNlIGV2ZW50cyB0byAibGFuZCIgb24gYSBob2xpZGF5IChldmVu dCwgcmVjdXIsIG11bHRpKQ0KCQknY2xhc3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcsIC8v IGNlbGwsIGV2ZW50LCBjZWxscGx1cyAoY29tYmluZXMgZXZlbnQgYW5kIGNlbGwgaW50byBj ZWxsIGxldmVsIGNsYXNzZXMpDQoJCSdjbGFzc3ByZWZpeGVzJyA9PiAnc21kX2NhbF8sIHNt ZF9jYWxfZXZfJywgLy8gMXN0PWNlbGwtbGV2ZWwgcGZ4LCAybmQ9ZXZlbnQtbGV2ZWwgcGZ4 IChvcHRpb25hbCkNCgkJJ2NsYXNzJyA9PiAnJywgLy8gVGFibGUgY2xhc3MNCgkJJ3Jvd2Ns YXNzJyA9PiAnJywNCgkJJ2NlbGxjbGFzcycgPT4gJycsDQoJCSdlbXB0eWNsYXNzJyA9PiAn ZW1wdHknLA0KCQknaXNvd2Vla2NsYXNzJyA9PiAnd2VlaycsDQoJCSduYXZjbGFzcycgPT4g J25hdicsDQoJCSdldmVudGNsYXNzZXMnID0+ICdjYXRlZ29yeScsDQoJCSdldmVudHdyYXB0 YWcnID0+ICdzcGFuJywNCgkJJ3NlbGVjdCcgPT4gJycsIC8vIG1vbnRoIGFuZC9vciB5ZWFy ICh0byBkaXNwbGF5IGRyb3Bkb3ducykNCgkJJ3NlbGVjdGJ0bicgPT4gJycsIC8vIGVtcHR5 ID0gYXV0b3NlbGVjdCAob25jaGFuZ2UpLCBvciB0ZXh0IHRvIGdvIG9uIHRoZSBzdWJtaXQg YnV0dG9uDQoJCSdteWNsYXNzJyA9PiAnJywgLy8gbW9udGgteWVhciBoZWFkZXIgY2xhc3MN CgkJJ215d3JhcHRhZycgPT4gJycsIC8vIG1vbnRoLXllYXIgaGVhZGVyIHdyYXB0YWcNCgkJ J2lkJyA9PiAnJywgLy8gVGFibGUgSUQgKD1jYWxpZCkNCgkJJ3dlZWsnID0+ICcnLA0KCQkn bW9udGgnID0+ICcnLA0KCQkneWVhcicgPT4gJycsDQoJCSd5ZWFyd2lkdGgnID0+ICcwLDAn LCAvLyBudW1iZXIgb2YgeWVhcnMgZWl0aGVyIHNpZGUgb2YgdGhlIGZpcnN0L2xhc3QgYXJ0 aWNsZSB0byBwZXJtaXQNCgkJJ2lzb3dlZWtzJyA9PiAnJywgLy8gZW1wdHkgPSBkb24ndCBz aG93IElTTyB3ZWVrcywgb3IgdGV4dCBvZiBjb2x1bW4gaGVhZGluZw0KCQknZGF5Zm9ybWF0 JyA9PiAnQUJCUicsIC8vIEFCQlIgPSAlYSwgRlVMTCA9ICVBLCBvciBjdXN0b20gc3RyZnRp bWUgc3RyaW5nDQoJCSdtb250aGZvcm1hdCcgPT4gJ0ZVTEwnLCAvLyBBQkJSID0gJWIsIEZV TEwgPSAlQiwgb3IgY3VzdG9tIHN0cmZ0aW1lIHN0cmluZw0KCQknZmlyc3RkYXknID0+IDAs IC8vIDFzdCBkYXkgb2Ygd2VlayAwPVN1bmRheSwgNj1TYXR1cmRheSAoZm9yY2VkIHRvIE1v bmRheSBpZiBpc293ZWVrcz0xKQ0KCQknZ210JyA9PiAwLA0KCQknbGFuZycgPT4gJycsDQoJ CSdkZWJ1ZycgPT4gMCwNCgkpLCAkYXR0cykpOw0KDQoJJGZ1dHVyZSA9ICggJHRpbWUgIT0g InBhc3QiICkgPyB0cnVlIDogZmFsc2U7IC8vIERldGVybWluZSBoZWFkaW5nIHN0eWxlDQoJ JHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0dXMgOiAnbGl2ZSc7DQoJJGZpcnN0ZGF5ID0g KCRpc293ZWVrcyA9PSAnJykgPyAkZmlyc3RkYXkgOiAxOw0KCSRzcGFuZm9ybSA9ICgkc3Bh bmZvcm0gPT0gIlNNRF9TQU1FIikgPyAkZm9ybSA6ICRzcGFuZm9ybTsNCg0KCS8vIFNldCB1 cCB0aGUgY2xhc3MgcHJlZml4ZXMNCgkkY2xldnMgPSBkb19saXN0KCRjbGFzc2xldmVscyk7 DQoJJGNscyA9IGRvX2xpc3QoJGNsYXNzcHJlZml4ZXMpOw0KCSRjbGFzc3ByZWZpeCA9ICRl dmNsYXNzcHJlZml4ID0gJGNsc1swXTsNCglpZiAoY291bnQoJGNscykgPiAxKXsNCgkJJGV2 Y2xhc3NwcmVmaXggPSAkY2xzWzFdOw0KCX0NCg0KCS8vIEZpbHRlcnMNCgkkZm9wdHMgPSBh cnJheSgpOw0KCSRjYXRTUUwgPSAkc2VjU1FMID0gJGF1dGhTUUwgPSAnJzsNCglpZigkY2F0 ZWdvcnkpIHsNCgkJJGZvcHRzW10gPSBhcnJheSgnYycgPT4gJGNhdGVnb3J5KTsNCgkJJGNh dFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9fbGlzdCgkY2F0ZWdvcnkpKSk7DQoJCSRj YXRTUUwgPSAiIEFORCAoIENhdGVnb3J5MSBJTiAoIi4kY2F0U1FMLiIpIE9SIENhdGVnb3J5 MiBJTiAoIi4kY2F0U1FMLiIpICkgIjsNCgl9DQoJaWYoJHNlY3Rpb24pIHsNCgkJJGZvcHRz W10gPSBhcnJheSgncycgPT4gJHNlY3Rpb24pOw0KCQkkc2VjU1FMID0gZG9RdW90ZShqb2lu KCInLCciLCBkb19saXN0KCRzZWN0aW9uKSkpOw0KCQkkc2VjU1FMID0gIiBBTkQgU2VjdGlv biBJTiAoIi4kc2VjU1FMLiIpICI7DQoJfQ0KCWlmKCRhdXRob3IpIHsNCgkJJGZvcHRzW10g PSBhcnJheSgnYXV0aG9yJyA9PiBodG1sZW50aXRpZXMoZ3BzKCdhdXRob3InKSkpOw0KCQkk YXV0aFNRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9fbGlzdCgkYXV0aG9yKSkpOw0KCQkk YXV0aFNRTCA9ICIgQU5EIEF1dGhvcklEIElOICgiLiRhdXRoU1FMLiIpICI7DQoJfQ0KCSRz dGF0dXMgPSBkb19saXN0KCRzdGF0dXMpOw0KCSRzdGF0aSA9IGFycmF5KCk7DQoJZm9yZWFj aCAoJHN0YXR1cyBhcyAkc3RhdCkgew0KCQlpZiAoZW1wdHkoJHN0YXQpKSB7DQoJCQljb250 aW51ZTsNCgkJfSBlbHNlIGlmIChpc19udW1lcmljKCRzdGF0KSkgew0KCQkJJHN0YXRpW10g PSAkc3RhdDsNCgkJfSBlbHNlIHsNCgkJCSRzdGF0aVtdID0gZ2V0U3RhdHVzTnVtKCRzdGF0 KTsNCgkJfQ0KCX0NCgkkc3RhdGkgPSAiIFN0YXR1cyBJTiAoIi5kb1F1b3RlKGpvaW4oIics JyIsICRzdGF0aSkpLiIpIjsNCg0KCSRleHBpcmVkID0gKCRleHBpcmVkKSA/ICRleHBpcmVk IDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXTsNCgkkZXhwaXJlZCA9ICgo JGV4cGlyZWQpID8gJycgOiAnIEFORCAobm93KCkgPD0gRXhwaXJlcyBPUiBFeHBpcmVzID0g Jy5OVUxMREFURVRJTUUuJyknKTsNCgkkZXZlbnRjbGFzc2VzID0gZG9fbGlzdCgkZXZlbnRj bGFzc2VzKTsNCgkkaG9saWRheWZsYWdzID0gZG9fbGlzdCgkaG9saWRheWZsYWdzKTsNCg0K CS8vIFdvcmsgb3V0IHRoZSBmaXJzdCBhbmQgbGFzdCBwb3N0cyB0byBkZXRlcm1pbmUgdGhl IHllYXIgcmFuZ2UNCgkkZWFybGllc3QgPSBzYWZlX3JvdygndW5peF90aW1lc3RhbXAoUG9z dGVkKSBBUyB1UG9zdGVkJywgJ3RleHRwYXR0ZXJuJywgJHN0YXRpLigoJGNhdGVnb3J5KSA/ ICRjYXRTUUwgOiAnJykuKCgkc2VjdGlvbikgPyAkc2VjU1FMIDogJycpLigoJGF1dGhvcikg PyAkYXV0aFNRTCA6ICcnKS4nIE9SREVSIEJZIFBvc3RlZCBBU0MgTElNSVQgMCwgMScsICRk ZWJ1Zyk7DQoJJGxhdGVzdCA9IHNhZmVfcm93KCd1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBB UyB1TGFzdE1vZCcsICd0ZXh0cGF0dGVybicsICRzdGF0aS4oKCRjYXRlZ29yeSkgPyAkY2F0 U1FMIDogJycpLigoJHNlY3Rpb24pID8gJHNlY1NRTCA6ICcnKS4oKCRhdXRob3IpID8gJGF1 dGhTUUwgOiAnJykuJyBBTkQgUG9zdGVkIDwgbm93KCkgT1JERVIgQlkgTGFzdE1vZCBERVND IExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSR5ZWFyd2lkdGggPSBkb19saXN0KCR5ZWFyd2lk dGgpOw0KCWlmIChjb3VudCgkeWVhcndpZHRoKSA9PSAxKSAkeWVhcndpZHRoWzFdID0gJHll YXJ3aWR0aFswXTsNCgkkZWFybGllc3QgPSBkYXRlKCJZIiwgc3RydG90aW1lKCItIi4keWVh cndpZHRoWzBdLiIgeWVhciIsICggKGVtcHR5KCRlYXJsaWVzdCkpID8gdGltZSgpIDogJGVh cmxpZXN0Wyd1UG9zdGVkJ10pICkgKTsNCgkkbGF0ZXN0ID0gZGF0ZSgiWSIsIHN0cnRvdGlt ZSgiKyIuJHllYXJ3aWR0aFsxXS4iIHllYXIiLCAoIChlbXB0eSgkbGF0ZXN0KSkgPyB0aW1l KCkgOiAkbGF0ZXN0Wyd1TGFzdE1vZCddKSApICk7DQoNCgkvLyBDaGVjayB0aGUgVVJMIGZv ciBjdXJyZW50IGRhdGUgYW5kIGNhbGVuZGFyIHRhcmdldCBpbmZvDQoJJGluY29taW5nX2Nh bGlkID0gZ3BzKCdjYWxpZCcpOw0KCSRpbmNvbWluZ195ZWFyID0gKGdwcygneScpIGFuZCBp c19udW1lcmljKGdwcygneScpKSkgPyAoaW50KWdwcygneScpIDogJyc7DQoJJGluY29taW5n X21vbnRoID0gKGdwcygnbScpIGFuZCBpc19udW1lcmljKGdwcygnbScpKSkgPyAoaW50KWdw cygnbScpIDogJyc7DQoJJGluY29taW5nX3dlZWsgPSAoZ3BzKCd3JykgYW5kIGlzX251bWVy aWMoZ3BzKCd3JykpKSA/IChpbnQpZ3BzKCd3JykgOiAnJzsNCg0KCWlmKCRzdGF0aWMpIHsg Ly8gaWYgd2UncmUgc3RhdGljIHcvbyBhbnkgc3VwcGxpZWQgdmFycywgdXNlIHRoZSBjdXJy ZW50IGRhdGUNCgkJaWYoISR5ZWFyKSB7ICR5ZWFyID0gc2FmZV9zdHJmdGltZSgnJVknKTsg fQ0KCQlpZighJG1vbnRoKSB7ICRtb250aCA9IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0NCgl9 IGVsc2UgeyAvLyBvdGhlcndpc2UgdXNlIGN1cnJlbnQgZGF0ZSBvbmx5IGlmIHRoZXJlJ3Mg bm90aGluZyBlbHNlDQoJCWlmKCAkaWQgPT0gJGluY29taW5nX2NhbGlkICkgeyAvLyB1c2Ug aW5jb21pbmcNCgkJCSR5ZWFyID0gKCRpbmNvbWluZ195ZWFyKSA/ICRpbmNvbWluZ195ZWFy IDogKCgkeWVhcikgPyAkeWVhciA6IHNhZmVfc3RyZnRpbWUoJyVZJykpOw0KCQkJJG1vbnRo ID0gKCRpbmNvbWluZ19tb250aCkgPyAkaW5jb21pbmdfbW9udGggOiAoKCRtb250aCkgPyAk bW9udGggOiBzYWZlX3N0cmZ0aW1lKCclbScpKTsNCgkJCS8vIElmIHdlZWsgaXMgdXNlZCwg YWRqdXN0IG1vbnRoIHNvIGl0IGVuY29tcGFzc2VzIHRoZSBnaXZlbiB3ZWVrDQoJCQkkd2Vl ayA9ICRpbmNvbWluZ193ZWVrOw0KCQkJaWYgKCR3ZWVrKSB7DQoJCQkJJG1vbnRoID0gc2Fm ZV9zdHJmdGltZSgiJW0iLCBta3RpbWUgKDEsMSwxLDEsNyokd2VlaywkeWVhcikpOyAvLyBH dWVzcyB0aGUgbW9udGggZnJvbSB0aGUgd2Vlaw0KCQkJfQ0KCQl9IGVsc2UgeyAvLyB1c2Ug Y3VycmVudA0KCQkJaWYoISR5ZWFyKSB7ICR5ZWFyID0gc2FmZV9zdHJmdGltZSgnJVknKTsg fQ0KCQkJaWYoISRtb250aCkgeyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJ CQlpZigkd2VlaykgeyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCIlbSIsIG1rdGltZSAoMSwx LDEsMSw3KiR3ZWVrLCR5ZWFyKSk7IH0NCgkJfQ0KCX0NCgkkc21kX2NhbF9pZCA9ICgkaW5j b21pbmdfY2FsaWQpID8gJGluY29taW5nX2NhbGlkIDogJGlkOw0KCSRzbWRfeWVhciA9ICR5 ZWFyOyAkc21kX21vbnRoID0gJG1vbnRoOyAvLyAkc21kX3dlZWsgYW5kIHNtZF9kYXkgYXJl IHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCS8vIFRoZSB0aW1lcyBpbiB0aGUgREIgYXJlIHN0 b3JlZCB1c2luZyB0aGUgc2VydmVyJ3MgbG9jYWwgdGltZSwgc28gd2UgZG9uJ3QNCgkvLyB3 YW50IHRvIGFkanVzdCBhbnl0aGluZyAoc2luY2UgbWt0aW1lIHVzZXMgdGhlIHNlcnZlcidz IGxvY2FsIHRpbWUpLg0KCS8vVE9ETzogV29ycnkgYWJvdXQgZ210IC8gZHN0DQoJJHRzX2Zp cnN0ID0gbWt0aW1lKDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIpOw0KCSR0c19sYXN0ID0g bWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0ZSgndCcsJHRzX2ZpcnN0KSwgJHllYXIp Ow0KDQoJJGV4dHJhc3FsID0gJGNhdFNRTCAuICRzZWNTUUwgLiAkYXV0aFNRTDsNCglzd2l0 Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IC8qIERvbid0IGNhcmUgYWJvdXQgZGF0ZSAq LyBicmVhazsNCgkJY2FzZSAiZnV0dXJlIiA6ICRleHRyYXNxbCAuPSAiIEFORCBQb3N0ZWQg PiBDVVJEQVRFKCkiOyBicmVhazsNCgkJZGVmYXVsdCA6ICRleHRyYXNxbCAuPSAiIEFORCBQ b3N0ZWQgPCBDVVJEQVRFKCkiOyBicmVhazsgLy8gVGhlIHBhc3QNCgl9DQoNCgkvLyBIb2xp ZGF5cyBhcmUgZ2xvYmFsICdleGNsdXNpb25zJywgZWl0aGVyIGRlZmluZWQgZGlyZWN0bHkg b3IgaW4gYSA8dHhwOnZhcmlhYmxlIC8+DQoJJGhvbGlkYXlzID0gZG9fbGlzdCgkaG9saWRh eXMpOw0KCSR0eHBob2xzID0gZG9fbGlzdCgkaG9saWRheXNbMF0sICI6Iik7DQoJaWYgKCR0 eHBob2xzWzBdID09ICJ0eHB2YXIiKSB7DQoJCSRob2xpZGF5cyA9IGRvX2xpc3QoJHZhcmlh YmxlWyR0eHBob2xzWzFdXSk7DQoJfQ0KCS8vIEZvcmNlIGVhY2ggaG9saWRheSB0byBhIGtu b3duIGZvcm1hdC4gSG9saWRheXMgd2l0aG91dCB5ZWFycyB1c2UgY3VycmVudCB5ZWFyDQoJ Zm9yZWFjaCAoJGhvbGlkYXlzIGFzICRrZXkgPT4gJHZhbCkgew0KCQlpZiAoZW1wdHkoJHZh bCkpIGNvbnRpbnVlOw0KCQkkbnVtcGFydHMgPSBwcmVnX21hdGNoKCcvXihbXGRcd10rKS4/ KFtcZFx3XSspLj8oW1xkXHddKyk/JC8nLCAkdmFsLCAkcGFydHMpOw0KDQoJCWlmICgkbnVt cGFydHMpIHsNCgkJCWlmIChjb3VudCgkcGFydHMpID09IDMpIHsNCgkJCQkkcGFydHNbM10g PSAkeWVhcjsNCiAgICAgICAgIH0NCgkJCSR2YWwgPSBzdHJfcGFkKCRwYXJ0c1sxXSwgMiwg JzAnLCBTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFkKCRwYXJ0c1syXSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLictJy4kcGFydHNbM107DQoJCX0NCgkJJGhvbGlkYXlzWyRrZXldID0gZGF0 ZSgiZC1tLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOw0KCX0NCg0KCWlmICgkZGVidWcgPiAwICYm ICFlbXB0eSgkaG9saWRheXMpICYmICRob2xpZGF5c1swXSAhPSAnJykgew0KCQllY2hvICIr KyBIT0xJREFZUyArKyAiOw0KCQlkbXAoJGhvbGlkYXlzKTsNCgl9DQoNCgkvLyBHZXQgYWxs IG1hdGNoaW5nIGFydGljbGVzIGluIChhbmQgYmVmb3JlKSB0aGlzIG1vbnRoDQoJJGV2ZW50 cyA9IGFycmF5KCk7DQoJJHNxbDIgPSAkc3RhdGkgLiAiIEhBVklORyB1UG9zdGVkIDw9ICIu JHRzX2xhc3QgLiAkZXhwaXJlZCAuICRleHRyYXNxbCAuIiBPUkRFUiBCWSBQb3N0ZWQgQVND IjsNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVk LCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCwgdW5peF90aW1lc3RhbXAo RXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxpc3QgPSBzYWZlX3Jvd3MoJGdyYWJDb2xz LCAndGV4dHBhdHRlcm4nLCAkc3FsMiwgJGRlYnVnKTsNCg0KCS8vIElmIGFueSBldmVudHMg cmVjdXIgYW5kIGZhbGwgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoLCBhZGQgdGhvc2UgYXMg d2VsbA0KCS8vIElmIGFueSBkYXRlcyBhcmUgdG8gYmUgZXhjbHVkZWQsIHRoZSBlbnRyeSBp cyBza2lwcGVkIFVOTEVTUyBzaG93c2tpcHBlZCBpbmRpY2F0ZXMgb3RoZXJ3aXNlDQoJZm9y ZWFjaCAoJGV2bGlzdCBhcyAkcm93KSB7DQoJCSRpZHggPSAwOyAvLyBJbiBjYXNlIHRoZSAx c3QgZGF5IG9mIHRoZSBtb250aCBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhbiBldmVudCBmcm9t IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG1vbnRoDQoJCSRzdGFydCA9ICRyb3dbJ3VQb3N0 ZWQnXTsNCgkJJHJlYWxfZW5kID0gJHJvd1sndUV4cGlyZXMnXTsNCgkJJGVuZCA9ICgkcmVh bF9lbmQgIT0gMCAmJiAkcmVhbF9lbmQgPCAkdHNfbGFzdCkgPyAkcmVhbF9lbmQgOiAkdHNf bGFzdDsNCgkJJHNtZF9jYWxfZmxhZyA9IGFycmF5KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEp IHsNCgkJCWVjaG8gJysrIEVWRU5UIFNUQVJUIC8vIEVORCAvLyBSRUFMIEVORCArKyc7DQoJ CQlkbXAoJHJvd1snVGl0bGUnXSk7DQoJCQlkbXAoZGF0ZSgnZC1tLVkgSDppOnMnLCAkc3Rh cnQpIC4nIC8vICcuIGRhdGUoJ2QtbS1ZIEg6aTpzJywgJGVuZCkgLicgLy8gJy4gZGF0ZSgn ZC1tLVkgSDppOnMnLCAkcmVhbF9lbmQpKTsNCgkJCWlmICgkZGVidWcgPiAyKSB7DQoJCQkJ ZG1wKCRyb3cpOw0KCQkJfQ0KCQl9DQoNCgkJJG11bHRpID0gKCRyb3dbJ3VFeHBpcmVzJ10g PiAkcm93Wyd1UG9zdGVkJ10gJiYgJHJvd1sndUV4cGlyZXMnXSA+ICR0c19maXJzdCkgPyB0 cnVlIDogZmFsc2U7DQoJCSRyZWN1ciA9IChlbXB0eSgkcm93WyRzdGVwZmllbGRdKSkgPyBm YWxzZSA6IHRydWU7DQoJCSRob2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkc3Rh cnQpLCAkaG9saWRheXMpOw0KCQkkZXZjbGFzc2VzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAo JGV2ZW50Y2xhc3NlcyBhcyAkZXZjbHMpIHsNCgkJCXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJ Y2FzZSAiIjoNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiZ2NhdCI6DQoJCQkJCWlmIChpc3Nl dCgkcHJldGV4dFsnYyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2MnXSkpIHsNCgkJCQkJCSRl dmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0WydjJ107DQoJCQkJCX0NCgkJ CQkJYnJlYWs7DQoJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQlpZiAoaXNzZXQoJHJvd1sn Q2F0ZWdvcnkxJ10pICYmICFlbXB0eSgkcm93WydDYXRlZ29yeTEnXSkpIHsNCgkJCQkJCSRl dmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRyb3dbJ0NhdGVnb3J5MSddOw0KCQkJCQl9 DQoJCQkJCWlmIChpc3NldCgkcm93WydDYXRlZ29yeTInXSkgJiYgIWVtcHR5KCRyb3dbJ0Nh dGVnb3J5MiddKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHJv d1snQ2F0ZWdvcnkyJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAic2VjdGlv biI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsncyddKSAmJiAhZW1wdHkoJHByZXRleHRb J3MnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0 WydzJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkJ aWYgKGlzc2V0KCRwcmV0ZXh0WydhdXRob3InXSkgJiYgIWVtcHR5KCRwcmV0ZXh0WydhdXRo b3InXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRwcmV0ZXh0 WydhdXRob3InXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0Og0KCQkJCQlp ZiAoaXNzZXQoJHJvd1skZXZjbHNdKSAmJiAhZW1wdHkoJHJvd1skZXZjbHNdKSkgew0KCQkJ CQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHJvd1skZXZjbHNdOw0KCQkJCQl9 DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSRldmNsYXNzZXMgPSAoJGV2Y2xhc3Nlcykg PyAnICcuIGpvaW4oJyAnLCAkZXZjbGFzc2VzKSA6ICcnOw0KCQkkaWdub3JlID0gYXJyYXko KTsNCg0KCQlpZiAoJGRlYnVnID4gMSAmJiAkZXZjbGFzc2VzKSB7DQoJCQllY2hvICcrKyBF VkVOVCBDTEFTU0VTICsrJzsNCgkJCWRtcCgkZXZjbGFzc2VzKTsNCgkJfQ0KDQoJCS8vIEV2 ZW50cyB0aGF0IHN0YXJ0IHRoaXMgbW9udGgNCgkJaWYgKCRzdGFydCA8ICRlbmQgJiYgJHN0 YXJ0ID4gJHRzX2ZpcnN0KSB7DQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJ Ly8gc3RhcnQgb2YgYSBtdWx0aSB0aGF0IG1heSBvciBtYXkgbm90IGJlIGNhbmNlbGxlZCBk dWUgdG8gaG9saWRheXMNCgkJCSRmbGFnID0gKCRzaG93c3Bhbm5lZCAmJiAkbXVsdGkgJiYg ISRyZWN1cikgPyAnbXVsdGlmaXJzdCcgLiAoKCAkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211 bHRpJywkaG9saWRheWZsYWdzKSApID8gJyBjYW5jZWwgaG9scycgOiAnJyApIDogJyc7DQoJ CQkvLyBhIHN0YW5kYXJkIGV2ZW50IHRoYXQgbWF5IG9yIG1heSBub3QgYmUgY2FuY2VsbGVk IGR1ZSB0byBob2xpZGF5cw0KCQkJJGZsYWcgPSAoJGZsYWcpID8gJGZsYWcgOiAoKCAkaG9s X2hpdCAmJiAhaW5fYXJyYXkoJ2V2ZW50JywkaG9saWRheWZsYWdzKSApID8gJ2V2ZW50IGNh bmNlbCBob2xzJyA6ICdldmVudCcgKTsNCgkJCSRzbWRfY2FsX2ZsYWcgPSAkZmxhZyA9IGV4 cGxvZGUoJyAnLCAkZmxhZyk7DQoJCQlmb3JlYWNoICgkZmxhZyBhcyAkaWR4ID0+ICRpdGVt KSB7DQoJCQkJJGZsYWdbJGlkeF0gPSAkY2xhc3NwcmVmaXguJGl0ZW07DQoJCQl9DQoJCQkk ZmxhZyA9IGpvaW4gKCcgJywgJGZsYWcpOw0KDQoJCQkkaWR4ID0gKGludClzYWZlX3N0cmZ0 aW1lKCclZCcsICRzdGFydCwgJGdtdCwgJGxhbmcpOw0KCQkJJHNtZF9kYXkgPSAkaWR4Ow0K CQkJJHNtZF93ZWVrID0gc2FmZV9zdHJmdGltZSgnJVYnLCAkc3RhcnQsICRnbXQsICRsYW5n KTsNCgkJCSRvcCA9ICgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFy c2VfZm9ybSgkZm9ybSkgOiAoKCRzaXplPT0ic21hbGwiKSA/ICcnIDogaHJlZigkcm93WydU aXRsZSddLCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLici JykpICk7DQoJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ3R5cGUn ID0+ICgoJGZsYWcpID8gJGZsYWcgOiAnJykuJGV2Y2xhc3Nlcyk7DQoJCQkkc21kX2NhbF9m bGFnID0gYXJyYXkoKTsNCgkJfQ0KDQoJCS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJheSBmb3Ig dGhpcyBldmVudA0KCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcn KSB7DQoJCQkkaWdub3JlID0gZG9fbGlzdCgkcm93WyRza2lwZmllbGRdKTsNCgkJCWZvcmVh Y2ggKCRpZ25vcmUgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkJJGlnbm9yZVska2V5XSA9IGRh dGUoImQtbS1ZIiwgc3RydG90aW1lKCR2YWwpKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEg a25vd24gZm9ybWF0DQoJCQl9DQoJCX0NCgkJLy8gQ2FsY3VsYXRlIHRoZSBkYXRlIG9mZnNl dHMgYW5kIGNoZWNrIHJlY3VycmluZyBldmVudHMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgbW9u dGggb2YgaW50ZXJlc3QNCgkJaWYgKCRzdGVwZmllbGQgJiYgJHJvd1skc3RlcGZpZWxkXSAh PSAnJykgew0KCQkJJGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVsZF0pOw0KCQkJZm9y ZWFjaCAoJGZyZXEgYXMgJGludGVydmFsKSB7DQoJCQkJJHRzX2N1cnIgPSAkc3RhcnQ7DQoJ CQkJd2hpbGUgKCR0c19jdXJyIDwgJGVuZCkgew0KCQkJCQlpZiAoKCR0c19jdXJyID0gc3Ry dG90aW1lKCRpbnRlcnZhbCwgJHRzX2N1cnIpKSA9PT0gZmFsc2UpIHsNCgkJCQkJCWJyZWFr Ow0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJaWYgKCR0c19jdXJyIDwgJGVuZCAmJiAkdHNfY3Vy ciA+ICR0c19maXJzdCkgew0KCQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBDaGVjayBp dCBpc24ndCBhIGhvbGlkYXkgb3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVsYXRlQXJ0 aWNsZURhdGEoJHJvdyk7DQoJCQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9IChpbnQp c2FmZV9zdHJmdGltZSgnJWQnLCAkdHNfY3VyciwgJGdtdCwgJGxhbmcpOw0KCQkJCQkJCSRz bWRfY2FsX2ZsYWdbXSA9ICdyZWN1cic7DQoJCQkJCQkJJHNob3dfbWUgPSAhaW5fYXJyYXko ZGF0ZSgiZC1tLVkiLCAkdHNfY3VyciksICRpZ25vcmUpOw0KCQkJCQkJCSRob2xfaGl0ID0g aW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdHNfY3VyciksICRob2xpZGF5cyk7DQoJCQkJCQkJ JHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9hcnJheSgncmVjdXInLCRob2xpZGF5Zmxh Z3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJCQkJaWYgKCAhJHNob3dfbWUgfHwgISRzaG93 X2hvbCApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQkJCQkJ fQ0KCQkJCQkJCWlmICgkaG9sX2hpdCkgew0KCQkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAn aG9scyc7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIENyZWF0ZSB0aGUgZXZlbnRzIHRoYXQgYXBw ZWFyIGluIHRoZSBjZWxsIGJ1dCBvbmx5IGlmIHRoZXkndmUgbm90IGFwcGVhcmVkIGJlZm9y ZSwgb3IgYXJlIHRvIGJlIGlnbm9yZWQNCgkJCQkJCQlpZiAoKCRzaG93X21lICYmICRzaG93 X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJCQkJCSRzbWRfZGF5ID0gJGlkeDsNCgkJ CQkJCQkJJHNtZF93ZWVrID0gc2FmZV9zdHJmdGltZSgnJVYnLCAkdHNfY3VyciwgJGdtdCwg JGxhbmcpOw0KCQkJCQkJCQkkb3AgPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRm b3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyAnJyA6IGhy ZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1sn VGl0bGUnXS4nIicpKSApOw0KCQkJCQkJCX0NCgkJCQkJCQkkdXNlZCA9IGFycmF5KCk7DQoJ CQkJCQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0gIT0gTlVM TCkgew0KCQkJCQkJCQlmb3JlYWNoICgkZXZlbnRzWyRpZHhdIGFzICRldikgew0KCQkJCQkJ CQkJJHVzZWRbXSA9ICRldlsnZXYnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQlp ZiAoaXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSA9PSBOVUxMIHx8ICFp bl9hcnJheSgkb3AsICR1c2VkKSkgew0KCQkJCQkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJh eSgnZXYnID0+ICRvcCwgJ3R5cGUnID0+ICRjbGFzc3ByZWZpeC4ncmVjdXInLiAoKCRzaG93 X21lICYmICRzaG93X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2NhbmNlbCcpLiRl dmNsYXNzZXMpOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21kX2NhbF9mbGFnID0gYXJyYXkoKTsN CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hvd3NwYW5u ZWQgJiYgJG11bHRpKSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkgc3BhbiBt b3JlIHRoYW4gb25lIGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGlnbm9yZWQg ZGF0ZXMgYW5kIGhvbGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJ JGxhc3RkYXkgPSAoaW50KXNhZmVfc3RyZnRpbWUoJyVkJywgJGVuZCwgJGdtdCwgJGxhbmcp Ow0KCQkJJHJlYWxfbGFzdGRheSA9IChpbnQpc2FmZV9zdHJmdGltZSgnJWQnLCAkcmVhbF9l bmQsICRnbXQsICRsYW5nKTsNCgkJCXdoaWxlICgrKyRpZHggPD0gJGxhc3RkYXkpIHsNCgkJ CQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRpZHg9PSRyZWFsX2xhc3RkYXkpID8g J211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRpcHJldicgOiAnbXVsdGknKTsNCgkJ CQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0KCQkJCSR0aGlzZGF0ZSA9IG1rdGlt ZSgwLCAwLCAwLCAkbW9udGgsICRpZHgsICR5ZWFyKTsNCgkJCQkkc2hvd19tZSA9ICFpbl9h cnJheShkYXRlKCJkLW0tWSIsICR0aGlzZGF0ZSksICRpZ25vcmUpOw0KCQkJCSRob2xfaGl0 ID0gaW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdGhpc2RhdGUpLCAkaG9saWRheXMpOw0KCQkJ CSRzaG93X2hvbCA9ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZs YWdzKSApID8gZmFsc2UgOiB0cnVlOw0KCQkJCWlmICggISRzaG93X21lIHx8ICEkc2hvd19o b2wgKSB7DQoJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJCX0NCgkJCQlp ZiAoJGhvbF9oaXQpIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMnOw0KCQkJCX0N CgkJCQlpZiAoICgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0K CQkJCQkkc21kX2RheSA9ICRpZHg7DQoJCQkJCSRzbWRfd2VlayA9IHNhZmVfc3RyZnRpbWUo JyVWJywgJHRoaXNkYXRlLCAkZ210LCAkbGFuZyk7DQoJCQkJCSRvcCA9ICgkc3BhbmZvcm0p ID8gcGFyc2VfZm9ybSgkc3BhbmZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6 ICgoJHNpemU9PSJzbWFsbCIpID8gJycgOiBocmVmKCcmcmFycjsnLCBwZXJtbGlua3VybCgk cm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoJCQkJfQ0KCQkJCSRl dmVudHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAndHlwZScgPT4gJGNsYXNzcHJl Zml4LiRtdWx0aWZsYWcuICgoJHNob3dfbWUgJiYgJHNob3dfaG9sKSA/ICcnIDogJyAnLiRj bGFzc3ByZWZpeC4nY2FuY2VsJykuJGV2Y2xhc3Nlcyk7DQoJCQkJJHNtZF9jYWxfZmxhZyA9 IGFycmF5KCk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBHZW5lcmF0ZSB0aGUgY2FsZW5kYXIN CglpZiggJHNpemUgPT0gInNtYWxsIiApIHsNCgkJJGNhbGVuZGFyID0gbmV3IFNNRF9TbWFs bF9DYWxlbmRhcigkeWVhciwgJG1vbnRoLCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNhdGVnb3J5 KTsNCgl9IGVsc2Ugew0KCQkkY2FsZW5kYXIgPSBuZXcgU01EX0NhbGVuZGFyKCR5ZWFyLCAk bW9udGgsICRldmVudHMpOw0KCX0NCgkkY2FsZW5kYXItPnNldEdNVCgkZ210KTsNCgkkY2Fs ZW5kYXItPnNldExhbmcoJGxhbmcpOw0KCSRjYWxlbmRhci0+c2V0Q2xhc3NMZXZlbHMoJGNs ZXZzKTsNCgkkY2FsZW5kYXItPnNldENsYXNzUHJlZml4KCRjbGFzc3ByZWZpeCk7DQoJJGNh bGVuZGFyLT5zZXRFdmVudFByZWZpeCgkZXZjbGFzc3ByZWZpeCk7DQoJJGNhbGVuZGFyLT5z ZXRFdmVudFdyYXB0YWcoJGV2ZW50d3JhcHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRNWVdyYXB0 YWcoJG15d3JhcHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRUYWJsZUlEKCRpZCk7DQoJJGNhbGVu ZGFyLT5zZXRUYWJsZUNsYXNzKCRjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRSb3dDbGFzcygk cm93Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0Q2VsbENsYXNzKCRjZWxsY2xhc3MpOw0KCSRj YWxlbmRhci0+c2V0RW1wdHlDbGFzcygkZW1wdHljbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRJ U09XZWVrQ2xhc3MoJGlzb3dlZWtjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXROYXZDbGFzcygk bmF2Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0TVlDbGFzcygkbXljbGFzcyk7DQoJJGNhbGVu ZGFyLT5zZXROYW1lRm9ybWF0KCRkYXlmb3JtYXQsICJkIik7DQoJJGNhbGVuZGFyLT5zZXRO YW1lRm9ybWF0KCRtb250aGZvcm1hdCwgIm0iKTsNCgkkY2FsZW5kYXItPnNldFNob3dJU09X ZWVrKCRpc293ZWVrcyk7DQoJJGNhbGVuZGFyLT5zZXRFWWVhcigkZWFybGllc3QpOw0KCSRj YWxlbmRhci0+c2V0TFllYXIoJGxhdGVzdCk7DQoJJGNhbGVuZGFyLT5zZXRGaWx0ZXJPcHRz KCRmb3B0cyk7DQoJJGNhbGVuZGFyLT5zZXRIb2xpZGF5cygkaG9saWRheXMpOw0KCSRjYWxl bmRhci0+c2V0U2VsZWN0b3JzKGRvX2xpc3QoJHNlbGVjdCksICRzZWxlY3RidG4pOw0KCSRj YWxlbmRhci0+c2V0Rmlyc3REYXlPZldlZWsoJGZpcnN0ZGF5KTsNCg0KCXJldHVybiAkY2Fs ZW5kYXItPmRpc3BsYXkoJHN0YXRpYywgJGZ1dHVyZSk7DQp9DQoNCmNsYXNzIFNNRF9DYWxl bmRhciBleHRlbmRzIFNNRF9SYXdfQ2FsZW5kYXIgew0KCS8vIE92ZXJyaWRlIENvbnN0cnVj dG9yDQoJLy8gUGVybWl0cyBtdWx0aXBsZSBldmVudHMgdG8gc2hvdyBwZXIgZGF5DQoJZnVu Y3Rpb24gU01EX0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZXZlbnRzKSB7DQoJCSR0aGlzLT5l dmVudHMgPSAkZXZlbnRzOw0KCQkkdGhpcy0+U01EX1Jhd19DYWxlbmRhcigkeWVhciwkbW9u dGgpOw0KCX0NCg0KCS8vIE92ZXJyaWRlIGRzcERheUNlbGwgdG8gZGlzcGxheSBzdHVmZiBy aWdodA0KCWZ1bmN0aW9uIGRzcERheUNlbGwoJHRoZWRheSkgew0KCQkkY2VsbGNsYXNzID0g JHRoaXMtPmdldENlbGxDbGFzcygpOw0KCQkkaGFzYXJ0aWNsZSA9IGlzc2V0KCR0aGlzLT5l dmVudHNbJHRoZWRheV0pOw0KCQkkdGRjbGFzcyA9ICRjZWxsY2xhc3MgLiAoKCRoYXNhcnRp Y2xlKSA/ICcgJy4kdGhpcy0+Y2xhc3NwcmVmaXguJ2V2ZW50JyA6ICcnKQ0KCQkJCS4gKChp bl9hcnJheSggZGF0ZSgnZC1tLVknLCBta3RpbWUoIDAsIDAsIDAsICR0aGlzLT5nZXRNb250 aCgpLCAkdGhlZGF5LCAkdGhpcy0+Z2V0WWVhcigpKSApLCAkdGhpcy0+aG9saWRheXMpKSA/ ICcgJy4kdGhpcy0+Y2xhc3NwcmVmaXguJ2hvbHMnIDogJycpOw0KCQkkcnVubmluZ2NsYXNz ID0gKGluX2FycmF5KCJjZWxsIiwgJHRoaXMtPmNsYXNzbGV2ZWxzKSB8fCBpbl9hcnJheSgi Y2VsbHBsdXMiLCAkdGhpcy0+Y2xhc3NsZXZlbHMpKSA/IGV4cGxvZGUoJyAnLCAkdGRjbGFz cykgOiBhcnJheSgpOw0KCQlpZigkdGhpcy0+eWVhciA9PSBkYXRlKCdZJyx0aW1lKCkrdHpf b2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09IGRhdGUoJ24nLHRpbWUoKSt0el9vZmZz ZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2onLHRpbWUoKSt0el9vZmZzZXQoKSkgKSB7 DQoJCQkkcnVubmluZ2NsYXNzW10gPSAkdGhpcy0+Y2xhc3NwcmVmaXguJ3RvZGF5JzsNCgkJ fQ0KDQoJCSRvdXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQlpZiggaXNzZXQoJHRoaXMtPmV2 ZW50c1skdGhlZGF5XSkgKSB7DQoJCQkkZGF5c19ldmVudHMgPSAkdGhpcy0+ZXZlbnRzWyR0 aGVkYXldOw0KCQkJZm9yZWFjaCgkZGF5c19ldmVudHMgYXMgJGV2KSB7DQoJCQkJJGV2Y2xh c3MgPSB0cmltKCRldlsndHlwZSddKTsNCgkJCQlpZiAoaW5fYXJyYXkoImNlbGxwbHVzIiwg JHRoaXMtPmNsYXNzbGV2ZWxzKSkgew0KCQkJCQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2 Y2xhc3MpIGFzICRldmMpIHsNCgkJCQkJCSRydW5uaW5nY2xhc3NbXT0gJGV2YzsNCgkJCQkJ fQ0KCQkJCX0NCgkJCQkkb3V0W10gPSAoJHRoaXMtPmV2d3JhcHRhZykgPyB0YWcoJGV2Wydl diddLCAkdGhpcy0+ZXZ3cmFwdGFnLCAoKCRldmNsYXNzICYmIGluX2FycmF5KCJldmVudCIs ICR0aGlzLT5jbGFzc2xldmVscykpID8gJyBjbGFzcz0iJy4kZXZjbGFzcy4nIicgOiAnJykp IDogJGV2WydldiddOw0KCQkJfQ0KCQl9DQoJCSRydW5uaW5nY2xhc3MgPSBhcnJheV91bmlx dWUoJHJ1bm5pbmdjbGFzcyk7DQoNCgkJLy8gQW1hbGdhbWF0ZSB0aGUgZXZlbnQtbGV2ZWwg Y2xhc3NlcyBhbmQgY2VsbC1sZXZlbCBjbGFzc2VzLCBpZiByZXF1aXJlZA0KCQlyZXR1cm4g ZG9UYWcoam9pbignJywkb3V0KSwndGQnLGpvaW4oJyAnLCRydW5uaW5nY2xhc3MpKTsNCgl9 DQoNCglmdW5jdGlvbiBkaXNwbGF5KCRzdGF0aWM9ZmFsc2UsICRmdXR1cmU9ZmFsc2UpIHsN CgkJJGlkID0gKCR0aGlzLT50YWJsZUlEKSA/ICcgaWQ9IicuJHRoaXMtPnRhYmxlSUQuJyIn IDogJyc7DQoJCSRjW10gPSAkdGhpcy0+ZHNwSGVhZGVyKCRzdGF0aWMsICRmdXR1cmUpOw0K CQkkY1tdID0gJHRoaXMtPmRzcERheU5hbWVzKCk7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5 Q2VsbHMoKTsNCg0KCQlyZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3RhYmxlJywkdGhpcy0+ dGFibGVjbGFzcywkaWQpOw0KCX0NCg0KCWZ1bmN0aW9uIGRzcEhlYWRlcigkc3RhdGljLCAk ZnV0dXJlKSB7DQoJCSRjdXJyeXIgPSAkdGhpcy0+Z2V0WWVhcigpOw0KCQkkY3Vycm1vID0g JHRoaXMtPmdldE1vbnRoKCk7DQoJCSRuYXZjbGFzcyA9ICR0aGlzLT5nZXROYXZDbGFzcygp Ow0KCQkkbmF2Y2xhc3MgPSAoJG5hdmNsYXNzKSA/ICcgY2xhc3M9IicuJG5hdmNsYXNzLici JyA6ICcnOw0KCQkkZmlsdGVycyA9IGFycmF5KCk7DQoJCSRmaWx0ZXJIaWQgPSBhcnJheSgp Ow0KCQlpZiAoISRzdGF0aWMpIHsNCgkJCWZvcmVhY2goJHRoaXMtPmZvcHRzIGFzICRmaWx0 ZXIpIHsNCgkJCQlmb3JlYWNoKCRmaWx0ZXIgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkJCSRm aWx0ZXJzW10gPSAka2V5Lic9Jy4kdmFsOw0KCQkJCQkkZmlsdGVySGlkW10gPSBoSW5wdXQo JGtleSwgJHZhbCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRmaWx0ZXJVUkwgPSBqb2luKGEs ICRmaWx0ZXJzKTsNCg0KCQkvLyBNb250aCBzZWxlY3QgbGlzdA0KCQlpZiAoJHRoaXMtPnVz ZVNlbGVjdG9yKCdtb250aCcpICYmICEkc3RhdGljKSB7DQoJCQlmb3IgKCAkaWR4ID0gMTsg JGlkeCA8PSAxMjsgJGlkeCsrICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4 LiciJzsNCgkJCQlpZiAoICRpZHggPT0gJGN1cnJtbyApICR0YWdhdHRzIC49ICcgc2VsZWN0 ZWQ9InNlbGVjdGVkIic7DQoJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKHNhZmVfc3RyZnRp bWUoJHRoaXMtPm10aE5hbWVGbXQsIG1rdGltZSgwLDAsMCwkaWR4KSwgJHRoaXMtPmdtdCwg JHRoaXMtPmxhbmcpLCAnb3B0aW9uJywgJycsICR0YWdhdHRzKTsNCgkJCX0NCgkJCSRzZWxl Y3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlz LT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcyksICcgbmFtZT0ibSInLigoJHRo aXMtPnNlbGJ0bikgPyAnJyA6ICcgb25jaGFuZ2U9InN1Ym1pdCgpIicpLCAnJykNCiAgIAkJ CQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykpID8gJycgOiBoSW5wdXQoJ3knLCAk Y3VycnlyKSk7DQoJCQkkb3B0aW9udGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91dA0KCQl9 IGVsc2Ugew0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZygkdGhpcy0+Z2V0TW9udGhOYW1lKCks ICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpKTsN CgkJfQ0KDQoJCS8vIFllYXIgc2VsZWN0IGxpc3QNCgkJJHkwID0gJHRoaXMtPmdldEVZZWFy KCk7DQoJCSR5MSA9ICR0aGlzLT5nZXRMWWVhcigpOw0KDQoJCWlmICgkdGhpcy0+dXNlU2Vs ZWN0b3IoJ3llYXInKSAmJiAoJHkwICE9ICR5MSkgJiYgISRzdGF0aWMpIHsNCgkJCWZvciAo ICRpZHggPSAkeTA7ICRpZHggPD0gJHkxOyAkaWR4KysgKSB7DQoJCQkJJHRhZ2F0dHMgPSAn IHZhbHVlPSInLiRpZHguJyInOw0KCQkJCWlmICggJGlkeCA9PSAkY3VycnlyICkgJHRhZ2F0 dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJCQkkb3B0aW9udGFnc1tdID0gZG9U YWcoJGlkeCwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQl9DQoJCQkkc2VsZWN0b3Jb XSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3 cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9InkiJy4oKCR0aGlzLT5z ZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQoJCQkJCS4gKCgk dGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykpID8gJycgOiBoSW5wdXQoJ20nLCAkY3Vycm1v KSk7DQoJCX0gZWxzZSB7DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKCR0aGlzLT5nZXRZZWFy KCksICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3Mp KTsNCgkJfQ0KCQkkZXh0cmFzID0gJyc7DQoJCWlmICghJHN0YXRpYyAmJiAoICR0aGlzLT51 c2VTZWxlY3RvcignbW9udGgnKSB8fCAkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSApKSB7 DQoJCQlpZiAoJHRoaXMtPnNlbGJ0bikgew0KCQkJCSRleHRyYXMgLj0gZG9UYWcoJycsICdp bnB1dCcsICdzbWRfY2FsX2lucHV0JywgJyB0eXBlPSJzdWJtaXQiIHZhbHVlPSInLiR0aGlz LT5zZWxidG4uJyInKTsNCgkJCX0NCgkJCWlmICgkdGhpcy0+dGFibGVJRCkgew0KCQkJCSRl eHRyYXMgLj0gaElucHV0KCdjYWxpZCcsJHRoaXMtPnRhYmxlSUQpOw0KCQkJfQ0KCQkJJGV4 dHJhcyAuPSBqb2luKCcnLCAkZmlsdGVySGlkKTsNCgkJfQ0KDQoJCSRzZWxlY3RvciA9ICc8 Zm9ybSBhY3Rpb249IicuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJyIgbWV0aG9kPSJnZXQiIGlk PSJzbWRfY2FsZGF0ZSI+Jy5kb1RhZyhqb2luKHNwLCAkc2VsZWN0b3IpLiRleHRyYXMsICR0 aGlzLT5teXdyYXB0YWcsICR0aGlzLT5teWNsYXNzKS4nPC9mb3JtPic7DQoNCgkJJG5hdl9i YWNrX2xpbmsgPSAkdGhpcy0+bmF2aWdhdGlvbigkdGhpcy0+eWVhciwgJHRoaXMtPm1vbnRo LCAnLScsICRmaWx0ZXJVUkwpOw0KCQkkbmF2X2Z3ZF9saW5rICA9ICR0aGlzLT5uYXZpZ2F0 aW9uKCR0aGlzLT55ZWFyLCAkdGhpcy0+bW9udGgsICcrJywgJGZpbHRlclVSTCk7DQoNCgkJ JG5hdl9iYWNrID0gKCEkc3RhdGljICYmICRuYXZfYmFja19saW5rKSA/ICc8YSBocmVmPSIn LiRuYXZfYmFja19saW5rLiciJy4kbmF2Y2xhc3MuJz4mIzYwOzwvYT4nIDogJyZuYnNwOyc7 DQovLwkJJG5hdl9md2QgID0gKCghJHN0YXRpYyAmJiAkZnV0dXJlICYmICRuYXZfZndkX2xp bmspIG9yICgkdGhpcy0+bW9udGggIT0gZGF0ZSgnbicsdGltZSgpKSkpID8gJzxhIGhyZWY9 IicuJG5hdl9md2RfbGluay4nIicuJG5hdmNsYXNzLic+JiM2Mjs8L2E+JyA6ICcmbmJzcDsn OyAvLyAqc2hydWcqIGJyZWFrcyBpZiBzdGF0aWMgc2V0IGFuZCBtb250aCA8IHRoaXMgbW9u dGggdXNlZA0KCQkkbmF2X2Z3ZCAgPSAoISRzdGF0aWMgJiYgJGZ1dHVyZSAmJiAkbmF2X2Z3 ZF9saW5rKSA/ICc8YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZjbGFzcy4nPiYj NjI7PC9hPicgOiAnJm5ic3A7JzsNCg0KCQkkY1tdID0gZG9UYWcoJG5hdl9iYWNrLCd0aCcp Ow0KCQkkY1tdID0gJzx0aCBjb2xzcGFuPSInLigoJHRoaXMtPnNob3dJU09XZWVrID09ICcn KSA/IDUgOiA2KS4nIj4nLiRzZWxlY3Rvci4nPC90aD4nOw0KCQkkY1tdID0gZG9UYWcoJG5h dl9md2QsJ3RoJyk7DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0cicpOw0KCX0N Cg0KCWZ1bmN0aW9uIG5hdmlnYXRpb24oJHllYXIsJG1vbnRoLCRkaXJlY3Rpb24sJGZsdCkg ew0KCQlnbG9iYWwgJHBlcm1saW5rX21vZGU7DQoNCgkJaWYoJGRpcmVjdGlvbiA9PSAnLScp IHsNCgkJCWlmKCRtb250aCAtIDEgPCAxKSB7DQoJCQkJJG1vbnRoID0gMTI7DQoJCQkJJHll YXIgLT0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1vbnRoIC09IDE7DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQlpZigkbW9udGggKyAxID4gMTIpIHsNCgkJCQkkbW9udGggPSAxOw0KCQkJCSR5 ZWFyICs9IDE7DQoJCQl9IGVsc2Ugew0KCQkJCSRtb250aCArPSAxOw0KCQkJfQ0KCQl9DQoN CgkJLy8gQWJvcnQgaWYgd2UncmUgYWJvdXQgdG8gZ28gb3V0IG9mIHJhbmdlDQoJCWlmICgk eWVhciA8ICR0aGlzLT5nZXRFWWVhcigpIHx8ICR5ZWFyID4gJHRoaXMtPmdldExZZWFyKCkp IHsNCgkJCXJldHVybiAnJzsNCgkJfQ0KDQoJCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyBh LidjYWxpZD0nLiR0aGlzLT50YWJsZUlEIDogJyc7IC8vIEFsbG93IHNwZWNpZmljIGNhbGVu ZGFyIG5hdmlnYXRpb24sIGluIGNhc2UgdGhlcmUncyBtb3JlIHRoYW4gb25lIHBlciBwYWdl DQoJCWlmKCRwZXJtbGlua19tb2RlICE9ICdtZXNzeScpIHsNCgkJCXJldHVybiAiP209JG1v bnRoIi5hLiJ5PSR5ZWFyIi4kaWQuYS4kZmx0Ow0KCQl9IGVsc2UgeyAvLyBmb3IgbWVzc3kg VVJMJ3Mgd2UgbmVlZCB0byBidWlsZCB0aGUgZW50aXJlIHJlcXVlc3Qgc3RyaW5nIGZpcnN0 LCB0aGVuIHRhY2sgb24gdGhlIHJlc3QNCgkJCSRvdXQgPSBtYWtlT3V0KCdpZCcsJ3MnLCdj JywncScsJ3BnJywncCcsJ21vbnRoJyk7DQoJCQkkciA9ICc/JzsNCgkJCWZvcmVhY2goJG91 dCBhcyAka2V5ID0+ICR2YWwgKSB7DQoJCQkJJHIgLj0gKCR2YWwpID8gIiRrZXk9JHZhbCIu YSA6ICcnOw0KCQkJfQ0KCQkJcmV0dXJuICRyLiJtPSRtb250aCIuYS4ieT0keWVhciIuJGlk LmEuJGZsdDsNCgkJfQ0KCX0NCn0NCg0KY2xhc3MgU01EX1NtYWxsX0NhbGVuZGFyIGV4dGVu ZHMgU01EX0NhbGVuZGFyIHsNCgl2YXIgJHNlY3Rpb24gPSAnJzsNCgl2YXIgJGNhdGVnb3J5 ID0gJyc7DQoJZnVuY3Rpb24gU01EX1NtYWxsX0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZXZl bnRzLCRzZWN0aW9uLCRjYXRlZ29yeSkgew0KCQkkdGhpcy0+c2VjdGlvbiA9ICRzZWN0aW9u Ow0KCQkkdGhpcy0+Y2F0ZWdvcnkgPSAkY2F0ZWdvcnk7DQoJCSR0aGlzLT5TTURfQ2FsZW5k YXIoJHllYXIsJG1vbnRoLCRldmVudHMpOw0KCX0NCg0KCWZ1bmN0aW9uIGRzcERheUNlbGwo JHRoZWRheSkgew0KCQlnbG9iYWwgJHBlcm1saW5rX21vZGU7DQoNCgkJJGNlbGxjbGFzcyA9 ICR0aGlzLT5nZXRDZWxsQ2xhc3MoKS4nICc7DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRo aXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJCSRjbGFzc1tdID0gJGNlbGxjbGFzcyAuICgoJGhh c2FydGljbGUpID8gJHRoaXMtPmNsYXNzcHJlZml4LidldmVudCcgOiAnJyk7DQoJCWlmICgo aW5fYXJyYXkoIGRhdGUoJ2QtbS1ZJywgbWt0aW1lKCAwLCAwLCAwLCAkdGhpcy0+Z2V0TW9u dGgoKSwgJHRoZWRheSwgJHRoaXMtPmdldFllYXIoKSkgKSwgJHRoaXMtPmhvbGlkYXlzKSkg KSB7DQoJCQkkY2xhc3NbXSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4naG9scyc7DQoJCX0NCgkJ aWYoJHRoaXMtPm1vbnRoID09IGRhdGUoJ24nLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAk dGhlZGF5ID09IGRhdGUoJ2onLHRpbWUoKSt0el9vZmZzZXQoKSkgKSB7DQoJCQkkY2xhc3Nb XSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4ndG9kYXknOw0KCQl9DQoNCgkJaWYoIGlzc2V0KCR0 aGlzLT5ldmVudHNbJHRoZWRheV0pICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2 ZW50c1skdGhlZGF5XTsNCgkJCWZvcmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJ CSRldmNsYXNzID0gdHJpbSgkZXZbJ3R5cGUnXSk7DQoJCQkJZm9yZWFjaCAoZXhwbG9kZSgn ICcsICRldmNsYXNzKSBhcyAkZXZjKSB7DQoJCQkJCSRjbGFzc1tdPSAkZXZjOw0KCQkJCX0N Cg0KCQkJCSRvdXRbXSA9ICgkdGhpcy0+ZXZ3cmFwdGFnKSA/IHRhZygkZXZbJ2V2J10sICR0 aGlzLT5ldndyYXB0YWcsICgoJGV2Y2xhc3MpID8gJyBjbGFzcz0iJy4kZXZjbGFzcy4nIicg OiAnJykpIDogJGV2WydldiddOw0KCQkJfQ0KDQoJCQlpZiggJHBlcm1saW5rX21vZGUgIT0g J3llYXJfbW9udGhfZGF5X3RpdGxlJyApIHsNCgkJCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4n P2RhdGU9Jy4kdGhpcy0+eWVhci4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGlzLT5tb250 aCkuJy0nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhlZGF5KTsNCgkJCQlpZigkdGhpcy0+c2Vj dGlvbikgeyAkaHJlZiA9ICRocmVmLmEuJ3M9Jy4kdGhpcy0+c2VjdGlvbjsgfQ0KCQkJCWlm KCR0aGlzLT5jYXRlZ29yeSkgeyAkaHJlZiA9ICRocmVmLmEuJ2M9Jy4kdGhpcy0+Y2F0ZWdv cnk7IH0NCgkJCQkkaHJlZiAuPSAnIic7DQoJCQl9IGVsc2Ugew0KCQkJCSRzZWN0aW9uID0g KCR0aGlzLT5zZWN0aW9uKSA/ICR0aGlzLT5zZWN0aW9uLicvJyA6ICcnOw0KCQkJCSRocmVm ID0gJyBocmVmPSInLmh1LiRzZWN0aW9uLiR0aGlzLT55ZWFyLicvJy4kdGhpcy0+ZG91Ymxl ZGlnaXQoJHRoaXMtPm1vbnRoKS4nLycuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGVkYXkpLici JzsNCgkJCX0NCg0KLy8JCQkkdGl0bGUgPSAnIHRpdGxlPSInLnNhZmVfc3RyZnRpbWUoJyV4 JyxnbW1rdGltZSgwLDAsMCwkdGhpcy0+bW9udGgsJHRoZWRheSsxLCR0aGlzLT55ZWFyKSku JyInOyAvLyBubyBpZGVhIHdoeSAkdGhlZGF5KzEsIGJ1dCBvdGhlcndpc2UgaXQgd29uJ3Qg d29yaw0KDQoJCQkkY1tdID0gZG9UYWcoJHRoZWRheS5qb2luKCcnLCRvdXQpLCdhJywnJywk aHJlZik7DQoJCX0gZWxzZSB7DQoJCQkkY1tdID0gJHRoZWRheTsNCgkJfQ0KDQoJCXJldHVy biBkb1RhZyhqb2luKCcnLCRjKSwndGQnLGpvaW4oJyAnLCRjbGFzcykpOw0KCX0NCg0KCWZ1 bmN0aW9uIGRvdWJsZWRpZ2l0KCRuKSB7DQoJCWlmKCRuIDwgMTApIHsgJG4gPSAnMCcuKGlu dCkkbjsgfQ0KCQlyZXR1cm4gJG47DQoJfQ0KDQp9DQoNCi8qKg0KKiBCYXNpYyBDYWxlbmRh ciBkYXRhIGFuZCBkaXNwbGF5DQoqIGh0dHA6Ly93d3cub3NjYXJtLm9yZy9zdGF0aWMvcGcv Y2FsZW5kYXJDbGFzcy8NCiogQGF1dGhvciBPc2NhciBNZXJpZGENCiogQGNyZWF0ZWQgSmFu IDE4IDIwMDQNCiogQHBhY2thZ2UgIGdvQ29yZUxpYg0KKi8NCmNsYXNzIFNNRF9SYXdfQ2Fs ZW5kYXIgew0KdmFyICRnbXQgPSAxOw0KdmFyICRsYW5nOw0KdmFyICR5ZWFyOw0KdmFyICRl eXI7DQp2YXIgJGx5cjsNCnZhciAkbW9udGg7DQp2YXIgJGRheU5hbWVGbXQ7DQp2YXIgJG10 aE5hbWVGbXQ7DQp2YXIgJHN0YXJ0RGF5Ow0KdmFyICRzZWxlY3RvcnM7DQp2YXIgJHNlbGJ0 bjsNCnZhciAkc2hvd0lTT1dlZWs7DQp2YXIgJGVuZERheTsNCnZhciAkZmlyc3REYXlPZldl ZWsgPSAwOw0KdmFyICRzdGFydE9mZnNldCA9IDA7DQp2YXIgJGNsYXNzbGV2ZWxzOw0KdmFy ICRjbGFzc3ByZWZpeDsNCnZhciAkZXZjbGFzc3ByZWZpeDsNCnZhciAkZXZ3cmFwdGFnOw0K dmFyICRteXdyYXB0YWc7DQp2YXIgJHJvd2NsYXNzOw0KdmFyICRjZWxsY2xhc3M7DQp2YXIg JGVtcHR5Y2xhc3M7DQp2YXIgJGlzb2NsYXNzOw0KdmFyICRuYXZjbGFzczsNCnZhciAkbXlj bGFzczsNCnZhciAkZm9wdHM7DQp2YXIgJGhvbGlkYXlzOw0KLyoqDQoqIENvbnN0cnVjdG9y DQoqDQoqIEBwYXJhbSBpbnRlZ2VyLCB5ZWFyDQoqIEBwYXJhbSBpbnRlZ2VyLCBtb250aA0K KiBAcmV0dXJuIG9iamVjdA0KKiBAcHVibGljDQoqLw0KZnVuY3Rpb24gU01EX1Jhd19DYWxl bmRhciAoICR5ciwgJG1vICkgew0KCSR0aGlzLT5zZXRZZWFyKCR5cik7DQoJJHRoaXMtPnNl dE1vbnRoKCRtbyk7DQoJJHRoaXMtPnNldENsYXNzUHJlZml4KCdzbWRfY2FsXycpOw0KDQoJ JHRoaXMtPnN0YXJ0VGltZSA9IHN0cnRvdGltZSggIiR5ci0kbW8tMDEgMDA6MDAiICk7DQoJ JHRoaXMtPnN0YXJ0RGF5CT0gZGF0ZSggJ0QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRo aXMtPndlZWtEYXkJPSBkYXRlKCAndycsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+ ZW5kRGF5ID0gZGF0ZSggJ3QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPmVuZFRp bWUgICA9IHN0cnRvdGltZSggIiR5ci0kbW8tIi4kdGhpcy0+ZW5kRGF5LiIgMjM6NTkiICk7 DQoNCgkkdGhpcy0+c2V0TmFtZUZvcm1hdCgnJWEnLCAnZCcpOw0KCSR0aGlzLT5zZXROYW1l Rm9ybWF0KCclQicsICdtJyk7DQoJJHRoaXMtPnNldEZpcnN0RGF5T2ZXZWVrKDApOw0KCSR0 aGlzLT5zZXRTaG93SVNPV2VlaygnJyk7DQoJJHRoaXMtPnNldFRhYmxlSUQoJycpOw0KCSR0 aGlzLT5zZXRUYWJsZUNsYXNzKCcnKTsNCn0NCi8vID09PT0gZW5kIENhbGVuZGFyID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLy8gR2V0dGVy cw0KZnVuY3Rpb24gZ2V0U3RhcnRUaW1lKCkgeyByZXR1cm4gJHRoaXMtPnN0YXJ0VGltZTsg fQ0KZnVuY3Rpb24gZ2V0V2Vla0RheSgpIHsgcmV0dXJuICR0aGlzLT53ZWVrRGF5OyB9DQpm dW5jdGlvbiBnZXRFbmRUaW1lKCkgeyByZXR1cm4gJHRoaXMtPmVuZFRpbWU7IH0NCmZ1bmN0 aW9uIGdldFllYXIoKSB7IHJldHVybiAkdGhpcy0+eWVhcjsgfQ0KZnVuY3Rpb24gZ2V0RVll YXIoKSB7IHJldHVybiAkdGhpcy0+ZXlyOyB9DQpmdW5jdGlvbiBnZXRMWWVhcigpIHsgcmV0 dXJuICR0aGlzLT5seXI7IH0NCmZ1bmN0aW9uIGdldE1vbnRoKCkgeyByZXR1cm4gJHRoaXMt Pm1vbnRoOyB9DQpmdW5jdGlvbiBnZXRSb3dDbGFzcygpIHsgcmV0dXJuICR0aGlzLT5yb3dj bGFzczsgfQ0KZnVuY3Rpb24gZ2V0Q2VsbENsYXNzKCkgeyByZXR1cm4gJHRoaXMtPmNlbGxj bGFzczsgfQ0KZnVuY3Rpb24gZ2V0RW1wdHlDbGFzcygpIHsgcmV0dXJuICR0aGlzLT5lbXB0 eWNsYXNzOyB9DQpmdW5jdGlvbiBnZXRJU09XZWVrQ2xhc3MoKSB7IHJldHVybiAkdGhpcy0+ aXNvY2xhc3M7IH0NCmZ1bmN0aW9uIGdldE5hdkNsYXNzKCkgeyByZXR1cm4gJHRoaXMtPm5h dmNsYXNzOyB9DQpmdW5jdGlvbiBnZXRNb250aE5hbWUoKSB7IHJldHVybiBzYWZlX3N0cmZ0 aW1lKCAkdGhpcy0+bXRoTmFtZUZtdCwgJHRoaXMtPnN0YXJ0VGltZSwgJHRoaXMtPmdtdCwg JHRoaXMtPmxhbmcgKTsgfQ0KLy8gU2V0dGVycw0KZnVuY3Rpb24gc2V0R01UKCRiKXsgJHRo aXMtPmdtdCA9ICRiOyB9DQpmdW5jdGlvbiBzZXRMYW5nKCRjb2RlKXsgJHRoaXMtPmxhbmcg PSAkY29kZTsgfQ0KZnVuY3Rpb24gc2V0VGFibGVJRCgkaWQpIHsgJHRoaXMtPnRhYmxlSUQg PSAkaWQ7IH0NCmZ1bmN0aW9uIHNldFllYXIoJHllYXIpeyAkdGhpcy0+eWVhciA9ICR5ZWFy OyB9DQpmdW5jdGlvbiBzZXRFWWVhcigkeWVhcil7ICR0aGlzLT5leXIgPSAkeWVhcjsgfQ0K ZnVuY3Rpb24gc2V0TFllYXIoJHllYXIpeyAkdGhpcy0+bHlyID0gJHllYXI7IH0NCmZ1bmN0 aW9uIHNldE1vbnRoKCRtb250aCkgeyAkdGhpcy0+bW9udGggPSAoaW50KSRtb250aDsgfQ0K ZnVuY3Rpb24gc2V0U2hvd0lTT1dlZWsoJHZhbCkgeyAkdGhpcy0+c2hvd0lTT1dlZWsgPSAk dmFsOyB9DQpmdW5jdGlvbiBzZXRDbGFzc0xldmVscygkY2xzKXsgJHRoaXMtPmNsYXNzbGV2 ZWxzID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0Q2xhc3NQcmVmaXgoJGNscyl7ICR0aGlzLT5j bGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9uIHNldEV2ZW50UHJlZml4KCRjbHMpeyAk dGhpcy0+ZXZjbGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9uIHNldEV2ZW50V3JhcHRh Zygkd3JhcCl7ICR0aGlzLT5ldndyYXB0YWcgPSAkd3JhcDsgfQ0KZnVuY3Rpb24gc2V0TVlX cmFwdGFnKCR3cmFwKXsgJHRoaXMtPm15d3JhcHRhZyA9ICR3cmFwOyB9DQpmdW5jdGlvbiBz ZXRUYWJsZUNsYXNzKCRjbHMpIHsgJHRoaXMtPnRhYmxlY2xhc3MgPSAoJGNscykgPyAkdGhp cy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRSb3dDbGFzcygkY2xz KXsgJHRoaXMtPnJvd2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMg OiAnJzsgfQ0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAkdGhpcy0+Y2VsbGNsYXNz ID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24g c2V0RW1wdHlDbGFzcygkY2xzKXsgJHRoaXMtPmVtcHR5Y2xhc3MgPSAoJGNscykgPyAkdGhp cy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRJU09XZWVrQ2xhc3Mo JGNscyl7ICR0aGlzLT5pc29jbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4k Y2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldE5hdkNsYXNzKCRjbHMpeyAkdGhpcy0+bmF2Y2xh c3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlv biBzZXRNWUNsYXNzKCRjbHMpeyAkdGhpcy0+bXljbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5j bGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldEZpbHRlck9wdHMoJGYpIHsg JHRoaXMtPmZvcHRzID0gJGY7IH0NCmZ1bmN0aW9uIHNldEhvbGlkYXlzKCRob2xzKSB7ICR0 aGlzLT5ob2xpZGF5cyA9ICRob2xzOyB9DQpmdW5jdGlvbiBzZXRTZWxlY3RvcnMoJHNlbCwg JGJ0bikgeyAkdGhpcy0+c2VsZWN0b3JzID0gJHNlbDsgJHRoaXMtPnNlbGJ0biA9ICRidG47 IH0NCmZ1bmN0aW9uIHVzZVNlbGVjdG9yKCR2YWwpIHsgcmV0dXJuIGluX2FycmF5KCR2YWws ICR0aGlzLT5zZWxlY3RvcnMpOyB9DQpmdW5jdGlvbiBzZXRGaXJzdERheU9mV2VlaygkZCkg ew0KCSR0aGlzLT5maXJzdERheU9mV2VlayA9ICgoaW50KSRkIDw9IDYgYW5kIChpbnQpJGQg Pj0gMCkgPyAoaW50KSRkIDogMDsNCg0KCSR0aGlzLT5zdGFydE9mZnNldCA9IGRhdGUoICd3 JywgJHRoaXMtPnN0YXJ0VGltZSApLSR0aGlzLT5maXJzdERheU9mV2VlazsNCglpZiAoICR0 aGlzLT5zdGFydE9mZnNldCA8IDAgKSB7DQoJCSR0aGlzLT5zdGFydE9mZnNldCA9IDcgLSBh YnMoJHRoaXMtPnN0YXJ0T2Zmc2V0KTsNCgl9DQp9DQovKioNCiogZnJtOiBhbnkgdmFsaWQg UEhQIHN0cmZ0aW1lKCkgc3RyaW5nIG9yIEFCQlIvRlVMTA0KKiB0eXA6IGQgdG8gc2V0IGRh eSwgbSB0byBzZXQgbW9udGggZm9ybWF0DQoqLw0KZnVuY3Rpb24gc2V0TmFtZUZvcm1hdCgk ZnJtLCAkdHlwPSJkIikgew0KCXN3aXRjaCAoJGZybSkgew0KCQljYXNlICJGVUxMIjoNCgkJ CSRmbXQgPSAoJHR5cCA9PSAiZCIpID8gIiVBIiA6ICIlQiI7DQoJCQlicmVhazsNCgkJY2Fz ZSAiQUJCUiI6DQoJCQkkZm10ID0gKCR0eXAgPT0gImQiKSA/ICIlYSIgOiAiJWIiOw0KCQkJ YnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZm10ID0gJGZybTsNCgkJCWJyZWFrOw0KCX0NCg0K CWlmICgkdHlwID09ICJkIikgew0KCQkkdGhpcy0+ZGF5TmFtZUZtdCA9ICRmbXQ7DQoJfSBl bHNlIHsNCgkJJHRoaXMtPm10aE5hbWVGbXQgPSAkZm10Ow0KCX0NCn0NCi8qKg0KKiBSZXR1 cm5zIG1hcmt1cCBmb3IgZGlzcGxheWluZyB0aGUgY2FsZW5kYXIuDQoqIEByZXR1cm4NCiog QHB1YmxpYw0KKi8NCmZ1bmN0aW9uIGRpc3BsYXkgKCApIHsNCgkkaWQgPSAoJHRoaXMtPnRh YmxlSUQpID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAnJzsNCgkkY1tdID0gJzx0 YWJsZScuJGlkLic+JzsNCgkkY1tdID0gJHRoaXMtPmRzcERheU5hbWVzKCk7DQoJJGNbXSA9 ICR0aGlzLT5kc3BEYXlDZWxscygpOw0KCSRjW10gPSAnPC90YWJsZT4nOw0KDQoJcmV0dXJu IGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBlbmQgZGlzcGxheSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0KKiBEaXNwbGF5cyB0aGUg cm93IG9mIGRheSBuYW1lcy4NCiogQHJldHVybiBzdHJpbmcNCiogQHByaXZhdGUNCiovDQpm dW5jdGlvbiBkc3BEYXlOYW1lcyAoICkgew0KCS8vIFRoaXMgaXMgZG9uZSB0byBtYWtlIHN1 cmUgU3VuZGF5IGlzIGFsd2F5cyB0aGUgZmlyc3QgZGF5IG9mIG91ciBhcnJheQ0KCS8vIFVu aXggdGltZSBnZXRzIGEgbGl0dGxlIGZ1bmt5IGF0IHRoZSBiZWdpbm5pbmcgZGVwZW5kaW5n IHVwb24geW91ciB0aW1lem9uZS4NCgkkc2VydmVyb2Zmc2V0ID0gZ21ta3RpbWUoMCwwLDAp IC0gbWt0aW1lKDAsMCwwKTsNCgkkc3RhcnQgPSAoJHNlcnZlcm9mZnNldCA8IDApID8gNCA6 IDM7DQoJJGVuZCA9ICRzdGFydCArIDc7DQoJZm9yKCRpPSRzdGFydDsgJGk8JGVuZDsgJGkr Kykgew0KCQkkbmFtZXNbXSA9IHVjZmlyc3Qoc2FmZV9zdHJmdGltZSgkdGhpcy0+ZGF5TmFt ZUZtdCwgODY0MDAqJGkgLSB0el9vZmZzZXQoKSwgJHRoaXMtPmdtdCwgJHRoaXMtPmxhbmcg KSk7DQoJfQ0KDQoJJGNbXSA9ICc8dHI+JzsNCg0KCSRpID0gJHRoaXMtPmZpcnN0RGF5T2ZX ZWVrOw0KCSRqID0gMDsgLy8gY291bnQgbnVtYmVyIG9mIGRheXMgZGlzcGxheWVkDQoJJGVu ZCA9IGZhbHNlOw0KDQoJaWYgKCR0aGlzLT5zaG93SVNPV2VlayAhPSAnJykgew0KCQkkY1td ID0gIjx0aD4iLiR0aGlzLT5zaG93SVNPV2Vlay4iPC90aD4iOw0KCX0NCglmb3IoJGogPSAw OyAkajw9NjsgJGorKywgJGkrKykgew0KCQlpZigkaSA9PSA3KSB7ICRpID0gMDsgfQ0KCQkk Y1tdID0gJzx0aD4nLiRuYW1lc1skaV0uIjwvdGg+IjsNCgl9DQoNCgkkY1tdID0gJzwvdHI+ JzsNCglyZXR1cm4gam9pbignJywkYyk7DQp9DQovLyA9PT09IGVuZCBkc3BEYXlOYW1lcyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0K KiBEaXNwbGF5cyBhbGwgZGF5IGNlbGxzIGZvciB0aGUgbW9udGgNCioNCiogQHJldHVybiBz dHJpbmcNCiogQHByaXZhdGUNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxscyAoICkgew0KCSRp ID0gMDsgLy8gY2VsbCBjb3VudGVyDQoJJGVtcHR5Q2xhc3MgPSAkdGhpcy0+Z2V0RW1wdHlD bGFzcygpOw0KCSRpc29DbGFzcyA9ICR0aGlzLT5nZXRJU09XZWVrQ2xhc3MoKTsNCgkkcm93 Q2xhc3MgPSAkdGhpcy0+Z2V0Um93Q2xhc3MoKTsNCgkkcm93Q2xhc3MgPSAoJHJvd0NsYXNz KSA/ICcgY2xhc3M9IicuJHJvd0NsYXNzLiciJyA6ICcnOw0KDQoJJGNbXSA9ICc8dHInLiRy b3dDbGFzcy4nPic7DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrICE9ICcnKSB7DQoJCSRj W10gPSAnPHRkIGNsYXNzPSInLiRpc29DbGFzcy4nIj4nLmRhdGUoICdXJywgJHRoaXMtPnN0 YXJ0VGltZSApLic8L3RkPic7DQoJfQ0KCS8vIGZpcnN0IGRpc3BsYXkgZW1wdHkgY2VsbHMg YmFzZWQgb24gd2hhdCB3ZWVrZGF5IHRoZSBtb250aCBzdGFydHMgaW4NCglmb3IoICRqPTA7 ICRqPCR0aGlzLT5zdGFydE9mZnNldDsgJGorKyApCXsNCgkJJGkrKzsNCgkJJGNbXSA9ICc8 dGQgY2xhc3M9IicuJGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCX0gLy8gZW5kIG9m ZnNldCBjZWxscw0KDQoJLy8gd3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBkYXlzLCBhdCBl YWNoIHN1bmRheSwgc3RhcnQgYSBuZXcgcm93Lg0KCWZvciggJGQ9MTsgJGQ8PSR0aGlzLT5l bmREYXk7ICRkKysgKSB7DQoJCSRpKys7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbCgg JGQgKTsNCgkJaWYgKCAkaSU3ID09IDAgKSB7ICRjW10gPSAnPC90cj4nOyB9DQoJCWlmICgg JGQ8JHRoaXMtPmVuZERheSAmJiAkaSU3ID09IDAgKSB7DQoJCQkkY1tdID0gJzx0cicuJHJv d0NsYXNzLic+JzsNCgkJCWlmICgkdGhpcy0+c2hvd0lTT1dlZWsgIT0gJycpIHsNCgkJCQkk Y1tdID0gJzx0ZCBjbGFzcz0iJy4kaXNvQ2xhc3MuJyI+Jy5kYXRlKCAnVycsIHN0cnRvdGlt ZSggJHRoaXMtPmdldFllYXIoKS4iLSIuJHRoaXMtPmdldE1vbnRoKCkuIi0iLihpbnQpKCRk ICsgMSkgLiIgMDA6MDAiICkpLic8L3RkPic7DQoJCQl9DQoJCX0NCgl9DQoJLy8gZmlsbCBp biB0aGUgZmluYWwgcm93DQoJJGxlZnQgPSA3IC0gKCAkaSU3ICk7DQoJaWYgKCAkbGVmdCA8 IDcpCXsNCgkJZm9yICggJGo9MDsgJGo8JGxlZnQ7ICRqKysgKQl7DQoJCSAgJGNbXSA9ICc8 dGQgY2xhc3M9IicuJGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCQl9DQoJCSRjW10g PSAiXG5cdDwvdHI+IjsNCgl9DQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBl bmQgZHNwRGF5Q2VsbHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQovKioNCiogb3V0cHV0cyB0aGUgY29udGVudHMgZm9yIGEgZ2l2ZW4gZGF5 DQoqDQoqIEBwYXJhbSBpbnRlZ2VyLCBkYXkNCiogQGFic3RyYWN0DQoqLw0KZnVuY3Rpb24g ZHNwRGF5Q2VsbCAoICRkYXkgKSB7DQoJcmV0dXJuICc8dGQ+Jy4kZGF5Lic8L3RkPic7DQp9 DQovLyA9PT09IGVuZCBkYXlDZWxsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KfSAvLyBlbmQgY2xhc3MNCg0KLy8gUGVyZm9ybSBvbmUgb2Yg MiB0eXBlcyBvZiB0ZXN0OiBhIGZsYWctYmFzZWQgdGVzdCwgb3IgYW4gaW5mby1iYXNlZCB0 ZXN0DQpmdW5jdGlvbiBzbWRfaWZfY2FsKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNt ZF9jYWxfZmxhZywgJHNtZF9jYWxfaWQsICRzbWRfeWVhciwgJHNtZF9tb250aCwgJHNtZF93 ZWVrLCAkc21kX2RheTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdmbGFnJyA9PiAn JywgLy8gZXZlbnQsIHJlY3VyLCBtdWx0aShwcmV2LGZpcnN0LGxhc3QpLCBjYW5jZWwsIGhv bHMNCgkJJ2NhbGlkJyA9PiAnJywNCgkJJ3llYXInID0+ICcnLA0KCQknbW9udGgnID0+ICcn LA0KCQknd2VlaycgPT4gJycsDQoJCSdkYXknID0+ICcnLA0KCQknbG9naWMnID0+ICdhbmQn LA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJJGZsYWcgPSBkb19saXN0 KCRmbGFnKTsNCgkkY3RyID0gJG51bSA9IDA7DQoNCglpZiAoJHNtZF9jYWxfZmxhZyAmJiAk ZmxhZyAmJiAkZmxhZ1swXSAhPSAnJykgew0KCQkkbnVtICs9IGNvdW50KCRmbGFnKTsNCgkJ Zm9yZWFjaCAoJGZsYWcgYXMgJHdoYXRub3QpIHsNCgkJCWlmIChlbXB0eSgkd2hhdG5vdCkp IGNvbnRpbnVlOw0KCQkJJGN0ciArPSAoaW5fYXJyYXkoJHdoYXRub3QsICRzbWRfY2FsX2Zs YWcpKSA/IDEgOiAwOw0KCQl9DQoJfQ0KCWlmICgkY2FsaWQpIHsNCgkJJG51bSsrOw0KCQkk Y3RyICs9ICgkc21kX2NhbF9pZCA9PT0gJGNhbGlkKSA/IDEgOiAwOw0KCX0NCglmb3JlYWNo IChhcnJheSgieWVhciIsICJtb250aCIsICJ3ZWVrIiwgImRheSIpIGFzICR0ZXN0KSB7DQoJ CSR0ZXN0ZXIgPSAkJHRlc3Q7DQoJCSRnYmwgPSAnc21kXycuJHRlc3Q7DQoJCSRjb21wYXJl ID0gJCRnYmw7DQoNCgkJaWYgKCR0ZXN0ZXIpIHsNCgkJCSRudW0rKzsNCgkJCXByZWdfbWF0 Y2goJy8oWyE9PD5dKyk/KFtcZF0rKS8nLCAkdGVzdGVyLCAkbWF0Y2hlcyk7DQoJCQlpZiAo JGRlYnVnKSB7DQoJCQkJZG1wKCJURVNUIElGOiAiLiAkY29tcGFyZS4gKCgkbWF0Y2hlc1sx XSkgPyAkbWF0Y2hlc1sxXSA6ICc9JykgLiAkbWF0Y2hlc1syXSApOw0KCQkJfQ0KCQkJc3dp dGNoICgkbWF0Y2hlc1sxXSkgew0KCQkJCWNhc2UgIiEiOg0KCQkJCQkkY3RyICs9ICgkY29t cGFyZSE9JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIj4i Og0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT4kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJ YnJlYWs7DQoJCQkJY2FzZSAiPj0iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT49JG1hdGNo ZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIjwiOg0KCQkJCQkkY3Ry ICs9ICgkY29tcGFyZTwkbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAiPD0iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZTw9JG1hdGNoZXNbMl0pID8gMSA6 IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJl PT0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoJ JHJlc3VsdCA9ICgoJGN0ciA9PT0gJG51bSAmJiAkbG9naWMgPT0gImFuZCIpIHx8ICRjdHIg PiAwICYmICRsb2dpYyA9PSAib3IiKSA/IHRydWUgOiBmYWxzZTsNCglyZXR1cm4gcGFyc2Uo RXZhbEVsc2UoJHRoaW5nLCAkcmVzdWx0KSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9jYWxfaW5m bygkYXR0cykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHNtZF9jYWxfZmxhZywgJHNtZF9jYWxf aWQsICRzbWRfeWVhciwgJHNtZF9tb250aCwgJHNtZF93ZWVrLCAkc21kX2RheTsNCg0KCWV4 dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyA9PiAnZmxhZycsIC8vIGZsYWcsIHllYXIs IG1vbnRoLCB3ZWVrLCBkYXksIGNhbGlkLCBzZWN0aW9uLCBjYXRlZ29yeSwgYXV0aG9yDQoJ CSdqb2luJyA9PiAnICcsDQoJCSdodG1sJyA9PiAwLA0KCQknZXNjYXBlJyA9PiAnaHRtbCcs DQoJKSwgJGF0dHMpKTsNCg0KCSRqb2luID0gKCRodG1sKSA/IGEgOiAkam9pbjsgLy8gaHRt bCBtb2RlIGZvcmNlcyBhbXBlcnNhbmQgam9pbg0KCSR0eXBlID0gZG9fbGlzdCgkdHlwZSk7 DQoJJHJldCA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHR5cGUgYXMgJGl0ZW0pIHsNCgkJc3dp dGNoICgkaXRlbSkgew0KCQkJY2FzZSAiZmxhZyI6DQoJCQkJJHJldFtdID0gam9pbigkam9p biwgJHNtZF9jYWxfZmxhZyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ5ZWFyIjoNCgkJCQlp ZiAoJHNtZF95ZWFyKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ3k9JyA6ICcnKSAu ICRzbWRfeWVhcjsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJtb250aCI6DQoJCQkJ aWYgKCRzbWRfbW9udGgpIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAnbT0nIDogJycp IC4gJHNtZF9tb250aDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ3ZWVrIjoNCgkJ CQlpZiAoJHNtZF93ZWVrKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ3c9JyA6ICcn KSAuICRzbWRfd2VlazsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJkYXkiOg0KCQkJ CWlmICgkc21kX2RheSkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdkPScgOiAnJykg LiAkc21kX2RheTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJzZWN0aW9uIjoNCgkJ CQlpZiAoJHByZXRleHRbJ3MnXSkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdzPScg OiAnJykgLiAkcHJldGV4dFsncyddOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImNh dGVnb3J5IjoNCgkJCQlpZiAoJHByZXRleHRbJ2MnXSkgew0KCQkJCQkkcmV0W10gPSAoKCRo dG1sKSA/ICdjPScgOiAnJykgLiAkcHJldGV4dFsnYyddOw0KCQkJCX0NCgkJCQlicmVhazsN CgkJCWNhc2UgImF1dGhvciI6DQoJCQkJJGN1cnJhdXRob3IgPSBhdXRob3IoYXJyYXkoKSk7 DQoJCQkJaWYgKCRjdXJyYXV0aG9yKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2F1 dGhvcj0nIDogJycpIC4gJGN1cnJhdXRob3I7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2Fz ZSAiY2FsaWQiOg0KCQkJCWlmICgkc21kX2NhbF9pZCkgew0KCQkJCQkkcmV0W10gPSAoKCRo dG1sKSA/ICdjYWxpZD0nIDogJycpIC4gJHNtZF9jYWxfaWQ7DQoJCQkJfQ0KCQkJCWJyZWFr Ow0KCQl9DQoJfQ0KCSRvdXQgPSBqb2luKCRqb2luLCAkcmV0KTsNCglyZXR1cm4gKCRlc2Nh cGU9PSdodG1sJykgPyBodG1sc3BlY2lhbGNoYXJzKCRvdXQpIDogJG91dDsNCn0NCg0KZnVu Y3Rpb24gc21kX2NhbF9ub3coJGF0dHMpIHsNCglnbG9iYWwgJGRhdGVmb3JtYXQ7DQoNCgll eHRyYWN0KGxBdHRzKGFycmF5KA0KCQknZm9ybWF0JyA9PiAkZGF0ZWZvcm1hdCwNCgkJJ2dt dCcgPT4gJycsDQoJCSdsYW5nJyA9PiAnJywNCgkpLCAkYXR0cykpOw0KDQoJcmV0dXJuIHNh ZmVfc3RyZnRpbWUoJGZvcm1hdCwgdGltZSgpLCAkZ210LCAkbGFuZyk7DQp9IjtzOjQ6InR5 cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6NDAwNDQ6Igk8 cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfY2FsZW5kYXI8 L2gxPgoKCTxwPlJlbmRlciBhIGNhbGVuZGFyIHdpdGggb25lIG9yIG1vcmUgYXJ0aWNsZXMg YXMgZXZlbnRzIG9uIGVhY2ggZGF5LiBVc2VmdWwgZm9yIGdpZyBndWlkZXMsICYjODIyMDt3 aGF0JiM4MjE3O3Mgb24mIzgyMjE7IG9yIHNjaGVkdWxpbmcuPC9wPgoKCTxoMiBpZD0iZmVh dHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1bGwtc2l6ZSBvciBtaW5pIGNh bGVuZGFyIGJ5IG1vbnRoIHdpdGggb3B0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwv c3Bhbj4gd2VlayBkaXNwbGF5PC9saT4KCQk8bGk+TmF2aWdhdGlvbjogbmV4dC9wcmV2IG1v bnRoIG9yIG9wdGlvbmFsIGRyb3Bkb3duIG9mIG1vbnRoIC8geWVhci4gUGVybWl0dGVkIHll YXIgcmFuZ2UgY2FuIGJlIGRldGVybWluZWQgYnkgZmlyc3QvbGFzdCBhcnRpY2xlIG9yIGV4 dGVuZGVkIGJ5ICsvLSBOIHllYXJzIGluIGVpdGhlciBkaXJlY3Rpb248L2xpPgoJCTxsaT5P bmUgYXJ0aWNsZSA9IG9uZSBldmVudCwgbmF0aXZlIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IHdpdGggdGhlIFBvc3RlZCBkYXRlIGJlaW5nIHRoZSBkYXRlIGl0IGFwcGVh cnMgaW4gdGhlIGNhbGVuZGFyPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50cyBieSBjYXRlZ29y eSAvIHNlY3Rpb24gLyBhdXRob3IgLyBzdGF0dXMgLyB0aW1lIG9yIGV4cGlyeTwvbGk+CgkJ PGxpPk5vbWluYXRlIGEgY3VzdG9tIGZpZWxkIHRvIHNwZWNpZnkgZXZlbnQgZnJlcXVlbmN5 ICgxIHdlZWsgb3IgMTAgZGF5cyBvciAzIG1vbnRocywgZXRjKS4gTXVsdGlwbGUgZnJlcXVl bmNpZXMgY2FuIGJlIGdpdmVuPC9saT4KCQk8bGk+Tm9taW5hdGUgYSBjdXN0b20gZmllbGQg Zm9yIGV4Y2x1c2lvbnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGF0IGV2ZW50IGlz IGNhbmNlbGxlZCkuIE9wdGlvbiB0byBlaXRoZXIgc2hvdyBjYW5jZWxsZWQgZXZlbnRzIG9u IHRoYXQgZGF5IHNvIHlvdSBjYW4gc3R5bGUgdGhlbSBkaWZmZXJlbnRseSwgb3IgcmVtb3Zl IHRoZW0gY29tcGxldGVseTwvbGk+CgkJPGxpPlNob3cgc3Bhbm5lZCBldmVudHMgKG9uZXMg dGhhdCBsYXN0IG1vcmUgdGhhbiBhIGRheSkgYmFzZWQgb24gdGhlIGFydGljbGXigJlzIGV4 cGlyeS4gQW55IGV2ZW50IHRoYXQgZG9lcyA8c3BhbiBjbGFzcz0iY2FwcyI+Tk9UPC9zcGFu PiByZWN1ciBhbmQgaGFzIGEgZnV0dXJlIGV4cGlyeSBjYW4gYmUgdHJlYXRlZCB0aGlzIHdh eTwvbGk+CgkJPGxpPkZ1dHVyZSwgZXhwaXJlZCBvciBzdGlja3kgZXZlbnRzIG1heSBiZSBk aXNwbGF5ZWQgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5TcGVjaWZ5IGhvbGlkYXlzIG9uIGEg cGVyIGNhbGVuZGFyIGJhc2lzIChlaXRoZXIgcmVjdXJyaW5nIGV2ZW50cyAmIzgyMTI7IHdp dGhvdXQgeWVhciAmIzgyMTI7IG9yIHNwZWNpZmljIGhvbGlkYXlzKS4gRGVmaW5lIHRoZSBs aXN0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgcGx1Z2luIGF0dHJpYnV0ZSBvciBpbiBhIDxj b2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+IG9mIHlvdXIgY2hvaWNlIGFuZCBk ZWNpZGUgd2hpY2ggdHlwZXMgb2YgZXZlbnQgYXJlIHRvIGJlIGNhbmNlbGxlZCBkdWUgdG8g aG9saWRheXM8L2xpPgoJCTxsaT5FYWNoIGV2ZW50IGNhbiBiZSBwYXNzZWQgdG8gYSBmb3Jt L2NvbnRhaW5lciBzbyB5b3UgY2FuIGJ1aWxkIGl0IHlvdXIgd2F5LCBvciB1c2UgdGhlIGJ1 aWx0LWluIGh5cGVybGlua2VkIHRpdGxlLiBTcGFubmVkIGV2ZW50cyBjYW4gYmUgc2VudCB0 byBhIHNlcGFyYXRlIGZvcm0gaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRpb25hbCB0 ZXN0cyBmb3IgZXZlbnQgZmxhZ3MgKHJlY3VycmluZywgc3Bhbm5lZCwgY2FuY2VsbGVkLCBo b2xpZGF5cykgYW5kIGRhdGVzIHNvIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gbG9naWMgaW4g eW91ciBmb3JtL2NvbnRhaW5lcjwvbGk+CgkJPGxpPkNsYXNzIHNvdXA6IHRhYmxlLSwgcm93 LSwgY2VsbC0sIGFuZCBldmVudC1sZXZlbCBjbGFzc2VzIGZvciBpbmRpY2F0aW5nIGRpZmZl cmVudCBzY2VuYXJpb3MgKHNwYW5uZWQgZXZlbnQsIHJlY3VycmluZyBldmVudCwgY2FuY2Vs bGVkIGV2ZW50LCBldGMpOyBjdXN0b20gY2xhc3NlcyBjYW4gYmUgc3BlY2lmaWVkIGJhc2Vk IG9uIGFuIGV2ZW50PC9saT4KCQk8bGk+VGFnIHRvIG91dHB1dCB2YXJpb3VzIGV2ZW50IG9y IGNhbGVuZGFyIGNoYXJhY3RlcmlzdGljcyAoZS5nLiB0aGUgbW9udGgsIHllYXIsIGNhbGVu ZGFyIGlkLCBzZWN0aW9uIGFuZCBzbyBvbik8L2xpPgoJCTxsaT5UYWcgdG8gb3V0cHV0IHRo ZSBjdXJyZW50IGRhdGUvdGltZSAoZm9ybWF0dGVkIGhvdyB5b3UgbGlrZSk8L2xpPgoJPC91 bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJl Zj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4u IEpvaW50bHkgZnVuZGVkIGJ5IGdlbmVyb3VzIGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGph a29iIGFuZCByZW5vYmlyZC4gQmFzZWQgaGVhdmlseSBvbiBtZHBfY2FsZW5kYXIuIEFsbCBw cm9wcyB0byB0aGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBwbHVnaW4sIGFuZCBvZiBjb3Vy c2UgdGhlIGNsYXNzIHVwb24gd2hpY2ggdGhlIGNhbGVuZGFyIGlzIGJhc2VkLiBBbmQgbm90 IGZvcmdldHRpbmcgb3VyIGF3ZXNvbWUgVGV4dHBhdHRlcm4gZGV2cyB3aG8gY29udGludWUg dG8gcHVzaCB0aGlzIGxpdHRsZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPiB0byB0 aGUgc3RhcnMuPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0 YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dHBhdHRl cm4gNC4wLjc8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBo cmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA1Mi9zbWRfY2FsZW5kYXIi PnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUs IGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0 cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI5MjAwIj5mb3J1 bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNz IG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNp bXBseSBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLjwvcD4KCgk8 aDIgaWQ9Im5hbWluZyI+TmFtaW5nIGNvbnZlbnRpb248L2gyPgoKCTxwPkJlZm9yZSBiZWdp bm5pbmcgdGhlcmUmIzgyMTc7cyBhIGxpdHRsZSBiaXQgb2Ygbm9tZW5jbGF0dXJlIHRvIGdl dCBvdXQgb2YgdGhlIHdheTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ Y2VsbDwvc3Bhbj4gOiBhIHNwZWNpZmljIGRheSBvbiB0aGUgY2FsZW5kYXIgaW4gYSBwYXJ0 aWN1bGFyIG1vbnRoL3llYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnQ8 L3NwYW4+IDogYW4gYXJ0aWNsZS4gSXQmIzgyMTc7cyBiZXN0IHRvIG5vbWluYXRlIGEgZGVk aWNhdGVkIHNlY3Rpb24gZm9yIGV2ZW50cyBzbyBpdCBrZWVwcyB0aGluZ3MgbmVhdGVyIG9u IHlvdXIgY2FsZW5kYXIgYnV0IHlvdSBjYW4gdXNlIGV2ZW50cyBmcm9tIG1vcmUgdGhhbiBv bmUgc2VjdGlvbiBpZiB5b3Ugd2lzaC4gQW55IGFydGljbGUgd3JpdHRlbiBpbiB0aGUgZ2l2 ZW4gc2VjdGlvbihzKSB3aWxsIGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYXMgbG9uZyBhcyBp dHMgZXhwaXJ5IGhhc24mIzgyMTc7dCBiZWVuIG1ldC4gTW9yZSB0aGFuIG9uZSBldmVudCBt YXkgYXBwZWFyIGluIGVhY2ggY2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5l dmVudCBmbGFnPC9zcGFuPiA6IGVhY2ggZXZlbnQgY2FuIGVpdGhlciBiZSBhIHN0YW5kYXJk IDxjb2RlPmV2ZW50PC9jb2RlPiwgaXQgY2FuIDxjb2RlPnJlY3VyPC9jb2RlPiwgaXQgY2Fu IHNwYW4gbW9yZSB0aGFuIG9uZSBkYXkgKDxjb2RlPm11bHRpPC9jb2RlPikgaXQgY2FuIGJl IHJlbW92ZWQgKDxjb2RlPmNhbmNlbDwvY29kZT4pIG9yIGl0IG1heSBvY2N1ciBvbiBhIGhv bGlkYXkgKDxjb2RlPmhvbHM8L2NvZGU+KTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5jYWxpZDwvc3Bhbj4gOiB5b3UgbWF5IHB1dCBtb3JlIHRoYW4gb25lIGNhbGVuZGFyIG9u IGEgcGFnZS4gSWYgc28sIGVhY2ggb25lIG11c3QgYmUgdW5pcXVlbHkgcmVmZXJlbmNlZCB3 aXRoIHRoaXMgY2FsZW5kYXIgSUQ8L2xpPgoJPC91bD4KCgk8cD5JdCYjODIxNztzIGFsc28g d29ydGggYmVhcmluZyBpbiBtaW5kIHRoZSA8YSBocmVmPSIjZGF0ZXMiPmRhdGUgY2F2ZWF0 czwvYT4gdGhhdCBtYXkgd2VsbCBiaXRlIHlvdSBoYXJkLjwvcD4KCgk8aDIgaWQ9InVzYWdl Ij5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+PC9oMj4K Cgk8cD5QdXQgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2NhbGVuZGFyIC8mZ3Q7PC9jb2RlPiB0 YWcgd2hlcmV2ZXIgeW91IHdhbnQgeW91ciBjYWxlbmRhciB0byBhcHBlYXIuIFVzZSBhbnkg b2YgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wgaXRzIG91dHB1dCBkaXNw bGF5IGFuZCB1c2UgdGhlIDxhIGhyZWY9IiNhdHRzdHlsZXMiPnN0eWxlIGF0dHJpYnV0ZXM8 L2E+IHRvIGRldGVybWluZSBob3cgdG8gYXBwbHkgc3R5bGVzIHRvIHRoZSB2YXJpb3VzIGV2 ZW50cyBhbmQgY2VsbHMuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVz Ij5NYWluIGF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnNpemU8L3NwYW4+IDogY2FsZW5kYXIgc2l6ZSwgPGNvZGU+bGFyZ2U8L2NvZGU+IG9yIDxj b2RlPnNtYWxsPC9jb2RlPi4gVGhlIHNtYWxsIGlzIG1vcmUgZ2VhcmVkIHRvd2FyZHMgYSBt aW5pY2FsLCBhbHRob3VnaCBmdW5jdGlvbmFsbHkgdGhlcmUgPGEgaHJlZj0iI3NpemVkaWZm Ij5pc24mIzgyMTc7dCBtdWNoIGJldHdlZW4gdGhlbTwvYT4uIERlZmF1bHQ6IDxjb2RlPmxh cmdlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50aW1lPC9zcGFuPiA6 IHNob3cgPGNvZGU+cGFzdDwvY29kZT4sIDxjb2RlPmZ1dHVyZTwvY29kZT4sIG9yIDxjb2Rl PmFueTwvY29kZT4gZXZlbnQuIERlZmF1bHQ6IDxjb2RlPmFueTwvY29kZT48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZXhwaXJlZDwvc3Bhbj4gOiBkZWZpbml0aXZlbHkgaGlk ZSAoPGNvZGU+MDwvY29kZT4pIG9yIHNob3cgKDxjb2RlPjE8L2NvZGU+KSBleHBpcmVkIGV2 ZW50cy4gTGVhdmUgYmxhbmsgdG8gdXNlIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBBZHZhbmNlZCBQcmVmZXJlbmNlIDxjb2RlPlB1Ymxpc2ggZXhwaXJlZCBhcnRpY2xl czwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zmlyc3RkYXk8L3NwYW4+ IDogdGhlIDFzdCBkYXkgb2YgdGhlIHdlZWsgdG8gc2hvdyBpbiB0aGUgY2FsZW5kYXIuIDA9 U3VuZGF5LCAxPU1vbmRheSBhbmQgc28gb24gZG93biB0byA2PVNhdHVyZGF5LiBEZWZhdWx0 OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXlmb3Jt YXQ8L3NwYW4+IDogdGhlIHdheSBpbiB3aGljaCB0aGUgZGF5IG5hbWVzIGFyZSByZW5kZXJl ZC4gQ2hvb3NlIGZyb20gZWl0aGVyIDxjb2RlPkFCQlI8L2NvZGU+ICh0aGUgZGVmYXVsdCkg dG8gc2hvdyB0aGUgZGF5cyBhcyBNb24sIFR1ZSwgV2VkLCBldGMgb3IgPGNvZGU+RlVMTDwv Y29kZT4gdG8gcmVuZGVyIHRoZWlyIGZ1bGwgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1cHBs eSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJm dGltZSgpPC9hPiBjb2RlcyB0byB1c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lmaWMg bmFtZXMgYXJlIHJldHVybmVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRo Zm9ybWF0PC9zcGFuPiA6IHRoZSB3YXkgaW4gd2hpY2ggdGhlIG1vbnRoIG5hbWVzIGFyZSBy ZW5kZXJlZC4gQ2hvb3NlIGZyb20gZWl0aGVyIDxjb2RlPkZVTEw8L2NvZGU+ICh0aGUgZGVm YXVsdCkgdG8gc2hvdyB0aGUgZnVsbCBtb250aCBuYW1lcyBvciA8Y29kZT5BQkJSPC9jb2Rl PiB0byByZW5kZXIgdGhlaXIgYWJicmV2aWF0ZWQgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1 cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5z dHJmdGltZSgpPC9hPiBjb2RlcyB0byB1c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lm aWMgbmFtZXMgYXJlIHJldHVybmVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNl bGVjdDwvc3Bhbj4gOiB1c2UgYSBzZWxlY3QgZHJvcGRvd24gZm9yIHJhcGlkIGFjY2VzcyB0 byBtb250aHMgb3IgeWVhcnMgaW5zdGVhZCBvZiByZW5kZXJpbmcganVzdCB0aGUgbmFtZXMu IERlZmF1bHQ6IHVuc2V0LCBidXQgeW91IG1heSBtYWtlIGEgKGNvbW1hLXNlcGFyYXRlZCkg bGlzdCBmcm9tIGVpdGhlciA8Y29kZT5tb250aDwvY29kZT4gb3IgPGNvZGU+eWVhcjwvY29k ZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2VsZWN0YnRuPC9zcGFuPiA6IGJ5 IGRlZmF1bHQsIHRoZSBzZWxlY3QgZHJvcGRvd25zIHdpbGwgYXV0by1zdWJtaXQgd2hlbiB0 aGV5IGFyZSBjaGFuZ2VkLiBJZiB5b3UgcHJlZmVyIGEgZGVkaWNhdGVkIHN1Ym1pdCBidXR0 b24sIGdpdmUgdGhlIHRleHQgeW91IHdpc2ggdG8gYXBwZWFyIG9uIHRoZSBidXR0b24gaGVy ZS4gVGhlIGJ1dHRvbiBoYXMgYSBmaXhlZCBjbGFzcyBvZiA8Y29kZT5zbWRfY2FsX2lucHV0 PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pc293ZWVrczwvc3Bhbj4g OiBzaG93IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIG51bWJlcnMg YXMgYSBjb2x1bW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYWxlbmRhci4gSWYgdGV4dCBpcyB1 c2VkIGluIHRoaXMgYXR0cmlidXRlIGl0IHdpbGwgZW5hYmxlIHRoZSBmZWF0dXJlIGFuZCBi ZWNvbWUgdGhlIGhlYWRpbmcgb2YgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+ IHdlZWsgY29sdW1uLiBUaGUgPGNvZGU+Zmlyc3RkYXk8L2NvZGU+IHdpbGwgYmUgZm9yZWQg dG8gc3RhcnQgb24gYSBNb25kYXkgYXMgZ292ZXJuZWQgYnkgdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5JU088L3NwYW4+IHNwZWNpZmljYXRpb24uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXR1czwvc3Bhbj4gOiBldmVudHMgaW4gdGhpcyBs aXN0IG9mIHN0YXR1cyBhcmUgcHVibGlzaGVkLiBEZWZhdWx0OiA8Y29kZT5saXZlPC9jb2Rl PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj4gOiBmaWx0 ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZWZhdWx0IGlzIHRoZSBj dXJyZW50IGdsb2JhbCBjYXRlZ29yeSAoaWYgc2V0LCBlbXB0eSBvdGhlcndpc2UpPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNlY3Rpb248L3NwYW4+IDogZmlsdGVyIGV2ZW50 cyBieSB0aGlzIGxpc3Qgb2Ygc2VjdGlvbnMuIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgc2Vj dGlvbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3NwYW4+IDogZmls dGVyIGV2ZW50cyBieSB0aGlzIGF1dGhvciBSZWFsIE5hbWUuIERlZmF1bHQgaXMgdGhlIGN1 cnJlbnQgYXV0aG9yIChpZiBzZXQsIGVtcHR5IG90aGVyd2lzZSk8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+aWQ8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiBJRCB0byBhcHBseSB0byB0aGUgdGFibGUgdGhhdCBob2xkcyB0aGUgY2FsZW5k YXIuIFRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiB2YXJpYWJsZSA8Y29kZT5jYWxpZDwvY29kZT4gYW5kIGl0cyBkZWZhdWx0IGlzIHVu c2V0LiBFYWNoIGNhbGVuZGFyIG9uIGEgcGFnZSA8YSBocmVmPSIjbmFtaW5nIj5tdXN0IGJl IHVuaXF1ZTwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+ IDogc3RhcnQgdGhlIGNhbGVuZGFyIG9uIHRoaXMgbW9udGggZnJvbSAxIChKYW51YXJ5KSB0 byAxMiAoRGVjZW1iZXIpLiBOb3JtYWwgY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlkZXMg dGhpcyB2YWx1ZS4gSWYgPGNvZGU+c3RhdGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIG1vbnRo IGJlY29tZXMgdGhlIG9ubHkgb25lIHlvdSBtYXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8 Y29kZT5tPTwvY29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1cnJlbnQgbW9udGggaXMgdXNlZDwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj53ZWVrPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBk dXJpbmcgdGhlIG1vbnRoIGNvbnRhaW5pbmcgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SVNP PC9zcGFuPiB3ZWVrIChmcm9tIDEgdG8gNTMpLiBJZ25vcmVkIGlmIDxjb2RlPnN0YXRpYzwv Y29kZT4gb3Igb25lIG9mIHRoZSBjYWxlbmRhciBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIHVz ZWQuIElmIGEgPGNvZGU+dz08L2NvZGU+IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBnaXZlbiB3ZWVrIG92ZXJyaWRlcyBh bnkgbW9udGggdmFsdWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eWVhcjwvc3Bh bj4gOiBzdGFydCB0aGUgY2FsZW5kYXIgYXQgdGhpcyA0LWRpZ2l0IHllYXIuIE5vcm1hbCBj YWxlbmRhciBuYXZpZ2F0aW9uIG92ZXJyaWRlcyB0aGlzIHZhbHVlLiBJZiA8Y29kZT5zdGF0 aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMgeWVhciBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3Ug bWF5IHZpZXcuIElmIHVuc2V0LCBhbmQgbm8gPGNvZGU+eT08L2NvZGU+IHZhbHVlIGFwcGVh cnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBjdXJy ZW50IHllYXIgaXMgdXNlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyd2lk dGg8L3NwYW4+IDogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB0aGF0IHNwZWNpZmllcyBob3cg bWFueSB5ZWFycyB5b3VyIGNhbGVuZGFyIHNwYW5zLiBCeSBkZWZhdWx0IGl0IGlzIDxjb2Rl PjAsMDwvY29kZT4gd2hpY2ggdXNlcyB0aGUgZWFybGllc3QgKHBvc3RlZCkgZXZlbnQgaW4g dGhlIHNlY3Rpb24gYXMgdGhlIGxvd2VzdCB5ZWFyIGFuZCB0aGUgbGF0ZXN0IChtb2RpZmll ZCkgZXZlbnQgaW4gdGhlIHNlY3Rpb24gYXMgdGhlIGxhdGVzdCB5ZWFyLiBZb3Ugd2lsbCBu b3QgYmUgcGVybWl0dGVkIHRvIG5hdmlnYXRlIHRoZSBjYWxlbmRhciBvdXRzaWRlIHRoaXMg cmFuZ2UuIFRvIHdpZGVuIHRoZSByYW5nZSwgc3BlY2lmeSBzb21lIHZhbHVlcywgZm9yIGV4 YW1wbGUgPGNvZGU+eWVhcndpZHRoPSZxdW90OzIsNCZxdW90OzwvY29kZT4gd2lsbCBzdWJ0 cmFjdCAyIHdob2xlIHllYXJzIGZyb20gdGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3 aG9sZSB5ZWFycyB0byB0aGUgbGF0ZXN0IGV2ZW50LiBJZiB5b3Ugc3BlY2lmeSBhIHNpbmds ZSBudW1iZXIsIHRoYXQgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgcmFuZ2Ug ZXF1YWxseSBpbiBib3RoIGRpcmVjdGlvbnM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Zm9ybTwvc3Bhbj4gOiB1c2UgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBmb3JtIHRvIHByb2Nlc3MgZWFjaCBjZWxsLiBJZiB0aGUgY2FsZW5kYXIgdGFnIGlzIHVz ZWQgYXMgYSBjb250YWluZXIgaXQgd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhl IGZvcm0uIElmIG5laXRoZXIgYXJlIHVzZWQsIHRoZSBkZWZhdWx0IGZvciBhIGxhcmdlIGNh bGVuZGFyIGlzIGEgaHlwZXJsaW5rZWQgYXJ0aWNsZSB0aXRsZS4gVGhlIHNtYWxsIGNhbGVu ZGFyIHJlbmRlcnMgYW4gZW1wdHkgZXZlbnQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c3BhbmZvcm08L3NwYW4+IDogeW91IG1heSBlbGVjdCB0byByZW5kZXIgc3Bhbm5lZCBl dmVudHMgZGlmZmVyZW50bHkgdG8gc3RhbmRhcmQgZXZlbnRzLiBCeSBkZWZhdWx0IGl0IHVz ZXMgdGhlIHNhbWUgPGNvZGU+Zm9ybTwvY29kZT4gYnV0ICYjODIxMjsgaWYgbmVpdGhlciB0 aGF0IG5vciB0aGUgY29udGFpbmVyIGFyZSBzcGVjaWZpZWQgJiM4MjEyOyBpdCB3aWxsIHJl bmRlciBhIGh5cGVybGlua2VkIHJpZ2h0LWFycm93IHRvIGluZGljYXRlIGNvbnRpbnVhdGlv biBvZiB0aGUgcHJldmlvdXMgZGF5JiM4MjE3O3MgZXZlbnQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+c3RlcGZpZWxkPC9zcGFuPiA6IHRoZSBJRCBvZiBhIGZpZWxkIHdpdGhp biB3aGljaCBhbiBldmVudCBtYXkgYmUgdG9sZCB0byByZXBlYXQuIE5vdGUgaXQgaXMgdGhl IGZpZWxkJiM4MjE3O3MgSUQgbm90IGl0cyBuYW1lLCBzbyBmb3IgY3VzdG9tIGZpZWxkcyB5 b3UgbXVzdCB1c2UgPGNvZGU+Y3VzdG9tXzE8L2NvZGU+IG9yIDxjb2RlPmN1c3RvbV8yPC9j b2RlPiBldGMuIFdpdGhvdXQgdGhpcyBhdHRyaWJ1dGUgKGl0cyBkZWZhdWx0KSwgbm8gcmVj dXJyaW5nIGV2ZW50cyBtYXkgYmUgZGVmaW5lZC4gU2VlIDxhIGhyZWY9IiNyZWN1ciI+cmVj dXJyaW5nIGV2ZW50czwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2tpcGZp ZWxkPC9zcGFuPiA6IHRoZSBJRCBvZiBhIGZpZWxkIGZyb20gd2hpY2ggYXJ0aWNsZXMgbWF5 IGJlIGNhbmNlbGxlZCBpZiByZXF1aXJlZC4gQXMgYWJvdmUsIHRoaXMgaXMgdGhlIElEIChu b3QgbmFtZSkgb2YgdGhlIGZpZWxkLiBTcGVjaWZ5IGEgbGlzdCBvZiBkYXRlcyBvbiB3aGlj aCB0aGlzIGV2ZW50IHdpbGwgYmUgY2FuY2VsbGVkLiBTZWUgPGEgaHJlZj0iI2NhbmNlbCI+ Y2FuY2VsbGluZyBldmVudHM8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNo b3dza2lwcGVkPC9zcGFuPiA6IHdoZW4gYW4gZXZlbnQgaXMgY2FuY2VsbGVkIHlvdSBjYW4g cmVtb3ZlIGl0IGZyb20gdGhlIGNhbGVuZGFyICg8Y29kZT4wPC9jb2RlPikgb3Igc2hvdyBp dCAoPGNvZGU+MTwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5zaG93c3Bhbm5lZDwvc3Bhbj4gOiBldmVudHMgd2l0aCBl eHBpcnkgdGltZXMgbGF0ZXIgdGhhbiB0aGVpciBwb3N0ZWQgZGF0ZSBtYXkgYmUgcmVuZGVy ZWQgYWNyb3NzIG11bHRpcGxlIGNlbGxzLiBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyBmZWF0 dXJlIHlvdSBjYW4gdHVybiBpdCBvZmYgKDxjb2RlPjA8L2NvZGU+KS4gRGVmYXVsdDogPGNv ZGU+MTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheXM8L3Nw YW4+IDogbGlzdCBvZiBkYXRlcyB0aGF0IGFyZSBkZWNyZWVkIGFzIGhvbGlkYXlzLiBFdmVu dHMgY2FuIGJlIHNjaGVkdWxlZCBvbiBob2xpZGF5cyBidXQgbWF5IG5vdCByZWN1ciBvciBz cGFuIGEgaG9saWRheSB1bmxlc3MgeW91IGV4cGxpY2l0bHkgc2F5IHNvIHZpYSB0aGUgPGNv ZGU+aG9saWRheWZsYWdzPC9jb2RlPiBhdHRyaWJ1dGUuIFlvdXIgbGlzdCBvZiBkYXRlcyBt YXkgYmUgZGVmZXJyZWQgdG8gYSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2Rl PiBpbiB3aGljaCBjYXNlIGRlZmluZSB5b3VyIGxpc3QgaW4gYSBuYW1lZCB2YXJpYWJsZSBh bmQgdXNlIDxjb2RlPmhvbGlkYXlzPSZxdW90O3R4cHZhcjpteV92YXJfbmFtZSZxdW90Ozwv Y29kZT4gdG8gcmVhZCB0aGVtIGludG8gdGhlIHBsdWdpbjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5ob2xpZGF5ZmxhZ3M8L3NwYW4+IDogcGVybWl0IGNlcnRhaW4gPGEgaHJl Zj0iI25hbWluZyI+ZXZlbnQgZmxhZ3M8L2E+IHRvIGJlIHNjaGVkdWxlZCBvbiBob2xpZGF5 cy4gRGVmYXVsdDogPGNvZGU+ZXZlbnQ8L2NvZGU+IChpLmUuIGEgc3RhbmRhcmQgb25lLW9m ZiBldmVudCkgYnV0IG90aGVycyBtYXkgYmUgbGlzdGVkIGFzIHdlbGwuIENob29zZSBmcm9t IDxjb2RlPmV2ZW50PC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+IG9yIDxjb2RlPm11bHRp PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0aWM8L3NwYW4+IDog Zm9yY2UgdGhlIGNhbGVuZGFyIHRvIGJlIGZpeGVkIHRvIG9uZSBtb250aC95ZWFyIChpLmUu IG5vIG5hdmlnYXRpb24pLiBNb250aCBhbmQgeWVhciBkZWNpZGVkIGJ5IGF0dHJpYnV0ZXMg PGNvZGU+bW9udGg8L2NvZGU+IGFuZCA8Y29kZT55ZWFyPC9jb2RlPiBvciAmIzgyMTI7IGlm IG9taXR0ZWQgYW5kIG5vIDxjb2RlPm09PC9jb2RlPiBhbmQgPGNvZGU+eT08L2NvZGU+IDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlcyBhcmUgc2V0ICYjODIxMjsg dGhlIGN1cnJlbnQgZGF0ZSB3aWxsIGJlIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Z210PC9zcGFuPiA6IHJldHVybiBlaXRoZXIgbG9jYWwgdGltZSAoPGNvZGU+MDwv Y29kZT4pIGFjY29yZGluZyB0byB0aGUgdGltZSB6b25lIHNldCBpbiBCYXNpYyBQcmVmcywg b3IgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGltZSAoPGNvZGU+MTwvY29kZT4p LiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5sYW5nPC9zcGFuPiA6IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IGxhbmd1 YWdlIGNvZGUgdGhhdCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBzdWl0YWJsZSBmb3IgdGhlIHNw ZWNpZmllZCBsYW5ndWFnZSAob3IgbG9jYWxlKSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9Imh0 dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+PHNwYW4gY2xhc3M9ImNhcHMi PklTTzwvc3Bhbj4gNjM5PC9hPi4gRGVmYXVsdDogdW5zZXQgKGkuZS4gdXNlIHRoZSB2YWx1 ZSBhcyBzdGF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gcHJlZnMpPC9s aT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHN0eWxlcyI+U3R5bGUgYXR0 cmlidXRlczwvaDM+CgoJPHA+T25jZSB5b3UgaGF2ZSB0d2Vha2VkIHlvdXIgYmFzaWMgY2Fs ZW5kYXIgYXMgZGVzY3JpYmVkIGFib3ZlIHlvdSBjYW4gbW92ZSBvbnRvIHRoZSBzdHlsZSBh dHRyaWJ1dGVzIHNvIHlvdSBtYXkgZ2V0IGF0IGVhY2ggZmFjZXQgb2YgdGhlIGNhbGVuZGFy IGFuZCB2aXN1YWxseSBhbHRlciBpdDo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Y2xhc3NsZXZlbHM8L3NwYW4+IDogY2xhc3NlcyBjYW4gYmUgYXBwbGllZCBhdCB0 aGUgZXZlbnQgbGV2ZWwgKHNvIHlvdSBjYW4gY29sb3VyIGVhY2ggZXZlbnQgaW4gYSBjZWxs KSwgb3IgdGhlIGNlbGwgbGV2ZWwgKHNvIHlvdSBjYW4gY29sb3VyIHRoZSB3aG9sZSBkYXkp LCBvciBib3RoLiBZb3UgbWF5IGFsc28gcHJvbW90ZSAoaS5lLiBjb3B5KSBhbGwgZXZlbnQt bGV2ZWwgY2xhc3NlcyB0aGF0IG9jY3VyIGluIGEgZGF5IHRvIHRoZSBjZWxsIGxldmVsIHNv IHlvdSBjYW4gY29sb3VyIHRoZSBjZWxsIGJhc2VkIG9uIHRoZSBldmVudHMgdGhhdCBpdCBj b250YWlucy4gQ29tbWEtc2VwYXJhdGUgYW55IG9mIDxjb2RlPmV2ZW50PC9jb2RlPiAoZm9y IHJlbmRlcmluZyBldmVudC1sZXZlbCBzdHlsZXMpLCA8Y29kZT5jZWxsPC9jb2RlPiAoZm9y IHJlbmRlcmluZyBzdHlsZXMgYXQgdGhlIGNlbGwgbGV2ZWwpLCBvciA8Y29kZT5jZWxscGx1 czwvY29kZT4gKGZvciBjb3B5aW5nIHVuaXF1ZSBldmVudCBjbGFzc2VzIHRvIHRoZSBjZWxs KS4gTm90ZSB5b3Ugd2lsbCBub3QgbmVlZCB0byB1c2UgPGNvZGU+Y2VsbDwvY29kZT4gYW5k IDxjb2RlPmNlbGxwbHVzPC9jb2RlPiB0b2dldGhlciBiZWNhdXNlIHRoZSBsYXR0ZXIgb3Zl cnJpZGVzIHRoZSBmb3JtZXIsIGJ1dCB0aGVyZSYjODIxNztzIG5vIGhhcm0gaWYgeW91IGRv LiBEZWZhdWx0OiA8Y29kZT5jZWxsLCBldmVudDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Y2xhc3NwcmVmaXhlczwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBs aXN0IG9mIHVwIHRvIHR3byBwcmVmaXhlcyB0byBhcHBseSB0byB5b3VyIGNsYXNzIG5hbWVz LiBUaGUgZmlyc3QgcHJlZml4IGlzIGFwcGxpZWQgdG8gY2VsbC1sZXZlbCBjbGFzc2VzIGFu ZCB0aGUgc2Vjb25kIHByZWZpeCBpcyBhcHBsaWVkIHRvIGV2ZW50IGxldmVsIGNsYXNzZXMg c28geW91IG1heSBkaXN0aW5ndWlzaCB0aGVtIGlmIHlvdSB3aXNoLiBJZiB5b3Ugb25seSBz cGVjaWZ5IG9uZSBwcmVmaXggaXQgd2lsbCBiZSB1c2VkIGZvciBib3RoIHR5cGVzIG9mIGNs YXNzLiBJZiB5b3UgdXNlIDxjb2RlPmNsYXNzcHJlZml4ZXM9JnF1b3Q7JnF1b3Q7PC9jb2Rl PiB0aGVuIG5vIHByZWZpeGVzIHdpbGwgYmUgdXNlZCBhdCBhbGwuIERlZmF1bHQ6IDxjb2Rl PnNtZF9jYWxfLCBzbWRfY2FsX2V2XzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4 KSB0byBhcHBseSB0byB0aGUgY2FsZW5kYXIgdGFibGUgaXRzZWxmLiBEZWZhdWx0OiB1bnNl dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5yb3djbGFzczwvc3Bhbj4gOiB0aGUg Y2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGVhY2ggdGFibGUg cm93LiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jZWxs Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBh cHBseSB0byBlYWNoIHRhYmxlIGNlbGwuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmVtcHR5Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBs dXMgY2xhc3MgcHJlZml4KSB0byBhcHBseSB0byBhbnkgY2VsbHMgdGhhdCBkb24mIzgyMTc7 dCBjb250YWluIGEgZGF5IG51bWJlciAoaS5lLiB0aGUgYmxhbmsgY2VsbHMgYXQgdGhlIHN0 YXJ0IGFuZCBlbmQgb2YgYSBtb250aCkuIERlZmF1bHQ6IDxjb2RlPmVtcHR5PC9jb2RlPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pc293ZWVrY2xhc3M8L3NwYW4+IDogdGhl IGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBhcHBseSB0byBlYWNoIGNlbGwg Y29udGFpbmluZyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIChpZiA8 Y29kZT5pc293ZWVrczwvY29kZT4gaXMgdXNlZCkuIERlZmF1bHQ6IDxjb2RlPndlZWs8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm5hdmNsYXNzPC9zcGFuPiA6IHRo ZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gdGhlIG5leHQv cHJldiBtb250aCBuYXZpZ2F0aW9uIGFycm93cy4gRGVmYXVsdDogPGNvZGU+bmF2PC9jb2Rl PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teWNsYXNzPC9zcGFuPiA6IHRoZSBj bGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gYm90aCB0aGUgbW9u dGggYW5kIHllYXIgaW4gdGhlIGNhbGVuZGFyIGhlYWRlciAoZWl0aGVyIHRoZSA8Y29kZT4m bHQ7c3BhbiZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDtzZWxlY3QmZ3Q7PC9jb2RlPiB0YWdz KS4gSWYgPGNvZGU+bXl3cmFwdGFnPC9jb2RlPiBpcyB1c2VkLCB0aGUgY2xhc3MgaXMgYXBw bGllZCB0byB0aGUgd3JhcHRhZyBpbnN0ZWFkLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudGNsYXNzZXM8L3NwYW4+IDogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBpdGVtcyB0byBhZGQgYXMgY2xhc3NlcyB0byBlYWNoIGV2ZW50IChl YWNoIHByZWZpeGVkIHdpdGggdGhlIGV2ZW50IHByZWZpeCkuIEl0IGRlZmF1bHRzIHRvIDxj b2RlPmNhdGVnb3J5PC9jb2RlPiBzbyBpdCBhZGRzIHRoZSBDYXRlZ29yeTEgYW5kIDIgbmFt ZXMgYXMgY2xhc3MgaWRlbnRpZmllcnMgdG8gZWFjaCBldmVudC4gVGh1cywgb3V0IG9mIHRo ZSBib3gsIHlvdSBjYW4gc3R5bGUgZXZlbnRzIGJ5IGNhdGVnb3J5LiA8ZGl2IGNsYXNzPSJi cmVhayI+SWYgeW91IHdpc2ggdG8gZXh0ZW5kIG9yIGFsdGVyIHRoaXMsIGp1c3QgZ2l2ZSBh IGxpc3Qgb2YgZmllbGRzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIGV2ZW50IChl LmcuIDxjb2RlPmV2ZW50Y2xhc3Nlcz0mcXVvdDtJRCwgQXV0aG9ySUQsIGN1c3RvbV81JnF1 b3Q7PC9jb2RlPiB3b3VsZCBhZGQgdGhyZWUgY2xhc3NlcyB0byBlYWNoIGV2ZW50IGNvcnJl c3BvbmRpbmcgdG8gdGhlIGV2ZW50JiM4MjE3O3MgSUQsIGl0cyBhdXRob3IgKGxvZ2luKSBu YW1lIGFuZCB0aGUgY29udGVudHMgb2YgY3VzdG9tXzUpLiBPZiBjb3Vyc2UsIGlmIHlvdSB1 c2UgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IG1vZGUgdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGNv cGllZCB0byB0aGUgY2VsbCBsZXZlbC4gPC9kaXY+PGRpdiBjbGFzcz0iYnJlYWsiPlNvbWUg c3BlY2lhbCBuYW1lcyBleGlzdDogPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IHJldHVybnMgYm90 aCBDYXRlZ29yeTEgYW5kIENhdGVnb3J5MiAoaWYgc2V0KTsgPGNvZGU+Z2NhdDwvY29kZT4g d2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgJiM4MjE2O2dsb2JhbCYjODIxNzsgY2F0ZWdvcnkg KGlmIGN1cnJlbnRseSBmaWx0ZXJpbmcgYnkgY2F0ZWdvcnkpOyA8Y29kZT5hdXRob3I8L2Nv ZGU+IHJldHVybnMgdGhlIGF1dGhvciBJRCAoaWYgY3VycmVudGx5IGZpbHRlcmluZyBieSBh dXRob3IpOyA8Y29kZT5zZWN0aW9uPC9jb2RlPiBnaXZlcyB0aGUgY3VycmVudCBzZWN0aW9u PC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50d3JhcHRhZzwvc3Bh bj4gOiB0aGUgKFgpSFRNTCB0YWcsIHdpdGhvdXQgaXRzIGJyYWNrZXRzLCB0byB3cmFwIGVh Y2ggZXZlbnQgd2l0aC4gRGVmYXVsdDogPGNvZGU+c3BhbjwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bXl3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZywg d2l0aG91dCBpdHMgYnJhY2tldHMsIHRvIHdyYXAgYXJvdW5kIDxlbT5ib3RoPC9lbT4gbW9u dGggKyB5ZWFyIGRyb3Bkb3duIHNlbGVjdCBsaXN0cyBhbmQgb3B0aW9uYWwgc3VibWl0IGJ1 dHRvbiAoaXQgd3JhcHMgdGhlIGxvdCwgY29tYmluZWQpLiBEZWZhdWx0OiB1bnNldDwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0iZXZlbnRzIj5TdGFuZGFyZCBldmVudHM8L2gyPgoKCTxwPk5v cm1hbCwgZW1wdHkgY2VsbHMgZG9uJiM4MjE3O3QgaGF2ZSBhIGNsYXNzIGFzc2lnbmVkIHRv IHRoZW0gdW5sZXNzIHlvdSBzcGVjaWZ5IG9uZSB3aXRoIDxjb2RlPmNlbGxjbGFzczwvY29k ZT4uIEFueSBjZWxsIHRoYXQgY29udGFpbnMgYW4gZXZlbnQgKG9mIGFueSB0eXBlKSBpcyBm aXJzdCBnaXZlbiB0aGUgZmxhZyA8Y29kZT5ldmVudDwvY29kZT4gKHBsdXMgdGhlIGNsYXNz LWxldmVsIHByZWZpeCkuIElmIHRoYXQgY2VsbCBmYWxscyBvbiBhIGhvbGlkYXksIGl0IGlz IGFsc28gZ2l2ZW4gdGhlIGNsYXNzIDxjb2RlPmhvbHM8L2NvZGU+LiBUaGUgdmFyaW91cyBv dGhlciBmbGFncyAoYXMgZGV0YWlsZWQgYmVsb3cpIGFyZSB0aGVuIGFkZGVkIHRvIHRoaXMg ZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBuYXR1cmUgb2YgdGhlIGV2ZW50LiBJbiBhZGRp dGlvbiwgdGhlIGN1cnJlbnQgZGF5IGlzIGdpdmVuIHRoZSBjbGFzcyBuYW1lIDxjb2RlPnRv ZGF5PC9jb2RlPiAocGx1cyBjbGFzcyBwcmVmaXgpLjwvcD4KCgk8aDIgaWQ9InJlY3VyIj5S ZWN1cnJpbmcgZXZlbnRzPC9oMj4KCgk8cD5JZiB5b3UgaGF2ZSBub21pbmF0ZWQgYW4gYXJ0 aWNsZSBmaWVsZCBhcyB5b3VyIDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4geW91IG1heSBlbnRl ciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZyZXF1ZW5jaWVzIGF0IHdoaWNoIHRoaXMg ZXZlbnQgaXMgdG8gYmUgcmVwZWF0ZWQuIFRoZSBmb3JtYXQgb2YgdGhlIHJlcGV0aXRpb24g aXMgJiM4MjIwO251bWJlciBpbnRlcnZhbCYjODIyMTssIGUuZy4gPGNvZGU+NCB3ZWVrczwv Y29kZT4gb3IgPGNvZGU+MTAgZGF5czwvY29kZT4gb3IgPGNvZGU+NiBtb250aHM8L2NvZGU+ LiBUaGUgcGx1Z2luIHdpbGwgZG8gaXRzIGJlc3QgdG8gZmlndXJlIG91dCB3aGF0IHlvdSBt ZWFuLjwvcD4KCgk8cD5JZiB5b3UgY2FuIGZpbmQgYSB1c2UgZm9yIGl0LCB5b3UgbWF5IHNw ZWNpZnkgbXVsdGlwbGUgZnJlcXVlbmNpZXMsIGZvciBleGFtcGxlIDxjb2RlPjMgZGF5cywg MSB3ZWVrPC9jb2RlPi4gU28geW91IHdvdWxkIHNlZSB0aGF0IGV2ZW50IG9uIHRoZSBmaXJz dCBkYXksIHRoZW4gdGhlIDNyZCwgNnRoLCA3dGgsIDl0aCwgMTJ0aCwgMTR0aCwgMTV0aCwg MTh0aCwgMjFzdCwgMjR0aCYjODIzMDsgYW5kIHNvIG9uIGRheXMgdGhlcmVhZnRlci4gTm90 ZSB0aGF0IHRoZSBldmVudCBvbmx5IG9jY3VycyBvbmNlIG9uIHRoZSAyMXN0IGRheSBldmVu IHRob3VnaCB0aGUgdHdvIGZyZXF1ZW5jaWVzIGNsYXNoLjwvcD4KCgk8cD5UaGUgcmVwZXRp dGlvbiB3aWxsIGNvbnRpbnVlIGZvcmV2ZXIgdW5sZXNzIHlvdSBzcGVjaWZ5IHRoYXQgdGhl IGV2ZW50IGV4cGlyZXMgYnkgc2V0dGluZyBhbiBleHBpcnkgdGltZSB1bmRlciB0aGUgYXJ0 aWNsZSYjODIxNztzIDxlbT5Nb3JlPC9lbT4gYXJlYS4gRWFjaCBjZWxsIHRoYXQgY29udGFp bnMgYSByZWN1cnJpbmcgZXZlbnQgd2lsbCBiZSBmbGFnZ2VkIHdpdGggPGNvZGU+cmVjdXI8 L2NvZGU+IChwbHVzIHRoZSBjZWxsLWxldmVsIGNsYXNzIHByZWZpeCkuPC9wPgoKCTxoMiBp ZD0iY2FuY2VsIj5DYW5jZWxsaW5nIGV2ZW50czwvaDI+CgoJPHA+UGxhbnMgY2hhbmdlIGFu ZCB5b3UgbWF5IGZpbmQgdGhhdCBhIGdpZyBoYXMgdG8gYmUgY2FuY2VsbGVkIGZvciB3aGF0 ZXZlciByZWFzb24uIFBlcmhhcHMgeW91IGFkdmVydGlzZSBhIHdlZWtseSBib290IGZhaXIg YnV0IHRoZSBmaWVsZCBpcyB3YXRlcmxvZ2dlZCBvbmUgd2Vlay4gTm8gcHJvYmxlbS4gTm9t aW5hdGUgYSA8Y29kZT5za2lwZmllbGQ8L2NvZGU+IGluIHlvdXIgPGNvZGU+Jmx0O3R4cDpz bWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+IHRhZyBhbmQgZW50ZXIgdGhlIGRhdGUgb2YgdGhl IGNhbmNlbGxlZCBldmVudC48L3A+CgoJPHA+VXNlIGFueSBhY2NlcHRhYmxlIGZvcm1hdCwg YnV0IGRlcml2YXRpdmVzIG9mIGRkLW1vbnRobmFtZS15eXl5IG9yIG1vbnRobmFtZS1kZC15 eXl5IGFyZSB0aGUgbW9zdCB1bmFtYmlndW91cyB0byBhdm9pZCB0aGUgcHJvYmxlbXMgb2Yg aG93IHRoZSBwbHVnaW4gbWlnaHQgaW50ZXJwcmV0IDxjb2RlPjEvNTwvY29kZT4gYXMgSmFu IDV0aCBvciBNYXkgMXN0LiBZb3UgY2FuIHNwZWNpZnkgYXMgbWFueSBjYW5jZWxsYXRpb25z IGFzIHlvdSBsaWtlOyBjb21tYS1zZXBhcmF0ZSBlYWNoIG9uZS48L3A+CgoJPHA+QnkgZGVm YXVsdCB0aGUgZXZlbnRzIHdpbGwgbm90IGFwcGVhciBvbiB0aGUgY2FsZW5kYXIuIFRoZXJl IHdpbGwgYmUgYSBjb25zcGljdW91cyBob2xlIGluIHRoZSByZXBldGl0aW9uLCB0aG91Z2gg dGhlIGNlbGwgY2xhc3Mgd2lsbCBiZSBmbGFnZ2VkIGFzIDxjb2RlPnJlY3VyPC9jb2RlPiBh bmQgPGNvZGU+Y2FuY2VsPC9jb2RlPiBzbyB5b3UgbWF5IHN0eWxlIHRoZSBib3guIElmIHlv dSBzd2l0Y2ggPGNvZGU+c2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdGhlIGV2 ZW50IHdpbGwgYXBwZWFyIGluIHRoZSBjZWxsIGFzIG5vcm1hbDsgdGhlIHNhbWUgPGNvZGU+ Y2FuY2VsPC9jb2RlPiBhbmQgPGNvZGU+cmVjdXI8L2NvZGU+IGNsYXNzZXMgd2lsbCBhcHBs eSB0byB0aGUgY2VsbCBhbmQgdGhlIGV2ZW50IHNvIHlvdSBtYXkgc3R5bGUgb25lIG9yIGJv dGguPC9wPgoKCTxwPkl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IDxlbT5ldmVudCBmbGFnczwv ZW0+IGFsd2F5cyB0YWtlIHRoZSAmIzgyMTY7Y2xhc3MmIzgyMTc7ICgxc3QpIHByZWZpeCAm IzgyMTI7IHdoZXRoZXIgdGhleSBhcHBlYXIgYXQgdGhlIGNsYXNzIG9yIGNlbGwgbGV2ZWxz LiBUaGlzIGlzIHNvIHlvdSBjYW4gYXBwbHkgYSBzaW1pbGFyIGNvbG91ciB0byB0aGUgZmxh Z3MgaWYgeW91IHdpc2ggb3IgdGFyZ2V0IHRoZW0gdmlhIHRoZWlyIHdyYXAgdGFnLiBUaGUg b25seSBjbGFzc2VzIHRoYXQgdGFrZSB0aGUgJiM4MjE2O2V2ZW50JiM4MjE3OyAoMm5kKSBw cmVmaXggYXJlIHRoZSBmaWVsZHMgeW91IHNwZWNpZnkgaW4gPGNvZGU+ZXZlbnRjbGFzc2Vz PC9jb2RlPi48L3A+CgoJPGgyIGlkPSJtdWx0aSI+TXVsdGlwbGUgKHNwYW5uZWQpIGV2ZW50 czwvaDI+CgoJPHA+QW55IGV2ZW50IHRoYXQgaGFzIGEgc3RhcnQgZGF0ZSBhbmQgYW4gZXhw aXJ5IGRhdGUgdGhhdCBpcyBhIGRheSBvciBtb3JlIGxhdGVyLCBhbmQgPGVtPmRvZXMgbm90 PC9lbT4gaGF2ZSBhbnkgcmVwZXRpdGlvbiBzZXQgaW4gaXQgPGNvZGU+c3RlcGZpZWxkPC9j b2RlPiwgaXMgZmxhZ2dlZCBhcyBhIDxjb2RlPm11bHRpPC9jb2RlPi4gQnkgZGVmYXVsdCB0 aGUgZmlyc3QgZXZlbnQgaXMgZGlzcGxheWVkIGluIGZ1bGwgYW5kIGVhY2ggJiM4MjE2O2Nv bnRpbnVhdGlvbiYjODIxNzsgZXZlbnQgaXMgc2hvd24gb25seSBhcyBhIHJpZ2h0IGFycm93 IGluIHN1YnNlcXVlbnQgY2VsbHMgKG9uIGhvdmVyLCB0aGUgZXZlbnQgdGl0bGUgaXMgZGlz cGxheWVkKS48L3A+CgoJPHA+RXZlbnRzIG1heSBzcGFuIG1vbnRocyBvciB5ZWFycyBhbmQg dGhlIHBsdWdpbiBmaWd1cmVzIGV2ZXJ5dGhpbmcgb3V0IHVzaW5nIHRoZSBmbGFnczsgdGhl IGZpcnN0IGNlbGwgb2YgYSBzcGFubmVkIHNldCBpcyBhIDxjb2RlPm11bHRpZmlyc3Q8L2Nv ZGU+LCB0aGUgbGFzdCBjZWxsIGlzIGEgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPiwgZXZlcnkg b3RoZXIgY2VsbCBpcyBhIDxjb2RlPm11bHRpPC9jb2RlPiA8ZW0+ZXhjZXB0PC9lbT4gaWYg dGhlIGV2ZW50IHJvbGxzIG92ZXIgaW50byB0aGUgbmV4dCBtb250aC4gSW4gdGhhdCBjYXNl LCB0aGUgZW50cnkgb24gdGhlIDFzdCBvZiB0aGUgbW9udGggaXMgYSA8Y29kZT5tdWx0aXBy ZXY8L2NvZGU+IHRvIGluZGljYXRlIGl0IGJlbG9uZ3MgdG8gYSBwcmV2aW91cyBldmVudC4g SWYgdGhlIGZpcnN0IG9mIHRoZSBtb250aCBpcyBpdHNlbGYgdGhlIGxhc3QgZGF5IG9mIHRo ZSBldmVudCwgdGhlIDxjb2RlPm11bHRpcHJldjwvY29kZT4gaXMgZHJvcHBlZCBpbiBmYXZv dXIgb2YgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPi48L3A+CgoJPHA+WW91IG1heSBzd2l0Y2gg b2ZmIHRoaXMgYmVoYXZpb3VyIGNvbXBsZXRlbHkgd2l0aCB0aGUgPGNvZGU+c2hvd3NwYW5u ZWQ9JnF1b3Q7MCZxdW90OzwvY29kZT4gYXR0cmlidXRlLiBFdmVudHMgdGhhdCBoYXZlIGFu IGV4cGlyeSBhcmUgdGhlbiBqdXN0IGNvbW1vbiBldmVudHMuPC9wPgoKCTxwPllvdSBtYXkg ZWxlY3QgdG8gcHJvY2VzcyAmIzgyMTY7Y29udGludWF0aW9uJiM4MjE3OyBjZWxscyB3aXRo IGEgc2VwYXJhdGUgZm9ybSAoY2FsbGVkIGEgPGNvZGU+c3BhbmZvcm08L2NvZGU+IGJlY2F1 c2UgJiM4MjE2O2NvbnRmb3JtJiM4MjE3OyBkaWRuJiM4MjE3O3Qgc291bmQgdmVyeSBuaWNl ISkuIElmIG5vdCwgdGhlIHN0YW5kYXJkIDxjb2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5l ciB3aWxsIGJlIHVzZWQgYW5kIHlvdSB3aWxsIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2Vl biB0aGUgZGlmZmVyZW50IG11bHRpIGZsYWdzIHlvdXJzZWxmIHVzaW5nIHRoZSA8YSBocmVm PSIjaWZjYWwiPmNvbmRpdGlvbmFsIHRhZzwvYT4uPC9wPgoKCTxwPllvdSBjYW4gYWxzbyBj YW5jZWwgZGF5cyBvZiBhIHNwYW5uZWQgZXZlbnQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHlv dSBkbyB3aXRoIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJyaW5nIGV2ZW50czwvYT4uIFRoZSBj ZWxsIGlzIGR1dGlmdWxseSBmbGFnZ2VkIHdpdGggdGhlIHJlbGV2YW50ICYjODIxNjttdWx0 aSYjODIxNzsgZmxhZyArIDxjb2RlPmNhbmNlbDwvY29kZT4uIE5vdGUgeW91IG1heSA8ZW0+ bm90PC9lbT4gY2FuY2VsIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGV2ZW50LCBiZWNhdXNlIHlv dSBtaWdodCBhcyB3ZWxsIGp1c3QgbW92ZSB0aGUgZXZlbnQgb25lIGRheSBhbmQgYXBvbG9n aXNlITwvcD4KCgk8aDIgaWQ9ImhvbGlkYXlzIj5Ib2xpZGF5czwvaDI+CgoJPHA+UHVibGlj IGhvbGlkYXlzIG5lZWQgbm90IGJlIGEgbnVpc2FuY2UgdG8geW91ciByZWN1cnJpbmcgZXZl bnRzLiBHaXZlIHRoZSBwbHVnaW4gYSBsaXN0IGFuZCBpdCYjODIxNztsbCBtYWtlIHN1cmUg dGhhdCBhbnkgcmVjdXJyaW5nIG9yIG11bHRpIGV2ZW50cyBhcmUgbm90IHNjaGVkdWxlZCBv biB0aG9zZSBkYXlzLiBTdGFuZGFyZCBvbmUtb2ZmIGV2ZW50cyBhcmUgcGVybWl0dGVkIGJ5 IGRlZmF1bHQgYmVjYXVzZSB5b3UgbWlnaHQgd2FudCB0byBvcmdhbmlzZSBhIHNwZWNpYWwg ZXZlbnQgb24gdGhhdCBkYXkuPC9wPgoKCTxwPlRoZSBsaXN0IG9mIGRhdGVzIHlvdSBzcGVj aWZ5IGNhbiBiZSBlbnRlcmVkIGRpcmVjdGx5IGluIGEgc3RyaW5nIGluIHRoZSA8Y29kZT5o b2xpZGF5czwvY29kZT4gYXR0cmlidXRlIG9yIGluIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJs ZSAvJmd0OzwvY29kZT4uIFRoZSBsYXR0ZXIgaXMgbW9yZSBmdW4gc28gbGV0JiM4MjE3O3Mg dHJ5IHRoYXQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O25hdF9ob2xzJnF1b3Q7CiAgICAgdmFsdWU9 JnF1b3Q7RGVjIDI1LCBEZWMgMjYsIDMxL0RlYywgSmFuLTEsCiAgICAgICAgTWF5IDQgMjAw OSwgMjAwOS0wOC0zMSZxdW90OyAvJmd0OwombHQ7dHhwOnNtZF9jYWxlbmRhciBob2xpZGF5 cz0mcXVvdDt0eHB2YXI6bmF0X2hvbHMmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxw PlRoZXJlIHlvdSBnbywgYWxsIGRvbmUuIFRoZSBsaXN0IHRoZXJlIHNob3dzIHNvbWUgb2Yg dGhlIHZhcmlldHkgYW5kIGJyZWFkdGggb2YgZm9ybWF0cyB0aGF0IHRoZSBwbHVnaW4gYWxs b3dzLiBUaGVyZSBhcmUgbW9yZS4gTm90ZSB0aGF0IHNvbWUgZXZlbnRzIGhhdmUgYSB5ZWFy IGFuZCBvdGhlcnMgZG9uJiM4MjE3O3QuIFRoZSBvbmVzIHdpdGhvdXQgYSB5ZWFyIG9jY3Vy IG9uIHRoZSBzYW1lIGRhdGUgZXZlcnkgeWVhciB3aGVyZWFzIHRoZSBvbmVzIHdpdGggYSB5 ZWFyIHdpbGwgb25seSBvY2N1ciBvbiB0aGF0IHNwZWNpZmljIGRhdGUuPC9wPgoKCTxwPk9u Y2UgeW91ciBkYXRlcyBhcmUgZGVmaW5lZCB5b3UgY2FuIGNvbnRyb2wgd2hjaCBldmVudHMg YXJlIGFsbG93ZWQgdG8gZmFsbCBvbiB0aG9zZSBkYXRlcyB2aWEgdGhlIDxjb2RlPmhvbGlk YXlmbGFnczwvY29kZT4uIEp1ZGljaWFsIHVzZSBvZiB0aGF0IGF0dHJpYnV0ZSBhbmQgdGhl IDxjb2RlPnNob3dzcGFubmVkPC9jb2RlPiwgPGNvZGU+c2hvd3NraXBwZWQ8L2NvZGU+IGFu ZCA8Y29kZT5mb3JtPC9jb2RlPiBvciA8Y29kZT5zcGFuZm9ybTwvY29kZT4gd2l0aCB0aGUg PGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbCB0YWc8L2E+IGNhbiBnaXZlIHlvdSBhIHdp ZGUgdmFyaWV0eSBvZiB3YXlzIHRvIHN0eWxlIGV2ZW50cy48L3A+CgoJPHA+SG9saWRheXMg YXJlIGdpdmVuIHRoZSBldmVudCBmbGFnIDxjb2RlPmhvbHM8L2NvZGU+LCBhbmQgYW55IGV2 ZW50IHRoYXQgaXMgbm90IHNwZWNpZmljYWxseSBwZXJtaXR0ZWQgYnkgdGhlIDxjb2RlPmhv bGlkYXlmbGFnczwvY29kZT4gaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBhIDxjb2RlPmNh bmNlbDwvY29kZT4gZmxhZyBpZiBpdCBmYWxscyBvbiBvbmUgb2YgdGhlIGRheXMuPC9wPgoK CTxoMiBpZD0ic2l6ZWRpZmYiPkRpZmZlcmVuY2VzIGJldHdlZW4gbGFyZ2UgYW5kIHNtYWxs IGNhbGVuZGFyczwvaDI+CgoJPHA+Tm90IGEgbG90ISBCdXQgdGhlcmUgYXJlIHNvbWUgc3Vi dGxldGllczo8L3A+CgoJPHVsPgoJCTxsaT5CeSBkZWZhdWx0LCBubyBldmVudHMgYXJlIHBs YWNlZCBpbiB0aGUgc21hbGwgY2FsZW5kYXIuIFlvdSBjYW4gYWRkIHRoZW0geW91cnNlbGYg aWYgeW91IHdpc2ggYmVjYXVzZSB5b3UgY2FuIHVzZSB0aGUgc2FtZSBmb3JtL2NvbnRhaW5l ciBtZWNoYW5pc20gYXMgdGhlIGxhcmdlIGNhbGVuZGFyPC9saT4KCQk8bGk+VGhlIG9ubHkg dGhpbmcgcmVuZGVyZWQgaW4gYSBzbWFsbCBjYWxlbmRhciBjZWxsIGlzIHRoZSBjbGFzcyBp bmZvcm1hdGlvbiBzbyB5b3UgY2FuIGNvbG91ciB0aGUgYm94ZXMgYnkgZXZlbnQ8L2xpPgoJ CTxsaT48Y29kZT5jbGFzc2xldmVsczwvY29kZT4gYXJlIGlnbm9yZWQ6IGV2ZXJ5dGhpbmcg aXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBhdCB0aGUgY2VsbCBsZXZlbCAoPGNvZGU+ZXZl bnRjbGFzc2VzPC9jb2RlPiBhcmUgc3RpbGwgaG9ub3VyZWQgaWYgeW91IHdpc2ggdG8gdXNl IGEgPGNvZGU+Zm9ybTwvY29kZT4gdG8gcHJvY2VzcyB0aGVtIHlvdXJzZWxmKTwvbGk+CgkJ PGxpPlRoZSBzbWFsbCBjYWxlbmRhciBvdXRwdXRzIHllYXItbW9udGgtZGF5LXRpdGxlIG9y IG1lc3N5IHBlcm1saW5rcyBvbmx5PC9saT4KCTwvdWw+CgoJPHA+QXNpZGUgZnJvbSB0aGF0 IHRoZXkmIzgyMTc7cmUgcHJldHR5IG11Y2ggaWRlbnRpY2FsLjwvcD4KCgk8aDIgaWQ9ImRh dGVzIj5EYXRlcywgZ290Y2hhcyBhbmQgaWRpb3N5bmNyYWNpZXM8L2gyPgoKCTxwPklmIHRo ZXJlIHdhcyBvbmUgZ2xvYmFsIHRpbWUgem9uZSB0aGUgd29ybGQgd291bGQgYmUgc2ltcGxl ci4gU2FkbHksIHdlIGFsbCBsaXZlIGluIGRpZmZlcmVudCBwbGFjZXMgYW5kIHRoZSBJbnRl cm5ldCBCZWF0IGhhc24mIzgyMTc7dCByZWFsbHkgdGFrZW4gb2ZmLiBFdmVuIG1vcmUgc2Fk bHksIGNlcnRhaW4gdXBwZXIgZWNoZWxvbnMgb2YgcG93ZXIgZGVjcmVlIHRoYXQgdHdpY2Ug YSB5ZWFyIHNvbWUgY291bnRyaWVzIG11c3QgYWx0ZXIgdGhlaXIgY2xvY2tzIHRvIFNhdmUg RGF5bGlnaHQgKHdoYXRldmVyIHRoYXQgbWVhbnMpLjwvcD4KCgk8cD48c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBkb2VzIGl0cyBiZXN0IHRvIHNoaWVsZCB5b3UgZnJvbSB0aGlz IG1heWhlbSBieSBhbGxvd2luZyB5b3UgdG8gc3BlY2lmeSB5b3VyIGxvY2FsZSwgdGltZSBv ZmZzZXQgZnJvbSA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiwgYW5kIHdoZW4gPHNw YW4gY2xhc3M9ImNhcHMiPkRTVDwvc3Bhbj4gYXBwbGllcyBpbiB5b3VyIHRpbWUgem9uZSAo bm90IGZvcmdldHRpbmcgdGhlIHRpbWUgem9uZSBvZiB5b3VyIHNlcnZlciBpZiBpdCBoYXBw ZW5zIHRvIGJlIG5vd2hlcmUgbmVhciB5b3UpLjwvcD4KCgk8cD5BbmQgdGhlcmVpbiBsaWVz IHRoZSBydWIuPC9wPgoKCTxwPkZvciBhIGNhbGVuZGFyIHN5c3RlbSwgdGhpcyBpcyBzdWIt b3B0aW1hbC4gSW4gZmFjdCBpdCYjODIxNztzIGRvd25yaWdodCBhbm5veWluZyBiZWNhdXNl IHdoZW4geW91IHNheSB0aGF0IGFuIGV2ZW50IGlzIGdvaW5nIHRvIG9jY3VyIGF0IDhwbSBp biBzaXggbW9udGhzJiM4MjE3OyB0aW1lLCBwZXNreSBEYXlsaWdodCBTYXZpbmdzIG1heSB0 aGVuIGJlIGluIGVmZmVjdCBhbmQgeW91ciBldmVudCB3aWxsIGFwcGVhciBhbiBob3VyICYj ODIxNjtvZmYmIzgyMTc7IChpdCBtYXkgbG9vayB3cm9uZyBpbiB0aGUgYWRtaW4gaW50ZXJm YWNlIGFzIHdlbGwgYXMgaW4geW91ciBjYWxlbmRhciwgZGVwZW5kaW5nIG9uIHRoZSBzZXR0 aW5ncykuPC9wPgoKCTxwPkFsc28sIGlmIHlvdXIgc2VydmVyIG9yIHlvdXIgb2ZmaWNlIGlz IHJlbG9jYXRlZCBhbmQgeW91IGhhdmUgdG8gYWRqdXN0IHRpbWUgem9uZSwgYWxsIHlvdXIg YmVhdXRpZnVsbHkgY3JhZnRlZCBkYXRlcyB3aWxsIGJlIHNoaWZ0ZWQuIFdlbGwsIHRoZXkm IzgyMTc7cmUgbm90IGFjdHVhbGx5IGNoYW5nZWQgaW4gdGhlIGRhdGFiYXNlIHVubGVzcyB5 b3UgZWRpdCBhbiBhcnRpY2xlIGFuZCByZS1zYXZlIGl0LCBidXQgdGhleSA8ZW0+YXBwZWFy PC9lbT4gdG8gaGF2ZSBzaGlmdGVkIGJlY2F1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gaXMgdHJ5aW5nIHRvIHNoaWVsZCB5b3UgZnJvbSB0aW1lIGJ1cmVhdWNyYWN5IGlu IGEgd29ybGQgZ29uZSBtYWQuPC9wPgoKCTxwPlVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbGl0 dGxlIHdlIGNhbiBkbyBhYm91dCB0aGlzIGF0IHRoZSBtb21lbnQgdW50aWwgdGhlIHdheSBk YXRlcyBhcmUgaGFuZGxlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpcyBj aGFuZ2VkLiBCdXQgdGhlcmUgYXJlIHNvbWUgc2V0dGluZ3MgdGhhdCB5b3UgY2FuIHBsYXkg d2l0aCB0byB0cnkgYW5kIG1ha2Ugc2Vuc2Ugb2YgaXQgYWxsLiBOYW1lbHkgdGhlIDxjb2Rl PmdtdDwvY29kZT4gYXR0cmlidXRlIHRvIHRoZSBjYWxlbmRhciBwbHVnaW4gYW5kIGFueSBv ZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIGRhdGUtYmFzZWQgdGFn cyBzdWNoIGFzIDxjb2RlPiZsdDt0eHA6cG9zdGVkIC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+ Jmx0O3R4cDpleHBpcmVzIC8mZ3Q7PC9jb2RlPi4gU29tZXRpbWVzIGZpZGRsaW5nIHdpdGgg dGhhdCBhbmQgdGhlIHRpbWUgem9uZS9EU1QgZmxhZ3Mgd2lsbCBoZWxwLiBPdGhlciB0aW1l cyB5b3UmIzgyMTc7bGwgZ2V0IGluIGEgcmlnaHQgb2xkIG1lc3MuPC9wPgoKCTxwPklmIGFs bCB0aGF0IGZhaWxzLCB0aGUgY29uZGl0aW9uYWwgdGFnIG1heSBiZSBhYmxlIHRvIGhlbHAg eW91IGNvbXBhcmUgY2VydGFpbiBkYXRlcyBhbmQgYXBwbHkgZGlmZmVyZW50IGF0dHJpYnV0 ZXMgZGVwZW5kaW5nIG9uIHRoZSBkYXkgb2YgdGhlIHllYXIuIEZhaWxpbmcgdGhhdCwganVz dCB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gYW5kIHJlZnVzZSB0byBvYnNl cnZlIDxzcGFuIGNsYXNzPSJjYXBzIj5EU1Q8L3NwYW4+IDotKTwvcD4KCgk8aDIgaWQ9Imlm Y2FsIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+PC9oMj4KCgk8 cD5UaGlzIGNvbmRpdGlvbmFsIHRhZyBhbGxvd3MgeW91ICYjODIxMjsgaW5zaWRlIHlvdXIg Y29udGFpbmVyL2Zvcm0vc3BhbmZvcm0gICYjODIxMjsgdG8gdGVzdCBjZXJ0YWluIGNvbmRp dGlvbnMgb2YgdGhlIGN1cnJlbnQgZXZlbnQvY2VsbC4gQXQgdGhlIG1vbWVudCBpdCBpcyBq dXN0IGZvciB0ZXN0aW5nIHRoZSBldmVudCBmbGFncywgdGhlIGNhbGVuZGFyIElEIG9yIHZh cmlvdXMgcGFydHMgb2YgdGhlIGRhdGUuIEZvciBlbmhhbmNlZCBjb25kaXRpb25hbCBjaGVj a2luZyAocGVyaGFwcyBpbiBjb25qdW5jdGlvbiB3aXRoIDxhIGhyZWY9IiNjYWxub3ciIHN0 eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij50eHA6c21kX2NhbF9ub3cgLyZndDs8L2E+KSwgY29u c2lkZXIgdGhlIHNtZF9pZiBwbHVnaW4uPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJh dHRzaWZjYWwiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmZsYWc8L3NwYW4+IDogdGhlIGZsYWcocykgeW91IHdhbnQgdG8gdGVzdCwgZWFjaCBz ZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxjb2RlPmV2ZW50PC9jb2RlPiwg PGNvZGU+cmVjdXI8L2NvZGU+LCA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiwgPGNvZGU+bXVs dGlsYXN0PC9jb2RlPiwgPGNvZGU+bXVsdGk8L2NvZGU+LCA8Y29kZT5tdWx0aXByZXY8L2Nv ZGU+LCA8Y29kZT5jYW5jZWw8L2NvZGU+LCBvciA8Y29kZT5ob2xzPC9jb2RlPi4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2FsaWQ8L3NwYW4+IDog dGhlIGNhbGVuZGFyIElEIHlvdSB3aXNoIHRvIGNoZWNrIGZvciBhIG1hdGNoLiBEZWZhdWx0 OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyPC9zcGFuPiA6IHRo ZSB5ZWFyIHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoPC9zcGFuPiA6IHRoZSBtb250aCBudW1i ZXIgKDEtMTIpIHRoYXQgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVsdDogdW5z ZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d2Vlazwvc3Bhbj4gOiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXIgdGhhdCB0aGUgY3VycmVu dCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5kYXk8L3NwYW4+IDogdGhlIGRheSB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGlu LiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sb2dpYzwv c3Bhbj4gOiB3aGV0aGVyIHlvdSB3YW50IHRvIGNoZWNrIGlmIDxlbT5hbGw8L2VtPiB0ZXN0 cyB5b3Ugbm9taW5hdGVkIGFyZSB0cnVlIGluIHRoZSBjdXJyZW50IGNlbGwgKDxjb2RlPmxv Z2ljPSZxdW90O2FuZCZxdW90OzwvY29kZT4pIG9yIDxlbT5hdCBsZWFzdCBvbmU8L2VtPiBv ZiB0aGUgdGVzdHMgaXMgdHJ1ZSAoPGNvZGU+bG9naWM9JnF1b3Q7b3ImcXVvdDs8L2NvZGU+ KS4gRGVmYXVsdDogPGNvZGU+YW5kPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPllvdSBtYXkg Y29tYmluZSB0aGUgdGVzdHMgc28sIGZvciBleGFtcGxlLCB5b3UgY2FuIGNoZWNrIGlmIHRo ZSBjZWxsIGlzIG9mIGEgY2VydGFpbiB0eXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5BTkQ8L3Nw YW4+IGlzIGxhdGVyIHRoYW4gdGhlIDE1dGggb2YgdGhlIG1vbnRoLjwvcD4KCgk8cD5SdWRp bWVudGFyeSBjb21wYXJhdG9ycyBjYW4gYmUgYXBwbGllZCB0byB0aGUgPGNvZGU+eWVhcjwv Y29kZT4sIDxjb2RlPm1vbnRoPC9jb2RlPiBhbmQgPGNvZGU+ZGF5PC9jb2RlPiBhdHRyaWJ1 dGVzLiBOb3JtYWxseSB0aGUgdmFsdWUgeW91IHN1cHBseSB3aWxsIGJlIHRlc3RlZCBmb3Ig YW4gZXhhY3QgbWF0Y2ggYnV0IGlmIHlvdSBwcmVmaXggaXQgd2l0aCBvbmUgb2YgdGhlIGZv bGxvd2luZyBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoZW4gdGhlIGJlaGF2aW91ciBjaGFuZ2Vz OjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPiZndDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0 ZSBpcyA8ZW0+Z3JlYXRlciB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2Rl PnllYXI9JnF1b3Q7Jmd0OzIwMDgmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZn dDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmdyZWF0ZXIgdGhhbiBvciBl cXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVvdDsm Z3Q7PTcmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs8L2NvZGU+IHRlc3Rz IGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bGVzcyB0aGFuPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChl LmcuIDxjb2RlPmRheT0mcXVvdDsmbHQ7MTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxj b2RlPiZsdDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPmxlc3MgdGhhbiBv ciBlcXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVv dDsmbHQ7PTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiE8L2NvZGU+IHRlc3Rz IGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bm90PC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxj b2RlPmRheT0mcXVvdDshMTUmcXVvdDs8L2NvZGU+KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i Y2FsaW5mbyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT48 L2gyPgoKCTxwPkluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtL3NwYW5mb3JtLCB1c2UgdGhp cyB0YWcgdG8gb3V0cHV0IGNlcnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQg ZXZlbnQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2FsaW5mbyI+QXR0cmli dXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dHlwZTwvc3Bhbj4g OiB0aGUgdHlwZShzKSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byByZXR1cm4sIGVhY2gg c2VwYXJhdGVkIGJ5IGEgY29tbWEuIENob29zZSBmcm9tOiA8Y29kZT5mbGFnPC9jb2RlPiwg PGNvZGU+eWVhcjwvY29kZT4sIDxjb2RlPm1vbnRoPC9jb2RlPiwgPGNvZGU+d2VlazwvY29k ZT4sIDxjb2RlPmRheTwvY29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT5jYXRl Z29yeTwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29kZT4sIDxjb2RlPmNhbGlkPC9jb2RlPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qb2luPC9zcGFuPiA6IHRoZSBjaGFyYWN0 ZXJzIHlvdSB3YW50IHRvIHVzZSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0geW91IGFza2VkIGZv ci4gRGVmYXVsdDogYSBzcGFjZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5odG1s PC9zcGFuPiA6IElmIHNldCB0byA8Y29kZT4xPC9jb2RlPiwgcmV0dXJucyBub3Qgb25seSB0 aGUgdmFsdWVzIHlvdSBzcGVjaWZpZWQgYnV0IHRoZWlyIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+IHZhcmlhYmxlIG5hbWVzIGFzIHdlbGwsIGdpdmluZyB5b3UgdGhlIGVudGly ZSBzdHJpbmcgYXMgYSB2YWxpZCBzZXQgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgYWRkZWQgdG8gYW4gYW5jaG9yLiBJdCBvdmVy cmlkZXMgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGF0dHJpYnV0ZSBhbmQgc2V0cyBpdCB0byBh biBhbXBlcnNhbmQuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+LjxkaXYgY2xhc3M9ImJyZWFr Ij5UaGlzIGF0dHJpYnV0ZSBpcyB1c2VmdWwgaWYgeW91IGFyZSBidWlsZGluZyB5b3VyIG93 biBjb250ZW50IGluc2lkZSBlYWNoIGNlbGwgdmlhIGEgPGNvZGU+Zm9ybTwvY29kZT4gYW5k IHdpc2ggdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgc2VhcmNoIGVudmlyb25tZW50LiBJZiB5 b3UgYWxsb3cgcGVvcGxlIHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgb3IgYXV0aG9y IHlvdSBjYW4gdXNlIHRoaXMgdG8gcmV0dXJuIHRoZSAmIzgyMTY7Y3VycmVudCYjODIxNzsg c3RhdGUgb2YgY2VydGFpbiB2YXJpYWJsZXMgc28geW91IGNhbiBwYXNzIHRoZW0gdG8gdGhl IG5leHQgcGFnZSBhbmQgbWFpbnRhaW4gc3RhdGUuPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmVzY2FwZTwvc3Bhbj4gOiBlc2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMi PkhUTUw8L3NwYW4+IGVudGl0aWVzIHN1Y2ggYXMgPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2Rl PiZndDs8L2NvZGU+IGFuZCA8Y29kZT4mYW1wOzwvY29kZT4gZm9yIHBhZ2UgdmFsaWRhdGlv biBwdXJwb3Nlcy4gU2V0IHRvIDxjb2RlPmVzY2FwZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRv IHR1cm4gaXQgb2ZmLiBEZWZhdWx0OiA8Y29kZT5odG1sPC9jb2RlPjwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0iY2Fsbm93Ij5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8 L2NvZGU+PC9oMj4KCgk8cD5SZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLCBmb3JtYXR0 ZWQgaG93ZXZlciB5b3UgcGxlYXNlLiBVc2VmdWwgZm9yIGV4dHJhY3RpbmcgcGFydHMgb2Yg dGhlIGN1cnJlbnQgc3lzdGVtIHRpbWVzdGFtcCB0byBjb21wYXJlIHRoaW5ncyB2aWEgb3Ro ZXIgY29uZGl0aW9uYWwgcGx1Z2lucyBvciAmIzgyMTI7IGV2ZW50dWFsbHkgJiM4MjEyOyB0 aGUgPGNvZGU+Jmx0O3R4cDpzbWRfaWZfY2FsJmd0OzwvY29kZT4gdGFnLjwvcD4KCgk8aDMg Y2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbG5vdyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6IHRoZSB3YXkgeW91IHdh bnQgdGhlIGRhdGUvdGltZSByZXByZXNlbnRlZC4gVXNlIGFueSB2YWxpZCA8YSBocmVmPSJo dHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IHN0cmluZy4gRGVm YXVsdHMgdG8gdGhlIGRhdGUgZm9ybWF0IHlvdSBzZXQgaW4gQmFzaWMgUHJlZnM8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Z210PC9zcGFuPiA6IHJldHVybiBlaXRoZXIgbG9j YWwgdGltZSAoPGNvZGU+MDwvY29kZT4pIGFjY29yZGluZyB0byB0aGUgdGltZSB6b25lIHNl dCBpbiBCYXNpYyBQcmVmcywgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGlt ZSAoPGNvZGU+MTwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5sYW5nPC9zcGFuPiA6IGFuIDxzcGFuIGNsYXNzPSJjYXBz Ij5JU088L3NwYW4+IGxhbmd1YWdlIGNvZGUgdGhhdCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBz dWl0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSAob3IgbG9jYWxlKSBhcyBkZWZp bmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+ PHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gNjM5PC9hPi4gRGVmYXVsdDogdW5zZXQg KGkuZS4gdXNlIHRoZSB2YWx1ZSBhcyBzdGF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gcHJlZnMpPC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJleGFtcGxlcyI+RXhh bXBsZXM8L2gyPgoKCTxoMyBpZD0iZWcxIj5FeGFtcGxlIDE8L2gzPgoKCTxwPlRoZSBiZWF1 dHkgb2YgdGhlIHBsdWdpbiBpcyB0aGF0IHlvdSBoYXZlIHRoZSBlbnRpcmUgYXJzZW5hbCBv ZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdzIGF2YWlsYWJsZSB0byB5b3Ug aWYgeW91IGNob29zZSB0byB1c2UgYSA8Y29kZT5mb3JtPC9jb2RlPi4gVGh1cyB5b3UgY2Fu IHNldCB0aGUgYXJ0aWNsZSYjODIxNztzIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gdGhlIHNh bWUgZGF5IGFuZCBzZXQgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgdG8gaW5kaWNhdGUgdGhl IHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGV2ZW50LiBZb3UgY2FuIHRoZW4gdXNlIHN0YW5kYXJk IDxjb2RlPiZsdDt0eHA6cG9zdGVkIC8mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7dHhwOmV4 cGlyZXMgLyZndDs8L2NvZGU+IHRhZ3Mgd2l0aCB2YXJpb3VzIDxjb2RlPmZvcm1hdDwvY29k ZT4gc3RyaW5ncyB0byByZW5kZXIgdGhlIGV2ZW50JiM4MjE3O3MgY3JpdGVyaWEuPC9wPgoK CTxwPlNpbWlsYXJseSB5b3UgY2FuIHVzZSA8Y29kZT4mbHQ7dHhwOmV4Y2VycHQgLyZndDs8 L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOnRpdGxlIC8mZ3Q7PC9jb2RlPiBvciBvZiBjb3Vy c2UgYW55IGN1c3RvbSBmaWVsZHMgdG8gc2hvdyBhcyBtdWNoIG9yIGFzIGxpdHRsZSBkZXRh aWwgYXMgeW91IGxpa2UuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc2VjdGlvbj0mcXVvdDtldmVudHMmcXVvdDsm Z3Q7CiZsdDtkaXYmZ3Q7CiAgIEV2ZW50OiAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6 dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O2JyIC8mZ3Q7Jmx0O3R4 cDpleGNlcnB0IC8mZ3Q7CiZsdDsvZGl2Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2V2dGlt ZSZxdW90OyZndDsKICAgU3RhcnQ6ICZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslSDol TSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUm cXVvdDsmZ3Q7CiAgIEVuZDogJmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDslSDolTSZx dW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8L2Nv ZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+CgoJPHA+VXNpbmcgdGhl IGNvbmRpdGlvbmFsIHRhZyB5b3UgY2FuIHRha2UgYWN0aW9uIGlmIGNlcnRhaW4gZXZlbnRz IGNvbnRhaW4gY2VydGFpbiBmbGFncy4gVGhpcyBleGFtcGxlIGFsc28gc2hvdyBhIGNvbXBs ZXRlbHkgdXNlbGVzcyBtYW5uZXIgb2YgZW1wbG95aW5nIDxjb2RlPiZsdDt0eHA6c21kX2Nh bF9ub3cgLyZndDs8L2NvZGU+LjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFz cz0iYmxvY2siPlRpbWUgaXM6ICZsdDt0eHA6c21kX2NhbF9ub3cgZm9ybWF0PSZxdW90OyVU JnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2NhbGVuZGFyIGZvcm09JnF1b3Q7Y2VsbGZvcm0m cXVvdDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzMmcXVvdDsgc2tpcGZpZWxkPSZx dW90O2N1c3RvbV82JnF1b3Q7CiAgICAgc3BhbmZvcm09JnF1b3Q7bXVsdGlzJnF1b3Q7IC8m Z3Q7CjwvY29kZT48L3ByZT4KCgk8cD5JbiBmb3JtIDxjb2RlPmNlbGxmb3JtPC9jb2RlPjo8 L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNt ZF9pZl9jYWwgZmxhZz0mcXVvdDtyZWN1ciZxdW90OyZndDsKICAmbHQ7dHhwOnBlcm1saW5r Jmd0OyhSRUNVUlMpJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDt0eHA6ZWxzZSAvJmd0Owog ICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJt bGluayZndDsKICAgJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGlmaXJzdCZx dW90OyZndDsKICAgICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7cmlnaHQmcXVvdDsmZ3Q7LS0m YW1wO3JhcXVvOyZsdDsvc3BhbiZndDsKICAgJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKJmx0 Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkFuZCBpbiBmb3JtIDxj b2RlPm11bHRpczwvY29kZT46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGksIG11bHRpcHJl diZxdW90OwogICAgIGxvZ2ljPSZxdW90O29yJnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1s aW5rJmd0Oy0tJmFtcDtyYXF1bzstLSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7L3R4cDpz bWRfaWZfY2FsJmd0OwombHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aWxhc3Qm cXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNz PSZxdW90O2xlZnQmcXVvdDsmZ3Q7JmFtcDtyYXF1bzsmbHQ7L3NwYW4mZ3Q7IEVORCAmbHQ7 dHhwOnRpdGxlIC8mZ3Q7CiAgICZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7L3R4cDpzbWRf aWZfY2FsJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+Tm90aWNlIHRoYXQgPGNvZGU+bXVsdGlm aXJzdDwvY29kZT4gaXMgdGVzdGVkIGluc2lkZSB0aGUgc2FtZSBmb3JtIGFzIHN0YW5kYXJk IGV2ZW50cy4gVGhpcyBpcyBiZWNhdXNlIG9ubHkgPGVtPmNvbnRpbnVhdGlvbiBzcGFubmVk IGNlbGxzPC9lbT4gYXJlIHBhc3NlZCB0byB0aGUgPGNvZGU+c3BhbmZvcm08L2NvZGU+OyB0 aGUgZmlyc3QgZXZlbnQgb2YgYSBzcGFubmVkIGdyb3VwIGlzIGp1c3QgbGlrZSBhbnkgb3Ro ZXIgZXZlbnQuPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFtcGxlIDM8L2gzPgoKCTxwPllvdSBj b3VsZCB1c2UgdGhlIGNhbGVuZGFyIHRhZ3MgdG8gb3V0cHV0IHZhcmlvdXMgYml0cyBvZiBl dmVudCBmbGFnIGluZm9ybWF0aW9uIHRvIGJ1aWxkIHlvdXIgb3duIGNsYXNzIG5hbWVzLiBU aGlzIGV4YW1wbGUgYWxzbyBkZW1vbnN0cmF0ZXMgdGhlIDxjb2RlPmh0bWw8L2NvZGU+IGF0 dHJpYnV0ZSBvZiB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+ IHRvIGJ1aWxkIHVwIGEgcXVlcnkgc3RyaW5nIHRoYXQgaXMgcGFzc2VkIGFsb25nIHdpdGgg YW4gZXZlbnQmIzgyMTc7cyA8Y29kZT5jYXRlZ29yeTE8L2NvZGU+IHdoZW4gYSB2aXNpdG9y IGNsaWNrcyB0aGUgYW5jaG9yLjwvcD4KCgk8cD5UaGlzIGFsbG93cyB5b3VyIHNpdGUgdmlz aXRvcnMgdG8gZmlsdGVyIGV2ZW50cyBieSBjYXRlZ29yeSB3aGlsZSByZXRhaW5pbmcgdGhl IGFiaWxpdHkgdG8gc2hvdyB0aGUgY2FsZW5kYXIgZm9yIHRoZSBjdXJyZW50IG1vbnRoL3ll YXIgYW5kIHNlY3Rpb24gdGhleSBhcmUgdmlld2luZyBpbnN0ZWFkIG9mIGRyb3BwaW5nIGJh Y2sgdG8gdGhlIGN1cnJlbnQgbW9udGgveWVhciBsaWtlIG90aGVyIGNhbGVuZGFyIHN5c3Rl bXMgb2Z0ZW4gZG8uPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgaXNvd2Vla3M9JnF1b3Q7V0VFSyMmcXVvdDsKICAg ICB5ZWFyd2lkdGg9JnF1b3Q7MCwyJnF1b3Q7IHNlbGVjdD0mcXVvdDt5ZWFyLCBtb250aCZx dW90OwogICAgIHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OyBza2lwZmllbGQ9JnF1 b3Q7Y3VzdG9tXzImcXVvdDsKICAgICBzaG93c2tpcHBlZD0mcXVvdDsxJnF1b3Q7IGV4cGly ZWQ9JnF1b3Q7MSZxdW90OyZndDsKICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7Y2FsXyZsdDt0 eHA6c21kX2NhbF9pbmZvIGpvaW49JnF1b3Q7IGNhbF8mcXVvdDsgLyZndDsmcXVvdDsmZ3Q7 CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhw OnBlcm1saW5rJmd0OwogICAgICAmbHQ7YSBocmVmPSZxdW90Oz9jPSZsdDt0eHA6Y2F0ZWdv cnkxCiAgICAgICAgIC8mZ3Q7JmFtcDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90 O3NlY3Rpb24sIHllYXIsCiAgICAgICAgIG1vbnRoLCBjYWxpZCZxdW90OyBodG1sPSZxdW90 OzEmcXVvdDsKICAgICAgICAgLyZndDsmcXVvdDsmZ3Q7Jmx0O3R4cDpjYXRlZ29yeTEgdGl0 bGU9JnF1b3Q7MSZxdW90OyAvJmd0OyZsdDsvYSZndDsKICAgJmx0Oy9zcGFuJmd0OwombHQ7 L3R4cDpzbWRfY2FsZW5kYXImZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaGF0IGlzIGFsc28g dXNlZnVsIGFib3V0IHRoZSA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29k ZT4gdGFnIGlzIHRoYXQgaWYgYSBwYXJ0aWN1bGFyIHZhbHVlIGlzIG5vdCBzZXQgaXQgd2ls bCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC48L3A+CgoJPGgyIGNsYXNzPSJjaGFu Z2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4yMSBEZWMgMDggfCAwLjEgfCBJ bml0aWFsIHJlbGVhc2UgKHNwb25zb3JzIG9ubHkpPC9saT4KCQk8bGk+MjIgRGVjIDA4IHwg MC4yIHwgRml4ZWQgYSBmZXcgVzNDIHZhbGlkYXRpb24gaXNzdWVzIGFuZCBhZGRlZCBtb3Jl IGRhdGEgdmFsaWRpdHkgY2hlY2tzIDsgYXR0ZW1wdGVkIHRvIGFkZHJlc3MgZGF0ZS90aW1l em9uZSBwcm9ibGVtcyAoYW5kIG1vc3RseSBmYWlsZWQsIHNvIHdyb3RlIGFib3V0IGl0IGlu c3RlYWQpIDsgZW5oYW5jZWQgPGNvZGU+c21kX2lmX2NhbDwvY29kZT4gdGFnIHRvIGNoZWNr IGZvciBkYXRlcyBhbmQgPGNvZGU+Y2FsaWQ8L2NvZGU+IDsgYWRkZWQgPGNvZGU+ZXNjYXBl PC9jb2RlPiBhdHRyaWJ1dGUgdG8gc21kX2NhbF9pbmZvIHRhZzwvbGk+CgkJPGxpPjIzIERl YyAwOCB8IDAuMjEgfCBDaGFuZ2VkIDxjb2RlPmlzb3dlZWtzPC9jb2RlPiBzbyBhbnkgZ2l2 ZW4gdGV4dCBiZWNvbWVzIHRoZSBjb2x1bW4gaGVhZGluZyA7IGFkZGVkIDxjb2RlPndlZWs8 L2NvZGU+IGF0dHJpYnV0ZSB0byBhbGwgcmVsZXZhbnQgdGFncyA7IGFkZGVkIDxjb2RlPmRh eTwvY29kZT4gYXR0cmlidXRlIHRvIDxjb2RlPnNtZF9jYWxfaW5mbzwvY29kZT4gOyBmaXhl ZCA8Y29kZT5tb250aDwvY29kZT4gYW5kIDxjb2RlPnllYXI8L2NvZGU+IGF0dHJpYnV0ZXMg c28gY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlkZXMgdGhlbTwvbGk+Cgk8L3VsPgoKCTxw PjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hl bHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBO ZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQoj c21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBk b3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsg bWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGlu aywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBjOyB0ZXh0LWRlY29yYXRpb246 IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbTox cHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJs dWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJs dWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBm b250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjog Y2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFj azsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzA3OTsgZm9udDogYm9sZCAx MnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEw cHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRl cmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2Vy aWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Y29sb3I6IzMzZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRl cjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQt YWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRf aGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRf aGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJl ZCB7Y29sb3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4 OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0t IC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7czozOiJtZDUiO3M6MzI6ImIyZTNjNDBm OTQ4OWQyYjNhYjZhOTg1YTAzZTBlYTgxIjt9