# Name: rss_live_search v0.7 # Type: Client side plugin # Live search. # Author: Rob Sable # URL: http://www.wilshireone.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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE1OiJyc3NfbGl2ZV9zZWFyY2giO3M6NjoiYXV0aG9yIjtz Ojk6IlJvYiBTYWJsZSI7czoxMDoiYXV0aG9yX3VyaSI7czoyNzoiaHR0cDovL3d3dy53aWxz aGlyZW9uZS5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC43IjtzOjExOiJkZXNjcmlwdGlv biI7czoxMjoiTGl2ZSBzZWFyY2guIjtzOjQ6ImNvZGUiO3M6MTQyNDQ6Ii8qDQpyc3NfbGl2 ZV9zZWFyY2ggcGx1Z2luIGZvciBUZXh0cGF0dGVybg0KICAgIDxVUkw6IGh0dHA6Ly93d3cu d2lsc2hpcmVvbmUuY29tL3RleHRwYXR0ZXJuLXBsdWdpbnMvcnNzLWxpdmUtc2VhcmNoPg0K YmFzZWQgb24gTGl2ZVNlYXJjaCBFeHRlbnNpb24gZm9yIFRleHRwYXR0ZXJuLCBNYXJrdXMg S25pZWJlcw0KCQk8VVJMOiBtYWlsdG86bWtAa25pZWJlcy5uZXQ+DQpiYXNlZCBvbiBCaXRG bHV4IExpdmVTZWFyY2ggU29sdXRpb24NCgkJPFVSTDogaHR0cDovL2Jsb2c0LmJpdGZsdXgu Y2gvd2lraS9MaXZlU2VhcmNoPg0KKi8NCg0KZnVuY3Rpb24gcnNzX2xpdmVfc2VhcmNoX2pz KCkgew0KCXJldHVybiAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy5o dS4nP2ZpbGU9bGl2ZXNlYXJjaCI+PC9zY3JpcHQ+JzsNCn0NCg0KZnVuY3Rpb24gcnNzX2xp dmVfc2VhcmNoKCRhdHRzKSB7DQoNCiAgZXh0cmFjdChsQXR0cyhhcnJheSgNCiAgICAnbWF4 JyAgICAgICAgPT4gMjAsDQogICAgJ2V4Y2VycHRzJyA9PiAnMCcsDQogICAgJ2xhYmVsJyA9 PiAnTGl2ZXN1Y2hlOiAnLA0KICAgICdub3Rmb3VuZCcgPT4gJ0tlaW5lIFRyZWZlciBnZWZ1 bmRlbi4nLA0KICAgICdzZWFyY2h0bycgPT4gJycsDQogICAgJ2F1dG9jb21wbGV0ZW9mZicg PT4gJzAnLA0KICAgICdzaG93c2VjdGlvbicgPT4gJzAnLA0KICAgICdzaG93ZGF0ZScgPT4g JzAnLA0KICAgICdmb3JtJyA9PiAnJywNCiAgICAnaW5wdXR2YWx1ZScgPT4gJycsDQogICAg J2lucHV0c2l6ZScgPT4gJzIwJywNCiAgICAnc2hvd2J1dHRvbicgPT4gJzAnLA0KICAgICdi dXR0b252YWwnID0+ICdTdWJtaXQnLA0KICAgICdkYXRlZm9ybWF0JyA9PiAiJUIgJWQsICVZ IiwNCiAgKSwkYXR0cykpOw0KDQoJaWYgKHRyaW0oZ3BzKCdscycpKSAhPSAiIikgew0KCQkk cSA9IGdwcygnbHMnKTsNCg0KCQkkc19maWx0ZXIgPSAiIjsNCgkJJHJzID0gc2FmZV9jb2x1 bW4oIm5hbWUiLCAidHhwX3NlY3Rpb24iLCAic2VhcmNoYWJsZSAhPSAnMSciKTsNCgkJaWYg KCRycykgew0KCQkJZm9yZWFjaCgkcnMgYXMgJG5hbWUpICRmaWx0ZXJzW10gPSAiYW5kIFNl Y3Rpb24gIT0gJyRuYW1lJyI7DQoJCQkkc19maWx0ZXIgPSAgam9pbignICcsJGZpbHRlcnMp Ow0KCQl9DQoNCgkJb2Jfc3RhcnQoKTsNCgkJaGVhZGVyKCAiQ29udGVudC1UeXBlOiB0ZXh0 L3htbCIgKTsNCgkJcHJpbnQgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ3V0 Zi04XCcgID8+JzsNCg0KCQkkd2hlcmUgPSAiKFRpdGxlIHJsaWtlICckcScgb3IgQm9keSBy bGlrZSAnJHEnKSAkc19maWx0ZXIgYW5kIChTdGF0dXMgPSA0IG9yIFN0YXR1cyA9IDUpIGFu ZCBQb3N0ZWQgPD1ub3coKSBvcmRlciBieSBzY29yZSBkZXNjIGxpbWl0ICRtYXgiOw0KDQoJ CSRycyA9IHNhZmVfcm93cygiKiwgdW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVk LCBtYXRjaCAoVGl0bGUsQm9keSkgYWdhaW5zdCAoJyRxJykgYXMgc2NvcmUiLCAidGV4dHBh dHRlcm4iLCAkd2hlcmUpOw0KCQkkcmVzdWx0X3Jvd3MgPSBjb3VudCgkcnMpOw0KDQoJCWlm ICgkZm9ybSkgew0KCQkJaWYgKCRycykgew0KCQkJCSRvID0gYXJyYXkoKTsNCgkJCQkkb1td ID0gJzxkaXYgaWQ9IkxTUmVzIj4nOw0KCQkJCWZvcmVhY2goJHJzIGFzICRhKSB7DQoJCQkJ CWV4dHJhY3QoJGEpOw0KCQkJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRhKTsNCgkJCQkJJGFy dGljbGUgPSBmZXRjaCgnRm9ybScsICd0eHBfZm9ybScsICduYW1lJywgJGZvcm0pOw0KCQkJ CQkkb1tdID0gJzxkaXYgY2xhc3M9IkxTUm93Ij4nLnBhcnNlKCRhcnRpY2xlKS4nPC9kaXY+ JzsNCgkJCQkJdW5zZXQoJEdMT0JBTFNbJ3RoaXNhcnRpY2xlJ10pOw0KCQkJCX0NCgkJCQkk b1tdID0gJzwvZGl2Pic7DQoJCQl9IGVsc2Ugew0KCQkJJG9bXSA9ICRub3Rmb3VuZDsNCgkJ CX0NCgkJCXByaW50IChpc19hcnJheSgkbykpID8gaW1wbG9kZSggIiIsICRvICkgOiAnJzsN CgkJCWV4aXQ7DQoJCX0NCg0KCQlpZiggJHJzICkgew0KCQkJCSRvID0gYXJyYXkoKTsNCgkJ CQkkb1tdID0gJzxkaXYgaWQ9IkxTUmVzIj4nOw0KCQkJCWZvcmVhY2goJHJzIGFzICRhKSB7 DQoJCQkJCQlleHRyYWN0KCRhKTsNCgkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJGEpOw0K CQkJCQkJJGh1cmwgPSBwZXJtbGlua3VybCgkYSk7DQoNCgkJCQkJCWlmKCAkZXhjZXJwdHMg KSB7DQoJCQkJCQkJCSRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoIi8+XHMqPC8iLCI+IDwiLCRC b2R5X2h0bWwpOw0KCQkJCQkJCQlwcmVnX21hdGNoX2FsbCgiL1xzLnswLDUwfSIuJHEuIi57 MCw1MH1ccy9pIiwkcmVzdWx0LCRjb25jYXQpOw0KCQkJCQkJCQkkY29uY2F0ID0gaW1wbG9k ZSgiIC4uLiAiLCRjb25jYXRbMF0pOw0KCQkJCQkJCQkkY29uY2F0ID0gc3RyaXBfdGFncygk Y29uY2F0KTsNCgkJCQkJCQkJJGNvbmNhdCA9IHByZWdfcmVwbGFjZSgnL15bXj5dKz4vVScs IiIsJGNvbmNhdCk7DQoJCQkJCQkJCSRjb25jYXQgPSBwcmVnX3JlcGxhY2UoIi8oJHEpL2ki LCI8c3Ryb25nPiQxPC9zdHJvbmc+IiwkY29uY2F0KTsNCgkJCQkJCQkJJHJlc3VsdF9leGNl cnB0ID0gKCRjb25jYXQpID8gIi4uLiAiLiRjb25jYXQuIiAuLi4iIDogJyc7DQoJCQkJCQkJ CSRUaXRsZSA9ICc8c3Ryb25nPicuJFRpdGxlLic8L3N0cm9uZz4nOw0KCQkJCQkJfQ0KCQkJ CQkJJHNkID0gKCRzaG93c2VjdGlvbikgPyAnPHNwYW4gY2xhc3M9ImxzU2VjdGlvbiI+Jy4k U2VjdGlvbi4nPC9zcGFuPicgOiAnJzsNCgkJCQkJCSRzZC49ICgkc2hvd2RhdGUpID8gJzxz cGFuIGNsYXNzPSJsc0RhdGUiPicuc3RyZnRpbWUoJGRhdGVmb3JtYXQsJHVQb3N0ZWQpLic8 L3NwYW4+JyA6ICcnOw0KCQkJCQkJJG9bXSA9ICc8ZGl2IGNsYXNzPSJMU1JvdyI+PGEgaHJl Zj0iJy4kaHVybC4nIj4nLiRUaXRsZS4nPC9hPicuJHNkLic8L2Rpdj4nOw0KCQkJCQkJaWYo ICRleGNlcnB0cyApIHsNCgkJCQkJCQkJJG9bXSA9ICc8YnIgLz4nOw0KCQkJCQkJCQkkb1td ID0gJHJlc3VsdF9leGNlcnB0Ow0KCQkJCQkJfQ0KCQkJCX0NCgkJCQkkb1tdID0gJzwvZGl2 Pic7DQoJCX0gZWxzZSB7DQoJCQkkb1tdID0gJG5vdGZvdW5kOw0KCQl9DQoJCXByaW50IChp c19hcnJheSgkbykpID8gaW1wbG9kZSggIiIsICRvICkgOiAnJzsNCgkJZXhpdDsNCgl9DQoN CgkkYWMgPSAoJGF1dG9jb21wbGV0ZW9mZikgPyAnYXV0b2NvbXBsZXRlPSJvZmYiICcgOiAn JzsNCg0KCWlmICgkaW5wdXR2YWx1ZSAhPSAiIikgew0KCQkkaW5wdXQgPSAnDQoJCTxpbnB1 dCBpZD0ibGl2ZXNlYXJjaCIgbmFtZT0icSIgdmFsdWU9IicuJGlucHV0dmFsdWUuJyIgb25r ZXlwcmVzcz0ibGl2ZVNlYXJjaFN0YXJ0KCkiDQoJCXNpemU9IicuJGlucHV0c2l6ZS4nIiBv bmJsdXI9ImlmICh0aGlzLnZhbHVlID09IFwnXCcpIHt0aGlzLnZhbHVlID0gXCcnLiRpbnB1 dHZhbHVlLidcJzt9Ig0KCQlvbmZvY3VzPSJpZiAodGhpcy52YWx1ZSA9PSBcJycuJGlucHV0 dmFsdWUuJ1wnKSB7dGhpcy52YWx1ZSA9IFwnXCc7fSIgJy4kYWMuJyAvPic7DQoJfSBlbHNl IHsNCgkJJGlucHV0ID0gJzxpbnB1dCBpZD0ibGl2ZXNlYXJjaCIgbmFtZT0icSIgb25rZXlw cmVzcz0ibGl2ZVNlYXJjaFN0YXJ0KCkiIHNpemU9IicuJGlucHV0c2l6ZS4nIiAnLiRhYy4n IC8+JzsNCgl9DQoNCgkkc2J0biA9ICgkc2hvd2J1dHRvbikgPyAnPGlucHV0IHR5cGU9InN1 Ym1pdCIgaWQ9ImxpdmVzZWFyY2hzdWJtaXQiIHZhbHVlPSInLiRidXR0b252YWwuJyIgLz4n IDogJyc7DQoNCglyZXR1cm4gJzxmb3JtIGlkPSJzZWFyY2hmb3JtIiBtZXRob2Q9ImdldCIg YWN0aW9uPSInLmh1LiRzZWFyY2h0by4nIiBvbnN1Ym1pdD0icmV0dXJuIGxpdmVTZWFyY2hT dWJtaXQoKSI+DQoJCQkJCTxmaWVsZHNldD4NCgkJCQkJPGxhYmVsPicuJGxhYmVsLiRpbnB1 dC4nPC9sYWJlbD4nLiRzYnRuLic8YnIvPg0KCQkJCQk8L2ZpZWxkc2V0Pg0KCQkJCQk8ZGl2 IGlkPSJMU1Jlc3VsdCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48ZGl2IGlkPSJMU1NoYWRv dyI+PC9kaXY+PC9kaXY+DQoJCQkJPC9mb3JtPic7DQp9DQoNCmlmIChncHMoJ2ZpbGUnKSA9 PSAnbGl2ZXNlYXJjaCcpIHsNCmdsb2JhbCAkcGZyOw0KZWNobyA8PDxFT0YNCi8qDQovLyAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsNCi8vIHwgQ29weXJpZ2h0IChjKSAyMDA0IEJpdGZsdXggR21i SCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLy8gKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rDQovLyB8IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgIHwNCi8vIHwgeW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAg fA0KLy8gfCBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8DQovLyB8IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s aWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi8vIHwg VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0 aW5nLCBzb2Z0d2FyZSAgfA0KLy8gfCBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICB8DQovLyB8IFdJVEhPVVQg V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv ciAgICAgIHwNCi8vIHwgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nICAgICAgICAgfA0KLy8gfCBwZXJtaXNzaW9ucyBhbmQg bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICB8 DQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi8vIHwgQXV0aG9yOiBCaXRmbHV4IEdtYkggPGRl dmVsQGJpdGZsdXguY2g+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLy8gKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rDQoqLw0KdmFyIGxpdmVTZWFyY2hSZXEgPSBmYWxzZTsNCnZhciB0 ID0gbnVsbDsNCnZhciBsaXZlU2VhcmNoTGFzdCA9ICIiOw0KdmFyIGlzSUUgPSBmYWxzZTsN Ci8vIG9uICFJRSB3ZSBvbmx5IGhhdmUgdG8gaW5pdGlhbGl6ZSBpdCBvbmNlDQppZiAod2lu ZG93LlhNTEh0dHBSZXF1ZXN0KSB7DQoJbGl2ZVNlYXJjaFJlcSA9IG5ldyBYTUxIdHRwUmVx dWVzdCgpOw0KfQ0KZnVuY3Rpb24gbGl2ZVNlYXJjaEluaXQoKSB7DQoNCgkvLyBUdXJucyBv ZmYgYXV0b2NvbXBsZXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50DQoJdmFyIHNlYXJjaElucHV0 ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpdmVzZWFyY2gnKTsNCglpZiggc2VhcmNo SW5wdXQgPT0gbnVsbCApIHJldHVybjsNCglzZWFyY2hJbnB1dC5zZXRBdHRyaWJ1dGUoJ2F1 dG9jb21wbGV0ZScsICdvZmYnKTsNCg0KCWlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4 T2YoIlNhZmFyaSIpID4gMCkgew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGl2ZXNl YXJjaCcpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGxpdmVTZWFyY2hLZXlQcmVzcyxm YWxzZSk7DQoJfSBlbHNlIGlmIChuYXZpZ2F0b3IucHJvZHVjdCA9PSAiR2Vja28iKSB7DQoJ CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaXZlc2VhcmNoJykuYWRkRXZlbnRMaXN0ZW5l cigia2V5cHJlc3MiLGxpdmVTZWFyY2hLZXlQcmVzcyxmYWxzZSk7DQoJfSBlbHNlIHsNCgkJ ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpdmVzZWFyY2gnKS5hdHRhY2hFdmVudCgnb25r ZXlkb3duJyxsaXZlU2VhcmNoS2V5UHJlc3MpOw0KCQlpc0lFID0gdHJ1ZTsNCgl9DQp9DQpm dW5jdGlvbiBsaXZlU2VhcmNoS2V5UHJlc3MoZXZlbnQpIHsNCglpZiAoZXZlbnQua2V5Q29k ZSA9PSA0MCApDQoJLy9LRVkgRE9XTg0KCXsNCgkJaGlnaGxpZ2h0ID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoIkxTSGlnaGxpZ2h0Iik7DQoJCWlmICghaGlnaGxpZ2h0KSB7DQoJCQl0 cnkgew0KCQkJaGlnaGxpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxTUmVzIiku Zmlyc3RDaGlsZDsNCgkJCX0gY2F0Y2ggKGV4Y2VwdGlvbikgeyB9DQoJCX0gZWxzZSB7DQoJ CQloaWdobGlnaHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOw0KCQkJaGlnaGxpZ2h0ID0gaGln aGxpZ2h0Lm5leHRTaWJsaW5nOw0KCQl9DQoJCWlmIChoaWdobGlnaHQpIHsNCgkJCWhpZ2hs aWdodC5zZXRBdHRyaWJ1dGUoImlkIiwiTFNIaWdobGlnaHQiKTsNCgkJfQ0KCQlpZiAoIWlz SUUpIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgfQ0KCX0NCgkvL0tFWSBVUA0KCWVsc2Ug aWYgKGV2ZW50LmtleUNvZGUgPT0gMzggKSB7DQoJCWhpZ2hsaWdodCA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCJMU0hpZ2hsaWdodCIpOw0KCQlpZiAoIWhpZ2hsaWdodCkgew0KCQkJ dHJ5IHsNCgkJCWhpZ2hsaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMU1JlcyIp Lmxhc3RDaGlsZDsNCgkJCX0gY2F0Y2ggKGV4Y2VwdGlvbikge30NCgkJfQ0KCQllbHNlIHsN CgkJCWhpZ2hsaWdodC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7DQoJCQloaWdobGlnaHQgPSBo aWdobGlnaHQucHJldmlvdXNTaWJsaW5nOw0KCQl9DQoJCWlmIChoaWdobGlnaHQpIHsNCgkJ CQloaWdobGlnaHQuc2V0QXR0cmlidXRlKCJpZCIsIkxTSGlnaGxpZ2h0Iik7DQoJCX0NCgkJ aWYgKCFpc0lFKSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH0NCgl9DQoJLy9FU0MNCgll bHNlIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7DQoJCWhpZ2hsaWdodCA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCJMU0hpZ2hsaWdodCIpOw0KCQlpZiAoaGlnaGxpZ2h0KSB7DQoJ CQloaWdobGlnaHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOw0KCQl9DQoJCWRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCJMU1Jlc3VsdCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoJCWRv Y3VtZW50LmZvcm1zLnNlYXJjaGZvcm0ucS52YWx1ZSA9ICcnOw0KCX0NCgkvL0VOVEVSDQoJ ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSAxMykgew0KCQlsaXZlU2VhcmNoU3VibWl0KCk7 DQoJfQ0KDQp9DQpmdW5jdGlvbiBjbG9zZUxpdmVTZWFyY2goKSB7DQoJaGlnaGxpZ2h0ID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxTSGlnaGxpZ2h0Iik7DQoJaWYgKGhpZ2hsaWdo dCkgew0KCQloaWdobGlnaHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOw0KCX0NCglkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgiTFNSZXN1bHQiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0K CWRvY3VtZW50LmZvcm1zLnNlYXJjaGZvcm0ucS52YWx1ZSA9ICcnOw0KfQ0KZnVuY3Rpb24g bGl2ZVNlYXJjaFN0YXJ0KCkgew0KCWlmICh0KSB7IHdpbmRvdy5jbGVhclRpbWVvdXQodCk7 IH0NCgl0ID0gd2luZG93LnNldFRpbWVvdXQoImxpdmVTZWFyY2hEb1NlYXJjaCgpIiwyMDAp Ow0KfQ0KZnVuY3Rpb24gbGl2ZVNlYXJjaERvU2VhcmNoKCkgew0KCWlmIChsaXZlU2VhcmNo TGFzdCAhPSBkb2N1bWVudC5mb3Jtcy5zZWFyY2hmb3JtLnEudmFsdWUpIHsNCglpZiAobGl2 ZVNlYXJjaFJlcSAmJiBsaXZlU2VhcmNoUmVxLnJlYWR5U3RhdGUgPCA0KSB7DQoJCWxpdmVT ZWFyY2hSZXEuYWJvcnQoKTsNCgl9DQoJaWYgKCBzZWFyY2hUcmltQWxsKGRvY3VtZW50LmZv cm1zLnNlYXJjaGZvcm0ucS52YWx1ZSkgPT0gIiIpIHsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoIkxTUmVzdWx0Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgkJaGlnaGxpZ2h0 ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxTSGlnaGxpZ2h0Iik7DQoJCWlmIChoaWdo bGlnaHQpIHsNCgkJCWhpZ2hsaWdodC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7DQoJCX0NCgkJ cmV0dXJuIGZhbHNlOw0KCX0NCglpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7DQoJLy8g YnJhbmNoIGZvciBJRS9XaW5kb3dzIEFjdGl2ZVggdmVyc2lvbg0KCQlsaXZlU2VhcmNoUmVx ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQoJfSBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9i amVjdCkgew0KCQlsaXZlU2VhcmNoUmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29m dC5YTUxIVFRQIik7DQoJfQ0KCWxpdmVTZWFyY2hSZXEub25yZWFkeXN0YXRlY2hhbmdlPSBs aXZlU2VhcmNoUHJvY2Vzc1JlcUNoYW5nZTsNCglsaXZlU2VhcmNoUmVxLm9wZW4oIkdFVCIs ICINCkVPRjsNCg0KZWNobyAkcGZyOw0KDQplY2hvIDw8PEVPRg0KP2xzPSIgKyBkb2N1bWVu dC5mb3Jtcy5zZWFyY2hmb3JtLnEudmFsdWUpOw0KCWxpdmVTZWFyY2hMYXN0ID0gZG9jdW1l bnQuZm9ybXMuc2VhcmNoZm9ybS5xLnZhbHVlOw0KCWxpdmVTZWFyY2hSZXEuc2VuZChudWxs KTsNCgl9DQp9DQpmdW5jdGlvbiBsaXZlU2VhcmNoUHJvY2Vzc1JlcUNoYW5nZSgpIHsNCglp ZiAobGl2ZVNlYXJjaFJlcS5yZWFkeVN0YXRlID09IDQpIHsNCgkJdmFyIHJlcyA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCJMU1Jlc3VsdCIpOw0KCQlyZXMuc3R5bGUuZGlzcGxheSA9 ICJibG9jayI7DQoJCXJlcy5maXJzdENoaWxkLmlubmVySFRNTCA9ICc8ZGl2IGlkPSJMU0hl YWRlciI+PGRpdiBzdHlsZT0iZmxvYXQ6bGVmdDsiPnVzZSBhcnJvdyBrZXlzICZhbXA7IGVu dGVyPC9kaXY+PGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48YSBocmVmPSJqYXZhc2NyaXB0 Oi8vIiB0aXRsZT0iQ2xvc2UgcmVzdWx0cyIgb25jbGljaz0iY2xvc2VMaXZlU2VhcmNoKCki PmNsb3NlIChlc2MpPC9hPjwvZGl2PjxiciAvPjwvZGl2PicrbGl2ZVNlYXJjaFJlcS5yZXNw b25zZVRleHQ7Ly87DQoJfQ0KfQ0KZnVuY3Rpb24gbGl2ZVNlYXJjaFN1Ym1pdCgpIHsNCgl2 YXIgaGlnaGxpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxTSGlnaGxpZ2h0Iik7 DQoJaWYgKGhpZ2hsaWdodCAmJiBoaWdobGlnaHQuZmlyc3RDaGlsZCkgew0KCQl3aW5kb3cu bG9jYXRpb24gPSBoaWdobGlnaHQuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsN CgkJcmV0dXJuIGZhbHNlOw0KCX0gZWxzZSB7DQoJCXZhciBzZWFyY2hJbnB1dCA9IGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2hmb3JtJyk7DQoJICBzZWFyY2hJbnB1dC5zdWJt aXQoKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0NCg0KZnVuY3Rpb24gbGl2ZVNlYXJjaEJ5 Q29udGV4dCh0aGVsaW5rLHRoZVRleHQpIHsNCnZhciBzZWFyY2hUZXJtID0gdGhlVGV4dDsN CglpZiAobGl2ZVNlYXJjaExhc3QgIT0gc2VhcmNoVGVybSkgew0KCWlmIChsaXZlU2VhcmNo UmVxICYmIGxpdmVTZWFyY2hSZXEucmVhZHlTdGF0ZSA8IDQpIHsNCgkJbGl2ZVNlYXJjaFJl cS5hYm9ydCgpOw0KCX0NCg0KCWlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsNCgkvLyBi cmFuY2ggZm9yIElFL1dpbmRvd3MgQWN0aXZlWCB2ZXJzaW9uDQoJCWxpdmVTZWFyY2hSZXEg PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCgl9IGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2Jq ZWN0KSB7DQoJCWxpdmVTZWFyY2hSZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0 LlhNTEhUVFAiKTsNCgl9DQoJbGl2ZVNlYXJjaFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVu Y3Rpb24oKSB7DQoJaWYgKGxpdmVTZWFyY2hSZXEucmVhZHlTdGF0ZSA9PSA0KSB7DQoJCXZh ciBuZXdEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCgkJbmV3RGl2Lmlk ID0gJ2xpdmVMaW5rUmVzJzsNCgkJbmV3RGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoJ CW5ld0Rpdi5pbm5lckhUTUwgPSAnPGRpdiBpZD0ibGl2ZUxpbmtIZWFkIj48ZGl2IHN0eWxl PSJmbG9hdDpsZWZ0OyI+Jm5ic3A7PC9kaXY+PGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48 YSBocmVmPSJqYXZhc2NyaXB0Oi8vIiB0aXRsZT0iQ2xvc2UgcmVzdWx0cyIgb25jbGljaz0i Y2xvc2VMaXZlTGluaygpIj5beF08L2E+PC9kaXY+PGJyIC8+PC9kaXY+JytsaXZlU2VhcmNo UmVxLnJlc3BvbnNlVGV4dDsvLzsNCgkJbmV3RGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2sn Ow0KDQoJCW15UmVzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoZVRleHQrIi1saXZlbGlu ayIpOw0KCQlteVJlcy5hcHBlbmRDaGlsZChuZXdEaXYpOw0KCQlteUJsYW5rPWRvY3VtZW50 LmNyZWF0ZVRleHROb2RlKCIiKTsNCgkJbXlSZXMuaW5zZXJ0QmVmb3JlKG15QmxhbmssbmV3 RGl2KTsNCgl9DQogfQ0KCWxpdmVTZWFyY2hSZXEub3BlbigiR0VUIiwgIg0KRU9GOw0KDQpl Y2hvICRwZnI7DQoNCmVjaG8gPDw8RU9GDQo/bHM9IiArIHNlYXJjaFRlcm0pOw0KCWxpdmVT ZWFyY2hMYXN0ID0gc2VhcmNoVGVybTsNCglsaXZlU2VhcmNoUmVxLnNlbmQobnVsbCk7DQoJ fSBlbHNlIHsNCgkJY2xvc2VMaXZlTGluaygpOw0KCX0NCn0NCg0KZnVuY3Rpb24gc2VhcmNo VHJpbUFsbChzU3RyaW5nKSB7DQoJd2hpbGUgKHNTdHJpbmcuc3Vic3RyaW5nKDAsMSkgPT0g JyAnKSB7DQoJCXNTdHJpbmcgPSBzU3RyaW5nLnN1YnN0cmluZygxLCBzU3RyaW5nLmxlbmd0 aCk7DQoJfQ0KCXdoaWxlIChzU3RyaW5nLnN1YnN0cmluZyhzU3RyaW5nLmxlbmd0aC0xLCBz U3RyaW5nLmxlbmd0aCkgPT0gJyAnKSB7DQoJCXNTdHJpbmcgPSBzU3RyaW5nLnN1YnN0cmlu ZygwLHNTdHJpbmcubGVuZ3RoLTEpOw0KCX0NCglyZXR1cm4gc1N0cmluZzsNCn0NCg0KZnVu Y3Rpb24gY2xvc2VMaXZlTGluaygpIHsNCglsaXZlU2VhcmNoTGFzdCA9ICIiOw0KCWhpZ2hs aWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMU0hpZ2hsaWdodCIpOw0KCWlmICho aWdobGlnaHQpIHsNCgkJaGlnaGxpZ2h0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsNCgl9DQoJ ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVMaW5rUmVzIikuc3R5bGUuZGlzcGxheSA9 ICJub25lIjsNCn0NCg0KLyoNCiAqIChjKTIwMDYgRGVhbiBFZHdhcmRzL01hdHRoaWFzIE1p bGxlci9Kb2huIFJlc2lnDQogKiBTcGVjaWFsIHRoYW5rcyB0byBEYW4gV2ViYidzIGRvbXJl YWR5LmpzIFByb3RvdHlwZSBleHRlbnNpb24NCiAqIGFuZCBTaW1vbiBXaWxsaXNvbidzIGFk ZExvYWRFdmVudA0KICoNCiAqIEZvciBtb3JlIGluZm8sIHNlZToNCiAqIGh0dHA6Ly9kZWFu LmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wNi9hZ2Fpbi8NCiAqIGh0dHA6Ly93d3cudml2 YWJpdC5jb20vYm9sbG9ja3MvMjAwNi8wNi8yMS9hLWRvbS1yZWFkeS1leHRlbnNpb24tZm9y LXByb3RvdHlwZQ0KICogaHR0cDovL3NpbW9uLmluY3V0aW8uY29tL2FyY2hpdmUvMjAwNC8w NS8yNi9hZGRMb2FkRXZlbnQNCiAqDQogKiBUaHJvd24gdG9nZXRoZXIgYnkgSmVzc2UgU2tp bm5lciAoaHR0cDovL3d3dy50aGVmdXR1cmVvZnRoZXdlYi5jb20vKQ0KICoNCiAqDQogKiBU byB1c2U6IGNhbGwgYWRkRE9NTG9hZEV2ZW50IG9uZSBvciBtb3JlIHRpbWVzIHdpdGggZnVu Y3Rpb25zLCBpZToNCiAqDQogKiAgICBmdW5jdGlvbiBzb21ldGhpbmcoKSB7DQogKiAgICAg ICAvLyBkbyBzb21ldGhpbmcNCiAqICAgIH0NCiAqICAgIGFkZERPTUxvYWRFdmVudChzb21l dGhpbmcpOw0KICoNCiAqICAgIGFkZERPTUxvYWRFdmVudChmdW5jdGlvbigpIHsNCiAqICAg ICAgICAvLyBkbyBvdGhlciBzdHVmZg0KICogICAgfSk7DQogKg0KICovDQoNCmZ1bmN0aW9u IGFkZERPTUxvYWRFdmVudChmdW5jKSB7DQogICBpZiAoIXdpbmRvdy5fX2xvYWRfZXZlbnRz KSB7DQogICAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAvLyBxdWl0 IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQNCiAgICAgICAgICBp ZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lKSByZXR1cm47DQoNCiAgICAgICAgICAvLyBmbGFn IHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgZG8gdGhlIHNhbWUgdGhpbmcgdHdpY2UNCiAg ICAgICAgICBhcmd1bWVudHMuY2FsbGVlLmRvbmUgPSB0cnVlOw0KDQogICAgICAgICAgLy8g a2lsbCB0aGUgdGltZXINCiAgICAgICAgICBpZiAod2luZG93Ll9fbG9hZF90aW1lcikgew0K ICAgICAgICAgICAgICBjbGVhckludGVydmFsKHdpbmRvdy5fX2xvYWRfdGltZXIpOw0KICAg ICAgICAgICAgICB3aW5kb3cuX19sb2FkX3RpbWVyID0gbnVsbDsNCiAgICAgICAgICB9DQoN CiAgICAgICAgICAvLyBleGVjdXRlIGVhY2ggZnVuY3Rpb24gaW4gdGhlIHN0YWNrIGluIHRo ZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQNCiAgICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHdp bmRvdy5fX2xvYWRfZXZlbnRzLmxlbmd0aDtpKyspIHsNCiAgICAgICAgICAgICAgd2luZG93 Ll9fbG9hZF9ldmVudHNbaV0oKTsNCiAgICAgICAgICB9DQogICAgICAgICAgd2luZG93Ll9f bG9hZF9ldmVudHMgPSBudWxsOw0KICAgICAgfTsNCg0KICAgICAgLy8gZm9yIE1vemlsbGEv T3BlcmE5DQogICAgICBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgew0KICAgICAg ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBpbml0 LCBmYWxzZSk7DQogICAgICB9DQoNCiAgICAgIC8vIGZvciBJbnRlcm5ldCBFeHBsb3Jlcg0K ICAgICAgLypAY2Nfb24gQCovDQogICAgICAvKkBpZiAoQF93aW4zMikNCiAgICAgICAgICBk b2N1bWVudC53cml0ZSgiPHNjciIrImlwdCBpZD1fX2llX29ubG9hZCBkZWZlciBzcmM9Ly8w PjxcL3NjciIrImlwdD4iKTsNCiAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoIl9faWVfb25sb2FkIik7DQogICAgICAgICAgc2NyaXB0Lm9ucmVhZHlz dGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICBpZiAodGhpcy5yZWFk eVN0YXRlID09ICJjb21wbGV0ZSIpIHsNCiAgICAgICAgICAgICAgICAgIGluaXQoKTsgLy8g Y2FsbCB0aGUgb25sb2FkIGhhbmRsZXINCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH07 DQogICAgICAvKkBlbmQgQCovDQoNCiAgICAgIC8vIGZvciBTYWZhcmkNCiAgICAgIGlmICgv V2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgeyAvLyBzbmlmZg0KICAgICAg ICAgIHdpbmRvdy5fX2xvYWRfdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCiAg ICAgICAgICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlT dGF0ZSkpIHsNCiAgICAgICAgICAgICAgICAgIGluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2Fk IGhhbmRsZXINCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sIDEwKTsNCiAgICAgIH0N Cg0KICAgICAgLy8gZm9yIG90aGVyIGJyb3dzZXJzDQogICAgICB3aW5kb3cub25sb2FkID0g aW5pdDsNCg0KICAgICAgLy8gY3JlYXRlIGV2ZW50IGZ1bmN0aW9uIHN0YWNrDQogICAgICB3 aW5kb3cuX19sb2FkX2V2ZW50cyA9IFtdOw0KICAgfQ0KDQogICAvLyBhZGQgZnVuY3Rpb24g dG8gZXZlbnQgc3RhY2sNCiAgIHdpbmRvdy5fX2xvYWRfZXZlbnRzLnB1c2goZnVuYyk7DQp9 DQoNCmFkZERPTUxvYWRFdmVudChsaXZlU2VhcmNoSW5pdCk7DQoNCkVPRjsNCmV4aXQ7DQp9 DQoNCmZ1bmN0aW9uIHJzc19saXZlbGluaygkYXR0cywgJHRoaW5nKSB7DQoJcmV0dXJuIHRh Zyh0YWcoJHRoaW5nLCdhJywnIGhyZWY9ImphdmFzY3JpcHQ6Ly8iIG9uY2xpY2s9ImxpdmVT ZWFyY2hCeUNvbnRleHQodGhpcyxcJycuJHRoaW5nLidcJyk7cmV0dXJuIGZhbHNlOyIgdGl0 bGU9IkxpdmVMaW5rIFNlYXJjaCInKSwgJ3NwYW4nLCAnIGlkPSInLiR0aGluZy4nLWxpdmVs aW5rIicpOw0KfQ0KDQovLzxzcGFuIGlkPSJNaW50LWxpdmVsaW5rIj48YSBocmVmPSJqYXZh c2NyaXB0Oi8vIiBvbmNsaWNrPSJsaXZlU2VhcmNoQnlDb250ZXh0KHRoaXMsJ01pbnQnKTty ZXR1cm4gZmFsc2U7Ij5NaW50PC9hPjwvc3Bhbj4NCiI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6 NToib3JkZXIiO3M6MToiNSI7czo0OiJoZWxwIjtzOjQ0Nzc6IjxwPgpoMS4gVGV4dHBhdHRl cm4gTGl2ZSBTZWFyY2g8L3A+CgoJPHA+VGhpcyBwbHVnaW4gaXMgYmFzZWQgb24gd29yayBk b25lIGJ5OjwvcD4KCgk8dWw+CgkJPGxpPk1hcmt1cyBLbmllYmVzJiM4MjE3OyA8YSBocmVm PSJodHRwOi8va25pZWJlcy5uZXQvZG9jcy90ZXh0cGF0dGVybi9saXZlc2VhcmNoIj5MaXZl U2VhcmNoIEV4dGVuc2lvbiBmb3IgVGV4dHBhdHRlcm48L2E+PC9saT4KCQk8bGk+PGEgaHJl Zj0iaHR0cDovL2Jsb2c0LmJpdGZsdXguY2gvd2lraS9MaXZlU2VhcmNoIj5CaXRGbHV4IExp dmVTZWFyY2ggU29sdXRpb248L2E+PC9saT4KCTwvdWw+CgoJPGgyPkhvdyB0byBVc2UgVGhp cyBQbHVnaW48L2gyPgoKCTxvbD4KCQk8bGk+SW5zdGFsbCBhbmQgYWN0aXZhdGUgdGhlIHBs dWdpbiBvZiBjb3Vyc2UuPC9saT4KCQk8bGk+QWRkIGEgY2FsbCB0byA8Y29kZT4mYW1wOyM2 MDt0eHA6cnNzX2xpdmVfc2VhcmNoX2pzIC8mYW1wOyM2Mjs8L2NvZGU+IGluIHRoZSA8Y29k ZT4mYW1wOyM2MDtoZWFkJmFtcDsjNjI7PC9jb2RlPiBzZWN0aW9uIG9mIHlvdXIgcGFnZS48 L2xpPgoJCTxsaT5BZGQgYSBjYWxsIHRvIDxjb2RlPiZhbXA7IzYwO3R4cDpyc3NfbGl2ZV9z ZWFyY2ggLyZhbXA7IzYyOzwvY29kZT4gd2hlcmV2ZXIgeW91IHdhbnQgdGhlIHNlYXJjaCBm b3JtIHRvIGFwcGVhci4gIEFkZCBhbnkgb2YgdGhlIG9wdGlvbmFsIGF0dHJpYnV0ZXMgYmVs b3cuPC9saT4KCQk8bGk+SW5jbHVkZSB0aGUgPGEgaHJlZj0iI3NlYXJjaHN0eWxlIj5zdHls ZXMgYmVsb3c8L2E+IGluIHlvdXIgc3R5bGVzaGVldC4gIEZlZWwgZnJlZSB0byBtb2RpZnkg dGhlIHN0eWxlcyBhcyB5b3Ugc2VlIGZpdC48L2xpPgoJPC9vbD4KCgk8aDI+QXR0cmlidXRl czwvaDI+CgoJPHA+PHN0cm9uZz5tYXg8L3N0cm9uZz48YnIgLz4KClRoZSBtYXhpbXVtIG51 bWJlciBvZiBsaXZlIHNlYXJjaCByZXN1bHRzIHJldHVybmVkLjxiciAvPgoKRGVmYXVsdDog ICYjODIyMDsyMCYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IG1heD0mIzgyMjA7MTAmIzgyMjE7 PC9wPgoKCTxwPjxzdHJvbmc+bGFiZWw8L3N0cm9uZz48YnIgLz4KClRoZSBsYWJlbCB0aGF0 IGFwcGVhcnMgbmV4dCB0byB0aGUgc2VhcmNoIGlucHV0LjxiciAvPgoKRGVmYXVsdDogICYj ODIyMDtMaXZlU2VhcmNoOiAmIzgyMjA7PGJyIC8+CgpFeGFtcGxlOiBsYWJlbD0mIzgyMjA7 VHlwZSBUbyBTZWFyY2g6ICYjODIyMDs8L3A+CgoJPHA+PHN0cm9uZz5pbnB1dHZhbHVlPC9z dHJvbmc+PGJyIC8+CgpUaGUgdGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlIHNlYXJjaCBpbnB1 dCBmaWVsZCBieSBkZWZhdWx0LjxiciAvPgoKRGVmYXVsdDogICYjODIyMDsmIzgyMjE7PGJy IC8+CgpFeGFtcGxlOiBpbnB1dHZhbHVlPSYjODIyMDtzZWFyY2ggdGhlIGFyY2hpdmVzJiM4 MjIxOzwvcD4KCgk8cD48c3Ryb25nPmlucHV0c2l6ZTwvc3Ryb25nPjxiciAvPgoKVGhlIHNp emUgb2YgdGhlIHNlYXJjaCBpbnB1dCBmaWVsZC48YnIgLz4KCkRlZmF1bHQ6ICAmIzgyMjA7 MjAmIzgyMjE7PGJyIC8+CgpFeGFtcGxlOiBpbnB1dHNpemU9JiM4MjIwOzMwJiM4MjIxOzwv cD4KCgk8cD48c3Ryb25nPnNob3didXR0b248L3N0cm9uZz48YnIgLz4KCkRldGVybWluZXMg d2hldGhlciBhIHN1Ym1pdCBidXR0b24gYXBwZWFycyBvbiB0aGUgbGl2ZSBzZWFyY2ggZm9y bS48YnIgLz4KCkRlZmF1bHQ6ICAmIzgyMjA7MCYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IHNo b3didXR0b249JiM4MjIwOzEmIzgyMjE7PC9wPgoKCTxwPjxzdHJvbmc+YnV0dG9udmFsPC9z dHJvbmc+PGJyIC8+CgpUaGUgdGV4dCB0aGF0IGFwcGVhcnMgb24gdGhlIHNlYXJjaCBmb3Jt IHN1Ym1pdCBidXR0b24uPGJyIC8+CgpEZWZhdWx0OiAgJiM4MjIwO1N1Ym1pdCYjODIyMTs8 YnIgLz4KCkV4YW1wbGU6IGJ1dHRvbnZhbD0mIzgyMjA7R28hJiM4MjIxOzwvcD4KCgk8cD48 c3Ryb25nPnNlYXJjaHRvPC9zdHJvbmc+PGJyIC8+CgpCeSBkZWZhdWx0IHRoZSBzZWFyY2gg Zm9ybSBhY3Rpb24gd2lsbCBiZSB5b3VyIHNpdGUgaG9tZSA8c3BhbiBjbGFzcz0iY2FwcyI+ PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj48L3NwYW4+LiAgSWYgeW91IHdhbnQgdG8g cG9zdCB5b3VyIGZvcm0gdG8gYSBzdWJkaXJlY3RvcnksIGluZGljYXRlIHNvIGhlcmUuICBJ biB0aGUgZXhhbXBsZSBiZWxvdywgdGhlIHNlYXJjaCB3b3VsZCBiZSBwb3N0ZWQgdG8gaHR0 cDovL3lvdXJzaXRlLmNvbS9zZWFyY2gvP3E9c2VhcmNoK3Rlcm1zPGJyIC8+CgpEZWZhdWx0 OiAgJiM4MjIwOyYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IHNlYXJjaHRvPSYjODIyMDtzZWFy Y2gmIzgyMjE7PC9wPgoKCTxwPjxzdHJvbmc+YXV0b2NvbXBsZXRlb2ZmPC9zdHJvbmc+PGJy IC8+CgpBZGRzIGF1dG9jbXBsZXRlPSYjODIyMDtvZmYmIzgyMjE7IHRvIHRoZSBzZWFyY2gg aW5wdXQgZmllbGQuICA8c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5OT1RFPC9zcGFuPjo8 L3N0cm9uZz4gVGhpcyB3aWxsIG5vdCB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlhIVE1MPC9zcGFuPjwvc3Bhbj4gc3BlYy48 YnIgLz4KCkRlZmF1bHQ6ICAmIzgyMjA7MCYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IGF1dG9j b21wbGV0ZW9mZj0mIzgyMjA7MSYjODIyMTs8L3A+CgoJPHA+PHN0cm9uZz5mb3JtPC9zdHJv bmc+PGJyIC8+CgpUaGUgYXJ0aWNsZSBmb3JtIHVzZWQgdG8gZGlzcGxheSBzZWFyY2ggcmVz dWx0cy4gIEVhY2ggc2VhcmNoIHJlc3VsdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIHRoZSBm b3JtIGFuZCBwbGFjZSBpbnNpZGUgYSBkaXYgYXMgYmVsb3cuPGJyIC8+Cgo8Y29kZT4mYW1w OyM2MDtkaXYgY2xhc3M9JmFtcDsjMzQ7TFNSb3cmYW1wOyMzNDsmYW1wOyM2Mjs8L2NvZGU+ Rk9STSA8c3BhbiBjbGFzcz0iY2FwcyI+Q09OVEVOVDwvc3Bhbj48Y29kZT48L2Rpdj48L2Nv ZGU+PGJyIC8+CgpEZWZhdWx0OiAgJiM4MjIwOyYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IGZv cm09JiM4MjIwO2xpdmVfc2VhcmNoX2FydGljbGUmIzgyMjE7PC9wPgoKCTxwPjxzdHJvbmc+ c2hvd3NlY3Rpb248L3N0cm9uZz48YnIgLz4KClRoZSBhcnRpY2xlIHNlY3Rpb24gd2lsbCBi ZSBkaXNwbGF5ZWQgaW4gYSBzcGFuIGZvbGxvd2luZyB0aGUgYXJ0aWNsZSB0aXRsZS48YnIg Lz4KCkRlZmF1bHQ6ICAmIzgyMjA7MCYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IHNob3dzZWN0 aW9uPSYjODIyMDsxJiM4MjIxOzwvcD4KCgk8cD48c3Ryb25nPnNob3dkYXRlPC9zdHJvbmc+ PGJyIC8+CgpUaGUgYXJ0aWNsZSBwb3N0IGRhdGUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gYSBz cGFuIGZvbGxvd2luZyB0aGUgYXJ0aWNsZSB0aXRsZSAob3IgZGF0ZSBpZiBhcHBsaWNhYmxl KS48YnIgLz4KCkRlZmF1bHQ6ICAmIzgyMjA7MCYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IHNo b3dkYXRlPSYjODIyMDsxJiM4MjIxOzwvcD4KCgk8cD48c3Ryb25nPmRhdGVmb3JtYXQ8L3N0 cm9uZz48YnIgLz4KCkFjY2VwdHMgPGEgaHJlZj0iaHR0cDovL3VzMi5waHAubmV0L3N0cmZ0 aW1lIj5zdHJmdGltZTwvYT4gZGF0ZSBmb3JtYXQuPGJyIC8+CgpEZWZhdWx0OiAgJiM4MjIw OyVCICVkLCAlWSYjODIyMTs8YnIgLz4KCkV4YW1wbGU6IGRhdGVmb3JtYXQ9JiM4MjIxOyVC LyVkLyVZJiM4MjIxOzwvcD4KCgk8cD48c3Ryb25nPmV4Y2VycHRzPC9zdHJvbmc+PGJyIC8+ CgpEZXRlcm1pbmVzIHdoZXRoZXIgc2VhcmNoIHJlc3VsdHMgZXhjZXJwdHMgYmVsb3cgYXJ0 aWNsZSB0aXRsZXMgYXMgb24gYSBub3JtYWwgVGV4dHBhdHRlcm4gc2VhcmNoLjxiciAvPgoK RGVmYXVsdDogICYjODIyMDswJiM4MjIxOzxiciAvPgoKRXhhbXBsZTogZXhjZXJwdHM9JiM4 MjIwOzEmIzgyMjE7PC9wPgoKCTxwPjxzdHJvbmc+bm90Zm91bmQ8L3N0cm9uZz48YnIgLz4K ClRoZSBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIG5vIHNlYXJjaCByZXN1bHRzIGFyZSBmb3Vu ZC48YnIgLz4KCkRlZmF1bHQ6ICAmIzgyMjA7Tm8gUmVzdWx0cyBGb3VuZC4mIzgyMjE7PGJy IC8+CgpFeGFtcGxlOiBub3Rmb3VuZD0mIzgyMjA7Tm90aGluZyB0byBzZWUgaGVyZS4mIzgy MjE7PC9wPgoKCTxoMiBpZD0ic2VhcmNoc3R5bGUiPkV4YW1wbGUgU3R5bGVzPC9oMj4KCgk8 cD48Y29kZT4KI0xTUmVzdWx0ICB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYmFja2dyb3VuZC1j b2xvcjogI2ZmZjsgd2lkdGg6IDM1MHB4OyB9CiNMU1NoYWRvdyB7IHBhZGRpbmc6IDVweDsg fQojTFNSZXMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9Ci5MU1JvdyB7IHBhZGRpbmc6 IDAgNXB4OyB9CiNMU0hpZ2hsaWdodCAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhOyB9CiNM U0hlYWRlciB7IHBhZGRpbmc6IDJweCAycHggOHB4OyB9Ci5sc0RhdGUgeyBkaXNwbGF5OiBi bG9jazsgY29sb3I6ICM1NTU7IH0KPC9jb2RlPjwvcD4iO3M6MzoibWQ1IjtzOjMyOiJhYTVi NWJlYWE4MTUyMjgyOTY5OGViYjQzZTEwZThlOSI7fQ==