# Name: smd_calendar v0.23 # 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjMiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjM3NzQ2OiIvLyBCYXNlZCBoZWF2aWx5IG9u IG1kcF9jYWxlbmRhciAtIHRoYW5rcyENCi8vVE9ETzogSW52ZXN0aWdhdGUNCi8qDQokZCA9 IG5ldyBEYXRlVGltZSgnMjAwOC0xMi0yMiAxMjo1MicpOw0KZWNobyAkZC0+Z2V0VGltZXpv bmUoKS0+Z2V0TmFtZSgpOw0KKi8NCg0KaWYoICRkYXRlID0gZ3BzKCdkYXRlJykgKSB7DQoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR2YXJpYWJsZSwgJHByZWZz LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZCwgJHNtZF95ZWFyLCAkc21kX21vbnRoLCAk c21kX3dlZWssICRzbWRfZGF5Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUn ID0+ICdhbnknLCAvLyBwYXN0LCBmdXR1cmUsIGFueQ0KCQknc2l6ZScgPT4gJ2xhcmdlJywg Ly8gc21hbGwgb3IgbGFyZ2UgKGNhbGVuZGFyKQ0KCQknZXhwaXJlZCcgPT4gJycsIC8vIDA9 bm8sIDE9eWVzIHB1Ymxpc2ggZXhwaXJlZCBldmVudHMsIGVtcHR5PXVzZSBwcmVmcw0KCQkn Y2F0ZWdvcnknID0+ICRwcmV0ZXh0WydjJ10sDQoJCSdzZWN0aW9uJyA9PiAkcHJldGV4dFsn cyddLA0KCQknYXV0aG9yJyA9PiAkcHJldGV4dFsnYXV0aG9yJ10sDQoJCSdzdGF0dXMnID0+ ICdsaXZlJywNCgkJJ3N0YXRpYycgPT4gJycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3NwYW5m b3JtJyA9PiAnU01EX1NBTUUnLA0KCQkncmVjdXJmb3JtJyA9PiAnU01EX1NBTUUnLA0KCQkn c3RlcGZpZWxkJyA9PiAnJywNCgkJJ3NraXBmaWVsZCcgPT4gJycsDQoJCSdzaG93c2tpcHBl ZCcgPT4gJzAnLA0KCQknc2hvd3NwYW5uZWQnID0+ICcxJywNCgkJJ2hvbGlkYXlzJyA9PiAn JywNCgkJJ2hvbGlkYXlmbGFncycgPT4gJ2V2ZW50JywgLy8gcGVybWl0IHRoZXNlIGV2ZW50 cyB0byAibGFuZCIgb24gYSBob2xpZGF5IChldmVudCwgcmVjdXIsIG11bHRpKQ0KCQknY2xh c3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcsIC8vIGNlbGwsIGV2ZW50LCBjZWxscGx1cyAo Y29tYmluZXMgZXZlbnQgYW5kIGNlbGwgaW50byBjZWxsIGxldmVsIGNsYXNzZXMpDQoJCSds aW5rcG9zdGVkJyA9PiAncmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFzdCcsIC8v IHdoaWNoIGV2ZW50cyBjYXVzZSB0aGUgbWluaWNhbCB0byBsaW5rIHRvIHBvc3RlZCBkYXRl DQoJCSdjbGFzc3ByZWZpeGVzJyA9PiAnc21kX2NhbF8sIHNtZF9jYWxfZXZfJywgLy8gMXN0 PWNlbGwtbGV2ZWwgcGZ4LCAybmQ9ZXZlbnQtbGV2ZWwgcGZ4IChvcHRpb25hbCkNCgkJJ2Ns YXNzJyA9PiAnJywgLy8gVGFibGUgY2xhc3MNCgkJJ3Jvd2NsYXNzJyA9PiAnJywNCgkJJ2Nl bGxjbGFzcycgPT4gJycsDQoJCSdlbXB0eWNsYXNzJyA9PiAnZW1wdHknLA0KCQknaXNvd2Vl a2NsYXNzJyA9PiAnd2VlaycsDQoJCSduYXZjbGFzcycgPT4gJ25hdnByZXYsIG5hdm5leHQn LA0KCQknZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdvcnknLA0KCQknZXZlbnR3cmFwdGFnJyA9 PiAnc3BhbicsDQoJCSdzZWxlY3QnID0+ICcnLCAvLyBtb250aCBhbmQvb3IgeWVhciAodG8g ZGlzcGxheSBkcm9wZG93bnMpDQoJCSdzZWxlY3RidG4nID0+ICcnLCAvLyBlbXB0eSA9IGF1 dG9zZWxlY3QgKG9uY2hhbmdlKSwgb3IgdGV4dCB0byBnbyBvbiB0aGUgc3VibWl0IGJ1dHRv bg0KCQknbXljbGFzcycgPT4gJycsIC8vIG1vbnRoLXllYXIgaGVhZGVyIGNsYXNzDQoJCSdt eXdyYXB0YWcnID0+ICcnLCAvLyBtb250aC15ZWFyIGhlYWRlciB3cmFwdGFnDQoJCSdpZCcg PT4gJycsIC8vIFRhYmxlIElEICg9Y2FsaWQpDQoJCSd3ZWVrJyA9PiAnJywNCgkJJ21vbnRo JyA9PiAnJywNCgkJJ3llYXInID0+ICcnLA0KCQkneWVhcndpZHRoJyA9PiAnMCwwJywgLy8g bnVtYmVyIG9mIHllYXJzIGVpdGhlciBzaWRlIG9mIHRoZSBmaXJzdC9sYXN0IGFydGljbGUg dG8gcGVybWl0DQoJCSdpc293ZWVrcycgPT4gJycsIC8vIGVtcHR5ID0gZG9uJ3Qgc2hvdyBJ U08gd2Vla3MsIG9yIHRleHQgb2YgY29sdW1uIGhlYWRpbmcNCgkJJ2RheWZvcm1hdCcgPT4g J0FCQlInLCAvLyBBQkJSID0gJWEsIEZVTEwgPSAlQSwgb3IgY3VzdG9tIHN0cmZ0aW1lIHN0 cmluZw0KCQknbW9udGhmb3JtYXQnID0+ICdGVUxMJywgLy8gQUJCUiA9ICViLCBGVUxMID0g JUIsIG9yIGN1c3RvbSBzdHJmdGltZSBzdHJpbmcNCgkJJ2ZpcnN0ZGF5JyA9PiAwLCAvLyAx c3QgZGF5IG9mIHdlZWsgMD1TdW5kYXksIDY9U2F0dXJkYXkgKGZvcmNlZCB0byBNb25kYXkg aWYgaXNvd2Vla3M9MSkNCgkJJ2dtdCcgPT4gMCwNCgkJJ2xhbmcnID0+ICcnLA0KCQknZGVi dWcnID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCSRmdXR1cmUgPSAoICR0aW1lICE9ICJwYXN0 IiApID8gdHJ1ZSA6IGZhbHNlOyAvLyBEZXRlcm1pbmUgaGVhZGluZyBzdHlsZQ0KCSRzdGF0 dXMgPSAoJHN0YXR1cykgPyAkc3RhdHVzIDogJ2xpdmUnOw0KCSRmaXJzdGRheSA9ICgkaXNv d2Vla3MgPT0gJycpID8gJGZpcnN0ZGF5IDogMTsNCgkkc3BhbmZvcm0gPSAoJHNwYW5mb3Jt ID09ICJTTURfU0FNRSIpID8gJGZvcm0gOiAkc3BhbmZvcm07DQoJJHJlY3VyZm9ybSA9ICgk cmVjdXJmb3JtID09ICJTTURfU0FNRSIpID8gJGZvcm0gOiAkcmVjdXJmb3JtOw0KDQoJLy8g U2V0IHVwIHRoZSBjbGFzcyBwcmVmaXhlcw0KCSRjbGV2cyA9IGRvX2xpc3QoJGNsYXNzbGV2 ZWxzKTsNCgkkY2xzID0gZG9fbGlzdCgkY2xhc3NwcmVmaXhlcyk7DQoJJGNsYXNzcHJlZml4 ID0gJGV2Y2xhc3NwcmVmaXggPSAkY2xzWzBdOw0KCWlmIChjb3VudCgkY2xzKSA+IDEpew0K CQkkZXZjbGFzc3ByZWZpeCA9ICRjbHNbMV07DQoJfQ0KDQoJLy8gU2V0IHVwIHRoZSBuYXYg Y2xhc3MoZXMpDQoJJG5hdmNsYXNzID0gZG9fbGlzdCgkbmF2Y2xhc3MpOw0KCSRuYXZwcmV2 Y2xhc3MgPSAkbmF2bmV4dGNsYXNzID0gJG5hdmNsYXNzWzBdOw0KCWlmIChjb3VudCgkbmF2 Y2xhc3MpID4gMSl7DQoJCSRuYXZuZXh0Y2xhc3MgPSAkbmF2Y2xhc3NbMV07DQoJfQ0KDQoJ Ly8gRmlsdGVycw0KCSRmb3B0cyA9IGFycmF5KCk7DQoJJGNhdFNRTCA9ICRzZWNTUUwgPSAk YXV0aFNRTCA9ICcnOw0KCWlmKCRjYXRlZ29yeSkgew0KCQkkZm9wdHNbXSA9IGFycmF5KCdj JyA9PiAkY2F0ZWdvcnkpOw0KCQkkY2F0U1FMID0gZG9RdW90ZShqb2luKCInLCciLCBkb19s aXN0KCRjYXRlZ29yeSkpKTsNCgkJJGNhdFNRTCA9ICIgQU5EICggQ2F0ZWdvcnkxIElOICgi LiRjYXRTUUwuIikgT1IgQ2F0ZWdvcnkyIElOICgiLiRjYXRTUUwuIikgKSAiOw0KCX0NCglp Zigkc2VjdGlvbikgew0KCQkkZm9wdHNbXSA9IGFycmF5KCdzJyA9PiAkc2VjdGlvbik7DQoJ CSRzZWNTUUwgPSBkb1F1b3RlKGpvaW4oIicsJyIsIGRvX2xpc3QoJHNlY3Rpb24pKSk7DQoJ CSRzZWNTUUwgPSAiIEFORCBTZWN0aW9uIElOICgiLiRzZWNTUUwuIikgIjsNCgl9DQoJaWYo JGF1dGhvcikgew0KCQkkZm9wdHNbXSA9IGFycmF5KCdhdXRob3InID0+IGh0bWxlbnRpdGll cyhncHMoJ2F1dGhvcicpKSk7DQoJCSRhdXRoU1FMID0gZG9RdW90ZShqb2luKCInLCciLCBk b19saXN0KCRhdXRob3IpKSk7DQoJCSRhdXRoU1FMID0gIiBBTkQgQXV0aG9ySUQgSU4gKCIu JGF1dGhTUUwuIikgIjsNCgl9DQoJJHN0YXR1cyA9IGRvX2xpc3QoJHN0YXR1cyk7DQoJJHN0 YXRpID0gYXJyYXkoKTsNCglmb3JlYWNoICgkc3RhdHVzIGFzICRzdGF0KSB7DQoJCWlmIChl bXB0eSgkc3RhdCkpIHsNCgkJCWNvbnRpbnVlOw0KCQl9IGVsc2UgaWYgKGlzX251bWVyaWMo JHN0YXQpKSB7DQoJCQkkc3RhdGlbXSA9ICRzdGF0Ow0KCQl9IGVsc2Ugew0KCQkJJHN0YXRp W10gPSBnZXRTdGF0dXNOdW0oJHN0YXQpOw0KCQl9DQoJfQ0KCSRzdGF0aSA9ICIgU3RhdHVz IElOICgiLmRvUXVvdGUoam9pbigiJywnIiwgJHN0YXRpKSkuIikiOw0KDQoJJGV4cGlyZWQg PSAoJGV4cGlyZWQpID8gJGV4cGlyZWQgOiAkcHJlZnNbJ3B1Ymxpc2hfZXhwaXJlZF9hcnRp Y2xlcyddOw0KCSRleHBpcmVkID0gKCgkZXhwaXJlZCkgPyAnJyA6ICcgQU5EIChub3coKSA8 PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4nKScpOw0KCSRldmVudGNs YXNzZXMgPSBkb19saXN0KCRldmVudGNsYXNzZXMpOw0KCSRob2xpZGF5ZmxhZ3MgPSBkb19s aXN0KCRob2xpZGF5ZmxhZ3MpOw0KCSRsaW5rcG9zdGVkID0gZG9fbGlzdCgkbGlua3Bvc3Rl ZCk7DQoNCgkvLyBXb3JrIG91dCB0aGUgZmlyc3QgYW5kIGxhc3QgcG9zdHMgdG8gZGV0ZXJt aW5lIHRoZSB5ZWFyIHJhbmdlDQoJJGVhcmxpZXN0ID0gc2FmZV9yb3coJ3VuaXhfdGltZXN0 YW1wKFBvc3RlZCkgQVMgdVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRzdGF0aS4oKCRjYXRl Z29yeSkgPyAkY2F0U1FMIDogJycpLigoJHNlY3Rpb24pID8gJHNlY1NRTCA6ICcnKS4oKCRh dXRob3IpID8gJGF1dGhTUUwgOiAnJykuJyBPUkRFUiBCWSBQb3N0ZWQgQVNDIExJTUlUIDAs IDEnLCAkZGVidWcpOw0KCSRsYXRlc3QgPSBzYWZlX3JvdygndW5peF90aW1lc3RhbXAoTGFz dE1vZCkgQVMgdUxhc3RNb2QnLCAndGV4dHBhdHRlcm4nLCAkc3RhdGkuKCgkY2F0ZWdvcnkp ID8gJGNhdFNRTCA6ICcnKS4oKCRzZWN0aW9uKSA/ICRzZWNTUUwgOiAnJykuKCgkYXV0aG9y KSA/ICRhdXRoU1FMIDogJycpLicgQU5EIFBvc3RlZCA8IG5vdygpIE9SREVSIEJZIExhc3RN b2QgREVTQyBMSU1JVCAwLCAxJywgJGRlYnVnKTsNCgkkeWVhcndpZHRoID0gZG9fbGlzdCgk eWVhcndpZHRoKTsNCglpZiAoY291bnQoJHllYXJ3aWR0aCkgPT0gMSkgJHllYXJ3aWR0aFsx XSA9ICR5ZWFyd2lkdGhbMF07DQoJJGVhcmxpZXN0ID0gZGF0ZSgiWSIsIHN0cnRvdGltZSgi LSIuJHllYXJ3aWR0aFswXS4iIHllYXIiLCAoIChlbXB0eSgkZWFybGllc3QpKSA/IHRpbWUo KSA6ICRlYXJsaWVzdFsndVBvc3RlZCddKSApICk7DQoJJGxhdGVzdCA9IGRhdGUoIlkiLCBz dHJ0b3RpbWUoIisiLiR5ZWFyd2lkdGhbMV0uIiB5ZWFyIiwgKCAoZW1wdHkoJGxhdGVzdCkp ID8gdGltZSgpIDogJGxhdGVzdFsndUxhc3RNb2QnXSkgKSApOw0KDQoJLy8gQ2hlY2sgdGhl IFVSTCBmb3IgY3VycmVudCBkYXRlIGFuZCBjYWxlbmRhciB0YXJnZXQgaW5mbw0KCSRpbmNv bWluZ19jYWxpZCA9IGdwcygnY2FsaWQnKTsNCgkkaW5jb21pbmdfeWVhciA9IChncHMoJ3kn KSBhbmQgaXNfbnVtZXJpYyhncHMoJ3knKSkpID8gKGludClncHMoJ3knKSA6ICcnOw0KCSRp bmNvbWluZ19tb250aCA9IChncHMoJ20nKSBhbmQgaXNfbnVtZXJpYyhncHMoJ20nKSkpID8g KGludClncHMoJ20nKSA6ICcnOw0KCSRpbmNvbWluZ193ZWVrID0gKGdwcygndycpIGFuZCBp c19udW1lcmljKGdwcygndycpKSkgPyAoaW50KWdwcygndycpIDogJyc7DQoNCglpZigkc3Rh dGljKSB7IC8vIGlmIHdlJ3JlIHN0YXRpYyB3L28gYW55IHN1cHBsaWVkIHZhcnMsIHVzZSB0 aGUgY3VycmVudCBkYXRlDQoJCWlmKCEkeWVhcikgeyAkeWVhciA9IHNhZmVfc3RyZnRpbWUo JyVZJyk7IH0NCgkJaWYoISRtb250aCkgeyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCclbScp OyB9DQoJfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIHVzZSBjdXJyZW50IGRhdGUgb25seSBpZiB0 aGVyZSdzIG5vdGhpbmcgZWxzZQ0KCQlpZiggJGlkID09ICRpbmNvbWluZ19jYWxpZCApIHsg Ly8gdXNlIGluY29taW5nDQoJCQkkeWVhciA9ICgkaW5jb21pbmdfeWVhcikgPyAkaW5jb21p bmdfeWVhciA6ICgoJHllYXIpID8gJHllYXIgOiBzYWZlX3N0cmZ0aW1lKCclWScpKTsNCgkJ CSRtb250aCA9ICgkaW5jb21pbmdfbW9udGgpID8gJGluY29taW5nX21vbnRoIDogKCgkbW9u dGgpID8gJG1vbnRoIDogc2FmZV9zdHJmdGltZSgnJW0nKSk7DQoJCQkvLyBJZiB3ZWVrIGlz IHVzZWQsIGFkanVzdCBtb250aCBzbyBpdCBlbmNvbXBhc3NlcyB0aGUgZ2l2ZW4gd2Vlaw0K CQkJJHdlZWsgPSAkaW5jb21pbmdfd2VlazsNCgkJCWlmICgkd2Vlaykgew0KCQkJCSRtb250 aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwgZ21ta3RpbWUgKDEsMSwxLDEsNyokd2VlaywkeWVh cikpOyAvLyBHdWVzcyB0aGUgbW9udGggZnJvbSB0aGUgd2Vlaw0KCQkJfQ0KCQl9IGVsc2Ug eyAvLyB1c2UgY3VycmVudA0KCQkJaWYoISR5ZWFyKSB7ICR5ZWFyID0gc2FmZV9zdHJmdGlt ZSgnJVknKTsgfQ0KCQkJaWYoISRtb250aCkgeyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCcl bScpOyB9DQoJCQlpZigkd2VlaykgeyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCIlbSIsIGdt bWt0aW1lICgxLDEsMSwxLDcqJHdlZWssJHllYXIpKTsgfQ0KCQl9DQoJfQ0KCSRzbWRfY2Fs X2lkID0gKCRpbmNvbWluZ19jYWxpZCkgPyAkaW5jb21pbmdfY2FsaWQgOiAkaWQ7DQoJJHNt ZF95ZWFyID0gJHllYXI7ICRzbWRfbW9udGggPSAkbW9udGg7IC8vICRzbWRfd2VlayBhbmQg c21kX2RheSBhcmUgc2V0IHBlciBldmVudCBsYXRlcg0KDQoJLy8gVGhlIHRpbWVzIGluIHRo ZSBEQiBhcmUgc3RvcmVkIHVzaW5nIHRoZSBzZXJ2ZXIncyBsb2NhbCB0aW1lLCBzbyB3ZSBk b24ndA0KCS8vIHdhbnQgdG8gYWRqdXN0IGFueXRoaW5nIChzaW5jZSBta3RpbWUgdXNlcyB0 aGUgc2VydmVyJ3MgbG9jYWwgdGltZSkuDQoJLy9UT0RPOiBXb3JyeSBhYm91dCBnbXQgLyBk c3QNCgkkdHNfZmlyc3QgPSBta3RpbWUoMCwgMCwgMCwgJG1vbnRoLCAxLCAkeWVhcik7DQoJ JHRzX2xhc3QgPSBta3RpbWUoMjMsIDU5LCA1OSwgJG1vbnRoLCBkYXRlKCd0JywkdHNfZmly c3QpLCAkeWVhcik7DQoNCgkkZXh0cmFzcWwgPSAkY2F0U1FMIC4gJHNlY1NRTCAuICRhdXRo U1FMOw0KCXN3aXRjaCgkdGltZSkgew0KCQljYXNlICJhbnkiIDogLyogRG9uJ3QgY2FyZSBh Ym91dCBkYXRlICovIGJyZWFrOw0KCQljYXNlICJmdXR1cmUiIDogJGV4dHJhc3FsIC49ICIg QU5EIFBvc3RlZCA+IENVUkRBVEUoKSI7IGJyZWFrOw0KCQlkZWZhdWx0IDogJGV4dHJhc3Fs IC49ICIgQU5EIFBvc3RlZCA8IENVUkRBVEUoKSI7IGJyZWFrOyAvLyBUaGUgcGFzdA0KCX0N Cg0KCS8vIEhvbGlkYXlzIGFyZSBnbG9iYWwgJ2V4Y2x1c2lvbnMnLCBlaXRoZXIgZGVmaW5l ZCBkaXJlY3RseSBvciBpbiBhIDx0eHA6dmFyaWFibGUgLz4NCgkkaG9saWRheXMgPSBkb19s aXN0KCRob2xpZGF5cyk7DQoJJHR4cGhvbHMgPSBkb19saXN0KCRob2xpZGF5c1swXSwgIjoi KTsNCglpZiAoJHR4cGhvbHNbMF0gPT0gInR4cHZhciIpIHsNCgkJJGhvbGlkYXlzID0gZG9f bGlzdCgkdmFyaWFibGVbJHR4cGhvbHNbMV1dKTsNCgl9DQoJLy8gRm9yY2UgZWFjaCBob2xp ZGF5IHRvIGEga25vd24gZm9ybWF0LiBIb2xpZGF5cyB3aXRob3V0IHllYXJzIHVzZSBjdXJy ZW50IHllYXINCglmb3JlYWNoICgkaG9saWRheXMgYXMgJGtleSA9PiAkdmFsKSB7DQoJCWlm IChlbXB0eSgkdmFsKSkgY29udGludWU7DQoJCSRudW1wYXJ0cyA9IHByZWdfbWF0Y2goJy9e KFtcZFx3XSspLj8oW1xkXHddKykuPyhbXGRcd10rKT8kLycsICR2YWwsICRwYXJ0cyk7DQoN CgkJaWYgKCRudW1wYXJ0cykgew0KCQkJaWYgKGNvdW50KCRwYXJ0cykgPT0gMykgew0KCQkJ CSRwYXJ0c1szXSA9ICR5ZWFyOw0KICAgICAgICAgfQ0KCQkJJHZhbCA9IHN0cl9wYWQoJHBh cnRzWzFdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLnN0cl9wYWQoJHBhcnRzWzJdLCAy LCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLiRwYXJ0c1szXTsNCgkJfQ0KCQkkaG9saWRheXNb JGtleV0gPSBkYXRlKCJkLU0tWSIsIHN0cnRvdGltZSgkdmFsKSk7DQoJfQ0KDQoJaWYgKCRk ZWJ1ZyA+IDAgJiYgIWVtcHR5KCRob2xpZGF5cykgJiYgJGhvbGlkYXlzWzBdICE9ICcnKSB7 DQoJCWVjaG8gIisrIEhPTElEQVlTICsrICI7DQoJCWRtcCgkaG9saWRheXMpOw0KCX0NCg0K CS8vIEdldCBhbGwgbWF0Y2hpbmcgYXJ0aWNsZXMgaW4gKGFuZCBiZWZvcmUpIHRoaXMgbW9u dGgNCgkkZXZlbnRzID0gYXJyYXkoKTsNCgkkc3FsMiA9ICRzdGF0aSAuICIgSEFWSU5HIHVQ b3N0ZWQgPD0gIi4kdHNfbGFzdCAuICRleHBpcmVkIC4gJGV4dHJhc3FsIC4iIE9SREVSIEJZ IFBvc3RlZCBBU0MiOw0KCSRncmFiQ29scyA9ICcqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQp IGFzIHVQb3N0ZWQsIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0TW9kLCB1bml4 X3RpbWVzdGFtcChFeHBpcmVzKSBhcyB1RXhwaXJlcyc7DQoJJGV2bGlzdCA9IHNhZmVfcm93 cygkZ3JhYkNvbHMsICd0ZXh0cGF0dGVybicsICRzcWwyLCAkZGVidWcpOw0KDQoJLy8gSWYg YW55IGV2ZW50cyByZWN1ciBhbmQgZmFsbCB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgsIGFk ZCB0aG9zZSBhcyB3ZWxsDQoJLy8gSWYgYW55IGRhdGVzIGFyZSB0byBiZSBleGNsdWRlZCwg dGhlIGVudHJ5IGlzIHNraXBwZWQgVU5MRVNTIHNob3dza2lwcGVkIGluZGljYXRlcyBvdGhl cndpc2UNCglmb3JlYWNoICgkZXZsaXN0IGFzICRyb3cpIHsNCgkJJGlkeCA9IDA7IC8vIElu IGNhc2UgdGhlIDFzdCBkYXkgb2YgdGhlIG1vbnRoIGlzIGEgY29udGludWF0aW9uIG9mIGFu IGV2ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbW9udGgNCgkJJHN0YXJ0ID0g JHJvd1sndVBvc3RlZCddOw0KCQkkc3RhcnRfZGF0ZSA9IGRhdGUoIlktbS1kIiwgJHN0YXJ0 KTsgLy8gRm9yIHJlY3VycmluZy9zcGFubmVkIGV2ZW50cyBvbiBhIG1pbmljYWwsIHRoaXMg aXMgdGhlIGV2ZW50IHRoZSBjZWxsIGxpbmtzIHRvDQoJCSRyZWFsX2VuZCA9ICRyb3dbJ3VF eHBpcmVzJ107DQoJCSRlbmQgPSAoJHJlYWxfZW5kICE9IDAgJiYgJHJlYWxfZW5kIDwgJHRz X2xhc3QpID8gJHJlYWxfZW5kIDogJHRzX2xhc3Q7DQoJCSRzbWRfY2FsX2ZsYWcgPSBhcnJh eSgpOw0KDQoJCWlmICgkZGVidWcgPiAxKSB7DQoJCQllY2hvICcrKyBFVkVOVCBTVEFSVCAv LyBFTkQgLy8gUkVBTCBFTkQgKysnOw0KCQkJZG1wKCRyb3dbJ1RpdGxlJ10pOw0KCQkJZG1w KGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHN0YXJ0KSAuJyAvLyAnLiBkYXRlKCdkLU0tWSBIOmk6 cycsICRlbmQpIC4nIC8vICcuIGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHJlYWxfZW5kKSk7DQoJ CQlpZiAoJGRlYnVnID4gMikgew0KCQkJCWRtcCgkcm93KTsNCgkJCX0NCgkJfQ0KDQoJCSRt dWx0aSA9ICgkcm93Wyd1RXhwaXJlcyddID4gJHJvd1sndVBvc3RlZCddICYmICRyb3dbJ3VF eHBpcmVzJ10gPiAkdHNfZmlyc3QpID8gdHJ1ZSA6IGZhbHNlOw0KCQkkcmVjdXIgPSAoZW1w dHkoJHJvd1skc3RlcGZpZWxkXSkpID8gZmFsc2UgOiB0cnVlOw0KCQkkaG9sX2hpdCA9IGlu X2FycmF5KGRhdGUoImQtTS1ZIiwgJHN0YXJ0KSwgJGhvbGlkYXlzKTsNCgkJJGV2Y2xhc3Nl cyA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRldmVudGNsYXNzZXMgYXMgJGV2Y2xzKSB7DQoJ CQlzd2l0Y2ggKCRldmNscykgew0KCQkJCWNhc2UgIiI6DQoJCQkJCWJyZWFrOw0KCQkJCWNh c2UgImdjYXQiOg0KCQkJCQlpZiAoaXNzZXQoJHByZXRleHRbJ2MnXSkgJiYgIWVtcHR5KCRw cmV0ZXh0WydjJ10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjbGFzc3ByZWZpeC4k cHJldGV4dFsnYyddOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImNhdGVnb3J5 IjoNCgkJCQkJaWYgKGlzc2V0KCRyb3dbJ0NhdGVnb3J5MSddKSAmJiAhZW1wdHkoJHJvd1sn Q2F0ZWdvcnkxJ10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjbGFzc3ByZWZpeC4k cm93WydDYXRlZ29yeTEnXTsNCgkJCQkJfQ0KCQkJCQlpZiAoaXNzZXQoJHJvd1snQ2F0ZWdv cnkyJ10pICYmICFlbXB0eSgkcm93WydDYXRlZ29yeTInXSkpIHsNCgkJCQkJCSRldmNsYXNz ZXNbXSA9ICRldmNsYXNzcHJlZml4LiRyb3dbJ0NhdGVnb3J5MiddOw0KCQkJCQl9DQoJCQkJ CWJyZWFrOw0KCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQlpZiAoaXNzZXQoJHByZXRleHRb J3MnXSkgJiYgIWVtcHR5KCRwcmV0ZXh0WydzJ10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10g PSAkZXZjbGFzc3ByZWZpeC4kcHJldGV4dFsncyddOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0K CQkJCWNhc2UgImF1dGhvciI6DQoJCQkJCWlmIChpc3NldCgkcHJldGV4dFsnYXV0aG9yJ10p ICYmICFlbXB0eSgkcHJldGV4dFsnYXV0aG9yJ10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10g PSAkZXZjbGFzc3ByZWZpeC4kcHJldGV4dFsnYXV0aG9yJ107DQoJCQkJCX0NCgkJCQkJYnJl YWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJaWYgKGlzc2V0KCRyb3dbJGV2Y2xzXSkgJiYgIWVt cHR5KCRyb3dbJGV2Y2xzXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNbXSA9ICRldmNsYXNzcHJl Zml4LiRyb3dbJGV2Y2xzXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQkk ZXZjbGFzc2VzID0gKCRldmNsYXNzZXMpID8gJyAnLiBqb2luKCcgJywgJGV2Y2xhc3Nlcykg OiAnJzsNCgkJJGlnbm9yZSA9IGFycmF5KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEgJiYgJGV2 Y2xhc3Nlcykgew0KCQkJZWNobyAnKysgRVZFTlQgQ0xBU1NFUyArKyc7DQoJCQlkbXAoJGV2 Y2xhc3Nlcyk7DQoJCX0NCg0KCQkvLyBFdmVudHMgdGhhdCBzdGFydCB0aGlzIG1vbnRoDQoJ CWlmICgkc3RhcnQgPCAkZW5kICYmICRzdGFydCA+ICR0c19maXJzdCkgew0KCQkJcG9wdWxh dGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCS8vIHN0YXJ0IG9mIGEgbXVsdGkgdGhhdCBtYXkg b3IgbWF5IG5vdCBiZSBjYW5jZWxsZWQgZHVlIHRvIGhvbGlkYXlzDQoJCQkkZmxhZyA9ICgk c2hvd3NwYW5uZWQgJiYgJG11bHRpICYmICEkcmVjdXIpID8gJ211bHRpZmlyc3QnIC4gKCgg JGhvbF9oaXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlmbGFncykgKSA/ICcgY2Fu Y2VsIGhvbHMnIDogJycgKSA6ICcnOw0KCQkJLy8gYSBzdGFuZGFyZCBldmVudCB0aGF0IG1h eSBvciBtYXkgbm90IGJlIGNhbmNlbGxlZCBkdWUgdG8gaG9saWRheXMNCgkJCSRmbGFnID0g KCRmbGFnKSA/ICRmbGFnIDogKCggJGhvbF9oaXQgJiYgIWluX2FycmF5KCdldmVudCcsJGhv bGlkYXlmbGFncykgKSA/ICdldmVudCBjYW5jZWwgaG9scycgOiAnZXZlbnQnICk7DQoJCQkk c21kX2NhbF9mbGFnID0gJGZsYWcgPSBleHBsb2RlKCcgJywgJGZsYWcpOw0KCQkJZm9yZWFj aCAoJGZsYWcgYXMgJGlkeCA9PiAkaXRlbSkgew0KCQkJCSRmbGFnWyRpZHhdID0gJGNsYXNz cHJlZml4LiRpdGVtOw0KCQkJfQ0KCQkJJGZsYWcgPSBqb2luICgnICcsICRmbGFnKTsNCg0K CQkJJGlkeCA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHN0YXJ0KTsNCgkJCSRzbWRfZGF5ID0g JGlkeDsNCgkJCSRzbWRfd2VlayA9IHN0cmZ0aW1lKCclVicsICRzdGFydCk7DQoJCQkkb3Ag PSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZv cm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVy bWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJ JGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICd0eXBlJyA9PiAoKCRmbGFn KSA/ICRmbGFnIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsN CgkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheSgpOw0KCQl9DQoNCgkJLy8gR2VuZXJhdGUgYSBz a2lwIGFycmF5IGZvciB0aGlzIGV2ZW50DQoJCWlmICgkc2tpcGZpZWxkICYmICRyb3dbJHNr aXBmaWVsZF0gIT0gJycpIHsNCgkJCSRpZ25vcmUgPSBkb19saXN0KCRyb3dbJHNraXBmaWVs ZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZSBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkkaWdu b3JlWyRrZXldID0gZGF0ZSgiZC1NLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOyAvLyBGb3JjZSBl YWNoIGRhdGUgdG8gYSBrbm93biBmb3JtYXQNCgkJCX0NCgkJfQ0KCQlpZiAoJGRlYnVnID4g MSkgew0KCQkJZWNobyAnKysgSUdOT1JFIERBVEVTICsrJzsNCgkJCWRtcCgkaWdub3JlKTsN CgkJfQ0KCQkvLyBDYWxjdWxhdGUgdGhlIGRhdGUgb2Zmc2V0cyBhbmQgY2hlY2sgcmVjdXJy aW5nIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBtb250aCBvZiBpbnRlcmVzdA0KCQlp ZiAoJHN0ZXBmaWVsZCAmJiAkcm93WyRzdGVwZmllbGRdICE9ICcnKSB7DQoJCQkkZnJlcSA9 IGRvX2xpc3QoJHJvd1skc3RlcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkZnJlcSBhcyAkaW50 ZXJ2YWwpIHsNCgkJCQkkaW50ZXJ2YWwgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwgZGF0ZSgn RicsIGdtbWt0aW1lKDAsMCwwLCRtb250aCkpLCAkaW50ZXJ2YWwpOw0KCQkJCSRpbnRlcnZh bCA9IHN0cl9yZXBsYWNlKCI/eWVhciIsICR5ZWFyLCAkaW50ZXJ2YWwpOw0KCQkJCSRtYXhf bG9vcCA9IDk5OTk5OyAvLyBQcmFjdGljYWxseSBsaW1pdGxlc3MNCgkJCQlpZiAoc3RycG9z KCRpbnRlcnZhbCwgImxhc3QiKSA9PT0gMCkgew0KCQkJCQkkaW50ZXJ2YWwgPSBkYXRlKCJs LCBGIGpTIFkiLCBzdHJ0b3RpbWUoJGludGVydmFsLCBta3RpbWUoMTIsIDAsIDAsIGRhdGUo Im4iLG1rdGltZSgwLDAsMCwkbW9udGgsMSwkeWVhcikpKzEsIDEsICR5ZWFyKSkpOw0KCQkJ CQkkbWF4X2xvb3AgPSAxOw0KCQkJCX0gZWxzZSBpZiAoc3RycG9zKCRpbnRlcnZhbCwgImZp cnN0IikgPT09IDApIHsNCgkJCQkJJGludGVydmFsID0gZGF0ZSgibCwgRiBqUyBZIiwgc3Ry dG90aW1lKCRpbnRlcnZhbCwgbWt0aW1lKDEyLCAwLCAwLCAoKCRtb250aD4xKSA/ICRtb250 aC0xIDogMTIpLCBkYXRlKCJ0Iixta3RpbWUoMCwwLDAsJG1vbnRoLTEsMSwoKCRtb250aD09 MSkgPyAkeWVhci0xOiAkeWVhcikpKSwgKCgkbW9udGg9PTEpID8gJHllYXItMTogJHllYXIp KSkpOw0KCQkJCQkkbWF4X2xvb3AgPSAxOw0KCQkJCX0NCgkJCQkkdHNfbG9vcCA9IDA7DQoJ CQkJJHRzX2N1cnIgPSAkc3RhcnQ7DQoJCQkJd2hpbGUgKCR0c19jdXJyIDwgJGVuZCAmJiAk dHNfbG9vcCA8ICRtYXhfbG9vcCkgew0KCQkJCQlpZiAoJG1heF9sb29wID09IDEpIHsNCgkJ CQkJCSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCk7DQoJCQkJCQkkdHNfY3VyciA9 ICgkdHNfY3VyciA8ICRzdGFydCB8fCAkdHNfY3VyciA+ICRlbmQpID8gJHN0YXJ0IDogJHRz X2N1cnI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkdHNfY3VyciA9IHN0cnRvdGltZSgkaW50 ZXJ2YWwsICR0c19jdXJyKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJHRzX2N1cnIgPT09IGZhbHNl KSB7DQoJCQkJCQkkdHNfbG9vcCsrOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0gZWxzZSB7DQoJ CQkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJCQkJCWRtcCgiSU5URVJWQUw6ICIuIGRhdGUo J2QtTS1ZIEg6aTpzJywgJHRzX2N1cnIpKTsNCgkJCQkJCX0NCgkJCQkJCWlmICgkdHNfY3Vy ciA8ICRlbmQgJiYgJHRzX2N1cnIgPj0gJHRzX2ZpcnN0ICYmICR0c19jdXJyICE9ICRzdGFy dCkgew0KCQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBDaGVjayBpdCBpc24ndCBhIGhv bGlkYXkgb3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJv dyk7DQoJCQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9IChpbnQpc3RyZnRpbWUoJyVk JywgJHRzX2N1cnIpOw0KCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cic7DQoJCQkJ CQkJJHNob3dfbWUgPSAhaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkdHNfY3VyciksICRpZ25v cmUpOw0KCQkJCQkJCSRob2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkdHNfY3Vy ciksICRob2xpZGF5cyk7DQoJCQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9h cnJheSgncmVjdXInLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJCQkJ aWYgKCAhJHNob3dfbWUgfHwgISRzaG93X2hvbCApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxh Z1tdID0gJ2NhbmNlbCc7DQoJCQkJCQkJfQ0KCQkJCQkJCWlmICgkaG9sX2hpdCkgew0KCQkJ CQkJCQkkc21kX2NhbF9mbGFnW10gPSAnaG9scyc7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIENy ZWF0ZSB0aGUgZXZlbnRzIHRoYXQgYXBwZWFyIGluIHRoZSBjZWxsIGJ1dCBvbmx5IGlmIHRo ZXkndmUgbm90IGFwcGVhcmVkIGJlZm9yZSwgb3IgYXJlIHRvIGJlIGlnbm9yZWQNCgkJCQkJ CQlpZiAoKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJ CQkJCSRzbWRfZGF5ID0gJGlkeDsNCgkJCQkJCQkJJHNtZF93ZWVrID0gc3RyZnRpbWUoJyVW JywgJHRzX2N1cnIpOw0KCQkJCQkJCQkkb3AgPSAoJHJlY3VyZm9ybSkgPyBwYXJzZV9mb3Jt KCRyZWN1cmZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJHNpemU9PSJz bWFsbCIpID8gJycgOiBocmVmKCRyb3dbJ1RpdGxlJ10sIHBlcm1saW5rdXJsKCRyb3cpLCAn IHRpdGxlPSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCQkJCQl9DQoJCQkJCQkJJHVz ZWQgPSBhcnJheSgpOw0KCQkJCQkJCWlmIChpc3NldCgkZXZlbnRzWyRpZHhdKSAmJiAkZXZl bnRzWyRpZHhdICE9IE5VTEwpIHsNCgkJCQkJCQkJZm9yZWFjaCAoJGV2ZW50c1skaWR4XSBh cyAkZXYpIHsNCgkJCQkJCQkJCSR1c2VkW10gPSAkZXZbJ2V2J107DQoJCQkJCQkJCX0NCgkJ CQkJCQl9DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlk eF0gPT0gTlVMTCB8fCAhaW5fYXJyYXkoJG9wLCAkdXNlZCkpIHsNCgkJCQkJCQkJJGV2ZW50 c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICd0eXBlJyA9PiAkY2xhc3NwcmVmaXgu J3JlY3VyJy4gKCgkc2hvd19tZSAmJiAkc2hvd19ob2wpID8gJycgOiAnICcuJGNsYXNzcHJl Zml4LidjYW5jZWwnKS4kZXZjbGFzc2VzLCAncG9zdGVkJyA9PiAkc3RhcnRfZGF0ZSk7DQoJ CQkJCQkJfQ0KCQkJCQkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJ CQkJJHRzX2xvb3ArKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hv d3NwYW5uZWQgJiYgJG11bHRpKSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkg c3BhbiBtb3JlIHRoYW4gb25lIGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGln bm9yZWQgZGF0ZXMgYW5kIGhvbGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cp Ow0KCQkJJGxhc3RkYXkgPSAoaW50KXN0cmZ0aW1lKCclZCcsICRlbmQpOw0KCQkJJHJlYWxf bGFzdGRheSA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHJlYWxfZW5kKTsNCgkJCXdoaWxlICgr KyRpZHggPD0gJGxhc3RkYXkpIHsNCgkJCQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0g KCRpZHg9PSRyZWFsX2xhc3RkYXkpID8gJ211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211 bHRpcHJldicgOiAnbXVsdGknKTsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFn Ow0KCQkJCSR0aGlzZGF0ZSA9IGdtbWt0aW1lKDAsIDAsIDAsICRtb250aCwgJGlkeCwgJHll YXIpOw0KCQkJCSRzaG93X21lID0gIWluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRoaXNkYXRl KSwgJGlnbm9yZSk7DQoJCQkJJGhvbF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLU0tWSIsICR0 aGlzZGF0ZSksICRob2xpZGF5cyk7DQoJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFp bl9hcnJheSgnbXVsdGknLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJ aWYgKCAhJHNob3dfbWUgfHwgISRzaG93X2hvbCApIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1td ID0gJ2NhbmNlbCc7DQoJCQkJfQ0KCQkJCWlmICgkaG9sX2hpdCkgew0KCQkJCQkkc21kX2Nh bF9mbGFnW10gPSAnaG9scyc7DQoJCQkJfQ0KCQkJCWlmICggKCRzaG93X21lICYmICRzaG93 X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJCSRzbWRfZGF5ID0gJGlkeDsNCgkJCQkJ JHNtZF93ZWVrID0gc3RyZnRpbWUoJyVWJywgJHRoaXNkYXRlKTsNCgkJCQkJJG9wID0gKCRz cGFuZm9ybSkgPyBwYXJzZV9mb3JtKCRzcGFuZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgk dGhpbmcpIDogKCgkc2l6ZT09InNtYWxsIikgPyAnJyA6IGhyZWYoJyZyYXJyOycsIHBlcm1s aW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCQl9 DQoJCQkJJGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICd0eXBlJyA9PiAk Y2xhc3NwcmVmaXguJG11bHRpZmxhZy4gKCgkc2hvd19tZSAmJiAkc2hvd19ob2wpID8gJycg OiAnICcuJGNsYXNzcHJlZml4LidjYW5jZWwnKS4kZXZjbGFzc2VzLCAncG9zdGVkJyA9PiAk c3RhcnRfZGF0ZSk7DQoJCQkJJHNtZF9jYWxfZmxhZyA9IGFycmF5KCk7DQoJCQl9DQoJCX0N Cgl9DQoNCgkvLyBHZW5lcmF0ZSB0aGUgY2FsZW5kYXINCglpZiggJHNpemUgPT0gInNtYWxs IiApIHsNCgkJJGNhbGVuZGFyID0gbmV3IFNNRF9TbWFsbF9DYWxlbmRhcigkeWVhciwgJG1v bnRoLCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNhdGVnb3J5KTsNCgl9IGVsc2Ugew0KCQkkY2Fs ZW5kYXIgPSBuZXcgU01EX0NhbGVuZGFyKCR5ZWFyLCAkbW9udGgsICRldmVudHMpOw0KCX0N CgkkY2FsZW5kYXItPnNldEdNVCgkZ210KTsNCgkkY2FsZW5kYXItPnNldExhbmcoJGxhbmcp Ow0KCSRjYWxlbmRhci0+c2V0Q2xhc3NMZXZlbHMoJGNsZXZzKTsNCgkkY2FsZW5kYXItPnNl dENsYXNzUHJlZml4KCRjbGFzc3ByZWZpeCk7DQoJJGNhbGVuZGFyLT5zZXRFdmVudFByZWZp eCgkZXZjbGFzc3ByZWZpeCk7DQoJJGNhbGVuZGFyLT5zZXRFdmVudFdyYXB0YWcoJGV2ZW50 d3JhcHRhZyk7DQoJJGNhbGVuZGFyLT5zZXRNWVdyYXB0YWcoJG15d3JhcHRhZyk7DQoJJGNh bGVuZGFyLT5zZXRUYWJsZUlEKCRpZCk7DQoJJGNhbGVuZGFyLT5zZXRUYWJsZUNsYXNzKCRj bGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRSb3dDbGFzcygkcm93Y2xhc3MpOw0KCSRjYWxlbmRh ci0+c2V0Q2VsbENsYXNzKCRjZWxsY2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0RW1wdHlDbGFz cygkZW1wdHljbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRJU09XZWVrQ2xhc3MoJGlzb3dlZWtj bGFzcyk7DQoJJGNhbGVuZGFyLT5zZXROYXZDbGFzcygkbmF2cHJldmNsYXNzLCRuYXZuZXh0 Y2xhc3MpOw0KCSRjYWxlbmRhci0+c2V0TVlDbGFzcygkbXljbGFzcyk7DQoJJGNhbGVuZGFy LT5zZXROYW1lRm9ybWF0KCRkYXlmb3JtYXQsICJkIik7DQoJJGNhbGVuZGFyLT5zZXROYW1l Rm9ybWF0KCRtb250aGZvcm1hdCwgIm0iKTsNCgkkY2FsZW5kYXItPnNldFNob3dJU09XZWVr KCRpc293ZWVrcyk7DQoJJGNhbGVuZGFyLT5zZXRFWWVhcigkZWFybGllc3QpOw0KCSRjYWxl bmRhci0+c2V0TFllYXIoJGxhdGVzdCk7DQoJJGNhbGVuZGFyLT5zZXRGaWx0ZXJPcHRzKCRm b3B0cyk7DQoJJGNhbGVuZGFyLT5zZXRIb2xpZGF5cygkaG9saWRheXMpOw0KCSRjYWxlbmRh ci0+c2V0U2VsZWN0b3JzKGRvX2xpc3QoJHNlbGVjdCksICRzZWxlY3RidG4pOw0KCSRjYWxl bmRhci0+c2V0Rmlyc3REYXlPZldlZWsoJGZpcnN0ZGF5KTsNCgkkY2FsZW5kYXItPnNldExp bmtQb3N0ZWQoJGxpbmtwb3N0ZWQpOw0KDQoJcmV0dXJuICRjYWxlbmRhci0+ZGlzcGxheSgk c3RhdGljLCAkZnV0dXJlKTsNCn0NCg0KY2xhc3MgU01EX0NhbGVuZGFyIGV4dGVuZHMgU01E X1Jhd19DYWxlbmRhciB7DQoJLy8gT3ZlcnJpZGUgQ29uc3RydWN0b3INCgkvLyBQZXJtaXRz IG11bHRpcGxlIGV2ZW50cyB0byBzaG93IHBlciBkYXkNCglmdW5jdGlvbiBTTURfQ2FsZW5k YXIoJHllYXIsJG1vbnRoLCRldmVudHMpIHsNCgkJJHRoaXMtPmV2ZW50cyA9ICRldmVudHM7 DQoJCSR0aGlzLT5TTURfUmF3X0NhbGVuZGFyKCR5ZWFyLCRtb250aCk7DQoJfQ0KDQoJLy8g T3ZlcnJpZGUgZHNwRGF5Q2VsbCB0byBkaXNwbGF5IHN0dWZmIHJpZ2h0DQoJZnVuY3Rpb24g ZHNwRGF5Q2VsbCgkdGhlZGF5KSB7DQoJCSRjZWxsY2xhc3MgPSAkdGhpcy0+Z2V0Q2VsbENs YXNzKCk7DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7 DQoJCSR0ZGNsYXNzID0gJGNlbGxjbGFzcyAuICgoJGhhc2FydGljbGUpID8gJyAnLiR0aGlz LT5jbGFzc3ByZWZpeC4nZXZlbnQnIDogJycpDQoJCQkJLiAoKGluX2FycmF5KCBkYXRlKCdk LU0tWScsIGdtbWt0aW1lKCAwLCAwLCAwLCAkdGhpcy0+Z2V0TW9udGgoKSwgJHRoZWRheSwg JHRoaXMtPmdldFllYXIoKSkgKSwgJHRoaXMtPmhvbGlkYXlzKSkgPyAnICcuJHRoaXMtPmNs YXNzcHJlZml4Lidob2xzJyA6ICcnKTsNCgkJJHJ1bm5pbmdjbGFzcyA9IChpbl9hcnJheSgi Y2VsbCIsICR0aGlzLT5jbGFzc2xldmVscykgfHwgaW5fYXJyYXkoImNlbGxwbHVzIiwgJHRo aXMtPmNsYXNzbGV2ZWxzKSkgPyBleHBsb2RlKCcgJywgJHRkY2xhc3MpIDogYXJyYXkoKTsN CgkJaWYoJHRoaXMtPnllYXIgPT0gZGF0ZSgnWScsdGltZSgpK3R6X29mZnNldCgpICkgYW5k ICR0aGlzLT5tb250aCA9PSBkYXRlKCduJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRo ZWRheSA9PSBkYXRlKCdqJyx0aW1lKCkrdHpfb2Zmc2V0KCkpICkgew0KCQkJJHJ1bm5pbmdj bGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4Lid0b2RheSc7DQoJCX0NCg0KCQkkb3V0W10g PSBoZWQoJHRoZWRheSw0KTsNCgkJaWYoIGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRheV0p ICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2ZW50c1skdGhlZGF5XTsNCgkJCWZv cmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJCSRldmNsYXNzID0gdHJpbSgkZXZb J3R5cGUnXSk7DQoJCQkJaWYgKGluX2FycmF5KCJjZWxscGx1cyIsICR0aGlzLT5jbGFzc2xl dmVscykpIHsNCgkJCQkJZm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNsYXNzKSBhcyAkZXZj KSB7DQoJCQkJCQkkcnVubmluZ2NsYXNzW109ICRldmM7DQoJCQkJCX0NCgkJCQl9DQoJCQkJ JG91dFtdID0gKCR0aGlzLT5ldndyYXB0YWcpID8gdGFnKCRldlsnZXYnXSwgJHRoaXMtPmV2 d3JhcHRhZywgKCgkZXZjbGFzcyAmJiBpbl9hcnJheSgiZXZlbnQiLCAkdGhpcy0+Y2xhc3Ns ZXZlbHMpKSA/ICcgY2xhc3M9IicuJGV2Y2xhc3MuJyInIDogJycpKSA6ICRldlsnZXYnXTsN CgkJCX0NCgkJfQ0KCQkkcnVubmluZ2NsYXNzID0gYXJyYXlfdW5pcXVlKCRydW5uaW5nY2xh c3MpOw0KDQoJCS8vIEFtYWxnYW1hdGUgdGhlIGV2ZW50LWxldmVsIGNsYXNzZXMgYW5kIGNl bGwtbGV2ZWwgY2xhc3NlcywgaWYgcmVxdWlyZWQNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycs JG91dCksJ3RkJyxqb2luKCcgJywkcnVubmluZ2NsYXNzKSk7DQoJfQ0KDQoJZnVuY3Rpb24g ZGlzcGxheSgkc3RhdGljPWZhbHNlLCAkZnV0dXJlPWZhbHNlKSB7DQoJCSRpZCA9ICgkdGhp cy0+dGFibGVJRCkgPyAnIGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCQkkY1td ID0gJHRoaXMtPmRzcEhlYWRlcigkc3RhdGljLCAkZnV0dXJlKTsNCgkJJGNbXSA9ICR0aGlz LT5kc3BEYXlOYW1lcygpOw0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGxzKCk7DQoNCgkJ cmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0YWJsZScsJHRoaXMtPnRhYmxlY2xhc3MsJGlk KTsNCgl9DQoNCglmdW5jdGlvbiBkc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSkgew0KCQkk Y3VycnlyID0gJHRoaXMtPmdldFllYXIoKTsNCgkJJGN1cnJtbyA9ICR0aGlzLT5nZXRNb250 aCgpOw0KCQkkbmF2cHJldmNsYXNzID0gJHRoaXMtPmdldE5hdkNsYXNzKCJwIik7DQoJCSRu YXZuZXh0Y2xhc3MgPSAkdGhpcy0+Z2V0TmF2Q2xhc3MoIm4iKTsNCgkJJG5hdnByZXZjbGFz cyA9ICgkbmF2cHJldmNsYXNzKSA/ICcgY2xhc3M9IicuJG5hdnByZXZjbGFzcy4nIicgOiAn JzsNCgkJJG5hdm5leHRjbGFzcyA9ICgkbmF2bmV4dGNsYXNzKSA/ICcgY2xhc3M9IicuJG5h dm5leHRjbGFzcy4nIicgOiAnJzsNCgkJJGZpbHRlcnMgPSBhcnJheSgpOw0KCQkkZmlsdGVy SGlkID0gYXJyYXkoKTsNCgkJaWYgKCEkc3RhdGljKSB7DQoJCQlmb3JlYWNoKCR0aGlzLT5m b3B0cyBhcyAkZmlsdGVyKSB7DQoJCQkJZm9yZWFjaCgkZmlsdGVyIGFzICRrZXkgPT4gJHZh bCkgew0KCQkJCQkkZmlsdGVyc1tdID0gJGtleS4nPScuJHZhbDsNCgkJCQkJJGZpbHRlckhp ZFtdID0gaElucHV0KCRrZXksICR2YWwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkZmlsdGVy VVJMID0gam9pbihhLCAkZmlsdGVycyk7DQoNCgkJLy8gTW9udGggc2VsZWN0IGxpc3QNCgkJ aWYgKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSAmJiAhJHN0YXRpYykgew0KCQkJZm9y ICggJGlkeCA9IDE7ICRpZHggPD0gMTI7ICRpZHgrKyApIHsNCgkJCQkkdGFnYXR0cyA9ICcg dmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4ID09ICRjdXJybW8gKSAkdGFnYXR0 cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCSRvcHRpb250YWdzW10gPSBkb1Rh ZyhzYWZlX3N0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCBnbW1rdGltZSgwLDAsMCwkaWR4 KSwgJHRoaXMtPmdtdCwgJHRoaXMtPmxhbmcpLCAnb3B0aW9uJywgJycsICR0YWdhdHRzKTsN CgkJCX0NCgkJCSRzZWxlY3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0aW9udGFncyksICdz ZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcyksICcg bmFtZT0ibSInLigoJHRoaXMtPnNlbGJ0bikgPyAnJyA6ICcgb25jaGFuZ2U9InN1Ym1pdCgp IicpLCAnJykNCiAgIAkJCQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykpID8gJycg OiBoSW5wdXQoJ3knLCAkY3VycnlyKSk7DQoJCQkkb3B0aW9udGFncyA9IGFycmF5KCk7IC8v IEJsYW5rIG91dA0KCQl9IGVsc2Ugew0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZygkdGhpcy0+ Z2V0TW9udGhOYW1lKCksICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRo aXMtPm15Y2xhc3MpKTsNCgkJfQ0KDQoJCS8vIFllYXIgc2VsZWN0IGxpc3QNCgkJJHkwID0g JHRoaXMtPmdldEVZZWFyKCk7DQoJCSR5MSA9ICR0aGlzLT5nZXRMWWVhcigpOw0KDQoJCWlm ICgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSAmJiAoJHkwICE9ICR5MSkgJiYgISRzdGF0 aWMpIHsNCgkJCWZvciAoICRpZHggPSAkeTA7ICRpZHggPD0gJHkxOyAkaWR4KysgKSB7DQoJ CQkJJHRhZ2F0dHMgPSAnIHZhbHVlPSInLiRpZHguJyInOw0KCQkJCWlmICggJGlkeCA9PSAk Y3VycnlyICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJCQkkb3B0 aW9udGFnc1tdID0gZG9UYWcoJGlkeCwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQl9 DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0 JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9 InkiJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwg JycpDQoJCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykpID8gJycgOiBoSW5w dXQoJ20nLCAkY3Vycm1vKSk7DQoJCX0gZWxzZSB7DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFn KCR0aGlzLT5nZXRZZWFyKCksICdzcGFuJywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDog JHRoaXMtPm15Y2xhc3MpKTsNCgkJfQ0KCQkkZXh0cmFzID0gJyc7DQoJCWlmICghJHN0YXRp YyAmJiAoICR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSB8fCAkdGhpcy0+dXNlU2VsZWN0 b3IoJ3llYXInKSApKSB7DQoJCQlpZiAoJHRoaXMtPnNlbGJ0bikgew0KCQkJCSRleHRyYXMg Lj0gZG9UYWcoJycsICdpbnB1dCcsICdzbWRfY2FsX2lucHV0JywgJyB0eXBlPSJzdWJtaXQi IHZhbHVlPSInLiR0aGlzLT5zZWxidG4uJyInKTsNCgkJCX0NCgkJCWlmICgkdGhpcy0+dGFi bGVJRCkgew0KCQkJCSRleHRyYXMgLj0gaElucHV0KCdjYWxpZCcsJHRoaXMtPnRhYmxlSUQp Ow0KCQkJfQ0KCQkJJGV4dHJhcyAuPSBqb2luKCcnLCAkZmlsdGVySGlkKTsNCgkJfQ0KDQoJ CSRzZWxlY3RvciA9ICc8Zm9ybSBhY3Rpb249IicuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJyIg bWV0aG9kPSJnZXQiIGlkPSJzbWRfY2FsZGF0ZSI+Jy5kb1RhZyhqb2luKHNwLCAkc2VsZWN0 b3IpLiRleHRyYXMsICR0aGlzLT5teXdyYXB0YWcsICR0aGlzLT5teWNsYXNzKS4nPC9mb3Jt Pic7DQoNCgkJJG5hdl9iYWNrX2xpbmsgPSAkdGhpcy0+bmF2aWdhdGlvbigkdGhpcy0+eWVh ciwgJHRoaXMtPm1vbnRoLCAnLScsICRmaWx0ZXJVUkwpOw0KCQkkbmF2X2Z3ZF9saW5rICA9 ICR0aGlzLT5uYXZpZ2F0aW9uKCR0aGlzLT55ZWFyLCAkdGhpcy0+bW9udGgsICcrJywgJGZp bHRlclVSTCk7DQoNCgkJJG5hdl9iYWNrID0gKCEkc3RhdGljICYmICRuYXZfYmFja19saW5r KSA/ICc8YSBocmVmPSInLiRuYXZfYmFja19saW5rLiciJy4kbmF2cHJldmNsYXNzLic+JiM2 MDs8L2E+JyA6ICcmbmJzcDsnOw0KLy8JCSRuYXZfZndkICA9ICgoISRzdGF0aWMgJiYgJGZ1 dHVyZSAmJiAkbmF2X2Z3ZF9saW5rKSBvciAoJHRoaXMtPm1vbnRoICE9IGRhdGUoJ24nLHRp bWUoKSkpKSA/ICc8YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZuZXh0Y2xhc3Mu Jz4mIzYyOzwvYT4nIDogJyZuYnNwOyc7IC8vICpzaHJ1ZyogYnJlYWtzIGlmIHN0YXRpYyBz ZXQgYW5kIG1vbnRoIDwgdGhpcyBtb250aCB1c2VkDQoJCSRuYXZfZndkICA9ICghJHN0YXRp YyAmJiAkZnV0dXJlICYmICRuYXZfZndkX2xpbmspID8gJzxhIGhyZWY9IicuJG5hdl9md2Rf bGluay4nIicuJG5hdm5leHRjbGFzcy4nPiYjNjI7PC9hPicgOiAnJm5ic3A7JzsNCg0KCQkk Y1tdID0gZG9UYWcoJG5hdl9iYWNrLCd0aCcpOw0KCQkkY1tdID0gJzx0aCBjb2xzcGFuPSIn LigoJHRoaXMtPnNob3dJU09XZWVrID09ICcnKSA/IDUgOiA2KS4nIj4nLiRzZWxlY3Rvci4n PC90aD4nOw0KCQkkY1tdID0gZG9UYWcoJG5hdl9md2QsJ3RoJyk7DQoNCgkJcmV0dXJuIGRv VGFnKGpvaW4oJycsJGMpLCd0cicpOw0KCX0NCg0KCWZ1bmN0aW9uIG5hdmlnYXRpb24oJHll YXIsJG1vbnRoLCRkaXJlY3Rpb24sJGZsdCkgew0KCQlnbG9iYWwgJHBlcm1saW5rX21vZGU7 DQoNCgkJaWYoJGRpcmVjdGlvbiA9PSAnLScpIHsNCgkJCWlmKCRtb250aCAtIDEgPCAxKSB7 DQoJCQkJJG1vbnRoID0gMTI7DQoJCQkJJHllYXIgLT0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJ JG1vbnRoIC09IDE7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlpZigkbW9udGggKyAxID4gMTIp IHsNCgkJCQkkbW9udGggPSAxOw0KCQkJCSR5ZWFyICs9IDE7DQoJCQl9IGVsc2Ugew0KCQkJ CSRtb250aCArPSAxOw0KCQkJfQ0KCQl9DQoNCgkJLy8gQWJvcnQgaWYgd2UncmUgYWJvdXQg dG8gZ28gb3V0IG9mIHJhbmdlDQoJCWlmICgkeWVhciA8ICR0aGlzLT5nZXRFWWVhcigpIHx8 ICR5ZWFyID4gJHRoaXMtPmdldExZZWFyKCkpIHsNCgkJCXJldHVybiAnJzsNCgkJfQ0KDQoJ CSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyBhLidjYWxpZD0nLiR0aGlzLT50YWJsZUlEIDog Jyc7IC8vIEFsbG93IHNwZWNpZmljIGNhbGVuZGFyIG5hdmlnYXRpb24sIGluIGNhc2UgdGhl cmUncyBtb3JlIHRoYW4gb25lIHBlciBwYWdlDQoJCWlmKCRwZXJtbGlua19tb2RlICE9ICdt ZXNzeScpIHsNCgkJCXJldHVybiAiP209JG1vbnRoIi5hLiJ5PSR5ZWFyIi4kaWQuYS4kZmx0 Ow0KCQl9IGVsc2UgeyAvLyBmb3IgbWVzc3kgVVJMJ3Mgd2UgbmVlZCB0byBidWlsZCB0aGUg ZW50aXJlIHJlcXVlc3Qgc3RyaW5nIGZpcnN0LCB0aGVuIHRhY2sgb24gdGhlIHJlc3QNCgkJ CSRvdXQgPSBtYWtlT3V0KCdpZCcsJ3MnLCdjJywncScsJ3BnJywncCcsJ21vbnRoJyk7DQoJ CQkkciA9ICc/JzsNCgkJCWZvcmVhY2goJG91dCBhcyAka2V5ID0+ICR2YWwgKSB7DQoJCQkJ JHIgLj0gKCR2YWwpID8gIiRrZXk9JHZhbCIuYSA6ICcnOw0KCQkJfQ0KCQkJcmV0dXJuICRy LiJtPSRtb250aCIuYS4ieT0keWVhciIuJGlkLmEuJGZsdDsNCgkJfQ0KCX0NCn0NCg0KY2xh c3MgU01EX1NtYWxsX0NhbGVuZGFyIGV4dGVuZHMgU01EX0NhbGVuZGFyIHsNCgl2YXIgJHNl Y3Rpb24gPSAnJzsNCgl2YXIgJGNhdGVnb3J5ID0gJyc7DQoJZnVuY3Rpb24gU01EX1NtYWxs X0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZXZlbnRzLCRzZWN0aW9uLCRjYXRlZ29yeSkgew0K CQkkdGhpcy0+c2VjdGlvbiA9ICRzZWN0aW9uOw0KCQkkdGhpcy0+Y2F0ZWdvcnkgPSAkY2F0 ZWdvcnk7DQoJCSR0aGlzLT5TTURfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRldmVudHMpOw0K CX0NCg0KCWZ1bmN0aW9uIGRzcERheUNlbGwoJHRoZWRheSkgew0KCQlnbG9iYWwgJHBlcm1s aW5rX21vZGU7DQoNCgkJJGNlbGxjbGFzcyA9ICR0aGlzLT5nZXRDZWxsQ2xhc3MoKS4nICc7 DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJCSRj bGFzc1tdID0gJGNlbGxjbGFzcyAuICgoJGhhc2FydGljbGUpID8gJHRoaXMtPmNsYXNzcHJl Zml4LidldmVudCcgOiAnJyk7DQoJCWlmICgoaW5fYXJyYXkoIGRhdGUoJ2QtTS1ZJywgZ21t a3RpbWUoIDAsIDAsIDAsICR0aGlzLT5nZXRNb250aCgpLCAkdGhlZGF5LCAkdGhpcy0+Z2V0 WWVhcigpKSApLCAkdGhpcy0+aG9saWRheXMpKSApIHsNCgkJCSRjbGFzc1tdID0gJHRoaXMt PmNsYXNzcHJlZml4Lidob2xzJzsNCgkJfQ0KCQlpZigkdGhpcy0+eWVhciA9PSBkYXRlKCdZ Jyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09IGRhdGUoJ24nLHRp bWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2onLHRpbWUoKSt0el9v ZmZzZXQoKSkgKSB7DQoJCQkkY2xhc3NbXSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4ndG9kYXkn Ow0KCQl9DQoNCgkJaWYoIGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRheV0pICkgew0KCQkJ JGRheXNfZXZlbnRzID0gJHRoaXMtPmV2ZW50c1skdGhlZGF5XTsNCgkJCWZvcmVhY2goJGRh eXNfZXZlbnRzIGFzICRldikgew0KCQkJCSRldmNsYXNzID0gdHJpbSgkZXZbJ3R5cGUnXSk7 DQoJCQkJZm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNsYXNzKSBhcyAkZXZjKSB7DQoJCQkJ CSRjbGFzc1tdPSAkZXZjOw0KCQkJCX0NCg0KCQkJCSRvdXRbXSA9ICgkdGhpcy0+ZXZ3cmFw dGFnKSA/IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndyYXB0YWcsICgoJGV2Y2xhc3MpID8g JyBjbGFzcz0iJy4kZXZjbGFzcy4nIicgOiAnJykpIDogJGV2WydldiddOw0KCQkJfQ0KCQkJ JHVzZV9wb3N0ZWQgPSBmYWxzZTsNCgkJCWZvcmVhY2ggKCR0aGlzLT5saW5rcG9zdGVkIGFz ICRkbGlua3MpIHsNCgkJCQlpZiAoaW5fYXJyYXkoJGRsaW5rcywgJGNsYXNzKSkgew0KCQkJ CQkkdXNlX3Bvc3RlZCA9IHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCWlm KCAkcGVybWxpbmtfbW9kZSAhPSAneWVhcl9tb250aF9kYXlfdGl0bGUnICkgew0KCQkJCSRs aW5rZGF0ZSA9ICgkdXNlX3Bvc3RlZCkgPyAkZXZbJ3Bvc3RlZCddIDogJHRoaXMtPnllYXIu Jy0nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhpcy0+bW9udGgpLictJy4kdGhpcy0+ZG91Ymxl ZGlnaXQoJHRoZWRheSk7DQoJCQkJJGhyZWYgPSAnIGhyZWY9IicuaHUuJz9kYXRlPScuJGxp bmtkYXRlOw0KCQkJCWlmKCR0aGlzLT5zZWN0aW9uKSB7ICRocmVmID0gJGhyZWYuYS4ncz0n LiR0aGlzLT5zZWN0aW9uOyB9DQoJCQkJaWYoJHRoaXMtPmNhdGVnb3J5KSB7ICRocmVmID0g JGhyZWYuYS4nYz0nLiR0aGlzLT5jYXRlZ29yeTsgfQ0KCQkJCSRocmVmIC49ICciJzsNCgkJ CX0gZWxzZSB7DQoJCQkJJHNlY3Rpb24gPSAoJHRoaXMtPnNlY3Rpb24pID8gJHRoaXMtPnNl Y3Rpb24uJy8nIDogJyc7DQoJCQkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/IHByZWdf cmVwbGFjZSgiLSIsICIvIiwgJGV2Wydwb3N0ZWQnXSkgOiAkdGhpcy0+eWVhci4nLycuJHRo aXMtPmRvdWJsZWRpZ2l0KCR0aGlzLT5tb250aCkuJy8nLiR0aGlzLT5kb3VibGVkaWdpdCgk dGhlZGF5KTsNCgkJCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4kc2VjdGlvbi4kbGlua2RhdGUu JyInOw0KCQkJfQ0KDQovLwkJCSR0aXRsZSA9ICcgdGl0bGU9Iicuc2FmZV9zdHJmdGltZSgn JXgnLGdtbWt0aW1lKDAsMCwwLCR0aGlzLT5tb250aCwkdGhlZGF5KzEsJHRoaXMtPnllYXIp KS4nIic7IC8vIG5vIGlkZWEgd2h5ICR0aGVkYXkrMSwgYnV0IG90aGVyd2lzZSBpdCB3b24n dCB3b3JrDQoNCgkJCSRjW10gPSBkb1RhZygkdGhlZGF5LmpvaW4oJycsJG91dCksJ2EnLCcn LCRocmVmKTsNCgkJfSBlbHNlIHsNCgkJCSRjW10gPSAkdGhlZGF5Ow0KCQl9DQoNCgkJcmV0 dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0ZCcsam9pbignICcsJGNsYXNzKSk7DQoJfQ0KDQoJ ZnVuY3Rpb24gZG91YmxlZGlnaXQoJG4pIHsNCgkJaWYoJG4gPCAxMCkgeyAkbiA9ICcwJy4o aW50KSRuOyB9DQoJCXJldHVybiAkbjsNCgl9DQoNCn0NCg0KLyoqDQoqIEJhc2ljIENhbGVu ZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiogaHR0cDovL3d3dy5vc2Nhcm0ub3JnL3N0YXRpYy9w Zy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0aG9yIE9zY2FyIE1lcmlkYQ0KKiBAY3JlYXRlZCBK YW4gMTggMjAwNA0KKiBAcGFja2FnZSAgZ29Db3JlTGliDQoqLw0KY2xhc3MgU01EX1Jhd19D YWxlbmRhciB7DQp2YXIgJGdtdCA9IDE7DQp2YXIgJGxhbmc7DQp2YXIgJHllYXI7DQp2YXIg JGV5cjsNCnZhciAkbHlyOw0KdmFyICRtb250aDsNCnZhciAkZGF5TmFtZUZtdDsNCnZhciAk bXRoTmFtZUZtdDsNCnZhciAkc3RhcnREYXk7DQp2YXIgJHNlbGVjdG9yczsNCnZhciAkc2Vs YnRuOw0KdmFyICRzaG93SVNPV2VlazsNCnZhciAkZW5kRGF5Ow0KdmFyICRmaXJzdERheU9m V2VlayA9IDA7DQp2YXIgJHN0YXJ0T2Zmc2V0ID0gMDsNCnZhciAkY2xhc3NsZXZlbHM7DQp2 YXIgJGNsYXNzcHJlZml4Ow0KdmFyICRldmNsYXNzcHJlZml4Ow0KdmFyICRldndyYXB0YWc7 DQp2YXIgJG15d3JhcHRhZzsNCnZhciAkcm93Y2xhc3M7DQp2YXIgJGNlbGxjbGFzczsNCnZh ciAkZW1wdHljbGFzczsNCnZhciAkaXNvY2xhc3M7DQp2YXIgJG5hdnByZXZjbGFzczsNCnZh ciAkbmF2bmV4dGNsYXNzOw0KdmFyICRteWNsYXNzOw0KdmFyICRmb3B0czsNCnZhciAkaG9s aWRheXM7DQp2YXIgJGxpbmtwb3N0ZWQ7DQovKioNCiogQ29uc3RydWN0b3INCioNCiogQHBh cmFtIGludGVnZXIsIHllYXINCiogQHBhcmFtIGludGVnZXIsIG1vbnRoDQoqIEByZXR1cm4g b2JqZWN0DQoqIEBwdWJsaWMNCiovDQpmdW5jdGlvbiBTTURfUmF3X0NhbGVuZGFyICggJHly LCAkbW8gKSB7DQoJJHRoaXMtPnNldFllYXIoJHlyKTsNCgkkdGhpcy0+c2V0TW9udGgoJG1v KTsNCgkkdGhpcy0+c2V0Q2xhc3NQcmVmaXgoJ3NtZF9jYWxfJyk7DQoNCgkkdGhpcy0+c3Rh cnRUaW1lID0gc3RydG90aW1lKCAiJHlyLSRtby0wMSAwMDowMCIgKTsNCgkkdGhpcy0+c3Rh cnREYXkJPSBkYXRlKCAnRCcsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+d2Vla0Rh eQk9IGRhdGUoICd3JywgJHRoaXMtPnN0YXJ0VGltZSApOw0KCSR0aGlzLT5lbmREYXkgPSBk YXRlKCAndCcsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+ZW5kVGltZSAgID0gc3Ry dG90aW1lKCAiJHlyLSRtby0iLiR0aGlzLT5lbmREYXkuIiAyMzo1OSIgKTsNCg0KCSR0aGlz LT5zZXROYW1lRm9ybWF0KCclYScsICdkJyk7DQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVC JywgJ20nKTsNCgkkdGhpcy0+c2V0Rmlyc3REYXlPZldlZWsoMCk7DQoJJHRoaXMtPnNldFNo b3dJU09XZWVrKCcnKTsNCgkkdGhpcy0+c2V0VGFibGVJRCgnJyk7DQoJJHRoaXMtPnNldFRh YmxlQ2xhc3MoJycpOw0KfQ0KLy8gPT09PSBlbmQgQ2FsZW5kYXIgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovLyBHZXR0ZXJzDQpmdW5jdGlv biBnZXRTdGFydFRpbWUoKSB7IHJldHVybiAkdGhpcy0+c3RhcnRUaW1lOyB9DQpmdW5jdGlv biBnZXRXZWVrRGF5KCkgeyByZXR1cm4gJHRoaXMtPndlZWtEYXk7IH0NCmZ1bmN0aW9uIGdl dEVuZFRpbWUoKSB7IHJldHVybiAkdGhpcy0+ZW5kVGltZTsgfQ0KZnVuY3Rpb24gZ2V0WWVh cigpIHsgcmV0dXJuICR0aGlzLT55ZWFyOyB9DQpmdW5jdGlvbiBnZXRFWWVhcigpIHsgcmV0 dXJuICR0aGlzLT5leXI7IH0NCmZ1bmN0aW9uIGdldExZZWFyKCkgeyByZXR1cm4gJHRoaXMt Pmx5cjsgfQ0KZnVuY3Rpb24gZ2V0TW9udGgoKSB7IHJldHVybiAkdGhpcy0+bW9udGg7IH0N CmZ1bmN0aW9uIGdldFJvd0NsYXNzKCkgeyByZXR1cm4gJHRoaXMtPnJvd2NsYXNzOyB9DQpm dW5jdGlvbiBnZXRDZWxsQ2xhc3MoKSB7IHJldHVybiAkdGhpcy0+Y2VsbGNsYXNzOyB9DQpm dW5jdGlvbiBnZXRFbXB0eUNsYXNzKCkgeyByZXR1cm4gJHRoaXMtPmVtcHR5Y2xhc3M7IH0N CmZ1bmN0aW9uIGdldElTT1dlZWtDbGFzcygpIHsgcmV0dXJuICR0aGlzLT5pc29jbGFzczsg fQ0KZnVuY3Rpb24gZ2V0TmF2Q2xhc3MoJHR5cGUpIHsgcmV0dXJuICgkdHlwZSA9PSAibiIp ID8gJHRoaXMtPm5hdm5leHRjbGFzcyA6ICR0aGlzLT5uYXZwcmV2Y2xhc3M7IH0NCmZ1bmN0 aW9uIGdldE1vbnRoTmFtZSgpIHsgcmV0dXJuIHN0cmZ0aW1lKCAkdGhpcy0+bXRoTmFtZUZt dCwgJHRoaXMtPnN0YXJ0VGltZSApOyB9DQovLyBTZXR0ZXJzDQpmdW5jdGlvbiBzZXRHTVQo JGIpeyAkdGhpcy0+Z210ID0gJGI7IH0NCmZ1bmN0aW9uIHNldExhbmcoJGNvZGUpeyAkdGhp cy0+bGFuZyA9ICRjb2RlOyB9DQpmdW5jdGlvbiBzZXRUYWJsZUlEKCRpZCkgeyAkdGhpcy0+ dGFibGVJRCA9ICRpZDsgfQ0KZnVuY3Rpb24gc2V0WWVhcigkeWVhcil7ICR0aGlzLT55ZWFy ID0gJHllYXI7IH0NCmZ1bmN0aW9uIHNldEVZZWFyKCR5ZWFyKXsgJHRoaXMtPmV5ciA9ICR5 ZWFyOyB9DQpmdW5jdGlvbiBzZXRMWWVhcigkeWVhcil7ICR0aGlzLT5seXIgPSAkeWVhcjsg fQ0KZnVuY3Rpb24gc2V0TW9udGgoJG1vbnRoKSB7ICR0aGlzLT5tb250aCA9IChpbnQpJG1v bnRoOyB9DQpmdW5jdGlvbiBzZXRTaG93SVNPV2VlaygkdmFsKSB7ICR0aGlzLT5zaG93SVNP V2VlayA9ICR2YWw7IH0NCmZ1bmN0aW9uIHNldENsYXNzTGV2ZWxzKCRjbHMpeyAkdGhpcy0+ Y2xhc3NsZXZlbHMgPSAkY2xzOyB9DQpmdW5jdGlvbiBzZXRDbGFzc1ByZWZpeCgkY2xzKXsg JHRoaXMtPmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0RXZlbnRQcmVmaXgo JGNscyl7ICR0aGlzLT5ldmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0RXZl bnRXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFwOyB9DQpmdW5jdGlv biBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7IH0NCmZ1 bmN0aW9uIHNldFRhYmxlQ2xhc3MoJGNscykgeyAkdGhpcy0+dGFibGVjbGFzcyA9ICgkY2xz KSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldFJvd0Ns YXNzKCRjbHMpeyAkdGhpcy0+cm93Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVm aXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRDZWxsQ2xhc3MoJGNscyl7ICR0aGlzLT5j ZWxsY2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpm dW5jdGlvbiBzZXRFbXB0eUNsYXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHljbGFzcyA9ICgkY2xz KSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldElTT1dl ZWtDbGFzcygkY2xzKXsgJHRoaXMtPmlzb2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNz cHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0TmF2Q2xhc3MoJGNsc3AsICRjbHNu KXsNCgkkdGhpcy0+bmF2cHJldmNsYXNzID0gKCRjbHNwKSA/ICR0aGlzLT5jbGFzc3ByZWZp eC4kY2xzcCA6ICcnOw0KCSR0aGlzLT5uYXZuZXh0Y2xhc3MgPSAoJGNsc24pID8gJHRoaXMt PmNsYXNzcHJlZml4LiRjbHNuIDogJyc7DQp9DQpmdW5jdGlvbiBzZXRNWUNsYXNzKCRjbHMp eyAkdGhpcy0+bXljbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDog Jyc7IH0NCmZ1bmN0aW9uIHNldEZpbHRlck9wdHMoJGYpIHsgJHRoaXMtPmZvcHRzID0gJGY7 IH0NCmZ1bmN0aW9uIHNldExpbmtQb3N0ZWQoJGRsKSB7DQoJZm9yZWFjaCAoJGRsIGFzICRk dmFsKSB7DQoJCSR0aGlzLT5saW5rcG9zdGVkW10gPSAkdGhpcy0+Y2xhc3NwcmVmaXguJGR2 YWw7DQoJfQ0KfQ0KZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRoaXMtPmhvbGlk YXlzID0gJGhvbHM7IH0NCmZ1bmN0aW9uIHNldFNlbGVjdG9ycygkc2VsLCAkYnRuKSB7ICR0 aGlzLT5zZWxlY3RvcnMgPSAkc2VsOyAkdGhpcy0+c2VsYnRuID0gJGJ0bjsgfQ0KZnVuY3Rp b24gdXNlU2VsZWN0b3IoJHZhbCkgeyByZXR1cm4gaW5fYXJyYXkoJHZhbCwgJHRoaXMtPnNl bGVjdG9ycyk7IH0NCmZ1bmN0aW9uIHNldEZpcnN0RGF5T2ZXZWVrKCRkKSB7DQoJJHRoaXMt PmZpcnN0RGF5T2ZXZWVrID0gKChpbnQpJGQgPD0gNiBhbmQgKGludCkkZCA+PSAwKSA/IChp bnQpJGQgOiAwOw0KDQoJJHRoaXMtPnN0YXJ0T2Zmc2V0ID0gZGF0ZSggJ3cnLCAkdGhpcy0+ c3RhcnRUaW1lICktJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCWlmICggJHRoaXMtPnN0YXJ0 T2Zmc2V0IDwgMCApIHsNCgkJJHRoaXMtPnN0YXJ0T2Zmc2V0ID0gNyAtIGFicygkdGhpcy0+ c3RhcnRPZmZzZXQpOw0KCX0NCn0NCi8qKg0KKiBmcm06IGFueSB2YWxpZCBQSFAgc3RyZnRp bWUoKSBzdHJpbmcgb3IgQUJCUi9GVUxMDQoqIHR5cDogZCB0byBzZXQgZGF5LCBtIHRvIHNl dCBtb250aCBmb3JtYXQNCiovDQpmdW5jdGlvbiBzZXROYW1lRm9ybWF0KCRmcm0sICR0eXA9 ImQiKSB7DQoJc3dpdGNoICgkZnJtKSB7DQoJCWNhc2UgIkZVTEwiOg0KCQkJJGZtdCA9ICgk dHlwID09ICJkIikgPyAiJUEiIDogIiVCIjsNCgkJCWJyZWFrOw0KCQljYXNlICJBQkJSIjoN CgkJCSRmbXQgPSAoJHR5cCA9PSAiZCIpID8gIiVhIiA6ICIlYiI7DQoJCQlicmVhazsNCgkJ ZGVmYXVsdDoNCgkJCSRmbXQgPSAkZnJtOw0KCQkJYnJlYWs7DQoJfQ0KDQoJaWYgKCR0eXAg PT0gImQiKSB7DQoJCSR0aGlzLT5kYXlOYW1lRm10ID0gJGZtdDsNCgl9IGVsc2Ugew0KCQkk dGhpcy0+bXRoTmFtZUZtdCA9ICRmbXQ7DQoJfQ0KfQ0KLyoqDQoqIFJldHVybnMgbWFya3Vw IGZvciBkaXNwbGF5aW5nIHRoZSBjYWxlbmRhci4NCiogQHJldHVybg0KKiBAcHVibGljDQoq Lw0KZnVuY3Rpb24gZGlzcGxheSAoICkgew0KCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAn IGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOw0KCSRjW10gPSAnPHRhYmxlJy4kaWQu Jz4nOw0KCSRjW10gPSAkdGhpcy0+ZHNwRGF5TmFtZXMoKTsNCgkkY1tdID0gJHRoaXMtPmRz cERheUNlbGxzKCk7DQoJJGNbXSA9ICc8L3RhYmxlPic7DQoNCglyZXR1cm4gam9pbignJywk Yyk7DQp9DQovLyA9PT09IGVuZCBkaXNwbGF5ID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3BsYXlzIHRoZSByb3cgb2YgZGF5 IG5hbWVzLg0KKiBAcmV0dXJuIHN0cmluZw0KKiBAcHJpdmF0ZQ0KKi8NCmZ1bmN0aW9uIGRz cERheU5hbWVzICggKSB7DQoJLy8gVGhpcyBpcyBkb25lIHRvIG1ha2Ugc3VyZSBTdW5kYXkg aXMgYWx3YXlzIHRoZSBmaXJzdCBkYXkgb2Ygb3VyIGFycmF5DQoJLy8gVW5peCB0aW1lIGdl dHMgYSBsaXR0bGUgZnVua3kgYXQgdGhlIGJlZ2lubmluZyBkZXBlbmRpbmcgdXBvbiB5b3Vy IHRpbWV6b25lLg0KCSRzZXJ2ZXJvZmZzZXQgPSBnbW1rdGltZSgwLDAsMCkgLSBta3RpbWUo MCwwLDApOw0KCSRzdGFydCA9ICgkc2VydmVyb2Zmc2V0IDwgMCkgPyA0IDogMzsNCgkkZW5k ID0gJHN0YXJ0ICsgNzsNCglmb3IoJGk9JHN0YXJ0OyAkaTwkZW5kOyAkaSsrKSB7DQoJCSRu YW1lc1tdID0gdWNmaXJzdChzYWZlX3N0cmZ0aW1lKCR0aGlzLT5kYXlOYW1lRm10LCA4NjQw MCokaSAtIHR6X29mZnNldCgpLCAkdGhpcy0+Z210LCAkdGhpcy0+bGFuZyApKTsNCgl9DQoN CgkkY1tdID0gJzx0cj4nOw0KDQoJJGkgPSAkdGhpcy0+Zmlyc3REYXlPZldlZWs7DQoJJGog PSAwOyAvLyBjb3VudCBudW1iZXIgb2YgZGF5cyBkaXNwbGF5ZWQNCgkkZW5kID0gZmFsc2U7 DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrICE9ICcnKSB7DQoJCSRjW10gPSAiPHRoPiIu JHRoaXMtPnNob3dJU09XZWVrLiI8L3RoPiI7DQoJfQ0KCWZvcigkaiA9IDA7ICRqPD02OyAk aisrLCAkaSsrKSB7DQoJCWlmKCRpID09IDcpIHsgJGkgPSAwOyB9DQoJCSRjW10gPSAnPHRo PicuJG5hbWVzWyRpXS4iPC90aD4iOw0KCX0NCg0KCSRjW10gPSAnPC90cj4nOw0KCXJldHVy biBqb2luKCcnLCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERheU5hbWVzID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3BsYXlz IGFsbCBkYXkgY2VsbHMgZm9yIHRoZSBtb250aA0KKg0KKiBAcmV0dXJuIHN0cmluZw0KKiBA cHJpdmF0ZQ0KKi8NCmZ1bmN0aW9uIGRzcERheUNlbGxzICggKSB7DQoJJGkgPSAwOyAvLyBj ZWxsIGNvdW50ZXINCgkkZW1wdHlDbGFzcyA9ICR0aGlzLT5nZXRFbXB0eUNsYXNzKCk7DQoJ JGlzb0NsYXNzID0gJHRoaXMtPmdldElTT1dlZWtDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICR0 aGlzLT5nZXRSb3dDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICgkcm93Q2xhc3MpID8gJyBjbGFz cz0iJy4kcm93Q2xhc3MuJyInIDogJyc7DQoNCgkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+ JzsNCg0KCWlmICgkdGhpcy0+c2hvd0lTT1dlZWsgIT0gJycpIHsNCgkJJGNbXSA9ICc8dGQg Y2xhc3M9IicuJGlzb0NsYXNzLiciPicuZGF0ZSggJ1cnLCAkdGhpcy0+c3RhcnRUaW1lICku JzwvdGQ+JzsNCgl9DQoJLy8gZmlyc3QgZGlzcGxheSBlbXB0eSBjZWxscyBiYXNlZCBvbiB3 aGF0IHdlZWtkYXkgdGhlIG1vbnRoIHN0YXJ0cyBpbg0KCWZvciggJGo9MDsgJGo8JHRoaXMt PnN0YXJ0T2Zmc2V0OyAkaisrICkJew0KCQkkaSsrOw0KCQkkY1tdID0gJzx0ZCBjbGFzcz0i Jy4kZW1wdHlDbGFzcy4nIj4mbmJzcDs8L3RkPic7DQoJfSAvLyBlbmQgb2Zmc2V0IGNlbGxz DQoNCgkvLyB3cml0ZSBvdXQgdGhlIHJlc3Qgb2YgdGhlIGRheXMsIGF0IGVhY2ggc3VuZGF5 LCBzdGFydCBhIG5ldyByb3cuDQoJZm9yKCAkZD0xOyAkZDw9JHRoaXMtPmVuZERheTsgJGQr KyApIHsNCgkJJGkrKzsNCgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxsKCAkZCApOw0KCQlp ZiAoICRpJTcgPT0gMCApIHsgJGNbXSA9ICc8L3RyPic7IH0NCgkJaWYgKCAkZDwkdGhpcy0+ ZW5kRGF5ICYmICRpJTcgPT0gMCApIHsNCgkJCSRjW10gPSAnPHRyJy4kcm93Q2xhc3MuJz4n Ow0KCQkJaWYgKCR0aGlzLT5zaG93SVNPV2VlayAhPSAnJykgew0KCQkJCSRjW10gPSAnPHRk IGNsYXNzPSInLiRpc29DbGFzcy4nIj4nLmRhdGUoICdXJywgc3RydG90aW1lKCAkdGhpcy0+ Z2V0WWVhcigpLiItIi4kdGhpcy0+Z2V0TW9udGgoKS4iLSIuKGludCkoJGQgKyAxKSAuIiAw MDowMCIgKSkuJzwvdGQ+JzsNCgkJCX0NCgkJfQ0KCX0NCgkvLyBmaWxsIGluIHRoZSBmaW5h bCByb3cNCgkkbGVmdCA9IDcgLSAoICRpJTcgKTsNCglpZiAoICRsZWZ0IDwgNykJew0KCQlm b3IgKCAkaj0wOyAkajwkbGVmdDsgJGorKyApCXsNCgkJICAkY1tdID0gJzx0ZCBjbGFzcz0i Jy4kZW1wdHlDbGFzcy4nIj4mbmJzcDs8L3RkPic7DQoJCX0NCgkJJGNbXSA9ICJcblx0PC90 cj4iOw0KCX0NCglyZXR1cm4gam9pbignJywkYyk7DQp9DQovLyA9PT09IGVuZCBkc3BEYXlD ZWxscyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci8qKg0KKiBvdXRwdXRzIHRoZSBjb250ZW50cyBmb3IgYSBnaXZlbiBkYXkNCioNCiogQHBh cmFtIGludGVnZXIsIGRheQ0KKiBAYWJzdHJhY3QNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxs ICggJGRheSApIHsNCglyZXR1cm4gJzx0ZD4nLiRkYXkuJzwvdGQ+JzsNCn0NCi8vID09PT0g ZW5kIGRheUNlbGwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQp9IC8vIGVuZCBjbGFzcw0KDQovLyBQZXJmb3JtIG9uZSBvZiAyIHR5cGVzIG9m IHRlc3Q6IGEgZmxhZy1iYXNlZCB0ZXN0LCBvciBhbiBpbmZvLWJhc2VkIHRlc3QNCmZ1bmN0 aW9uIHNtZF9pZl9jYWwoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX2NhbF9mbGFn LCAkc21kX2NhbF9pZCwgJHNtZF95ZWFyLCAkc21kX21vbnRoLCAkc21kX3dlZWssICRzbWRf ZGF5Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2ZsYWcnID0+ICcnLCAvLyBldmVu dCwgcmVjdXIsIG11bHRpKHByZXYsZmlyc3QsbGFzdCksIGNhbmNlbCwgaG9scw0KCQknY2Fs aWQnID0+ICcnLA0KCQkneWVhcicgPT4gJycsDQoJCSdtb250aCcgPT4gJycsDQoJCSd3ZWVr JyA9PiAnJywNCgkJJ2RheScgPT4gJycsDQoJCSdsb2dpYycgPT4gJ2FuZCcsDQoJCSdkZWJ1 ZycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCgkkZmxhZyA9IGRvX2xpc3QoJGZsYWcpOw0K CSRjdHIgPSAkbnVtID0gMDsNCg0KCWlmICgkc21kX2NhbF9mbGFnICYmICRmbGFnICYmICRm bGFnWzBdICE9ICcnKSB7DQoJCSRudW0gKz0gY291bnQoJGZsYWcpOw0KCQlmb3JlYWNoICgk ZmxhZyBhcyAkd2hhdG5vdCkgew0KCQkJaWYgKGVtcHR5KCR3aGF0bm90KSkgY29udGludWU7 DQoJCQkkY3RyICs9IChpbl9hcnJheSgkd2hhdG5vdCwgJHNtZF9jYWxfZmxhZykpID8gMSA6 IDA7DQoJCX0NCgl9DQoJaWYgKCRjYWxpZCkgew0KCQkkbnVtKys7DQoJCSRjdHIgKz0gKCRz bWRfY2FsX2lkID09PSAkY2FsaWQpID8gMSA6IDA7DQoJfQ0KCWZvcmVhY2ggKGFycmF5KCJ5 ZWFyIiwgIm1vbnRoIiwgIndlZWsiLCAiZGF5IikgYXMgJHRlc3QpIHsNCgkJJHRlc3RlciA9 ICQkdGVzdDsNCgkJJGdibCA9ICdzbWRfJy4kdGVzdDsNCgkJJGNvbXBhcmUgPSAkJGdibDsN Cg0KCQlpZiAoJHRlc3Rlcikgew0KCQkJJG51bSsrOw0KCQkJcHJlZ19tYXRjaCgnLyhbIT08 Pl0rKT8oW1xkXSspLycsICR0ZXN0ZXIsICRtYXRjaGVzKTsNCgkJCWlmICgkZGVidWcpIHsN CgkJCQlkbXAoIlRFU1QgSUY6ICIuICRjb21wYXJlLiAoKCRtYXRjaGVzWzFdKSA/ICRtYXRj aGVzWzFdIDogJz0nKSAuICRtYXRjaGVzWzJdICk7DQoJCQl9DQoJCQlzd2l0Y2ggKCRtYXRj aGVzWzFdKSB7DQoJCQkJY2FzZSAiISI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlIT0kbWF0 Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPiI6DQoJCQkJCSRj dHIgKz0gKCRjb21wYXJlPiRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJ CQljYXNlICI+PSI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPj0kbWF0Y2hlc1syXSkgPyAx IDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPCI6DQoJCQkJCSRjdHIgKz0gKCRjb21w YXJlPCRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI8PSI6 DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPD0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJ YnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmU9PSRtYXRjaGVz WzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkkcmVzdWx0ID0g KCgkY3RyID09PSAkbnVtICYmICRsb2dpYyA9PSAiYW5kIikgfHwgJGN0ciA+IDAgJiYgJGxv Z2ljID09ICJvciIpID8gdHJ1ZSA6IGZhbHNlOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgk dGhpbmcsICRyZXN1bHQpKTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbF9pbmZvKCRhdHRzKSB7 DQoJZ2xvYmFsICRwcmV0ZXh0LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZCwgJHNtZF95 ZWFyLCAkc21kX21vbnRoLCAkc21kX3dlZWssICRzbWRfZGF5Ow0KDQoJZXh0cmFjdChsQXR0 cyhhcnJheSgNCgkJJ3R5cGUnID0+ICdmbGFnJywgLy8gZmxhZywgeWVhciwgbW9udGgsIHdl ZWssIGRheSwgY2FsaWQsIHNlY3Rpb24sIGNhdGVnb3J5LCBhdXRob3INCgkJJ2pvaW4nID0+ ICcgJywNCgkJJ2h0bWwnID0+IDAsDQoJCSdlc2NhcGUnID0+ICdodG1sJywNCgkpLCAkYXR0 cykpOw0KDQoJJGpvaW4gPSAoJGh0bWwpID8gYSA6ICRqb2luOyAvLyBodG1sIG1vZGUgZm9y Y2VzIGFtcGVyc2FuZCBqb2luDQoJJHR5cGUgPSBkb19saXN0KCR0eXBlKTsNCgkkcmV0ID0g YXJyYXkoKTsNCglmb3JlYWNoICgkdHlwZSBhcyAkaXRlbSkgew0KCQlzd2l0Y2ggKCRpdGVt KSB7DQoJCQljYXNlICJmbGFnIjoNCgkJCQkkcmV0W10gPSBqb2luKCRqb2luLCAkc21kX2Nh bF9mbGFnKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgInllYXIiOg0KCQkJCWlmICgkc21kX3ll YXIpIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAneT0nIDogJycpIC4gJHNtZF95ZWFy Ow0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgIm1vbnRoIjoNCgkJCQlpZiAoJHNtZF9t b250aCkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdtPScgOiAnJykgLiAkc21kX21v bnRoOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgIndlZWsiOg0KCQkJCWlmICgkc21k X3dlZWspIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAndz0nIDogJycpIC4gJHNtZF93 ZWVrOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImRheSI6DQoJCQkJaWYgKCRzbWRf ZGF5KSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2Q9JyA6ICcnKSAuICRzbWRfZGF5 Ow0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCWlmICgkcHJl dGV4dFsncyddKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ3M9JyA6ICcnKSAuICRw cmV0ZXh0WydzJ107DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiY2F0ZWdvcnkiOg0K CQkJCWlmICgkcHJldGV4dFsnYyddKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2M9 JyA6ICcnKSAuICRwcmV0ZXh0WydjJ107DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAi YXV0aG9yIjoNCgkJCQkkY3VycmF1dGhvciA9IGF1dGhvcihhcnJheSgpKTsNCgkJCQlpZiAo JGN1cnJhdXRob3IpIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAnYXV0aG9yPScgOiAn JykgLiAkY3VycmF1dGhvcjsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJjYWxpZCI6 DQoJCQkJaWYgKCRzbWRfY2FsX2lkKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2Nh bGlkPScgOiAnJykgLiAkc21kX2NhbF9pZDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9 DQoJJG91dCA9IGpvaW4oJGpvaW4sICRyZXQpOw0KCXJldHVybiAoJGVzY2FwZT09J2h0bWwn KSA/IGh0bWxzcGVjaWFsY2hhcnMoJG91dCkgOiAkb3V0Ow0KfQ0KDQpmdW5jdGlvbiBzbWRf Y2FsX25vdygkYXR0cykgew0KCWdsb2JhbCAkZGF0ZWZvcm1hdDsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSdmb3JtYXQnID0+ICRkYXRlZm9ybWF0LA0KCQknZ210JyA9PiAnJywN CgkJJ2xhbmcnID0+ICcnLA0KCSksICRhdHRzKSk7DQoNCglyZXR1cm4gc2FmZV9zdHJmdGlt ZSgkZm9ybWF0LCB0aW1lKCksICRnbXQsICRsYW5nKTsNCn0iO3M6NDoidHlwZSI7czoxOiIw IjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NDoiaGVscCI7czo0MjAzODoiCTxwPjxkaXYgaWQ9 InNtZF9oZWxwIj48L3A+CgoJPGgxIGlkPSJ0b3AiPnNtZF9jYWxlbmRhcjwvaDE+CgoJPHA+ UmVuZGVyIGEgY2FsZW5kYXIgd2l0aCBvbmUgb3IgbW9yZSBhcnRpY2xlcyBhcyBldmVudHMg b24gZWFjaCBkYXkuIFVzZWZ1bCBmb3IgZ2lnIGd1aWRlcywgJiM4MjIwO3doYXQmIzgyMTc7 cyBvbiYjODIyMTsgb3Igc2NoZWR1bGluZy48L3A+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVh dHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+RnVsbC1zaXplIG9yIG1pbmkgY2FsZW5kYXIgYnkg bW9udGggd2l0aCBvcHRpb25hbCA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVr IGRpc3BsYXk8L2xpPgoJCTxsaT5OYXZpZ2F0aW9uOiBuZXh0L3ByZXYgbW9udGggb3Igb3B0 aW9uYWwgZHJvcGRvd24gb2YgbW9udGggLyB5ZWFyLiBQZXJtaXR0ZWQgeWVhciByYW5nZSBj YW4gYmUgZGV0ZXJtaW5lZCBieSBmaXJzdC9sYXN0IGFydGljbGUgb3IgZXh0ZW5kZWQgYnkg Ky8tIE4geWVhcnMgaW4gZWl0aGVyIGRpcmVjdGlvbjwvbGk+CgkJPGxpPk9uZSBhcnRpY2xl ID0gb25lIGV2ZW50LCBuYXRpdmUgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g d2l0aCB0aGUgUG9zdGVkIGRhdGUgYmVpbmcgdGhlIGRhdGUgaXQgYXBwZWFycyBpbiB0aGUg Y2FsZW5kYXI8L2xpPgoJCTxsaT5GaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IC8gc2VjdGlv biAvIGF1dGhvciAvIHN0YXR1cyAvIHRpbWUgb3IgZXhwaXJ5PC9saT4KCQk8bGk+Tm9taW5h dGUgYSBjdXN0b20gZmllbGQgdG8gc3BlY2lmeSBldmVudCBmcmVxdWVuY3kgKDEgd2VlayBv ciAxMCBkYXlzIG9yIDMgbW9udGhzLCBldGMpLiBNdWx0aXBsZSBmcmVxdWVuY2llcyBjYW4g YmUgZ2l2ZW48L2xpPgoJCTxsaT5Ob21pbmF0ZSBhIGN1c3RvbSBmaWVsZCBmb3IgZXhjbHVz aW9ucyAoYSBsaXN0IG9mIGRhdGVzIG9uIHdoaWNoIHRoYXQgZXZlbnQgaXMgY2FuY2VsbGVk KS4gT3B0aW9uIHRvIGVpdGhlciBzaG93IGNhbmNlbGxlZCBldmVudHMgb24gdGhhdCBkYXkg c28geW91IGNhbiBzdHlsZSB0aGVtIGRpZmZlcmVudGx5LCBvciByZW1vdmUgdGhlbSBjb21w bGV0ZWx5PC9saT4KCQk8bGk+U2hvdyBzcGFubmVkIGV2ZW50cyAob25lcyB0aGF0IGxhc3Qg bW9yZSB0aGFuIGEgZGF5KSBiYXNlZCBvbiB0aGUgYXJ0aWNsZeKAmXMgZXhwaXJ5LiBBbnkg ZXZlbnQgdGhhdCBkb2VzIDxzcGFuIGNsYXNzPSJjYXBzIj5OT1Q8L3NwYW4+IHJlY3VyIGFu ZCBoYXMgYSBmdXR1cmUgZXhwaXJ5IGNhbiBiZSB0cmVhdGVkIHRoaXMgd2F5PC9saT4KCQk8 bGk+RnV0dXJlLCBleHBpcmVkIG9yIHN0aWNreSBldmVudHMgbWF5IGJlIGRpc3BsYXllZCBp ZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPlNwZWNpZnkgaG9saWRheXMgb24gYSBwZXIgY2FsZW5k YXIgYmFzaXMgKGVpdGhlciByZWN1cnJpbmcgZXZlbnRzICYjODIxMjsgd2l0aG91dCB5ZWFy ICYjODIxMjsgb3Igc3BlY2lmaWMgaG9saWRheXMpLiBEZWZpbmUgdGhlIGxpc3QgZWl0aGVy IGRpcmVjdGx5IGluIHRoZSBwbHVnaW4gYXR0cmlidXRlIG9yIGluIGEgPGNvZGU+Jmx0O3R4 cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4gb2YgeW91ciBjaG9pY2UgYW5kIGRlY2lkZSB3aGlj aCB0eXBlcyBvZiBldmVudCBhcmUgdG8gYmUgY2FuY2VsbGVkIGR1ZSB0byBob2xpZGF5czwv bGk+CgkJPGxpPkVhY2ggZXZlbnQgY2FuIGJlIHBhc3NlZCB0byBhIGZvcm0vY29udGFpbmVy IHNvIHlvdSBjYW4gYnVpbGQgaXQgeW91ciB3YXksIG9yIHVzZSB0aGUgYnVpbHQtaW4gaHlw ZXJsaW5rZWQgdGl0bGUuIFNwYW5uZWQgZXZlbnRzIGNhbiBiZSBzZW50IHRvIGEgc2VwYXJh dGUgZm9ybSBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPkNvbmRpdGlvbmFsIHRlc3RzIGZvciBl dmVudCBmbGFncyAocmVjdXJyaW5nLCBzcGFubmVkLCBjYW5jZWxsZWQsIGhvbGlkYXlzKSBh bmQgZGF0ZXMgc28geW91IGNhbiBidWlsZCB5b3VyIG93biBsb2dpYyBpbiB5b3VyIGZvcm0v Y29udGFpbmVyPC9saT4KCQk8bGk+Q2xhc3Mgc291cDogdGFibGUtLCByb3ctLCBjZWxsLSwg YW5kIGV2ZW50LWxldmVsIGNsYXNzZXMgZm9yIGluZGljYXRpbmcgZGlmZmVyZW50IHNjZW5h cmlvcyAoc3Bhbm5lZCBldmVudCwgcmVjdXJyaW5nIGV2ZW50LCBjYW5jZWxsZWQgZXZlbnQs IGV0Yyk7IGN1c3RvbSBjbGFzc2VzIGNhbiBiZSBzcGVjaWZpZWQgYmFzZWQgb24gYW4gZXZl bnQ8L2xpPgoJCTxsaT5UYWcgdG8gb3V0cHV0IHZhcmlvdXMgZXZlbnQgb3IgY2FsZW5kYXIg Y2hhcmFjdGVyaXN0aWNzIChlLmcuIHRoZSBtb250aCwgeWVhciwgY2FsZW5kYXIgaWQsIHNl Y3Rpb24gYW5kIHNvIG9uKTwvbGk+CgkJPGxpPlRhZyB0byBvdXRwdXQgdGhlIGN1cnJlbnQg ZGF0ZS90aW1lIChmb3JtYXR0ZWQgaG93IHlvdSBsaWtlKTwvbGk+Cgk8L3VsPgoKCTxoMiBp ZD0iYXV0aG9yIj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4gSm9pbnRseSBm dW5kZWQgYnkgZ2VuZXJvdXMgZG9uYXRvcnM6IG1yZGFsZSwgd29vZiwgamFrb2IgYW5kIHJl bm9iaXJkLiBCYXNlZCBoZWF2aWx5IG9uIG1kcF9jYWxlbmRhci4gQWxsIHByb3BzIHRvIHRo ZSBvcmlnaW5hbCBhdXRob3Igb2YgdGhlIHBsdWdpbiwgYW5kIG9mIGNvdXJzZSB0aGUgY2xh c3MgdXBvbiB3aGljaCB0aGUgY2FsZW5kYXIgaXMgYmFzZWQuIEFuZCBub3QgZm9yZ2V0dGlu ZyBvdXIgYXdlc29tZSBUZXh0cGF0dGVybiBkZXZzIHdobyBjb250aW51ZSB0byBwdXNoIHRo aXMgbGl0dGxlIDxzcGFuIGNsYXNzPSJjYXBzIj5DTVM8L3NwYW4+IHRvIHRoZSBzdGFycy48 L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwv aDI+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjAuNzwv cD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6 Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMDUyL3NtZF9jYWxlbmRhciI+dGV4dHBhdHRl cm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+ c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBh bmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0u dGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjkyMDAiPmZvcnVtIHRocmVhZDwv YT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3 aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0 ZSBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0ibmFt aW5nIj5OYW1pbmcgY29udmVudGlvbjwvaDI+CgoJPHA+QmVmb3JlIGJlZ2lubmluZyB0aGVy ZSYjODIxNztzIGEgbGl0dGxlIGJpdCBvZiBub21lbmNsYXR1cmUgdG8gZ2V0IG91dCBvZiB0 aGUgd2F5OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jZWxsPC9zcGFu PiA6IGEgc3BlY2lmaWMgZGF5IG9uIHRoZSBjYWxlbmRhciBpbiBhIHBhcnRpY3VsYXIgbW9u dGgveWVhcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudDwvc3Bhbj4gOiBh biBhcnRpY2xlLiBJdCYjODIxNztzIGJlc3QgdG8gbm9taW5hdGUgYSBkZWRpY2F0ZWQgc2Vj dGlvbiBmb3IgZXZlbnRzIHNvIGl0IGtlZXBzIHRoaW5ncyBuZWF0ZXIgb24geW91ciBjYWxl bmRhciBidXQgeW91IGNhbiB1c2UgZXZlbnRzIGZyb20gbW9yZSB0aGFuIG9uZSBzZWN0aW9u IGlmIHlvdSB3aXNoLiBBbnkgYXJ0aWNsZSB3cml0dGVuIGluIHRoZSBnaXZlbiBzZWN0aW9u KHMpIHdpbGwgYXBwZWFyIG9uIHRoZSBjYWxlbmRhciBhcyBsb25nIGFzIGl0cyBleHBpcnkg aGFzbiYjODIxNzt0IGJlZW4gbWV0LiBNb3JlIHRoYW4gb25lIGV2ZW50IG1heSBhcHBlYXIg aW4gZWFjaCBjZWxsPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50IGZsYWc8 L3NwYW4+IDogZWFjaCBldmVudCBjYW4gZWl0aGVyIGJlIGEgc3RhbmRhcmQgPGEgaHJlZj0i I2V2ZW50cyI+ZXZlbnQ8L2E+LCBpdCBjYW4gPGEgaHJlZj0iI3JlY3VyIj5yZWN1cjwvYT4s IGl0IGNhbiBzcGFuIG1vcmUgdGhhbiBvbmUgZGF5ICg8YSBocmVmPSIjbXVsdGkiPm11bHRp PC9hPikgaXQgY2FuIGJlIHJlbW92ZWQgKDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbDwvYT4p IG9yIGl0IG1heSBvY2N1ciBvbiBhIGhvbGlkYXkgKDxhIGhyZWY9IiNob2xpZGF5cyI+aG9s czwvYT4pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhbGlkPC9zcGFuPiA6IHlv dSBtYXkgcHV0IG1vcmUgdGhhbiBvbmUgY2FsZW5kYXIgb24gYSBwYWdlLiBJZiBzbywgZWFj aCBvbmUgbXVzdCBiZSB1bmlxdWVseSByZWZlcmVuY2VkIHdpdGggdGhpcyBjYWxlbmRhciBJ RDwvbGk+Cgk8L3VsPgoKCTxwPkl0JiM4MjE3O3MgYWxzbyB3b3J0aCBiZWFyaW5nIGluIG1p bmQgdGhlIDxhIGhyZWY9IiNkYXRlcyI+ZGF0ZSBjYXZlYXRzPC9hPiB0aGF0IG1heSB3ZWxs IGJpdGUgeW91IGhhcmQuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlOiA8Y29kZT4mbHQ7 dHhwOnNtZF9jYWxlbmRhciAvJmd0OzwvY29kZT48L2gyPgoKCTxwPlB1dCB0aGUgPGNvZGU+ Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+IHRhZyB3aGVyZXZlciB5b3Ugd2Fu dCB5b3VyIGNhbGVuZGFyIHRvIGFwcGVhci4gVXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGF0 dHJpYnV0ZXMgdG8gY29udHJvbCBpdHMgb3V0cHV0IGRpc3BsYXkgYW5kIHVzZSB0aGUgPGEg aHJlZj0iI2F0dHN0eWxlcyI+c3R5bGUgYXR0cmlidXRlczwvYT4gdG8gZGV0ZXJtaW5lIGhv dyB0byBhcHBseSBzdHlsZXMgdG8gdGhlIHZhcmlvdXMgZXZlbnRzIGFuZCBjZWxscy48L3A+ CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPk1haW4gYXR0cmlidXRlczwv aDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2l6ZTwvc3Bhbj4gOiBjYWxl bmRhciBzaXplLCA8Y29kZT5sYXJnZTwvY29kZT4gb3IgPGNvZGU+c21hbGw8L2NvZGU+LiBU aGUgc21hbGwgaXMgbW9yZSBnZWFyZWQgdG93YXJkcyBhIG1pbmljYWwsIGFsdGhvdWdoIGZ1 bmN0aW9uYWxseSB0aGVyZSA8YSBocmVmPSIjc2l6ZWRpZmYiPmlzbiYjODIxNzt0IG11Y2gg YmV0d2VlbiB0aGVtPC9hPi4gRGVmYXVsdDogPGNvZGU+bGFyZ2U8L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+IDogc2hvdyA8Y29kZT5wYXN0PC9j b2RlPiwgPGNvZGU+ZnV0dXJlPC9jb2RlPiwgb3IgPGNvZGU+YW55PC9jb2RlPiBldmVudC4g RGVmYXVsdDogPGNvZGU+YW55PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5leHBpcmVkPC9zcGFuPiA6IGRlZmluaXRpdmVseSBoaWRlICg8Y29kZT4wPC9jb2RlPikg b3Igc2hvdyAoPGNvZGU+MTwvY29kZT4pIGV4cGlyZWQgZXZlbnRzLiBMZWF2ZSBibGFuayB0 byB1c2UgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkdmFuY2VkIFByZWZl cmVuY2UgPGNvZGU+UHVibGlzaCBleHBpcmVkIGFydGljbGVzPC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5maXJzdGRheTwvc3Bhbj4gOiB0aGUgMXN0IGRheSBvZiB0 aGUgd2VlayB0byBzaG93IGluIHRoZSBjYWxlbmRhci4gMD1TdW5kYXksIDE9TW9uZGF5IGFu ZCBzbyBvbiBkb3duIHRvIDY9U2F0dXJkYXkuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRheWZvcm1hdDwvc3Bhbj4gOiB0aGUgd2F5 IGluIHdoaWNoIHRoZSBkYXkgbmFtZXMgYXJlIHJlbmRlcmVkLiBDaG9vc2UgZnJvbSBlaXRo ZXIgPGNvZGU+QUJCUjwvY29kZT4gKHRoZSBkZWZhdWx0KSB0byBzaG93IHRoZSBkYXlzIGFz IE1vbiwgVHVlLCBXZWQsIGV0YyBvciA8Y29kZT5GVUxMPC9jb2RlPiB0byByZW5kZXIgdGhl aXIgZnVsbCBuYW1lcy4gQWx0ZXJuYXRpdmVseSwgc3VwcGx5IGFueSB2YWxpZCA8YSBocmVm PSJodHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IGNvZGVzIHRv IHVzZSB0aGF0IGluc3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQ8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGhmb3JtYXQ8L3NwYW4+IDogdGhl IHdheSBpbiB3aGljaCB0aGUgbW9udGggbmFtZXMgYXJlIHJlbmRlcmVkLiBDaG9vc2UgZnJv bSBlaXRoZXIgPGNvZGU+RlVMTDwvY29kZT4gKHRoZSBkZWZhdWx0KSB0byBzaG93IHRoZSBm dWxsIG1vbnRoIG5hbWVzIG9yIDxjb2RlPkFCQlI8L2NvZGU+IHRvIHJlbmRlciB0aGVpciBh YmJyZXZpYXRlZCBuYW1lcy4gQWx0ZXJuYXRpdmVseSwgc3VwcGx5IGFueSB2YWxpZCA8YSBo cmVmPSJodHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IGNvZGVz IHRvIHVzZSB0aGF0IGluc3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJu ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2VsZWN0PC9zcGFuPiA6IHVzZSBh IHNlbGVjdCBkcm9wZG93biBmb3IgcmFwaWQgYWNjZXNzIHRvIG1vbnRocyBvciB5ZWFycyBp bnN0ZWFkIG9mIHJlbmRlcmluZyBqdXN0IHRoZSBuYW1lcy4gRGVmYXVsdDogdW5zZXQsIGJ1 dCB5b3UgbWF5IG1ha2UgYSAoY29tbWEtc2VwYXJhdGVkKSBsaXN0IGZyb20gZWl0aGVyIDxj b2RlPm1vbnRoPC9jb2RlPiBvciA8Y29kZT55ZWFyPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5zZWxlY3RidG48L3NwYW4+IDogYnkgZGVmYXVsdCwgdGhlIHNlbGVj dCBkcm9wZG93bnMgd2lsbCBhdXRvLXN1Ym1pdCB3aGVuIHRoZXkgYXJlIGNoYW5nZWQuIElm IHlvdSBwcmVmZXIgYSBkZWRpY2F0ZWQgc3VibWl0IGJ1dHRvbiwgZ2l2ZSB0aGUgdGV4dCB5 b3Ugd2lzaCB0byBhcHBlYXIgb24gdGhlIGJ1dHRvbiBoZXJlLiBUaGUgYnV0dG9uIGhhcyBh IGZpeGVkIGNsYXNzIG9mIDxjb2RlPnNtZF9jYWxfaW5wdXQ8L2NvZGU+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3dlZWtzPC9zcGFuPiA6IHNob3cgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVycyBhcyBhIGNvbHVtbiBhdCB0aGUg c3RhcnQgb2YgdGhlIGNhbGVuZGFyLiBJZiB0ZXh0IGlzIHVzZWQgaW4gdGhpcyBhdHRyaWJ1 dGUgaXQgd2lsbCBlbmFibGUgdGhlIGZlYXR1cmUgYW5kIGJlY29tZSB0aGUgaGVhZGluZyBv ZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBjb2x1bW4uIFRoZSA8 Y29kZT5maXJzdGRheTwvY29kZT4gd2lsbCBiZSBmb3JlZCB0byBzdGFydCBvbiBhIE1vbmRh eSBhcyBnb3Zlcm5lZCBieSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gc3Bl Y2lmaWNhdGlvbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c3RhdHVzPC9zcGFuPiA6IGV2ZW50cyBpbiB0aGlzIGxpc3Qgb2Ygc3RhdHVzIGFyZSBw dWJsaXNoZWQuIERlZmF1bHQ6IDxjb2RlPmxpdmU8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmNhdGVnb3J5PC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBs aXN0IG9mIGNhdGVnb3JpZXMuIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVn b3J5IChpZiBzZXQsIGVtcHR5IG90aGVyd2lzZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2VjdGlvbjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBz ZWN0aW9ucy4gRGVmYXVsdCBpcyB0aGUgY3VycmVudCBzZWN0aW9uPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmF1dGhvcjwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMg YXV0aG9yIFJlYWwgTmFtZS4gRGVmYXVsdCBpcyB0aGUgY3VycmVudCBhdXRob3IgKGlmIHNl dCwgZW1wdHkgb3RoZXJ3aXNlKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwv c3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRvIGFwcGx5 IHRvIHRoZSB0YWJsZSB0aGF0IGhvbGRzIHRoZSBjYWxlbmRhci4gVGhpcyBpcyB0aGUgdmFs dWUgb2YgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIDxjb2Rl PmNhbGlkPC9jb2RlPiBhbmQgaXRzIGRlZmF1bHQgaXMgdW5zZXQuIEVhY2ggY2FsZW5kYXIg b24gYSBwYWdlIDxhIGhyZWY9IiNuYW1pbmciPm11c3QgYmUgdW5pcXVlPC9hPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5k YXIgb24gdGhpcyBtb250aCBmcm9tIDEgKEphbnVhcnkpIHRvIDEyIChEZWNlbWJlcikuIE5v cm1hbCBjYWxlbmRhciBuYXZpZ2F0aW9uIG92ZXJyaWRlcyB0aGlzIHZhbHVlLiBJZiA8Y29k ZT5zdGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMgbW9udGggYmVjb21lcyB0aGUgb25seSBv bmUgeW91IG1heSB2aWV3LiBJZiB1bnNldCwgYW5kIG5vIDxjb2RlPm09PC9jb2RlPiB2YWx1 ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5lLCB0 aGUgY3VycmVudCBtb250aCBpcyB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PndlZWs8L3NwYW4+IDogc3RhcnQgdGhlIGNhbGVuZGFyIGR1cmluZyB0aGUgbW9udGggY29u dGFpbmluZyB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgKGZyb20g MSB0byA1MykuIElnbm9yZWQgaWYgPGNvZGU+c3RhdGljPC9jb2RlPiBvciBvbmUgb2YgdGhl IGNhbGVuZGFyIG5hdmlnYXRpb24gY29udHJvbHMgaXMgdXNlZC4gSWYgYSA8Y29kZT53PTwv Y29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gbGluZSwgdGhlIGdpdmVuIHdlZWsgb3ZlcnJpZGVzIGFueSBtb250aCB2YWx1ZTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxl bmRhciBhdCB0aGlzIDQtZGlnaXQgeWVhci4gTm9ybWFsIGNhbGVuZGFyIG5hdmlnYXRpb24g b3ZlcnJpZGVzIHRoaXMgdmFsdWUuIElmIDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgdXNlZCwg dGhpcyB5ZWFyIGJlY29tZXMgdGhlIG9ubHkgb25lIHlvdSBtYXkgdmlldy4gSWYgdW5zZXQs IGFuZCBubyA8Y29kZT55PTwvY29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1cnJlbnQgeWVhciBpcyB1c2VkPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnllYXJ3aWR0aDwvc3Bhbj4gOiBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IHllYXJzIHlvdXIgY2Fs ZW5kYXIgc3BhbnMuIEJ5IGRlZmF1bHQgaXQgaXMgPGNvZGU+MCwwPC9jb2RlPiB3aGljaCB1 c2VzIHRoZSBlYXJsaWVzdCAocG9zdGVkKSBldmVudCBpbiB0aGUgc2VjdGlvbiBhcyB0aGUg bG93ZXN0IHllYXIgYW5kIHRoZSBsYXRlc3QgKG1vZGlmaWVkKSBldmVudCBpbiB0aGUgc2Vj dGlvbiBhcyB0aGUgbGF0ZXN0IHllYXIuIFlvdSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgdG8g bmF2aWdhdGUgdGhlIGNhbGVuZGFyIG91dHNpZGUgdGhpcyByYW5nZS4gVG8gd2lkZW4gdGhl IHJhbmdlLCBzcGVjaWZ5IHNvbWUgdmFsdWVzLCBmb3IgZXhhbXBsZSA8Y29kZT55ZWFyd2lk dGg9JnF1b3Q7Miw0JnF1b3Q7PC9jb2RlPiB3aWxsIHN1YnRyYWN0IDIgd2hvbGUgeWVhcnMg ZnJvbSB0aGUgZWFybGllc3QgZXZlbnQgYW5kIGFkZCA0IHdob2xlIHllYXJzIHRvIHRoZSBs YXRlc3QgZXZlbnQuIElmIHlvdSBzcGVjaWZ5IGEgc2luZ2xlIG51bWJlciwgdGhhdCB2YWx1 ZSB3aWxsIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSByYW5nZSBlcXVhbGx5IGluIGJvdGggZGly ZWN0aW9uczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPiA6IHVz ZSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm0gdG8gcHJvY2VzcyBl YWNoIGNlbGwuIElmIHRoZSBjYWxlbmRhciB0YWcgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBp dCB3aWxsIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgZm9ybS4gSWYgbmVpdGhlciBh cmUgdXNlZCwgdGhlIGRlZmF1bHQgZm9yIGEgbGFyZ2UgY2FsZW5kYXIgaXMgYSBoeXBlcmxp bmtlZCBhcnRpY2xlIHRpdGxlLiBUaGUgc21hbGwgY2FsZW5kYXIgcmVuZGVycyBhbiBlbXB0 eSBldmVudDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zcGFuZm9ybTwvc3Bhbj4g OiB5b3UgbWF5IGVsZWN0IHRvIHJlbmRlciBzcGFubmVkIGV2ZW50cyBkaWZmZXJlbnRseSB0 byBzdGFuZGFyZCBldmVudHMuIEJ5IGRlZmF1bHQgdGhleSB1c2UgdGhlIHNhbWUgPGNvZGU+ Zm9ybTwvY29kZT4gYnV0ICYjODIxMjsgaWYgbmVpdGhlciB0aGF0IG5vciB0aGUgY29udGFp bmVyIGFyZSBzcGVjaWZpZWQgJiM4MjEyOyB3aWxsIGJlIHJlbmRlcmVkIGFzIGEgaHlwZXJs aW5rZWQgcmlnaHQtYXJyb3cgdG8gaW5kaWNhdGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2 aW91cyBkYXkmIzgyMTc7cyBldmVudDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5y ZWN1cmZvcm08L3NwYW4+IDogc2ltaWxhcmx5IHRvIDxjb2RlPnNwYW5mb3JtPC9jb2RlPiB5 b3UgbWF5IGVsZWN0IHRvIHJlbmRlciByZWN1cnJpbmcgZXZlbnRzIGRpZmZlcmVudGx5IHRv IHN0YW5kYXJkIGV2ZW50cy4gQnkgZGVmYXVsdCB0aGV5IHVzZSB0aGUgc2FtZSA8Y29kZT5m b3JtPC9jb2RlPiBvciBjb250YWluZXIgYXMgc3RhbmRhcmQgZXZlbnRzPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVs ZCB3aXRoaW4gd2hpY2ggYW4gZXZlbnQgbWF5IGJlIHRvbGQgdG8gcmVwZWF0LiBOb3RlIGl0 IGlzIHRoZSBmaWVsZCYjODIxNztzIElEIG5vdCBpdHMgbmFtZSwgc28gZm9yIGN1c3RvbSBm aWVsZHMgeW91IG11c3QgdXNlIDxjb2RlPmN1c3RvbV8xPC9jb2RlPiBvciA8Y29kZT5jdXN0 b21fMjwvY29kZT4gZXRjLiBXaXRob3V0IHRoaXMgYXR0cmlidXRlIChpdHMgZGVmYXVsdCks IG5vIHJlY3VycmluZyBldmVudHMgbWF5IGJlIGRlZmluZWQuIFNlZSA8YSBocmVmPSIjcmVj dXIiPnJlY3VycmluZyBldmVudHM8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnNraXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVsZCBmcm9tIHdoaWNoIGFydGlj bGVzIG1heSBiZSBjYW5jZWxsZWQgaWYgcmVxdWlyZWQuIEFzIGFib3ZlLCB0aGlzIGlzIHRo ZSBJRCAobm90IG5hbWUpIG9mIHRoZSBmaWVsZC4gU3BlY2lmeSBhIGxpc3Qgb2YgZGF0ZXMg b24gd2hpY2ggdGhpcyBldmVudCB3aWxsIGJlIGNhbmNlbGxlZC4gU2VlIDxhIGhyZWY9IiNj YW5jZWwiPmNhbmNlbGxpbmcgZXZlbnRzPC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zaG93c2tpcHBlZDwvc3Bhbj4gOiB3aGVuIGFuIGV2ZW50IGlzIGNhbmNlbGxlZCB5 b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSBjYWxlbmRhciAoPGNvZGU+MDwvY29kZT4pIG9y IHNob3cgaXQgKDxjb2RlPjE8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2hvd3NwYW5uZWQ8L3NwYW4+IDogZXZlbnRz IHdpdGggZXhwaXJ5IHRpbWVzIGxhdGVyIHRoYW4gdGhlaXIgcG9zdGVkIGRhdGUgbWF5IGJl IHJlbmRlcmVkIGFjcm9zcyBtdWx0aXBsZSBjZWxscy4gSWYgeW91IGRvIG5vdCB3YW50IHRo aXMgZmVhdHVyZSB5b3UgY2FuIHR1cm4gaXQgb2ZmICg8Y29kZT4wPC9jb2RlPikuIERlZmF1 bHQ6IDxjb2RlPjE8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlk YXlzPC9zcGFuPiA6IGxpc3Qgb2YgZGF0ZXMgdGhhdCBhcmUgZGVjcmVlZCBhcyBob2xpZGF5 cy4gRXZlbnRzIGNhbiBiZSBzY2hlZHVsZWQgb24gaG9saWRheXMgYnV0IG1heSBub3QgcmVj dXIgb3Igc3BhbiBhIGhvbGlkYXkgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNheSBzbyB2aWEg dGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gYXR0cmlidXRlLiBZb3VyIGxpc3Qgb2Yg ZGF0ZXMgbWF5IGJlIGRlZmVycmVkIHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0 OzwvY29kZT4gaW4gd2hpY2ggY2FzZSBkZWZpbmUgeW91ciBsaXN0IGluIGEgbmFtZWQgdmFy aWFibGUgYW5kIHVzZSA8Y29kZT5ob2xpZGF5cz0mcXVvdDt0eHB2YXI6bXlfdmFyX25hbWUm cXVvdDs8L2NvZGU+IHRvIHJlYWQgdGhlbSBpbnRvIHRoZSBwbHVnaW48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheWZsYWdzPC9zcGFuPiA6IHBlcm1pdCBjZXJ0YWlu IDxhIGhyZWY9IiNuYW1pbmciPmV2ZW50IGZsYWdzPC9hPiB0byBiZSBzY2hlZHVsZWQgb24g aG9saWRheXMuIERlZmF1bHQ6IDxjb2RlPmV2ZW50PC9jb2RlPiAoaS5lLiBhIHN0YW5kYXJk IG9uZS1vZmYgZXZlbnQpIGJ1dCBvdGhlcnMgbWF5IGJlIGxpc3RlZCBhcyB3ZWxsLiBDaG9v c2UgZnJvbSA8Y29kZT5ldmVudDwvY29kZT4sIDxjb2RlPnJlY3VyPC9jb2RlPiBvciA8Y29k ZT5tdWx0aTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGlua3Bvc3Rl ZDwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+b25seSBvbiBzbWFsbCBjYWxlbmRh cnM8L3NwYW4+KSA6IGVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGFuIDxhIGhyZWY9IiNuYW1p bmciPmV2ZW50IGZsYWc8L2E+IG9mIHRoZSBnaXZlbiB0eXBlKHMpIHdpbGwgaGF2ZSBpdHMg ZGF5IG51bWJlciBsaW5rZWQgdG8gdGhlIGV2ZW50JiM4MjE3O3MgdHJ1ZSBzdGFydCBkYXRl IGluc3RlYWQgb2YgdGhlIGNlbGwmIzgyMTc7cyBkYXRlLiBUaHVzLCBpZiB5b3UgaGF2ZSBh IHdlZWtseSBldmVudCB0aGF0IHN0YXJ0cyBvbiB0aGUgMjB0aCBEZWNlbWJlciAyMDA4LCBz ZXR0aW5nIDxjb2RlPmxpbmtwb3N0ZWQ9JnF1b3Q7cmVjdXImcXVvdDs8L2NvZGU+IHdpbGwg Y2F1c2UgdGhlIGxpbmsgdG8gc2hvdyA8Y29kZT5kYXRlPTIwMDgtMTItMjA8L2NvZGU+IGVh Y2ggd2Vlay4gVGhpcyBhbGxvd3MgeW91IHRvIGFsd2F5cyBsaW5rIHRvIGEgdmFsaWQgYXJ0 aWNsZS9ldmVudC4gV2l0aG91dCBsaW5rcG9zdGVkLCB0aGUgZGF0ZXMgd291bGQgYmUgMjAw OC0xMi0yMCwgMjAwOC0xMi0yNywgMjAwOS0wMS0wMywgYW5kIHNvIG9uLiBEZWZhdWx0OiA8 Y29kZT5yZWN1ciwgbXVsdGksIG11bHRpcHJldiwgbXVsdGlsYXN0PC9jb2RlPiAoaS5lLiBh bnkgcmVjdXJyaW5nIG9yIHNwYW5uZWQgZXZlbnQpLiBOb3RlIHRoYXQgaWYgbW9yZSB0aGFu IG9uZSBldmVudCBvY2N1cnMgaW4gdGhlIGNlbGwsIHRoZSBsaW5rIHdpbGwgb25seSBiZSB0 byB0aGUgZmlyc3QgZGF0ZSB0aGUgcGx1Z2luIGZpbmRzPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnN0YXRpYzwvc3Bhbj4gOiBmb3JjZSB0aGUgY2FsZW5kYXIgdG8gYmUgZml4 ZWQgdG8gb25lIG1vbnRoL3llYXIgKGkuZS4gbm8gbmF2aWdhdGlvbikuIE1vbnRoIGFuZCB5 ZWFyIGRlY2lkZWQgYnkgYXR0cmlidXRlcyA8Y29kZT5tb250aDwvY29kZT4gYW5kIDxjb2Rl PnllYXI8L2NvZGU+IG9yICYjODIxMjsgaWYgb21pdHRlZCBhbmQgbm8gPGNvZGU+bT08L2Nv ZGU+IGFuZCA8Y29kZT55PTwvY29kZT4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g dmFyaWFibGVzIGFyZSBzZXQgJiM4MjEyOyB0aGUgY3VycmVudCBkYXRlIHdpbGwgYmUgdXNl ZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5nbXQ8L3NwYW4+IDogcmV0dXJuIGVp dGhlciBsb2NhbCB0aW1lICg8Y29kZT4wPC9jb2RlPikgYWNjb3JkaW5nIHRvIHRoZSB0aW1l IHpvbmUgc2V0IGluIEJhc2ljIFByZWZzLCBvciA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9z cGFuPiB0aW1lICg8Y29kZT4xPC9jb2RlPikuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhbmc8L3NwYW4+IDogYW4gPHNwYW4gY2xh c3M9ImNhcHMiPklTTzwvc3Bhbj4gbGFuZ3VhZ2UgY29kZSB0aGF0IGZvcm1hdHMgdGltZSBz dHJpbmdzIHN1aXRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIChvciBsb2NhbGUp IGFzIGRlZmluZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9J U09fNjM5Ij48c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiA2Mzk8L2E+LiBEZWZhdWx0 OiB1bnNldCAoaS5lLiB1c2UgdGhlIHZhbHVlIGFzIHN0YXRlZCBpbiA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBwcmVmcyk8L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9ImF0dHMg IiBpZD0iYXR0c3R5bGVzIj5TdHlsZSBhdHRyaWJ1dGVzPC9oMz4KCgk8cD5PbmNlIHlvdSBo YXZlIHR3ZWFrZWQgeW91ciBiYXNpYyBjYWxlbmRhciBhcyBkZXNjcmliZWQgYWJvdmUgeW91 IGNhbiBtb3ZlIG9udG8gdGhlIHN0eWxlIGF0dHJpYnV0ZXMgc28geW91IG1heSBnZXQgYXQg ZWFjaCBmYWNldCBvZiB0aGUgY2FsZW5kYXIgYW5kIHZpc3VhbGx5IGFsdGVyIGl0OjwvcD4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc2xldmVsczwvc3Bhbj4gOiBj bGFzc2VzIGNhbiBiZSBhcHBsaWVkIGF0IHRoZSBldmVudCBsZXZlbCAoc28geW91IGNhbiBj b2xvdXIgZWFjaCBldmVudCBpbiBhIGNlbGwpLCBvciB0aGUgY2VsbCBsZXZlbCAoc28geW91 IGNhbiBjb2xvdXIgdGhlIHdob2xlIGRheSksIG9yIGJvdGguIFlvdSBtYXkgYWxzbyBwcm9t b3RlIChpLmUuIGNvcHkpIGFsbCBldmVudC1sZXZlbCBjbGFzc2VzIHRoYXQgb2NjdXIgaW4g YSBkYXkgdG8gdGhlIGNlbGwgbGV2ZWwgc28geW91IGNhbiBjb2xvdXIgdGhlIGNlbGwgYmFz ZWQgb24gdGhlIGV2ZW50cyB0aGF0IGl0IGNvbnRhaW5zLiBDb21tYS1zZXBhcmF0ZSBhbnkg b2YgPGNvZGU+ZXZlbnQ8L2NvZGU+IChmb3IgcmVuZGVyaW5nIGV2ZW50LWxldmVsIHN0eWxl cyksIDxjb2RlPmNlbGw8L2NvZGU+IChmb3IgcmVuZGVyaW5nIHN0eWxlcyBhdCB0aGUgY2Vs bCBsZXZlbCksIG9yIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiAoZm9yIGNvcHlpbmcgdW5pcXVl IGV2ZW50IGNsYXNzZXMgdG8gdGhlIGNlbGwpLiBOb3RlIHlvdSB3aWxsIG5vdCBuZWVkIHRv IHVzZSA8Y29kZT5jZWxsPC9jb2RlPiBhbmQgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IHRvZ2V0 aGVyIGJlY2F1c2UgdGhlIGxhdHRlciBvdmVycmlkZXMgdGhlIGZvcm1lciwgYnV0IHRoZXJl JiM4MjE3O3Mgbm8gaGFybSBpZiB5b3UgZG8uIERlZmF1bHQ6IDxjb2RlPmNlbGwsIGV2ZW50 PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc3ByZWZpeGVzPC9z cGFuPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdXAgdG8gdHdvIHByZWZpeGVzIHRv IGFwcGx5IHRvIHlvdXIgY2xhc3MgbmFtZXMuIFRoZSBmaXJzdCBwcmVmaXggaXMgYXBwbGll ZCB0byBjZWxsLWxldmVsIGNsYXNzZXMgYW5kIHRoZSBzZWNvbmQgcHJlZml4IGlzIGFwcGxp ZWQgdG8gZXZlbnQgbGV2ZWwgY2xhc3NlcyBzbyB5b3UgbWF5IGRpc3Rpbmd1aXNoIHRoZW0g aWYgeW91IHdpc2guIElmIHlvdSBvbmx5IHNwZWNpZnkgb25lIHByZWZpeCBpdCB3aWxsIGJl IHVzZWQgZm9yIGJvdGggdHlwZXMgb2YgY2xhc3MuIElmIHlvdSB1c2UgPGNvZGU+Y2xhc3Nw cmVmaXhlcz0mcXVvdDsmcXVvdDs8L2NvZGU+IHRoZW4gbm8gcHJlZml4ZXMgd2lsbCBiZSB1 c2VkIGF0IGFsbC4gRGVmYXVsdDogPGNvZGU+c21kX2NhbF8sIHNtZF9jYWxfZXZfPC9jb2Rl PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgY2xh c3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIHRoZSBjYWxlbmRhciB0 YWJsZSBpdHNlbGYuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnJvd2NsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZp eCkgdG8gYXBwbHkgdG8gZWFjaCB0YWJsZSByb3cuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGxjbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFt ZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGVhY2ggdGFibGUgY2VsbC4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZW1wdHljbGFzczwv c3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRv IGFueSBjZWxscyB0aGF0IGRvbiYjODIxNzt0IGNvbnRhaW4gYSBkYXkgbnVtYmVyIChpLmUu IHRoZSBibGFuayBjZWxscyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhIG1vbnRoKS4gRGVm YXVsdDogPGNvZGU+ZW1wdHk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pmlzb3dlZWtjbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVm aXgpIHRvIGFwcGx5IHRvIGVhY2ggY2VsbCBjb250YWluaW5nIGFuIDxzcGFuIGNsYXNzPSJj YXBzIj5JU088L3NwYW4+IHdlZWsgKGlmIDxjb2RlPmlzb3dlZWtzPC9jb2RlPiBpcyB1c2Vk KS4gRGVmYXVsdDogPGNvZGU+d2VlazwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+bmF2Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJl Zml4KSB0byBhcHBseSB0byB0aGUgcHJldi9uZXh0IG1vbnRoIG5hdmlnYXRpb24gYXJyb3dz LiBJZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIHVzZWQsIHRoZSBmaXJzdCBpdGVtIHdp bGwgYmUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9uIHRoZSBsaW5rIHRvIHRoZSBwcmV2aW91 cyBtb250aCwgdGhlIDJuZCBpdGVtIHRvIHRoZSBuZXh0IG1vbnRoLiBJZiBhIHNpbmdsZSB2 YWx1ZSBpcyB1c2VkLCBib3RoIGNsYXNzIG5hbWVzIHdpbGwgYmUgdGhlIHNhbWUuIERlZmF1 bHQ6IDxjb2RlPm5hdnByZXYsIG5hdm5leHQ8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPm15Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3Mg cHJlZml4KSB0byBhcHBseSB0byBib3RoIHRoZSBtb250aCBhbmQgeWVhciBpbiB0aGUgY2Fs ZW5kYXIgaGVhZGVyIChlaXRoZXIgdGhlIDxjb2RlPiZsdDtzcGFuJmd0OzwvY29kZT4gb3Ig PGNvZGU+Jmx0O3NlbGVjdCZndDs8L2NvZGU+IHRhZ3MpLiBJZiA8Y29kZT5teXdyYXB0YWc8 L2NvZGU+IGlzIHVzZWQsIHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSB3cmFwdGFnIGlu c3RlYWQuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2 ZW50Y2xhc3Nlczwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRv IGFkZCBhcyBjbGFzc2VzIHRvIGVhY2ggZXZlbnQgKGVhY2ggcHJlZml4ZWQgd2l0aCB0aGUg ZXZlbnQgcHJlZml4KS4gSXQgZGVmYXVsdHMgdG8gPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IHNv IGl0IGFkZHMgdGhlIENhdGVnb3J5MSBhbmQgMiBuYW1lcyBhcyBjbGFzcyBpZGVudGlmaWVy cyB0byBlYWNoIGV2ZW50LiBUaHVzLCBvdXQgb2YgdGhlIGJveCwgeW91IGNhbiBzdHlsZSBl dmVudHMgYnkgY2F0ZWdvcnkuIDxkaXYgY2xhc3M9ImJyZWFrIj5JZiB5b3Ugd2lzaCB0byBl eHRlbmQgb3IgYWx0ZXIgdGhpcywganVzdCBnaXZlIGEgbGlzdCBvZiBmaWVsZHMgdGhhdCB5 b3Ugd2FudCB0byBhcHBseSB0byB0aGUgZXZlbnQgKGUuZy4gPGNvZGU+ZXZlbnRjbGFzc2Vz PSZxdW90O0lELCBBdXRob3JJRCwgY3VzdG9tXzUmcXVvdDs8L2NvZGU+IHdvdWxkIGFkZCB0 aHJlZSBjbGFzc2VzIHRvIGVhY2ggZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZXZlbnQm IzgyMTc7cyBJRCwgaXRzIGF1dGhvciAobG9naW4pIG5hbWUgYW5kIHRoZSBjb250ZW50cyBv ZiBjdXN0b21fNSkuIE9mIGNvdXJzZSwgaWYgeW91IHVzZSA8Y29kZT5jZWxscGx1czwvY29k ZT4gbW9kZSB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBjZWxsIGxldmVs LiA8L2Rpdj48ZGl2IGNsYXNzPSJicmVhayI+U29tZSBzcGVjaWFsIG5hbWVzIGV4aXN0OiA8 Y29kZT5jYXRlZ29yeTwvY29kZT4gcmV0dXJucyBib3RoIENhdGVnb3J5MSBhbmQgQ2F0ZWdv cnkyIChpZiBzZXQpOyA8Y29kZT5nY2F0PC9jb2RlPiB3aWxsIHJldHVybiB0aGUgY3VycmVu dCAmIzgyMTY7Z2xvYmFsJiM4MjE3OyBjYXRlZ29yeSAoaWYgY3VycmVudGx5IGZpbHRlcmlu ZyBieSBjYXRlZ29yeSk7IDxjb2RlPmF1dGhvcjwvY29kZT4gcmV0dXJucyB0aGUgYXV0aG9y IElEIChpZiBjdXJyZW50bHkgZmlsdGVyaW5nIGJ5IGF1dGhvcik7IDxjb2RlPnNlY3Rpb248 L2NvZGU+IGdpdmVzIHRoZSBjdXJyZW50IHNlY3Rpb248L2Rpdj48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+ZXZlbnR3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZywg d2l0aG91dCBpdHMgYnJhY2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRoLiBEZWZhdWx0 OiA8Y29kZT5zcGFuPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5teXdy YXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBicmFja2V0cywg dG8gd3JhcCBhcm91bmQgPGVtPmJvdGg8L2VtPiBtb250aCArIHllYXIgZHJvcGRvd24gc2Vs ZWN0IGxpc3RzIGFuZCBvcHRpb25hbCBzdWJtaXQgYnV0dG9uIChpdCB3cmFwcyB0aGUgbG90 LCBjb21iaW5lZCkuIERlZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJldmVu dHMiPlN0YW5kYXJkIGV2ZW50czwvaDI+CgoJPHA+Tm9ybWFsLCBlbXB0eSBjZWxscyBkb24m IzgyMTc7dCBoYXZlIGEgY2xhc3MgYXNzaWduZWQgdG8gdGhlbSB1bmxlc3MgeW91IHNwZWNp Znkgb25lIHdpdGggPGNvZGU+Y2VsbGNsYXNzPC9jb2RlPi4gQW55IGNlbGwgdGhhdCBjb250 YWlucyBhbiBldmVudCAob2YgYW55IHR5cGUpIGlzIGZpcnN0IGdpdmVuIHRoZSBmbGFnIDxj b2RlPmV2ZW50PC9jb2RlPiAocGx1cyB0aGUgY2xhc3MtbGV2ZWwgcHJlZml4KS4gSWYgdGhh dCBjZWxsIGZhbGxzIG9uIGEgaG9saWRheSwgaXQgaXMgYWxzbyBnaXZlbiB0aGUgY2xhc3Mg PGNvZGU+aG9sczwvY29kZT4uIFRoZSB2YXJpb3VzIG90aGVyIGZsYWdzIChhcyBkZXRhaWxl ZCBiZWxvdykgYXJlIHRoZW4gYWRkZWQgdG8gdGhpcyBkZXBlbmRpbmcgb24gdGhlIHNwZWNp ZmljIG5hdHVyZSBvZiB0aGUgZXZlbnQuIEluIGFkZGl0aW9uLCB0aGUgY3VycmVudCBkYXkg aXMgZ2l2ZW4gdGhlIGNsYXNzIG5hbWUgPGNvZGU+dG9kYXk8L2NvZGU+IChwbHVzIGNsYXNz IHByZWZpeCkuPC9wPgoKCTxoMiBpZD0icmVjdXIiPlJlY3VycmluZyBldmVudHM8L2gyPgoK CTxwPklmIHlvdSBoYXZlIG5vbWluYXRlZCBhbiBhcnRpY2xlIGZpZWxkIGFzIHlvdXIgPGNv ZGU+c3RlcGZpZWxkPC9jb2RlPiB5b3UgbWF5IGVudGVyIGEgY29tbWEtc2VwYXJhdGVkIGxp c3Qgb2YgZnJlcXVlbmNpZXMgYXQgd2hpY2ggdGhpcyBldmVudCBpcyB0byBiZSByZXBlYXRl ZC4gVGhlIGZvcm1hdCBvZiB0aGUgcmVwZXRpdGlvbiBpcyAmIzgyMjA7bnVtYmVyIGludGVy dmFsJiM4MjIxOywgZS5nLiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8Y29kZT4xMCBkYXlz PC9jb2RlPiBvciA8Y29kZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVnaW4gd2lsbCBkbyBp dHMgYmVzdCB0byBmaWd1cmUgb3V0IHdoYXQgeW91IG1lYW4uIENvbnN1bHQgPGEgaHJlZj0i aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3Rhci9tYW51YWwvaHRtbF9ub2RlL0RhdGUt aW5wdXQtZm9ybWF0cy5odG1sIj5kYXRlIGlucHV0IGZvcm1hdHM8L2E+IGZvciBzb21lIG1v cmUgZXhhbXBsZXMgKGxpa2UgJiM4MjIwO3RoaXJkIG1vbmRheSYjODIyMTsgYW5kIHNvIG9u KS4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoaW5ncyBsaWtlICYjODIyMDtmaXJzdCB0aHVy c2RheSYjODIyMTsgb3IgJiM4MjIwO2xhc3QgZnJpZGF5JiM4MjIxOy4gVGhlc2Ugd2lsbCBv bmx5IHNob3cgdGhlIGV2ZW50IG9uIHRoZSBnaXZlbiBmaXJzdC9sYXN0IGRheSBvZiB0aGUg bW9udGguPC9wPgoKCTxwPklmIHlvdSBjYW4gZmluZCBhIHVzZSBmb3IgaXQsIHlvdSBtYXkg c3BlY2lmeSBtdWx0aXBsZSBmcmVxdWVuY2llcywgZm9yIGV4YW1wbGUgPGNvZGU+MyBkYXlz LCAxIHdlZWs8L2NvZGU+LiBTbyB5b3Ugd291bGQgc2VlIHRoYXQgZXZlbnQgb24gdGhlIGZp cnN0IGRheSwgdGhlbiB0aGUgM3JkLCA2dGgsIDd0aCwgOXRoLCAxMnRoLCAxNHRoLCAxNXRo LCAxOHRoLCAyMXN0LCAyNHRoJiM4MjMwOyBkYXlzIHRoZXJlYWZ0ZXIuIE5vdGUgdGhhdCB0 aGUgZXZlbnQgb25seSBvY2N1cnMgb25jZSBvbiB0aGUgMjFzdCBkYXkgZXZlbiB0aG91Z2gg dGhlIHR3byBmcmVxdWVuY2llcyBjbGFzaC48L3A+CgoJPHA+VGhlIHJlcGV0aXRpb24gd2ls bCBjb250aW51ZSBmb3JldmVyIHVubGVzcyB5b3Ugc3BlY2lmeSB0aGF0IHRoZSBldmVudCBl eHBpcmVzIGJ5IHNldHRpbmcgYW4gZXhwaXJ5IHRpbWUgdW5kZXIgdGhlIGFydGljbGUmIzgy MTc7cyA8ZW0+TW9yZTwvZW0+IGFyZWEuIEVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGEgcmVj dXJyaW5nIGV2ZW50IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJlY3VyPC9jb2RlPiAo cGx1cyB0aGUgY2VsbC1sZXZlbCBjbGFzcyBwcmVmaXgpLjwvcD4KCgk8aDIgaWQ9ImNhbmNl bCI+Q2FuY2VsbGluZyBldmVudHM8L2gyPgoKCTxwPlBsYW5zIGNoYW5nZSBhbmQgeW91IG1h eSBmaW5kIHRoYXQgYSBnaWcgaGFzIHRvIGJlIGNhbmNlbGxlZCBmb3Igd2hhdGV2ZXIgcmVh c29uLiBQZXJoYXBzIHlvdSBhZHZlcnRpc2UgYSB3ZWVrbHkgYm9vdCBmYWlyIGJ1dCB0aGUg ZmllbGQgaXMgd2F0ZXJsb2dnZWQgb25lIHdlZWsuIE5vIHByb2JsZW0uIE5vbWluYXRlIGEg PGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBpbiB5b3VyIDxjb2RlPiZsdDt0eHA6c21kX2NhbGVu ZGFyIC8mZ3Q7PC9jb2RlPiB0YWcgYW5kIGVudGVyIHRoZSBkYXRlIG9mIHRoZSBjYW5jZWxs ZWQgZXZlbnQuPC9wPgoKCTxwPlVzZSBhbnkgYWNjZXB0YWJsZSBmb3JtYXQsIGJ1dCBkZXJp dmF0aXZlcyBvZiBkZC1tb250aG5hbWUteXl5eSBvciBtb250aG5hbWUtZGQteXl5eSBhcmUg dGhlIG1vc3QgdW5hbWJpZ3VvdXMgdG8gYXZvaWQgdGhlIHByb2JsZW1zIG9mIGhvdyB0aGUg cGx1Z2luIG1pZ2h0IGludGVycHJldCA8Y29kZT4xLzU8L2NvZGU+IGFzIEphbiA1dGggb3Ig TWF5IDFzdC4gWW91IGNhbiBzcGVjaWZ5IGFzIG1hbnkgY2FuY2VsbGF0aW9ucyBhcyB5b3Ug bGlrZTsgY29tbWEtc2VwYXJhdGUgZWFjaCBvbmUuPC9wPgoKCTxwPkJ5IGRlZmF1bHQgdGhl IGV2ZW50cyB3aWxsIG5vdCBhcHBlYXIgb24gdGhlIGNhbGVuZGFyLiBUaGVyZSB3aWxsIGJl IGEgY29uc3BpY3VvdXMgaG9sZSBpbiB0aGUgcmVwZXRpdGlvbiwgdGhvdWdoIHRoZSBjZWxs IGNsYXNzIHdpbGwgYmUgZmxhZ2dlZCBhcyA8Y29kZT5yZWN1cjwvY29kZT4gYW5kIDxjb2Rl PmNhbmNlbDwvY29kZT4gc28geW91IG1heSBzdHlsZSB0aGUgYm94LiBJZiB5b3Ugc3dpdGNo IDxjb2RlPnNob3dza2lwcGVkPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRoZSBldmVudCB3aWxs IGFwcGVhciBpbiB0aGUgY2VsbCBhcyBub3JtYWw7IHRoZSBzYW1lIDxjb2RlPmNhbmNlbDwv Y29kZT4gYW5kIDxjb2RlPnJlY3VyPC9jb2RlPiBjbGFzc2VzIHdpbGwgYXBwbHkgdG8gdGhl IGNlbGwgYW5kIHRoZSBldmVudCBzbyB5b3UgbWF5IHN0eWxlIG9uZSBvciBib3RoLjwvcD4K Cgk8cD5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCA8ZW0+ZXZlbnQgZmxhZ3M8L2VtPiBhbHdh eXMgdGFrZSB0aGUgJiM4MjE2O2NsYXNzJiM4MjE3OyAoMXN0KSBwcmVmaXggJiM4MjEyOyB3 aGV0aGVyIHRoZXkgYXBwZWFyIGF0IHRoZSBjbGFzcyBvciBjZWxsIGxldmVscy4gVGhpcyBp cyBzbyB5b3UgY2FuIGFwcGx5IGEgc2ltaWxhciBjb2xvdXIgdG8gdGhlIGZsYWdzIGlmIHlv dSB3aXNoIG9yIHRhcmdldCB0aGVtIHZpYSB0aGVpciB3cmFwIHRhZy4gVGhlIG9ubHkgY2xh c3NlcyB0aGF0IHRha2UgdGhlICYjODIxNjtldmVudCYjODIxNzsgKDJuZCkgcHJlZml4IGFy ZSB0aGUgZmllbGRzIHlvdSBzcGVjaWZ5IGluIDxjb2RlPmV2ZW50Y2xhc3NlczwvY29kZT4u PC9wPgoKCTxoMiBpZD0ibXVsdGkiPk11bHRpcGxlIChzcGFubmVkKSBldmVudHM8L2gyPgoK CTxwPkFueSBldmVudCB0aGF0IGhhcyBhIHN0YXJ0IGRhdGUgYW5kIGFuIGV4cGlyeSBkYXRl IHRoYXQgaXMgYSBkYXkgb3IgbW9yZSBsYXRlciwgYW5kIDxlbT5kb2VzIG5vdDwvZW0+IGhh dmUgYW55IHJlcGV0aXRpb24gc2V0IGluIGl0IDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4sIGlz IGZsYWdnZWQgYXMgYSA8Y29kZT5tdWx0aTwvY29kZT4uIEJ5IGRlZmF1bHQgdGhlIGZpcnN0 IGV2ZW50IGlzIGRpc3BsYXllZCBpbiBmdWxsIGFuZCBlYWNoICYjODIxNjtjb250aW51YXRp b24mIzgyMTc7IGV2ZW50IGlzIHNob3duIG9ubHkgYXMgYSByaWdodCBhcnJvdyBpbiBzdWJz ZXF1ZW50IGNlbGxzIChvbiBob3ZlciwgdGhlIGV2ZW50IHRpdGxlIGlzIGRpc3BsYXllZCku PC9wPgoKCTxwPkV2ZW50cyBtYXkgc3BhbiBtb250aHMgb3IgeWVhcnMgYW5kIHRoZSBwbHVn aW4gZmlndXJlcyBldmVyeXRoaW5nIG91dCB1c2luZyB0aGUgZmxhZ3M7IHRoZSBmaXJzdCBj ZWxsIG9mIGEgc3Bhbm5lZCBzZXQgaXMgYSA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiwgdGhl IGxhc3QgY2VsbCBpcyBhIDxjb2RlPm11bHRpbGFzdDwvY29kZT4sIGV2ZXJ5IG90aGVyIGNl bGwgaXMgYSA8Y29kZT5tdWx0aTwvY29kZT4gPGVtPmV4Y2VwdDwvZW0+IGlmIHRoZSBldmVu dCByb2xscyBvdmVyIGludG8gdGhlIG5leHQgbW9udGguIEluIHRoYXQgY2FzZSwgdGhlIGVu dHJ5IG9uIHRoZSAxc3Qgb2YgdGhlIG1vbnRoIGlzIGEgPGNvZGU+bXVsdGlwcmV2PC9jb2Rl PiB0byBpbmRpY2F0ZSBpdCBiZWxvbmdzIHRvIGEgcHJldmlvdXMgZXZlbnQuIElmIHRoZSBm aXJzdCBvZiB0aGUgbW9udGggaXMgaXRzZWxmIHRoZSBsYXN0IGRheSBvZiB0aGUgZXZlbnQs IHRoZSA8Y29kZT5tdWx0aXByZXY8L2NvZGU+IGlzIGRyb3BwZWQgaW4gZmF2b3VyIG9mIDxj b2RlPm11bHRpbGFzdDwvY29kZT4uPC9wPgoKCTxwPllvdSBtYXkgc3dpdGNoIG9mZiB0aGlz IGJlaGF2aW91ciBjb21wbGV0ZWx5IHdpdGggdGhlIDxjb2RlPnNob3dzcGFubmVkPSZxdW90 OzAmcXVvdDs8L2NvZGU+IGF0dHJpYnV0ZS4gRXZlbnRzIHRoYXQgaGF2ZSBhbiBleHBpcnkg YXJlIHRoZW4ganVzdCBjb21tb24gZXZlbnRzLjwvcD4KCgk8cD5Zb3UgbWF5IGVsZWN0IHRv IHByb2Nlc3MgJiM4MjE2O2NvbnRpbnVhdGlvbiYjODIxNzsgY2VsbHMgd2l0aCBhIHNlcGFy YXRlIGZvcm0gKGNhbGxlZCBhIDxjb2RlPnNwYW5mb3JtPC9jb2RlPiBiZWNhdXNlICYjODIx Njtjb250Zm9ybSYjODIxNzsgZGlkbiYjODIxNzt0IHNvdW5kIHZlcnkgbmljZSEpLiBJZiBu b3QsIHRoZSBzdGFuZGFyZCA8Y29kZT5mb3JtPC9jb2RlPiBvciBjb250YWluZXIgd2lsbCBi ZSB1c2VkIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRp ZmZlcmVudCBtdWx0aSBmbGFncyB5b3Vyc2VsZiB1c2luZyB0aGUgPGEgaHJlZj0iI2lmY2Fs Ij5jb25kaXRpb25hbCB0YWc8L2E+LjwvcD4KCgk8cD5Zb3UgY2FuIGFsc28gY2FuY2VsIGRh eXMgb2YgYSBzcGFubmVkIGV2ZW50IGluIHRoZSBzYW1lIG1hbm5lciBhcyB5b3UgZG8gd2l0 aCA8YSBocmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+LiBUaGUgY2VsbCBpcyBk dXRpZnVsbHkgZmxhZ2dlZCB3aXRoIHRoZSByZWxldmFudCAmIzgyMTY7bXVsdGkmIzgyMTc7 IGZsYWcgKyA8Y29kZT5jYW5jZWw8L2NvZGU+LiBOb3RlIHlvdSBtYXkgPGVtPm5vdDwvZW0+ IGNhbmNlbCB0aGUgZmlyc3QgZGF5IG9mIHRoZSBldmVudCwgYmVjYXVzZSB5b3UgbWlnaHQg YXMgd2VsbCBqdXN0IG1vdmUgdGhlIGV2ZW50IG9uZSBkYXkgYW5kIGFwb2xvZ2lzZSE8L3A+ CgoJPGgyIGlkPSJob2xpZGF5cyI+SG9saWRheXM8L2gyPgoKCTxwPlB1YmxpYyBob2xpZGF5 cyBuZWVkIG5vdCBiZSBhIG51aXNhbmNlIHRvIHlvdXIgcmVjdXJyaW5nIGV2ZW50cy4gR2l2 ZSB0aGUgcGx1Z2luIGEgbGlzdCBhbmQgaXQmIzgyMTc7bGwgbWFrZSBzdXJlIHRoYXQgYW55 IHJlY3VycmluZyBvciBtdWx0aSBldmVudHMgYXJlIG5vdCBzY2hlZHVsZWQgb24gdGhvc2Ug ZGF5cy4gU3RhbmRhcmQgb25lLW9mZiBldmVudHMgYXJlIHBlcm1pdHRlZCBieSBkZWZhdWx0 IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQgdG8gb3JnYW5pc2UgYSBzcGVjaWFsIGV2ZW50IG9u IHRoYXQgZGF5LjwvcD4KCgk8cD5UaGUgbGlzdCBvZiBkYXRlcyB5b3Ugc3BlY2lmeSBjYW4g YmUgZW50ZXJlZCBkaXJlY3RseSBpbiBhIHN0cmluZyBpbiB0aGUgPGNvZGU+aG9saWRheXM8 L2NvZGU+IGF0dHJpYnV0ZSBvciBpbiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8 L2NvZGU+LiBUaGUgbGF0dGVyIGlzIG1vcmUgZnVuIHNvIGxldCYjODIxNztzIHRyeSB0aGF0 OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6 dmFyaWFibGUgbmFtZT0mcXVvdDtuYXRfaG9scyZxdW90OwogICAgIHZhbHVlPSZxdW90O0Rl YyAyNSwgRGVjIDI2LCAzMS9EZWMsIEphbi0xLAogICAgICAgIE1heSA0IDIwMDksIDIwMDkt MDgtMzEmcXVvdDsgLyZndDsKJmx0O3R4cDpzbWRfY2FsZW5kYXIgaG9saWRheXM9JnF1b3Q7 dHhwdmFyOm5hdF9ob2xzJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGVyZSB5 b3UgZ28sIGFsbCBkb25lLiBUaGUgbGlzdCB0aGVyZSBzaG93cyBzb21lIG9mIHRoZSB2YXJp ZXR5IGFuZCBicmVhZHRoIG9mIGZvcm1hdHMgdGhhdCB0aGUgcGx1Z2luIGFsbG93cy4gVGhl cmUgYXJlIG1vcmUuIE5vdGUgdGhhdCBzb21lIGV2ZW50cyBoYXZlIGEgeWVhciBhbmQgb3Ro ZXJzIGRvbiYjODIxNzt0LiBUaGUgb25lcyB3aXRob3V0IGEgeWVhciBvY2N1ciBvbiB0aGUg c2FtZSBkYXRlIGV2ZXJ5IHllYXIgd2hlcmVhcyB0aGUgb25lcyB3aXRoIGEgeWVhciB3aWxs IG9ubHkgb2NjdXIgb24gdGhhdCBzcGVjaWZpYyBkYXRlLjwvcD4KCgk8cD5PbmNlIHlvdXIg ZGF0ZXMgYXJlIGRlZmluZWQgeW91IGNhbiBjb250cm9sIHdoY2ggZXZlbnRzIGFyZSBhbGxv d2VkIHRvIGZhbGwgb24gdGhvc2UgZGF0ZXMgdmlhIHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8 L2NvZGU+LiBKdWRpY2lhbCB1c2Ugb2YgdGhhdCBhdHRyaWJ1dGUgYW5kIHRoZSA8Y29kZT5z aG93c3Bhbm5lZDwvY29kZT4sIDxjb2RlPnNob3dza2lwcGVkPC9jb2RlPiBhbmQgPGNvZGU+ Zm9ybTwvY29kZT4gb3IgPGNvZGU+c3BhbmZvcm08L2NvZGU+IHdpdGggdGhlIDxhIGhyZWY9 IiNpZmNhbCI+Y29uZGl0aW9uYWwgdGFnPC9hPiBjYW4gZ2l2ZSB5b3UgYSB3aWRlIHZhcmll dHkgb2Ygd2F5cyB0byBzdHlsZSBldmVudHMuPC9wPgoKCTxwPkhvbGlkYXlzIGFyZSBnaXZl biB0aGUgZXZlbnQgZmxhZyA8Y29kZT5ob2xzPC9jb2RlPiwgYW5kIGFueSBldmVudCB0aGF0 IGlzIG5vdCBzcGVjaWZpY2FsbHkgcGVybWl0dGVkIGJ5IHRoZSA8Y29kZT5ob2xpZGF5Zmxh Z3M8L2NvZGU+IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYSA8Y29kZT5jYW5jZWw8L2Nv ZGU+IGZsYWcgaWYgaXQgZmFsbHMgb24gb25lIG9mIHRoZSBkYXlzLjwvcD4KCgk8aDIgaWQ9 InNpemVkaWZmIj5EaWZmZXJlbmNlcyBiZXR3ZWVuIGxhcmdlIGFuZCBzbWFsbCBjYWxlbmRh cnM8L2gyPgoKCTxwPk5vdCBhIGxvdCEgQnV0IHRoZXJlIGFyZSBzb21lIHN1YnRsZXRpZXM6 PC9wPgoKCTx1bD4KCQk8bGk+QnkgZGVmYXVsdCwgbm8gZXZlbnRzIGFyZSBwbGFjZWQgaW4g dGhlIHNtYWxsIGNhbGVuZGFyLiBZb3UgY2FuIGFkZCB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3 aXNoIGJlY2F1c2UgeW91IGNhbiB1c2UgdGhlIHNhbWUgZm9ybS9jb250YWluZXIgbWVjaGFu aXNtIGFzIHRoZSBsYXJnZSBjYWxlbmRhcjwvbGk+CgkJPGxpPlRoZSBvbmx5IHRoaW5nIHJl bmRlcmVkIGluIGEgc21hbGwgY2FsZW5kYXIgY2VsbCBpcyB0aGUgY2xhc3MgaW5mb3JtYXRp b24gc28geW91IGNhbiBjb2xvdXIgdGhlIGJveGVzIGJ5IGV2ZW50PC9saT4KCQk8bGk+PGNv ZGU+Y2xhc3NsZXZlbHM8L2NvZGU+IGFyZSBpZ25vcmVkOiBldmVyeXRoaW5nIGlzIGF1dG9t YXRpY2FsbHkgYXNzaWduZWQgYXQgdGhlIGNlbGwgbGV2ZWwgKDxjb2RlPmV2ZW50Y2xhc3Nl czwvY29kZT4gYXJlIHN0aWxsIGhvbm91cmVkIGlmIHlvdSB3aXNoIHRvIHVzZSBhIDxjb2Rl PmZvcm08L2NvZGU+IHRvIHByb2Nlc3MgdGhlbSB5b3Vyc2VsZik8L2xpPgoJCTxsaT5UaGUg c21hbGwgY2FsZW5kYXIgb3V0cHV0cyB5ZWFyLW1vbnRoLWRheS10aXRsZSBvciBtZXNzeSBw ZXJtbGlua3Mgb25seTwvbGk+Cgk8L3VsPgoKCTxwPkFzaWRlIGZyb20gdGhhdCB0aGV5JiM4 MjE3O3JlIHByZXR0eSBtdWNoIGlkZW50aWNhbC48L3A+CgoJPGgyIGlkPSJkYXRlcyI+RGF0 ZXMsIGdvdGNoYXMgYW5kIGlkaW9zeW5jcmFjaWVzPC9oMj4KCgk8cD5JZiB0aGVyZSB3YXMg b25lIGdsb2JhbCB0aW1lIHpvbmUgdGhlIHdvcmxkIHdvdWxkIGJlIHNpbXBsZXIuIFNhZGx5 LCB3ZSBhbGwgbGl2ZSBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCB0aGUgSW50ZXJuZXQgQmVh dCBoYXNuJiM4MjE3O3QgcmVhbGx5IHRha2VuIG9mZi4gRXZlbiBtb3JlIHNhZGx5LCBjZXJ0 YWluIHVwcGVyIGVjaGVsb25zIG9mIHBvd2VyIGRlY3JlZSB0aGF0IHR3aWNlIGEgeWVhciBz b21lIGNvdW50cmllcyBtdXN0IGFsdGVyIHRoZWlyIGNsb2NrcyB0byBTYXZlIERheWxpZ2h0 ICh3aGF0ZXZlciB0aGF0IG1lYW5zKS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gZG9lcyBpdHMgYmVzdCB0byBzaGllbGQgeW91IGZyb20gdGhpcyBtYXloZW0g YnkgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgeW91ciBsb2NhbGUsIHRpbWUgb2Zmc2V0IGZy b20gPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4sIGFuZCB3aGVuIDxzcGFuIGNsYXNz PSJjYXBzIj5EU1Q8L3NwYW4+IGFwcGxpZXMgaW4geW91ciB0aW1lIHpvbmUgKG5vdCBmb3Jn ZXR0aW5nIHRoZSB0aW1lIHpvbmUgb2YgeW91ciBzZXJ2ZXIgaWYgaXQgaGFwcGVucyB0byBi ZSBub3doZXJlIG5lYXIgeW91KS48L3A+CgoJPHA+QW5kIHRoZXJlaW4gbGllcyB0aGUgcnVi LjwvcD4KCgk8cD5Gb3IgYSBjYWxlbmRhciBzeXN0ZW0sIHRoaXMgaXMgc3ViLW9wdGltYWwu IEluIGZhY3QgaXQmIzgyMTc7cyBkb3ducmlnaHQgYW5ub3lpbmcgYmVjYXVzZSB3aGVuIHlv dSBzYXkgdGhhdCBhbiBldmVudCBpcyBnb2luZyB0byBvY2N1ciBhdCA4cG0gaW4gc2l4IG1v bnRocyYjODIxNzsgdGltZSwgcGVza3kgRGF5bGlnaHQgU2F2aW5ncyBtYXkgdGhlbiBiZSBp biBlZmZlY3QgYW5kIHlvdXIgZXZlbnQgd2lsbCBhcHBlYXIgYW4gaG91ciAmIzgyMTY7b2Zm JiM4MjE3OyAoaXQgbWF5IGxvb2sgd3JvbmcgaW4gdGhlIGFkbWluIGludGVyZmFjZSBhcyB3 ZWxsIGFzIGluIHlvdXIgY2FsZW5kYXIsIGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZ3MpLjwv cD4KCgk8cD5BbHNvLCBpZiB5b3VyIHNlcnZlciBvciB5b3VyIG9mZmljZSBpcyByZWxvY2F0 ZWQgYW5kIHlvdSBoYXZlIHRvIGFkanVzdCB0aW1lIHpvbmUsIGFsbCB5b3VyIGJlYXV0aWZ1 bGx5IGNyYWZ0ZWQgZGF0ZXMgd2lsbCBiZSBzaGlmdGVkLiBXZWxsLCB0aGV5JiM4MjE3O3Jl IG5vdCBhY3R1YWxseSBjaGFuZ2VkIGluIHRoZSBkYXRhYmFzZSB1bmxlc3MgeW91IGVkaXQg YW4gYXJ0aWNsZSBhbmQgcmUtc2F2ZSBpdCwgYnV0IHRoZXkgPGVtPmFwcGVhcjwvZW0+IHRv IGhhdmUgc2hpZnRlZCBiZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGlz IHRyeWluZyB0byBzaGllbGQgeW91IGZyb20gdGltZSBidXJlYXVjcmFjeSBpbiBhIHdvcmxk IGdvbmUgbWFkLjwvcD4KCgk8cD5VbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGxpdHRsZSB3ZSBj YW4gZG8gYWJvdXQgdGhpcyBhdCB0aGUgbW9tZW50IHVudGlsIHRoZSB3YXkgZGF0ZXMgYXJl IGhhbmRsZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaXMgY2hhbmdlZC4g QnV0IHRoZXJlIGFyZSBzb21lIHNldHRpbmdzIHRoYXQgeW91IGNhbiBwbGF5IHdpdGggdG8g dHJ5IGFuZCBtYWtlIHNlbnNlIG9mIGl0IGFsbC4gTmFtZWx5IHRoZSA8Y29kZT5nbXQ8L2Nv ZGU+IGF0dHJpYnV0ZSB0byB0aGUgY2FsZW5kYXIgcGx1Z2luIGFuZCBhbnkgb2YgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBkYXRlLWJhc2VkIHRhZ3Mgc3VjaCBh cyA8Y29kZT4mbHQ7dHhwOnBvc3RlZCAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6 ZXhwaXJlcyAvJmd0OzwvY29kZT4uIFNvbWV0aW1lcyBmaWRkbGluZyB3aXRoIHRoYXQgYW5k IHRoZSB0aW1lIHpvbmUvRFNUIGZsYWdzIHdpbGwgaGVscC4gT3RoZXIgdGltZXMgeW91JiM4 MjE3O2xsIGdldCBpbiBhIHJpZ2h0IG9sZCBtZXNzLjwvcD4KCgk8cD5JZiBhbGwgdGhhdCBm YWlscywgdGhlIGNvbmRpdGlvbmFsIHRhZyBtYXkgYmUgYWJsZSB0byBoZWxwIHlvdSBjb21w YXJlIGNlcnRhaW4gZGF0ZXMgYW5kIGFwcGx5IGRpZmZlcmVudCBhdHRyaWJ1dGVzIGRlcGVu ZGluZyBvbiB0aGUgZGF5IG9mIHRoZSB5ZWFyLiBGYWlsaW5nIHRoYXQsIGp1c3QgdXNlIDxz cGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3NwYW4+IGFuZCByZWZ1c2UgdG8gb2JzZXJ2ZSA8c3Bh biBjbGFzcz0iY2FwcyI+RFNUPC9zcGFuPiA6LSk8L3A+CgoJPGgyIGlkPSJpZmNhbCI+VGFn OiA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9jYWwmZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+VGhpcyBj b25kaXRpb25hbCB0YWcgYWxsb3dzIHlvdSAmIzgyMTI7IGluc2lkZSB5b3VyIGNvbnRhaW5l ci9mb3JtL3NwYW5mb3JtICAmIzgyMTI7IHRvIHRlc3QgY2VydGFpbiBjb25kaXRpb25zIG9m IHRoZSBjdXJyZW50IGV2ZW50L2NlbGwuIEF0IHRoZSBtb21lbnQgaXQgaXMganVzdCBmb3Ig dGVzdGluZyB0aGUgZXZlbnQgZmxhZ3MsIHRoZSBjYWxlbmRhciBJRCBvciB2YXJpb3VzIHBh cnRzIG9mIHRoZSBkYXRlLiBGb3IgZW5oYW5jZWQgY29uZGl0aW9uYWwgY2hlY2tpbmcgKHBl cmhhcHMgaW4gY29uanVuY3Rpb24gd2l0aCA8YSBocmVmPSIjY2Fsbm93IiBzdHlsZT0idGV4 dC1hbGlnbjpsZWZ0OyI+dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9hPiksIGNvbnNpZGVyIHRo ZSBzbWRfaWYgcGx1Z2luLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2lmY2Fs Ij5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mbGFn PC9zcGFuPiA6IHRoZSBmbGFnKHMpIHlvdSB3YW50IHRvIHRlc3QsIGVhY2ggc2VwYXJhdGVk IGJ5IGEgY29tbWEuIENob29zZSBmcm9tOiA8Y29kZT5ldmVudDwvY29kZT4sIDxjb2RlPnJl Y3VyPC9jb2RlPiwgPGNvZGU+bXVsdGlmaXJzdDwvY29kZT4sIDxjb2RlPm11bHRpbGFzdDwv Y29kZT4sIDxjb2RlPm11bHRpPC9jb2RlPiwgPGNvZGU+bXVsdGlwcmV2PC9jb2RlPiwgPGNv ZGU+Y2FuY2VsPC9jb2RlPiwgb3IgPGNvZGU+aG9sczwvY29kZT4uIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhbGlkPC9zcGFuPiA6IHRoZSBjYWxl bmRhciBJRCB5b3Ugd2lzaCB0byBjaGVjayBmb3IgYSBtYXRjaC4gRGVmYXVsdDogdW5zZXQ8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eWVhcjwvc3Bhbj4gOiB0aGUgeWVhciB0 aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiB0aGUgbW9udGggbnVtYmVyICgxLTEy KSB0aGF0IHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndlZWs8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgY2VsbCBm YWxscyBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ ZGF5PC9zcGFuPiA6IHRoZSBkYXkgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bG9naWM8L3NwYW4+IDog d2hldGhlciB5b3Ugd2FudCB0byBjaGVjayBpZiA8ZW0+YWxsPC9lbT4gdGVzdHMgeW91IG5v bWluYXRlZCBhcmUgdHJ1ZSBpbiB0aGUgY3VycmVudCBjZWxsICg8Y29kZT5sb2dpYz0mcXVv dDthbmQmcXVvdDs8L2NvZGU+KSBvciA8ZW0+YXQgbGVhc3Qgb25lPC9lbT4gb2YgdGhlIHRl c3RzIGlzIHRydWUgKDxjb2RlPmxvZ2ljPSZxdW90O29yJnF1b3Q7PC9jb2RlPikuIERlZmF1 bHQ6IDxjb2RlPmFuZDwvY29kZT48L2xpPgoJPC91bD4KCgk8cD5Zb3UgbWF5IGNvbWJpbmUg dGhlIHRlc3RzIHNvLCBmb3IgZXhhbXBsZSwgeW91IGNhbiBjaGVjayBpZiB0aGUgY2VsbCBp cyBvZiBhIGNlcnRhaW4gdHlwZSA8c3BhbiBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBpcyBs YXRlciB0aGFuIHRoZSAxNXRoIG9mIHRoZSBtb250aC48L3A+CgoJPHA+UnVkaW1lbnRhcnkg Y29tcGFyYXRvcnMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIDxjb2RlPnllYXI8L2NvZGU+LCA8 Y29kZT5tb250aDwvY29kZT4gYW5kIDxjb2RlPmRheTwvY29kZT4gYXR0cmlidXRlcy4gTm9y bWFsbHkgdGhlIHZhbHVlIHlvdSBzdXBwbHkgd2lsbCBiZSB0ZXN0ZWQgZm9yIGFuIGV4YWN0 IG1hdGNoIGJ1dCBpZiB5b3UgcHJlZml4IGl0IHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcg Y2hhcmFjdGVyIHNlcXVlbmNlcyB0aGVuIHRoZSBiZWhhdmlvdXIgY2hhbmdlczo8L3A+CgoJ PHVsPgoJCTxsaT48Y29kZT4mZ3Q7PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVt PmdyZWF0ZXIgdGhhbjwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT55ZWFyPSZx dW90OyZndDsyMDA4JnF1b3Q7PC9jb2RlPik8L2xpPgoJCTxsaT48Y29kZT4mZ3Q7PTwvY29k ZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5ncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG88 L2VtPiB0aGUgZ2l2ZW4gdmFsdWUgKGUuZy4gPGNvZGU+bW9udGg9JnF1b3Q7Jmd0Oz03JnF1 b3Q7PC9jb2RlPik8L2xpPgoJCTxsaT48Y29kZT4mbHQ7PC9jb2RlPiB0ZXN0cyBpZiBhdHRy aWJ1dGUgaXMgPGVtPmxlc3MgdGhhbjwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29k ZT5kYXk9JnF1b3Q7Jmx0OzE1JnF1b3Q7PC9jb2RlPik8L2xpPgoJCTxsaT48Y29kZT4mbHQ7 PTwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5sZXNzIHRoYW4gb3IgZXF1YWwg dG88L2VtPiB0aGUgZ2l2ZW4gdmFsdWUgKGUuZy4gPGNvZGU+bW9udGg9JnF1b3Q7Jmx0Oz01 JnF1b3Q7PC9jb2RlPik8L2xpPgoJCTxsaT48Y29kZT4hPC9jb2RlPiB0ZXN0cyBpZiBhdHRy aWJ1dGUgaXMgPGVtPm5vdDwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5kYXk9 JnF1b3Q7ITE1JnF1b3Q7PC9jb2RlPik8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNhbGluZm8i PlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+PC9oMj4KCgk8 cD5JbnNpZGUgeW91ciBjb250YWluZXIvZm9ybS9zcGFuZm9ybSwgdXNlIHRoaXMgdGFnIHRv IG91dHB1dCBjZXJ0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGV2ZW50Ljwv cD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbGluZm8iPkF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdGhlIHR5 cGUocykgb2YgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gcmV0dXJuLCBlYWNoIHNlcGFyYXRl ZCBieSBhIGNvbW1hLiBDaG9vc2UgZnJvbTogPGNvZGU+ZmxhZzwvY29kZT4sIDxjb2RlPnll YXI8L2NvZGU+LCA8Y29kZT5tb250aDwvY29kZT4sIDxjb2RlPndlZWs8L2NvZGU+LCA8Y29k ZT5kYXk8L2NvZGU+LCA8Y29kZT5zZWN0aW9uPC9jb2RlPiwgPGNvZGU+Y2F0ZWdvcnk8L2Nv ZGU+LCA8Y29kZT5hdXRob3I8L2NvZGU+LCA8Y29kZT5jYWxpZDwvY29kZT48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+am9pbjwvc3Bhbj4gOiB0aGUgY2hhcmFjdGVycyB5b3Ug d2FudCB0byB1c2UgdG8gc2VwYXJhdGUgZWFjaCBpdGVtIHlvdSBhc2tlZCBmb3IuIERlZmF1 bHQ6IGEgc3BhY2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aHRtbDwvc3Bhbj4g OiBJZiBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIHJldHVybnMgbm90IG9ubHkgdGhlIHZhbHVl cyB5b3Ugc3BlY2lmaWVkIGJ1dCB0aGVpciA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiB2YXJpYWJsZSBuYW1lcyBhcyB3ZWxsLCBnaXZpbmcgeW91IHRoZSBlbnRpcmUgc3RyaW5n IGFzIGEgdmFsaWQgc2V0IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhcmFt ZXRlcnMgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGFuIGFuY2hvci4gSXQgb3ZlcnJpZGVzIHRo ZSA8Y29kZT5qb2luPC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHNldHMgaXQgdG8gYW4gYW1wZXJz YW5kLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPi48ZGl2IGNsYXNzPSJicmVhayI+VGhpcyBh dHRyaWJ1dGUgaXMgdXNlZnVsIGlmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBvd24gY29udGVu dCBpbnNpZGUgZWFjaCBjZWxsIHZpYSBhIDxjb2RlPmZvcm08L2NvZGU+IGFuZCB3aXNoIHRv IG1haW50YWluIHRoZSBjdXJyZW50IHNlYXJjaCBlbnZpcm9ubWVudC4gSWYgeW91IGFsbG93 IHBlb3BsZSB0byBmaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IG9yIGF1dGhvciB5b3UgY2Fu IHVzZSB0aGlzIHRvIHJldHVybiB0aGUgJiM4MjE2O2N1cnJlbnQmIzgyMTc7IHN0YXRlIG9m IGNlcnRhaW4gdmFyaWFibGVzIHNvIHlvdSBjYW4gcGFzcyB0aGVtIHRvIHRoZSBuZXh0IHBh Z2UgYW5kIG1haW50YWluIHN0YXRlLjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5lc2NhcGU8L3NwYW4+IDogZXNjYXBlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9z cGFuPiBlbnRpdGllcyBzdWNoIGFzIDxjb2RlPiZsdDs8L2NvZGU+LCA8Y29kZT4mZ3Q7PC9j b2RlPiBhbmQgPGNvZGU+JmFtcDs8L2NvZGU+IGZvciBwYWdlIHZhbGlkYXRpb24gcHVycG9z ZXMuIFNldCB0byA8Y29kZT5lc2NhcGU9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0byB0dXJuIGl0 IG9mZi4gRGVmYXVsdDogPGNvZGU+aHRtbDwvY29kZT48L2xpPgoJPC91bD4KCgk8aDIgaWQ9 ImNhbG5vdyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9jb2RlPjwv aDI+CgoJPHA+UmV0dXJuIHRoZSBjdXJyZW50IGRhdGUvdGltZSwgZm9ybWF0dGVkIGhvd2V2 ZXIgeW91IHBsZWFzZS4gVXNlZnVsIGZvciBleHRyYWN0aW5nIHBhcnRzIG9mIHRoZSBjdXJy ZW50IHN5c3RlbSB0aW1lc3RhbXAgdG8gY29tcGFyZSB0aGluZ3MgdmlhIG90aGVyIGNvbmRp dGlvbmFsIHBsdWdpbnMgb3IgJiM4MjEyOyBldmVudHVhbGx5ICYjODIxMjsgdGhlIDxjb2Rl PiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+IHRhZy48L3A+CgoJPGgzIGNsYXNzPSJh dHRzICIgaWQ9ImF0dHNjYWxub3ciPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmZvcm1hdDwvc3Bhbj4gOiB0aGUgd2F5IHlvdSB3YW50IHRoZSBk YXRlL3RpbWUgcmVwcmVzZW50ZWQuIFVzZSBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3Vr Mi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBzdHJpbmcuIERlZmF1bHRzIHRv IHRoZSBkYXRlIGZvcm1hdCB5b3Ugc2V0IGluIEJhc2ljIFByZWZzPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmdtdDwvc3Bhbj4gOiByZXR1cm4gZWl0aGVyIGxvY2FsIHRpbWUg KDxjb2RlPjA8L2NvZGU+KSBhY2NvcmRpbmcgdG8gdGhlIHRpbWUgem9uZSBzZXQgaW4gQmFz aWMgUHJlZnMsIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3NwYW4+IHRpbWUgKDxjb2Rl PjE8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+bGFuZzwvc3Bhbj4gOiBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9z cGFuPiBsYW5ndWFnZSBjb2RlIHRoYXQgZm9ybWF0cyB0aW1lIHN0cmluZ3Mgc3VpdGFibGUg Zm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgKG9yIGxvY2FsZSkgYXMgZGVmaW5lZCBieSA8 YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT182MzkiPjxzcGFuIGNs YXNzPSJjYXBzIj5JU088L3NwYW4+IDYzOTwvYT4uIERlZmF1bHQ6IHVuc2V0IChpLmUuIHVz ZSB0aGUgdmFsdWUgYXMgc3RhdGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IHByZWZzKTwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFzcz0iZXhhbXBsZXMiPkV4YW1wbGVzPC9o Mj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxPC9oMz4KCgk8cD5UaGUgYmVhdXR5IG9mIHRo ZSBwbHVnaW4gaXMgdGhhdCB5b3UgaGF2ZSB0aGUgZW50aXJlIGFyc2VuYWwgb2YgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyBhdmFpbGFibGUgdG8geW91IGlmIHlvdSBj aG9vc2UgdG8gdXNlIGEgPGNvZGU+Zm9ybTwvY29kZT4uIFRodXMgeW91IGNhbiBzZXQgdGhl IGFydGljbGUmIzgyMTc7cyBzdGFydCBhbmQgZW5kIGRhdGVzIHRvIHRoZSBzYW1lIGRheSBh bmQgc2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIHRvIGluZGljYXRlIHRoZSBzdGFydCBh bmQgZW5kIG9mIHRoZSBldmVudC4gWW91IGNhbiB0aGVuIHVzZSBzdGFuZGFyZCA8Y29kZT4m bHQ7dHhwOnBvc3RlZCAvJmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O3R4cDpleHBpcmVzIC8m Z3Q7PC9jb2RlPiB0YWdzIHdpdGggdmFyaW91cyA8Y29kZT5mb3JtYXQ8L2NvZGU+IHN0cmlu Z3MgdG8gcmVuZGVyIHRoZSBldmVudCYjODIxNztzIGNyaXRlcmlhLjwvcD4KCgk8cD5TaW1p bGFybHkgeW91IGNhbiB1c2UgPGNvZGU+Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7PC9jb2RlPiBh bmQgPGNvZGU+Jmx0O3R4cDp0aXRsZSAvJmd0OzwvY29kZT4gb3Igb2YgY291cnNlIGFueSBj dXN0b20gZmllbGRzIHRvIHNob3cgYXMgbXVjaCBvciBhcyBsaXR0bGUgZGV0YWlsIGFzIHlv dSBsaWtlLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZs dDt0eHA6c21kX2NhbGVuZGFyIHNlY3Rpb249JnF1b3Q7ZXZlbnRzJnF1b3Q7Jmd0OwombHQ7 ZGl2Jmd0OwogICBFdmVudDogJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8m Z3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDticiAvJmd0OyZsdDt0eHA6ZXhjZXJw dCAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUmcXVvdDsm Z3Q7CiAgIFN0YXJ0OiAmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsg LyZndDsKJmx0Oy9kaXYmZ3Q7CiZsdDtkaXYgY2xhc3M9JnF1b3Q7ZXZ0aW1lJnF1b3Q7Jmd0 OwogICBFbmQ6ICZsdDt0eHA6ZXhwaXJlcyBmb3JtYXQ9JnF1b3Q7JUg6JU0mcXVvdDsgLyZn dDsKJmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9jYWxlbmRhciZndDsKPC9jb2RlPjwvcHJl PgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI8L2gzPgoKCTxwPlVzaW5nIHRoZSBjb25kaXRp b25hbCB0YWcgeW91IGNhbiB0YWtlIGFjdGlvbiBpZiBjZXJ0YWluIGV2ZW50cyBjb250YWlu IGNlcnRhaW4gZmxhZ3MuIFRoaXMgZXhhbXBsZSBhbHNvIHNob3cgYSBjb21wbGV0ZWx5IHVz ZWxlc3MgbWFubmVyIG9mIGVtcGxveWluZyA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfbm93IC8m Z3Q7PC9jb2RlPi48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2Nr Ij5UaW1lIGlzOiAmbHQ7dHhwOnNtZF9jYWxfbm93IGZvcm1hdD0mcXVvdDslVCZxdW90OyAv Jmd0OwombHQ7dHhwOnNtZF9jYWxlbmRhciBmb3JtPSZxdW90O2NlbGxmb3JtJnF1b3Q7CiAg ICAgc3RlcGZpZWxkPSZxdW90O2N1c3RvbV8zJnF1b3Q7IHNraXBmaWVsZD0mcXVvdDtjdXN0 b21fNiZxdW90OwogICAgIHNwYW5mb3JtPSZxdW90O211bHRpcyZxdW90OyAvJmd0Owo8L2Nv ZGU+PC9wcmU+CgoJPHA+SW4gZm9ybSA8Y29kZT5jZWxsZm9ybTwvY29kZT46PC9wPgoKPHBy ZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfY2Fs IGZsYWc9JnF1b3Q7cmVjdXImcXVvdDsmZ3Q7CiAgJmx0O3R4cDpwZXJtbGluayZndDsoUkVD VVJTKSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4 cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7 CiAgICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpZmlyc3QmcXVvdDsmZ3Q7 CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90O3JpZ2h0JnF1b3Q7Jmd0Oy0tJmFtcDtyYXF1 bzsmbHQ7L3NwYW4mZ3Q7CiAgICZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiZsdDsvdHhwOnNt ZF9pZl9jYWwmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5BbmQgaW4gZm9ybSA8Y29kZT5tdWx0 aXM8L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2si PiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpLCBtdWx0aXByZXYmcXVvdDsK ICAgICBsb2dpYz0mcXVvdDtvciZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDst LSZhbXA7cmFxdW87LS0mbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0Oy90eHA6c21kX2lmX2Nh bCZndDsKJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7bXVsdGlsYXN0JnF1b3Q7Jmd0 OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OwogICAgICAmbHQ7c3BhbiBjbGFzcz0mcXVvdDts ZWZ0JnF1b3Q7Jmd0OyZhbXA7cmFxdW87Jmx0Oy9zcGFuJmd0OyBFTkQgJmx0O3R4cDp0aXRs ZSAvJmd0OwogICAmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0Oy90eHA6c21kX2lmX2NhbCZn dDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGljZSB0aGF0IDxjb2RlPm11bHRpZmlyc3Q8L2Nv ZGU+IGlzIHRlc3RlZCBpbnNpZGUgdGhlIHNhbWUgZm9ybSBhcyBzdGFuZGFyZCBldmVudHMu IFRoaXMgaXMgYmVjYXVzZSBvbmx5IDxlbT5jb250aW51YXRpb24gc3Bhbm5lZCBjZWxsczwv ZW0+IGFyZSBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3JtPC9jb2RlPjsgdGhlIGZpcnN0 IGV2ZW50IG9mIGEgc3Bhbm5lZCBncm91cCBpcyBqdXN0IGxpa2UgYW55IG90aGVyIGV2ZW50 LjwvcD4KCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzPC9oMz4KCgk8cD5Zb3UgY291bGQgdXNl IHRoZSBjYWxlbmRhciB0YWdzIHRvIG91dHB1dCB2YXJpb3VzIGJpdHMgb2YgZXZlbnQgZmxh ZyBpbmZvcm1hdGlvbiB0byBidWlsZCB5b3VyIG93biBjbGFzcyBuYW1lcy4gVGhpcyBleGFt cGxlIGFsc28gZGVtb25zdHJhdGVzIHRoZSA8Y29kZT5odG1sPC9jb2RlPiBhdHRyaWJ1dGUg b2YgdGhlIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9jb2RlPiB0byBidWls ZCB1cCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGlzIHBhc3NlZCBhbG9uZyB3aXRoIGFuIGV2ZW50 JiM4MjE3O3MgPGNvZGU+Y2F0ZWdvcnkxPC9jb2RlPiB3aGVuIGEgdmlzaXRvciBjbGlja3Mg dGhlIGFuY2hvci48L3A+CgoJPHA+VGhpcyBhbGxvd3MgeW91ciBzaXRlIHZpc2l0b3JzIHRv IGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgd2hpbGUgcmV0YWluaW5nIHRoZSBhYmlsaXR5 IHRvIHNob3cgdGhlIGNhbGVuZGFyIGZvciB0aGUgY3VycmVudCBtb250aC95ZWFyIGFuZCBz ZWN0aW9uIHRoZXkgYXJlIHZpZXdpbmcgaW5zdGVhZCBvZiBkcm9wcGluZyBiYWNrIHRvIHRo ZSBjdXJyZW50IG1vbnRoL3llYXIgbGlrZSBvdGhlciBjYWxlbmRhciBzeXN0ZW1zIG9mdGVu IGRvLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0 eHA6c21kX2NhbGVuZGFyIGlzb3dlZWtzPSZxdW90O1dFRUsjJnF1b3Q7CiAgICAgeWVhcndp ZHRoPSZxdW90OzAsMiZxdW90OyBzZWxlY3Q9JnF1b3Q7eWVhciwgbW9udGgmcXVvdDsKICAg ICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsgc2tpcGZpZWxkPSZxdW90O2N1c3Rv bV8yJnF1b3Q7CiAgICAgc2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OyBleHBpcmVkPSZxdW90 OzEmcXVvdDsmZ3Q7CiAgICZsdDtzcGFuIGNsYXNzPSZxdW90O2NhbF8mbHQ7dHhwOnNtZF9j YWxfaW5mbyBqb2luPSZxdW90OyBjYWxfJnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0OwogICAgICAm bHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGlu ayZndDsKICAgICAgJmx0O2EgaHJlZj0mcXVvdDs/Yz0mbHQ7dHhwOmNhdGVnb3J5MQogICAg ICAgICAvJmd0OyZhbXA7Jmx0O3R4cDpzbWRfY2FsX2luZm8gdHlwZT0mcXVvdDtzZWN0aW9u LCB5ZWFyLAogICAgICAgICBtb250aCwgY2FsaWQmcXVvdDsgaHRtbD0mcXVvdDsxJnF1b3Q7 CiAgICAgICAgIC8mZ3Q7JnF1b3Q7Jmd0OyZsdDt0eHA6Y2F0ZWdvcnkxIHRpdGxlPSZxdW90 OzEmcXVvdDsgLyZndDsmbHQ7L2EmZ3Q7CiAgICZsdDsvc3BhbiZndDsKJmx0Oy90eHA6c21k X2NhbGVuZGFyJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+V2hhdCBpcyBhbHNvIHVzZWZ1bCBh Ym91dCB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+IHRhZyBp cyB0aGF0IGlmIGEgcGFydGljdWxhciB2YWx1ZSBpcyBub3Qgc2V0IGl0IHdpbGwgbm90IGJl IGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuPC9wPgoKCTxoMiBjbGFzcz0iY2hhbmdlbG9nIj5D aGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MjEgRGVjIDA4IHwgMC4xIHwgSW5pdGlhbCBy ZWxlYXNlIChzcG9uc29ycyBvbmx5KTwvbGk+CgkJPGxpPjIyIERlYyAwOCB8IDAuMiB8IEZp eGVkIGEgZmV3IFczQyB2YWxpZGF0aW9uIGlzc3VlcyBhbmQgYWRkZWQgbW9yZSBkYXRhIHZh bGlkaXR5IGNoZWNrcyA7IGF0dGVtcHRlZCB0byBhZGRyZXNzIGRhdGUvdGltZXpvbmUgcHJv YmxlbXMgKGFuZCBtb3N0bHkgZmFpbGVkLCBzbyB3cm90ZSBhYm91dCBpdCBpbnN0ZWFkKSA7 IGVuaGFuY2VkIDxjb2RlPnNtZF9pZl9jYWw8L2NvZGU+IHRhZyB0byBjaGVjayBmb3IgZGF0 ZXMgYW5kIDxjb2RlPmNhbGlkPC9jb2RlPiA7IGFkZGVkIDxjb2RlPmVzY2FwZTwvY29kZT4g YXR0cmlidXRlIHRvIHNtZF9jYWxfaW5mbyB0YWc8L2xpPgoJCTxsaT4yMyBEZWMgMDggfCAw LjIxIHwgQ2hhbmdlZCA8Y29kZT5pc293ZWVrczwvY29kZT4gc28gYW55IGdpdmVuIHRleHQg YmVjb21lcyB0aGUgY29sdW1uIGhlYWRpbmcgOyBhZGRlZCA8Y29kZT53ZWVrPC9jb2RlPiBh dHRyaWJ1dGUgdG8gYWxsIHJlbGV2YW50IHRhZ3MgOyBhZGRlZCA8Y29kZT5kYXk8L2NvZGU+ IGF0dHJpYnV0ZSB0byA8Y29kZT5zbWRfY2FsX2luZm88L2NvZGU+IDsgZml4ZWQgPGNvZGU+ bW9udGg8L2NvZGU+IGFuZCA8Y29kZT55ZWFyPC9jb2RlPiBhdHRyaWJ1dGVzIHNvIGNhbGVu ZGFyIG5hdmlnYXRpb24gb3ZlcnJpZGVzIHRoZW08L2xpPgoJCTxsaT4yNiBEZWMgMDggfCAw LjIyIHwgRW5oYW5jZWQgPGNvZGU+bmF2Y2xhc3M8L2NvZGU+IDsgYWRkZWQgPGNvZGU+bGlu a3Bvc3RlZDwvY29kZT4gKGJvdGggdGhhbmtzIG1yZGFsZSk8L2xpPgoJCTxsaT4yOCBEZWMg MDggfCAwLjIzIHwgQ29ycmVjdGVkIHRpbWV6b25lIG9mZnNldCBmYXV4IHBhcyA7IGFkZGVk IGZpcnN0L2xhc3Qgd2Vla2RheSByZWN1cnJlbmNlIGFuZCA8Y29kZT5yZWN1cmZvcm08L2Nv ZGU+IChhbGwgdGhhbmtzIG1yZGFsZSkgOyBmaXhlZCBtaW5pY2FsICYjODIxNjt0b2RheSYj ODIxNzsgYmVpbmcgd3JvbmdseSBzZXQ8L2xpPgoJPC91bD4KCgk8cD48L2Rpdj48L3A+Cjwh LS0gLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3Mi Pgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250 LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwg bW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUu YmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJh Y2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEw cHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxpbmssICNzbWRfaGVscCBh OnZpc2l0ZWQgeyBjb2xvcjogIzAwYzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXIt Ym90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxw IGE6aG92ZXIsICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29y YXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJv dHRvbToxcHg7fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21k X2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBw eCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0K I3NtZF9oZWxwIGgzIHsgY29sb3I6ICMwNzk7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRy YW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9o ZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3Bh Y2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNl OyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0K I3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAj OTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRl cjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0 LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2NvbG9yOnJlZDt9 CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAg LmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJ TiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJjNTNjZmU0YmJjOTVmMDFjZmVhMzRk NDAxMjc1NDJjOCI7fQ==