<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>OpenID</name>
	<version>1.1.0</version>
  <mincmsversion>1.0</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGUgT3BlbklEIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGFkZCBhbiBPcGVuSUQgb3IgRmFjZWJvb2sgYWNjb3VudCB0byBhIHJlZ2lzdGVyZWQgZnJvbnRlbmQgdXNlci4gVGhhdCB1c2VyIGNhbiB0aGVuIGxvZyBpbiB1c2luZyB0aGF0IGlkZW50aXR5IGluc3RlYWQgb2YgdGhlIG9yZGluYXJ5IGZyb250ZW5kIGFjY291bnQuPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD48b2w+DQogICAgPGxpPk1ha2Ugc3VyZSB0aGF0IEZyb250RW5kVXNlcnMgaXMgaW5zdGFsbGVkPC9saT4NCiAgICA8bGk+SW5zdGFsbCB0aGUgT3BlbklEIG1vZHVsZTwvbGk+DQogICAgPGxpPkNoZWNrIG91dCB0aGUgc2V0dGluZ3MgcGFnZSBpZiB5b3Ugd2FudCB0byB1c2UgRmFjZWJvb2sgYXMgYSBwcm92aWRlcjwvbGk+DQogICAgPGxpPkFkZCB0aGUgdGFnIDxpPntPcGVuSUR9PC9pPiB0byBhIG5ldyBvciBhbiBleGlzdGluZyBwYWdlPC9saT4NCiAgICA8bGk+TG9nIGluIGFzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9udGVuZCB1c2VyPC9saT4NCiAgICA8bGk+VmlzaXQgdGhlIHBhZ2Ugd2l0aCB0aGUgT3BlbklEIHRhZyBhbmQgcmVnaXN0ZXIgYSBwcm92aWRlcjwvbGk+DQogICAgPGxpPkxvZ291dDwvbGk+DQogICAgPGxpPlJldmlzaXQgdGhlIHBhZ2Ugd2l0aCB0aGUgT3BlbklEIHRhZywgc2VsZWN0IHRoZSBzYW1lIHByb3ZpZGVyIHlvdSBqdXN0IHJlZ2lzdGVyZWQsIGF1dGhlbnRpY2F0ZSBhbmQgYmVob2xkOiBZb3UgYXJlIG5vdyBsb2dnZWQgaW48L2xpPg0KPC9vbD48L3A+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5HZXR0aW5nIE9wZW5JRCB0byB3b3JrIHByb3Blcmx5IGNhbiBiZSBhIGJpdCBvZiBhIHN0cnVnZ2xlIGlmIHlvdSBhcmUgbm90DQpmb3J0dW5hdGUgZW5vdWdoIHRvIGhhdmUgYW4gZW52aXJvbm1lbnQgdGhhdCBhbHJlYWR5IGhhcyBhbGwgdGhlIGJpdHMgYW5kIHBpZWNlcyBpbiBwbGFjZS4NCjxici8+U29tZSBwbGFjZXMgdG8gY2hlY2sgYmVmb3JlIGFza2luZyBmb3IgaGVscDo8YnIvPg0KPHVsPg0KICAgIDxsaT5UaGUgamFucmFpbiBSRUFETUUgZmlsZSBpbiB0aGUgL21vZHVsZXMvT3BlbklEL29wZW5pZC1waHAtb3BlbmlkLSp2ZXJzaW9uKiBkaXJlY3Rvcnk8L2xpPg0KICAgIDxsaT5SdW4gdGhlIGRldGVjdC5waHAgZmlsZSBpbiAvbW9kdWxlcy9PcGVuSUQvb3BlbmlkLXBocC1vcGVuaWQtKnZlcnNpb24qL2V4YW1wbGVzLzwvbGk+DQogICAgPGxpPlRyeSBkaWZmZXJlbnQgT3BlbklEIHByb3ZpZGVycyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgYWxsIGFyZSBicm9rZW4gb3IganVzdCBzb21lLg0KICAgIEEgcnVsZSBvZiB0aHVtYiBpcyB0aGF0IEZhY2Vib29rIGlzIGEgc2VwYXJhdGUgdGhpbmcgY29tcGFyZWQgdG8gdGhlIE9wZW5JRCBwcm92aWRlcnMuDQogICAgUHJvdmlkZXJzIHRoYXQgdXNlIGRpc2NvdmVyeSAobGlrZSBHb29nbGUpIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzaW1wbGVyIG9uZXMgbGlrZSBteU9wZW5JRDwvbGk+DQogICAgPGxpPkNoZWNrIHlvdXIgcGhwIGVycm9yIGxvZ3MgZm9yIGFueSBleGNlcHRpb25zIG9yIGVycm9yIG1lc3NhZ2VzLiBHb29nbGUgYW55IG91dHB1dCBmb3IgY2x1ZXMgYWJvdXQgaG93IHRvIHNvbHZlIHRoZW08L2xpPg0KICAgIDxsaT5TZXQgb3BlbmlkLmRlYnVnIHRvIHRydWUgaW4geW91ciBjb25maWcucGhwLiBUaGlzIHdpbGwgb3V0cHV0IGEgdG9uIG9mIG1lc3NhZ2VzIHRvIHRoZSBwaHAgZXJyb3IgbG9nPC9saT4NCjwvdWw+DQo8L3A+DQo8aDM+Q3JlZGl0czwvaDM+DQo8cD5UaGUgT3BlbklEIGxpYnJhcnkgaXMgc3RhbmRpbmcgb24gdGhlIHNob3VsZGVycyBvZiBnaWFudHMsIG5hbWVseToNCjx1bD4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vb3BlbmlkL3BocC1vcGVuaWQvIiB0YXJnZXQ9Il9ibGFuayI+UEhQIE9wZW5JRCBsaWJyYXJ5IGJ5IEphblJhaW4sIEluYy48L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2p2YW5jZS5jb20vcGFnZXMvSlF1ZXJ5T3BlbklEUGx1Z2luLnhodG1sIiB0YXJnZXQ9Il9ibGFuayI+T3BlbklEIGpRdWVyeSBwbHVnaW4gYnkgSmFycmV0IFZhbmNlPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9waHAtc2RrLyIgdGFyZ2V0PSJfYmxhbmsiPkZhY2Vib29rIFBIUCBTREs8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5qcXVlcnkuY29tIiB0YXJnZXQ9Il9ibGFuayI+alF1ZXJ5PC9hPjwvbGk+DQo8L3VsPg0KPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAxMCwgPGEgaHJlZj0ibWFpbHRvOm9wZW5pZEBsZW5uYXJ0c3NvbnMubmV0Ij5IZW5yaWsgTGVubmFydHNzb248L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLmh0bWwiPkFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCjxoMz5QYXJhbWV0cmFyPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIHNvbSBhbnYmYXVtbDtuZHMgZiZvdW1sO3IgYXR0IHNwZWNpZmljZXJhIHZpbGtldCBzcHImYXJpbmc7ayBzb20gc2thIGFudiZhdW1sO25kYXMgJnF1b3Q7ZnJvbnRlbmQmcXVvdDssIGFsbHRzJmFyaW5nOyBzaiZhdW1sO2x2YSBzaWRvcm5hIHNvbSBiZXMmb3VtbDtrYXJlIHRpbGwgZGluIHdlYmJwbGF0cyBzZXIuIEFsbGEgbW9kdWxlciBzdCZvdW1sO2RqZXIgaW50ZSBlbGxlciBiZWgmb3VtbDt2ZXIgaW50ZSBkZXR0YS48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+RiZvdW1sO3JmYXR0YXJlOiBIZW5yaWsgTGVubmFydHNzb24gJmx0O29wZW5pZEBsZW5uYXJ0c3NvbnMubmV0Jmd0OzxiciAvPjxiciAvPlZlcnNpb24gOiAxLjEuMDxiciAvPjxiciAvPiZBdW1sO25kcmluZ3NoaXN0b3JpYTo8YnIgLz48dWw+DQo8bGk+VmVyc2lvbiAxLjAuMCBGaXJzdCBwdWJsaWMgcmVsZWFzZSB3aXRoIHN1cHBvcnQgZm9yIE9wZW5JRCBhbmQgRmFjZWJvb2sgYXV0aGVudGljYXRpb248L2xpPg0KPGxpPlZlcnNpb24gMS4xLjAgQWRkZWQgc3VwcG9ydCBmb3IgVHdpdHRlciBhdXRoZW50aWNhdGlvbi4gUG9zc2libGUgdG8gY29uZmlndXJlIHJlZGlyZWN0cyBhZnRlciBsb2dpbi4gQWRkZWQgT3BlbklEIFNlbGVjdG9yIGFzIGFkZGl0aW9uYWwgT3BlbklEIGxvZ2luIHBhZ2Ugc3R5bGUuDQo8L3VsPjxiciAvPg==]]></about>
	<description><![CDATA[Denna modul ger m&ouml;jlighet att anv&auml;nda OpenID som inloggningsmetod till CMS Made Simple och FrontEndUsers-modulen.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_updateproviders.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgoKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZ2xvYmFsICRnQ21zOwokZGIgPSYgJGdDbXMtPkdldERCKCk7CgokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZW5hYmxlX3Byb3ZpZGVyX2dvb2dsZScsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfZ29vZ2xlJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZW5hYmxlX3Byb3ZpZGVyX3lhaG9vJywgKGludCkgJF9QT1NUWydpbnB1dF9wcm92aWRlcl95YWhvbyddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl9hb2wnLCAoaW50KSAkX1BPU1RbJ2lucHV0X3Byb3ZpZGVyX2FvbCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl9teW9wZW5pZCcsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfbXlvcGVuaWQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfbXlzcGFjZScsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfbXlzcGFjZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl9mbGlja3InLCAoaW50KSAkX1BPU1RbJ2lucHV0X3Byb3ZpZGVyX2ZsaWNrciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl9mYWNlYm9vaycsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfZmFjZWJvb2snXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfdHdpdHRlcicsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfdHdpdHRlciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl90d2l0dGVyX3NtYWxsJywgKGludCkgJF9QT1NUWydpbnB1dF9wcm92aWRlcl90d2l0dGVyX3NtYWxsJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZW5hYmxlX3Byb3ZpZGVyX3RlY2hub3JhdGknLCAoaW50KSAkX1BPU1RbJ2lucHV0X3Byb3ZpZGVyX3RlY2hub3JhdGknXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfd29yZHByZXNzJywgKGludCkgJF9QT1NUWydpbnB1dF9wcm92aWRlcl93b3JkcHJlc3MnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfYmxvZ2dlcicsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfYmxvZ2dlciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl9saXZlam91cm5hbCcsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfbGl2ZWpvdXJuYWwnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfY2xhaW1pZCcsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfY2xhaW1pZCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl92aWRvb3AnLCAoaW50KSAkX1BPU1RbJ2lucHV0X3Byb3ZpZGVyX3ZpZG9vcCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl92ZXJpc2lnbicsIChpbnQpICRfUE9TVFsnaW5wdXRfcHJvdmlkZXJfdmVyaXNpZ24nXSk7CmluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2FjdGlvbi5kZWZhdWx0YWRtaW4ucGhwJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_updatesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgoKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZ2xvYmFsICRnQ21zOwokZGIgPSYgJGdDbXMtPkdldERCKCk7CgokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmlzdWFsX2ZyYW1ld29yaycsIChzdHJpbmcpICRwYXJhbXNbJ2lucHV0X3Zpc3VhbF9mcmFtZXdvcmsnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdidWdneV9nbXAnLCAoaW50KSAkcGFyYW1zWydpbnB1dF9idWdneV9nbXAnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd1c2VfaW5zZWN1cmVfcmFuZCcsIChpbnQpICRwYXJhbXNbJ2lucHV0X2luc2VjdXJlX3JhbmQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjYV9maWxlX292ZXJyaWRlJywgKGludCkgJHBhcmFtc1snaW5wdXRfY2FfZmlsZV9vdmVycmlkZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9kZWJ1Z2dpbmcnLCAoaW50KSAkcGFyYW1zWydpbnB1dF9kZWJ1Z2dpbmcnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmYWNlYm9va19hcHBfaWQnLCAoc3RyaW5nKSAkcGFyYW1zWydpbnB1dF9mYWNlYm9va19hcHBfaWQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmYWNlYm9va19hcHBfc2VjcmV0JywgKHN0cmluZykgJHBhcmFtc1snaW5wdXRfZmFjZWJvb2tfYXBwX3NlY3JldCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3R3aXR0ZXJfY29uc3VtZXJfa2V5JywgKHN0cmluZykgJHBhcmFtc1snaW5wdXRfdHdpdHRlcl9jb25zdW1lcl9rZXknXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0d2l0dGVyX2NvbnN1bWVyX3NlY3JldCcsIChzdHJpbmcpICRwYXJhbXNbJ2lucHV0X3R3aXR0ZXJfY29uc3VtZXJfc2VjcmV0J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbG9naW5fcmVkaXJlY3QnLCAoc3RyaW5nKSAkcGFyYW1zWydpbnB1dF9sb2dpbl9yZWRpcmVjdCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2luX3JlZGlyZWN0X3BhZ2VpZCcsIChzdHJpbmcpICRwYXJhbXNbJ2lucHV0X2xvZ2luX3JlZGlyZWN0X3BhZ2VpZCddKTsKCmluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2FjdGlvbi5kZWZhdWx0YWRtaW4ucGhwJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.authenticate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7Cmdsb2JhbCAkcGFyYW1zOwpnbG9iYWwgJGdDbXM7Ci8vJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKLyogQHZhciBzbWFydHkgU21hcnR5ICovCiRzbWFydHkgPSYgJGdDbXMtPkdldFNtYXJ0eSgpOwovLyRzbWFydHktPmFzc2lnbigncm9vdF9wYXRoJywgJGNvbmZpZ1sncm9vdF9wYXRoJ10pOwoKJHRoaXMtPkxvZygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKJHRoaXMtPkxvZygiICoqKiBTVEVQIDIgKioqIGFjdGlvbi5hdXRoZW50aWNhdGUucGhwIik7CgogICAgJGNvbnN1bWVyID0gJHRoaXMtPkdldENvbnN1bWVyKCk7CgogICAgLy8gQ3JlYXRlIGNvbnN1bWVyIGFuZCBjb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzCiAgICAkdGhpcy0+TG9nKCJiZWZvcmUgcGFnZSIpOwogICAgJHJldHVyblBhZ2VJZCA9ICRwYXJhbXNbJ3BhZ2UnXTsKICAgICR0aGlzLT5Mb2coInBhZ2UgPSAiLiRyZXR1cm5QYWdlSWQpOwogICAgJHJldHVyblVybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2F1dGhlbnRpY2F0ZScsICRyZXR1cm5QYWdlSWQsICcnLCAkcGFyYW1zLCAnJywgdHJ1ZSwgdHJ1ZSk7CiAgICAkcmVzcG9uc2UgPSAkY29uc3VtZXItPmNvbXBsZXRlKCRyZXR1cm5VcmwpOwogICAgJHRoaXMtPkxvZygiUmVzcG9uc2UgaWRlbnRpeSBVUkwgOiAiLiRyZXNwb25zZS0+aWRlbnRpdHlfdXJsKTsKCi8vIENoZWNrIHRoZSByZXNwb25zZSBzdGF0dXMuCiAgICBpZiAoJHJlc3BvbnNlLT5zdGF0dXMgPT0gQXV0aF9PcGVuSURfQ0FOQ0VMKSB7CiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYXV0aGVudGljYXRpb24gd2FzIGNhbmNlbGxlZC4KICAgICAgICBwcmludCAnVmVyaWZpY2F0aW9uIGNhbmNlbGxlZC4nOwogICAgfSBlbHNlIGlmICgkcmVzcG9uc2UtPnN0YXR1cyA9PSBBdXRoX09wZW5JRF9GQUlMVVJFKSB7CiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gZmFpbGVkOyBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlLgogICAgICAgIHByaW50ICJPcGVuSUQgYXV0aGVudGljYXRpb24gZmFpbGVkOiAiIC4gJHJlc3BvbnNlLT5tZXNzYWdlOwogICAgfSBlbHNlIGlmICgkcmVzcG9uc2UtPnN0YXR1cyA9PSBBdXRoX09wZW5JRF9TVUNDRVNTKSB7CgogICAgICAgIC8qIEB2YXIgJGF4cmVzcG9uc2UgQXV0aF9PcGVuSURfQVhfRmV0Y2hSZXNwb25zZSAqLwogICAgICAgICRheHJlc3BvbnNlID0gQXV0aF9PcGVuSURfQVhfRmV0Y2hSZXNwb25zZTo6ZnJvbVN1Y2Nlc3NSZXNwb25zZSgkcmVzcG9uc2UpOwogICAgICAgIGlmICgkYXhyZXNwb25zZSkgewogICAgICAgICAgICAkZW1haWwgPSAkYXhyZXNwb25zZS0+Z2V0U2luZ2xlKCdodHRwOi8vYXhzY2hlbWEub3JnL2NvbnRhY3QvZW1haWwnKTsKICAgICAgICAgICAgJHRoaXMtPkxvZygnR290IHVzZXIgZW1haWwgJy4kZW1haWwuJyB1c2luZyBhdHRyaWJ1dGUgZXhjaGFuZ2UnKTsKICAgICAgICB9CiAgICAgICAgLyogQHZhciAkZmV1IEZyb250RW5kVXNlcnMgKi8KICAgICAgICAkZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgICAgaWYgKCRmZXUtPkxvZ2dlZEluKCkpIHsKICAgICAgICAgICAgJHRoaXMtPkxvZygiUmVnaXN0ZXJpbmcgdXNlciAiLiRyZXNwb25zZS0+aWRlbnRpdHlfdXJsLiIgYXMgT3BlbklELWlkZW50aXR5Iik7CiAgICAgICAgICAgIC8vIFVzZXIgaXMgbG9nZ2VkIGluOiBBZGQgT3BlbklEIGlkZW50aWZlciBhbmQgcHJvdmlkZXIgYXMgdXNlciBpZGVudGl0eQogICAgICAgICAgICAkdGhpcy0+UmVnaXN0ZXJPcGVuSUQoJGZldS0+TG9nZ2VkSW5JZCgpLCAkcmVzcG9uc2UtPmlkZW50aXR5X3VybCwgJGVtYWlsKTsKICAgICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgYW5kIGRpc3BsYXkgbGlzdCBvZiBwcm92aWRlcnMKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcoJ29wZW5pZF9hZGRlZF9pZGVudGl0eScsICdPcGVuSUQnLCAkZW1haWwgPyAkZW1haWwgOiAkcmVzcG9uc2UtPmlkZW50aXR5X3VybCkpOwogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfdHlwZScsICdzdWNjZXNzJyk7CiAgICAgICAgICAgIGluY2x1ZGUgJ2FjdGlvbi5kZWZhdWx0LnBocCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPkxvZygiTG9nZ2luZyBpbiB1c2VyICIuJHJlc3BvbnNlLT5pZGVudGl0eV91cmwpOwogICAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBsb2dnZWQgaW46IFRyeSB0byBsb2dpbiB1c2VyCiAgICAgICAgICAgICRvcGVuaWQgPSAkcmVzcG9uc2UtPmdldERpc3BsYXlJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICRlc2NfaWRlbnRpdHkgPSBodG1sZW50aXRpZXMoJG9wZW5pZCk7CiAgICAgICAgICAgICR1aWQgPSAkdGhpcy0+R2V0VXNlcklkKCRyZXNwb25zZS0+aWRlbnRpdHlfdXJsKTsKICAgICAgICAgICAgJHRoaXMtPkxvZygiVUlEID0gIi4kdWlkKTsKICAgICAgICAgICAgJHVzZXJpbmZvID0gJGZldS0+R2V0VXNlckluZm8oJHVpZCk7CiAgICAgICAgICAgIGlmICgkdXNlcmluZm9bMF0pIHsKICAgICAgICAgICAgICAgICR1c2VybmFtZSA9ICR1c2VyaW5mb1sxXVsndXNlcm5hbWUnXTsKICAgICAgICAgICAgICAgICRwYXNzd29yZCA9ICR1c2VyaW5mb1sxXVsncGFzc3dvcmQnXTsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coInVzZXJuYW1lL3Bhc3N3b3JkIDogIi4kdXNlcm5hbWUuIiAiLiRwYXNzd29yZCk7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJGZldS0+TG9naW4oJHVzZXJuYW1lLCAkcGFzc3dvcmQsICcnLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coJ0xvZ2luIG1lc3NhZ2UgOiAnLiRyZXN1bHRbMV0pOwogICAgICAgICAgICAgICAgaWYgKCEkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgJHRoaXMtPkxhbmcoJ29wZW5pZF9mYWlsJywgJGVzY19pZGVudGl0eSwgJGVzY19pZGVudGl0eSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IG9yIGRpc3BsYXkgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgICRyZWRpcmVjdFBhZ2VJZCA9ICR0aGlzLT5HZXRSZWRpcmVjdExvZ2luUGFnZUlkKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkcmVkaXJlY3RQYWdlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJHRoaXMtPkxhbmcoJ29wZW5pZF9zdWNjZXNzJywgJGVzY19pZGVudGl0eSwgJGVzY19pZGVudGl0eSwgJHVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3RDb250ZW50KCRyZWRpcmVjdFBhZ2VJZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coIkVycm9yIHdoaWxlIGZldGNoaW5nIHVzZXJpbmZvIGZvciAiLiR1aWQuIiA6ICIuJHVzZXJpbmZvWzFdKTsKICAgICAgICAgICAgICAgIHByaW50ICR0aGlzLT5MYW5nKCdvcGVuaWRfdW5rbm93bicsICRlc2NfaWRlbnRpdHksICRlc2NfaWRlbnRpdHkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KCiAgICB9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKLyogQHZhciAkdGhpcyBPcGVuSUQgKi8KLyogQHZhciAkZ0NtcyBDbXNPYmplY3QgKi8KZ2xvYmFsICRnQ21zOwoKJHNtYXJ0eSA9JiAkZ0Ntcy0+R2V0U21hcnR5KCk7CiRzdGFydGZvcm0gPSAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2xvZ2luJywgJHJldHVybmlkLCAncG9zdCcpOwokc3RhcnRmb3JtID0gc3RyX3JlcGxhY2UoJ2NsYXNzPSInLCAnY2xhc3M9Im9wZW5pZF9mb3JtICcsICRzdGFydGZvcm0pOwokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICRzdGFydGZvcm0pOwoKJGZhY2Vib29rTG9naW5VcmwgPSAkdGhpcy0+RmFjZWJvb2tMb2dpblVybCgkaWQsICdmYWNlYm9vaycsICRyZXR1cm5pZCk7CiR0d2l0dGVyTG9naW5VcmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0d2l0dGVyX2xvZ2luJywgJHJldHVybmlkLCBudWxsLCBudWxsLCBudWxsLCB0cnVlLCB0cnVlLCBudWxsLCBudWxsKTsKJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKJHNtYXJ0eS0+YXNzaWduKCdyb290X3BhdGgnLCAkY29uZmlnWydyb290X3BhdGgnXSk7CgovKiBAdmFyICRmZXUgRnJvbnRFbmRVc2VycyAqLwokZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CmlmICghJGZldS0+TG9nZ2VkSW4oKSkgewogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd2aXN1YWxfZnJhbWV3b3JrJywgJ2pxdWVyeXBsdWdpbicpID09ICdqcXVlcnlwbHVnaW4nKSB7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdmYWNlYm9va0xvZ2luVXJsJywgJGZhY2Vib29rTG9naW5VcmwpOwogICAgICAgICRzbWFydHktPmFzc2lnbigndHdpdHRlckxvZ2luVXJsJywgJHR3aXR0ZXJMb2dpblVybCk7CiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdsb2dpbl9mb3JtLnRwbCcpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBSZXBsYWNlIGVuY29kZWQgYW1wZXJzYW5kcyBzaW5jZSBqYXZhc2NyaXB0cyBkb2Vzbid0IHVuZGVyc3RhbmQgJmFtcDsKICAgICAgICAvLyBYSFRNTCBzdXBwb3J0IHNvbHZlZCBieSBDREFUQSB0YWdzIGluc2lkZSB0aGUgc2NyaXB0IHRhZwogICAgICAgICRzbWFydHktPmFzc2lnbignZmFjZWJvb2tMb2dpblVybCcsIHN0cl9yZXBsYWNlKCcmYW1wOycsICcmJywgJGZhY2Vib29rTG9naW5VcmwpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3R3aXR0ZXJMb2dpblVybCcsIHN0cl9yZXBsYWNlKCcmYW1wOycsICcmJywgJHR3aXR0ZXJMb2dpblVybCkpOwogICAgICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbG9naW5fZm9ybV9vcGVuaWRfc2VsZWN0b3IudHBsJyk7CiAgICB9Cn0gZWxzZSB7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2ZhY2Vib29rTG9naW5VcmwnLCAkZmFjZWJvb2tMb2dpblVybCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3R3aXR0ZXJMb2dpblVybCcsICR0d2l0dGVyTG9naW5VcmwpOwogICAgJHJlZ2lzdGVyZWRPcGVuSURzID0gJHRoaXMtPkdldFJlZ2lzdGVyZWRPcGVuSURzKCk7CiAgICBpZiAoZW1wdHkoJHJlZ2lzdGVyZWRPcGVuSURzKSkgewogICAgICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncmVnaXN0ZXJfcHJvdmlkZXIudHBsJyk7CiAgICB9IGVsc2UgewogICAgICAgICRzbWFydHktPmFzc2lnbigncmVtb3ZlX2xpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdyZW1vdmUnLCAkcmV0dXJuaWQsIG51bGwsIG51bGwsIG51bGwsIHRydWUsIGZhbHNlLCBudWxsLCBudWxsKSk7CiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdsaXN0X3Byb3ZpZGVycy50cGwnKTsKICAgIH0KfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwovKiBAdmFyICRnQ21zIENtc09iamVjdCAqLwoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncHJvdmlkZXJzJywgJHRoaXMtPkxhbmcoJ29wZW5pZF9wcm92aWRlcnMnKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCAkdGhpcy0+TGFuZygnc2V0dGluZ3MnKSk7Ci8vZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd1c2VycycsICR0aGlzLT5MYW5nKCd1c2VycycpKTsKZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKLy8gVGhlY29udGVudCBvZiB0aGUgdGFicwplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3Byb3ZpZGVycycsICRwYXJhbXMpOwppbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5hZG1pbl90YWJfcHJvdmlkZXJzLnBocCcpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwppbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5hZG1pbl90YWJfc2V0dGluZ3MucGhwJyk7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCi8qZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3VzZXJzJywgJHBhcmFtcyk7CmluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLmFkbWluX3RhYl91c2Vycy5waHAnKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.facebook.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwppZiAoIWlzc2V0KCRnQ21zKSkKICAgIGV4aXQ7Cmdsb2JhbCAkcGFyYW1zOwokdGhpcy0+TG9nKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwokdGhpcy0+TG9nKCIgKioqIGFjdGlvbi5mYWNlYm9vay5waHAiKTsKCgpnbG9iYWwgJGdDbXM7CiRzbWFydHkgPSAmICRnQ21zLT5HZXRTbWFydHkoKTsKOwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gIi9mYWNlYm9va18yXzFfMi9mYWNlYm9vay5waHAiOwoKLyogQHZhciBmYWNlYm9vayBGYWNlYm9vayAqLwokZmFjZWJvb2sgPSBuZXcgRmFjZWJvb2soYXJyYXkoCiAgICAgICAgICAgICdhcHBJZCcgPT4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZhY2Vib29rX2FwcF9pZCcsICcnKSwKICAgICAgICAgICAgJ3NlY3JldCcgPT4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZhY2Vib29rX2FwcF9zZWNyZXQnLCAnJyksCiAgICAgICAgICAgICdjb29raWUnID0+IHRydWUsCiAgICAgICAgKSk7Cgokc2Vzc2lvbiA9ICRmYWNlYm9vay0+Z2V0U2Vzc2lvbigpOwoKJG1lID0gbnVsbDsKCmlmICgkc2Vzc2lvbikgewogICAgdHJ5IHsKICAgICAgICAkZmFjZWJvb2tVaWQgPSAkZmFjZWJvb2stPmdldFVzZXIoKTsKICAgICAgICAkbWUgPSAkZmFjZWJvb2stPmFwaSgnL21lJyk7CiAgICAgICAgJHVybCA9ICRtZVsnbGluayddOwoKICAgICAgICAvKiBAdmFyICRmZXUgRnJvbnRFbmRVc2VycyAqLwogICAgICAgICRmZXUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgICBpZiAoJGZldS0+TG9nZ2VkSW4oKSkgewogICAgICAgICAgICAkdGhpcy0+TG9nKCJSZWdpc3RlcmluZyB1c2VyICIgLiAkZmFjZWJvb2tVaWQgLiAiIGFzIEZhY2Vib29rLWlkZW50aXR5Iik7CiAgICAgICAgICAgIC8vIFVzZXIgaXMgbG9nZ2VkIGluOiBBZGQgRmFjZWJvb2sgaWRlbnRpZmVyIGFzIHVzZXIgaWRlbnRpdHkKICAgICAgICAgICAgJHRoaXMtPlJlZ2lzdGVyT3BlbklEKCRmZXUtPkxvZ2dlZEluSWQoKSwgJ2ZhY2Vib29rOicgLiAkZmFjZWJvb2tVaWQsICR1cmwpOwogICAgICAgICAgICAvLyBBZGQgbWVzc2FnZSBhbmQgZGlzcGxheSBsaXN0IG9mIHByb3ZpZGVycwogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZygnb3BlbmlkX2FkZGVkX2lkZW50aXR5JywgJ0ZhY2Vib29rJywgJGZhY2Vib29rVWlkID8gJGZhY2Vib29rVWlkIDogJHVybCkpOwogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfdHlwZScsICdzdWNjZXNzJyk7CiAgICAgICAgICAgIGluY2x1ZGUgJ2FjdGlvbi5kZWZhdWx0LnBocCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPkxvZygiTG9nZ2luZyBpbiBmYWNlYm9vayB1c2VyICIgLiAkZmFjZWJvb2tVaWQpOwogICAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBsb2dnZWQgaW46IFRyeSB0byBsb2dpbiB1c2VyCiAgICAgICAgICAgICR1aWQgPSAkdGhpcy0+R2V0VXNlcklkKCdmYWNlYm9vazonIC4gJGZhY2Vib29rVWlkKTsKICAgICAgICAgICAgJHRoaXMtPkxvZygiVUlEID0gIiAuICR1aWQpOwogICAgICAgICAgICAkdXNlcmluZm8gPSAkZmV1LT5HZXRVc2VySW5mbygkdWlkKTsKICAgICAgICAgICAgaWYgKCR1c2VyaW5mb1swXSkgewogICAgICAgICAgICAgICAgJHVzZXJuYW1lID0gJHVzZXJpbmZvWzFdWyd1c2VybmFtZSddOwogICAgICAgICAgICAgICAgJHBhc3N3b3JkID0gJHVzZXJpbmZvWzFdWydwYXNzd29yZCddOwogICAgICAgICAgICAgICAgJHRoaXMtPkxvZygidXNlcm5hbWUvcGFzc3dvcmQgOiAiIC4gJHVzZXJuYW1lIC4gIiAiIC4gJHBhc3N3b3JkKTsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZmV1LT5Mb2dpbigkdXNlcm5hbWUsICRwYXNzd29yZCwgJycsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgJHRoaXMtPkxvZygnTG9naW4gbWVzc2FnZSA6ICcgLiAkcmVzdWx0WzFdKTsKICAgICAgICAgICAgICAgIGlmICghJHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIHByaW50ICR0aGlzLT5MYW5nKCdvcGVuaWRfZmFpbCcsICR1cmwsICR1cmwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCBvciBkaXNwbGF5IG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAkcmVkaXJlY3RQYWdlSWQgPSAkdGhpcy0+R2V0UmVkaXJlY3RMb2dpblBhZ2VJZCgpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlZGlyZWN0UGFnZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICR0aGlzLT5MYW5nKCdvcGVuaWRfc3VjY2VzcycsICR1cmwsICR1cmwsICR1c2VybmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCgkcmVkaXJlY3RQYWdlSWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+TG9nKCJFcnJvciB3aGlsZSBmZXRjaGluZyB1c2VyaW5mbyBmb3IgIiAuICR1aWQgLiAiIDogIiAuICR1c2VyaW5mb1sxXSk7CiAgICAgICAgICAgICAgICBwcmludCAkdGhpcy0+TGFuZygnb3BlbmlkX3Vua25vd24nLCAkdXJsLCAkdXJsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gY2F0Y2ggKEZhY2Vib29rQXBpRXhjZXB0aW9uICRlKSB7CiAgICAgICAgJHRoaXMtPkxvZygnZmFjZWJvb2sgYWN0aW9uIGV4Y2VwdGlvbiAnLnByaW50X3IoJGUsIHRydWUpKTsKICAgICAgICBwcmludCAkdGhpcy0+TGFuZygnZmFjZWJvb2tfZmFpbGVkX29yX2NhbmNlbGVkJyk7CiAgICB9Cn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKZ2xvYmFsICRwYXJhbXM7CiR0aGlzLT5Mb2coIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiR0aGlzLT5Mb2coIiAqKiogU1RFUCAxICoqKiBhY3Rpb24ubG9naW4ucGhwIik7CiR0aGlzLT5Mb2coIm9wZW5pZC1pZGVudGlmaWVyIDogIi4kcGFyYW1zWydvcGVuaWRfaWRlbnRpZmllciddKTsKJHRoaXMtPkxvZygib3BlbmlkX3VzZXJuYW1lIDogIi4kcGFyYW1zWydvcGVuaWRfdXNlcm5hbWUnXSk7Cmdsb2JhbCAkZ0NtczsKJHNtYXJ0eSA9JiAkZ0Ntcy0+R2V0U21hcnR5KCk7OwplcnJvcl9sb2cocHJpbnRfcigkcGFyYW1zLCB0cnVlKSk7CmZ1bmN0aW9uIGdldE9wZW5JRFVSTCgpIHsKICAgIGdsb2JhbCAkcGFyYW1zOwogICAgLy8gUmVuZGVyIGEgZGVmYXVsdCBwYWdlIGlmIHdlIGdvdCBhIHN1Ym1pc3Npb24gd2l0aG91dCBhbiBvcGVuaWQgdmFsdWUuCiAgICAvKgogICAgICogIFRPRE8gRXJyb3IgaGFuZGxpbmcgLSBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgaWYgVVJMIGlzIG1pc3NpbmcKICAgIGlmIChlbXB0eSgkcGFyYW1zWydvcGVuaWRfaWRlbnRpZmllciddKSkgewogICAgICAgICRlcnJvciA9ICJFeHBlY3RlZCBhbiBPcGVuSUQgVVJMLiI7CiAgICAgICAgJHRoaXMtPkxvZygkZXJyb3IpOwogICAgICAgIGV4aXQoMCk7CiAgICB9Ki8KCiAgICByZXR1cm4gZW1wdHkoJHBhcmFtc1snb3BlbmlkX2lkZW50aWZpZXInXSkgPyAkcGFyYW1zWydvcGVuaWRfdXNlcm5hbWUnXSA6ICRwYXJhbXNbJ29wZW5pZF9pZGVudGlmaWVyJ107Cn0KCgogICAgJG9wZW5pZCA9IGdldE9wZW5JRFVSTCgpOwogICAgJGNvbnN1bWVyID0gJHRoaXMtPkdldENvbnN1bWVyKCk7CgogICAgLy8gQmVnaW4gdGhlIE9wZW5JRCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgogICAgJGF1dGhfcmVxdWVzdCA9ICRjb25zdW1lci0+YmVnaW4oJG9wZW5pZCk7CgogICAgLy8gTm8gYXV0aCByZXF1ZXN0IG1lYW5zIHdlIGNhbid0IGJlZ2luIE9wZW5JRC4KICAgIGlmICghJGF1dGhfcmVxdWVzdCkgewogICAgICAgIHByaW50ICJBdXRoZW50aWNhdGlvbiBlcnJvcjsgbm90IGEgdmFsaWQgT3BlbklELiI7CiAgICB9CgogICAgLy8gU2ltcGxlIFJlZ2lzdHJhdGlvbiBwcm90b2NvbCBtZXNzYWdlcy4KICAgICRzcmVnX3JlcXVlc3QgPSBBdXRoX09wZW5JRF9TUmVnUmVxdWVzdDo6YnVpbGQoYXJyYXkoJ2VtYWlsJyksYXJyYXkoJ2Z1bGxuYW1lJywgJ25pY2tuYW1lJykpOwogICAgaWYgKCEkc3JlZ19yZXF1ZXN0KSB7CiAgICAgICAgZGllKCJzcmVnIGZhaWxlZCIpOwogICAgfQogICAgaWYgKCRzcmVnX3JlcXVlc3QpIHsKICAgICAgICAkYXV0aF9yZXF1ZXN0LT5hZGRFeHRlbnNpb24oJHNyZWdfcmVxdWVzdCk7CiAgICB9CgogICAgLy8gQXR0cmlidXRlIGV4Y2hhbmdlCiAgICAkYXhfcmVxdWVzdCA9IG5ldyBBdXRoX09wZW5JRF9BWF9GZXRjaFJlcXVlc3QoKTsKICAgICRheF9yZXF1ZXN0LT5hZGQoQXV0aF9PcGVuSURfQVhfQXR0ckluZm86Om1ha2UoJ2h0dHA6Ly9heHNjaGVtYS5vcmcvY29udGFjdC9lbWFpbCcsIDEsIFRSVUUpKTsKICAgIC8vJGF4X3JlcXVlc3QtPmFkZCgnZmlyc3RuYW1lJyk7CiAgICAvLyRheF9yZXF1ZXN0LT5hZGQoJ2xhc3RuYW1lJyk7CiAgICAkYXV0aF9yZXF1ZXN0LT5hZGRFeHRlbnNpb24oJGF4X3JlcXVlc3QpOwoKICAgICRwb2xpY3lfdXJpcyA9ICRfR0VUWydwb2xpY2llcyddOwogICAgLyoKICAgICRwYXBlX3JlcXVlc3QgPSBuZXcgQXV0aF9PcGVuSURfUEFQRV9SZXF1ZXN0KCRwb2xpY3lfdXJpcyk7CiAgICBpZiAoJHBhcGVfcmVxdWVzdCkgewogICAgICAgIC8vJGF1dGhfcmVxdWVzdC0+YWRkRXh0ZW5zaW9uKCRwYXBlX3JlcXVlc3QpOwogICAgfSovCgogICAgLy8gUmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIE9wZW5JRCBzZXJ2ZXIgZm9yIGF1dGhlbnRpY2F0aW9uLgogICAgLy8gU3RvcmUgdGhlIHRva2VuIGZvciB0aGlzIGF1dGhlbnRpY2F0aW9uIHNvIHdlIGNhbiB2ZXJpZnkgdGhlCiAgICAvLyByZXNwb25zZS4KCiAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAkcmV0dXJuUGFnZUlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcyggJ29wZW5pZCcgKTsKICAgICRyZXR1cm5VcmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhdXRoZW50aWNhdGUnLCAkcmV0dXJuUGFnZUlkLCAnJywgJHBhcmFtcywgJycsIHRydWUsIHRydWUpOwogICAgJHRydXN0Um9vdCA9ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ107CiAgICAkdGhpcy0+TG9nKCdSZXR1cm4gVVJMIDogJy4kcmV0dXJuVXJsKTsKICAgICRyZWRpcmVjdF91cmwgPSAkYXV0aF9yZXF1ZXN0LT5yZWRpcmVjdFVSTCgkdHJ1c3RSb290LCAkcmV0dXJuVXJsKTsKICAgICR0aGlzLT5Mb2coJ1JlZGlyZWN0IFVSTCA6ICcuJHJlZGlyZWN0X3VybCk7CiAgICAkcGFydHMgPSBleHBsb2RlKCImIiwgJHJlZGlyZWN0X3VybCk7CiAgICAkdGhpcy0+TG9nKCJyZXF1ZXN0IHRyeV9hdXRoIDoiKTsKICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICR0aGlzLT5Mb2codXJsZGVjb2RlKCRwYXJ0KSk7CiAgICB9CgogICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIC8vIEZvciBPcGVuSUQgMSwgc2VuZCBhIHJlZGlyZWN0LiAgRm9yIE9wZW5JRCAyLCB1c2UgYSBKYXZhc2NyaXB0CiAgICAvLyBmb3JtIHRvIHNlbmQgYSBQT1NUIHJlcXVlc3QgdG8gdGhlIHNlcnZlci4KICAgIGlmICgkYXV0aF9yZXF1ZXN0LT5zaG91bGRTZW5kUmVkaXJlY3QoKSkgewogICAgICAgICRyZWRpcmVjdF91cmwgPSAkYXV0aF9yZXF1ZXN0LT5yZWRpcmVjdFVSTCgkdHJ1c3RSb290LCAkcmV0dXJuVXJsKTsKCiAgICAgICAgLy8gSWYgdGhlIHJlZGlyZWN0IFVSTCBjYW4ndCBiZSBidWlsdCwgZGlzcGxheSBhbiBlcnJvcgogICAgICAgIC8vIG1lc3NhZ2UuCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJHJlZGlyZWN0X3VybCkpIHsKICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCByZWRpcmVjdCB0byBzZXJ2ZXI6ICIgLiAkcmVkaXJlY3RfdXJsLT5tZXNzYWdlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFNlbmQgcmVkaXJlY3QuCiAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246ICIuJHJlZGlyZWN0X3VybCk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvLyBHZW5lcmF0ZSBmb3JtIG1hcmt1cCBhbmQgcmVuZGVyIGl0LgogICAgICAgICRmb3JtX2lkID0gJ29wZW5pZF9tZXNzYWdlJzsKICAgICAgICAvKgogICAgICAgICRmb3JtX2h0bWwgPSAkYXV0aF9yZXF1ZXN0LT5odG1sTWFya3VwKCR0cnVzdFJvb3QsICRyZXR1cm5VcmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGFycmF5KCdpZCcgPT4gJGZvcm1faWQpKTsKICAgICAgICAgKgogICAgICAgICAqLwogICAgICAgICRmb3JtX2h0bWwgPSAkYXV0aF9yZXF1ZXN0LT5mb3JtTWFya3VwKCR0cnVzdFJvb3QsICRyZXR1cm5VcmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGFycmF5KCdpZCcgPT4gJGZvcm1faWQpKTsKICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIGlmIHRoZSBmb3JtIG1hcmt1cCBjb3VsZG4ndCBiZSBnZW5lcmF0ZWQ7CiAgICAgICAgLy8gb3RoZXJ3aXNlLCByZW5kZXIgdGhlIEhUTUwuCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJGZvcm1faHRtbCkpIHsKICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCByZWRpcmVjdCB0byBzZXJ2ZXI6ICIgLiAkZm9ybV9odG1sLT5tZXNzYWdlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJtb2R1bGVzL09wZW5JRC9zY3JpcHRzL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pic7CiAgICAgICAgICAgIHByaW50ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy9PcGVuSUQvaW1hZ2VzL2FqYXgtbG9hZGVyLmdpZiI+Jm5ic3A7Jm5ic3A7JzsKICAgICAgICAgICAgcHJpbnQgJHRoaXMtPkxhbmcoJ29wZW5pZF9yZWRpcmVjdGluZycpOwogICAgICAgICAgICBwcmludCAnPGRpdiBpZD0iT3BlbklkRm9ybSI+Jy4kZm9ybV9odG1sLic8L2Rpdj4nOwogICAgICAgICAgICBwcmludCAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7CiAgICAgICAgICAgIHByaW50ICcgICQoZnVuY3Rpb24oKSB7JzsKICAgICAgICAgICAgcHJpbnQgJyAgICAkKCJpbnB1dFt0eXBlPXN1Ym1pdF0iLCAkKCIjT3BlbklkRm9ybSIpKS5jbGljaygpOyc7CiAgICAgICAgICAgIHByaW50ICcgICAgJCgiaW5wdXRbdHlwZT1zdWJtaXRdIiwgJCgiI09wZW5JZEZvcm0iKSkuaGlkZSgpOyc7CiAgICAgICAgICAgIHByaW50ICcgIH0pOyc7CiAgICAgICAgICAgIHByaW50ICc8L3NjcmlwdD4nOwogICAgICAgIH0KICAgIH0KCj8+]]></data>
	</file>
	<file>
	  <filename>/action.remove.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgppZiAoIWlzc2V0KCRnQ21zKSkgewogICAgZXhpdDsKfQpnbG9iYWwgJHBhcmFtczsKZ2xvYmFsICRnQ21zOwokc21hcnR5ID0gJiAkZ0Ntcy0+R2V0U21hcnR5KCk7CgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwokcHJvdmlkZXIgPSAkcGFyYW1zWydwcm92aWRlciddOwovKiBAdmFyICRmZXUgRnJvbnRFbmRVc2VycyAqLwokZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CmlmICgkZmV1LT5Mb2dnZWRJbigpKSB7CiAgICAkdWlkID0gJGZldS0+TG9nZ2VkSW5JZCgpOwogICAgJHRoaXMtPkxvZygiRGVsZXRlaW5nIHByb3ZpZGVyICRwcm92aWRlciBmb3IgdXNlciAkdWlkIik7CiAgICAvLyBVc2VyIGlzIGxvZ2dlZCBpbjogUmVtb3ZlIE9wZW5JRCBwcm92aWRlcgogICAgaWYgKCR0aGlzLT5SZW1vdmVPcGVuSUQoJHVpZCwgJHByb3ZpZGVyKSkgewogICAgICAgIC8vIEFkZCBtZXNzYWdlIGFuZCBkaXNwbGF5IGxpc3Qgb2YgcHJvdmlkZXJzCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcoJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfc3VjY2VzcycpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfdHlwZScsICdzdWNjZXNzJyk7CiAgICB9IGVsc2UgewogICAgICAgICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsICR0aGlzLT5MYW5nKCdvcGVuaWRfcmVtb3ZlX2lkZW50aXR5X2ZhaWxlZCcpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfdHlwZScsICdlcnJvcicpOwogICAgfQp9IGVsc2UgewogICAgLy8gVXNlciBpcyBub3QgbG9nZ2VkIGluIC0gc2hvdWxkIG5vdCBoYXBwZW4KICAgICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsICR0aGlzLT5MYW5nKCdvcGVuaWRfcmVtb3ZlX2lkZW50aXR5X2ZhaWxlZCcpKTsKICAgICRzbWFydHktPmFzc2lnbignbWVzc2FnZV90eXBlJywgJ2Vycm9yJyk7Cn0KaW5jbHVkZSAnYWN0aW9uLmRlZmF1bHQucGhwJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.twitter_callback.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwppZiAoIWlzc2V0KCRnQ21zKSkKICAgIGV4aXQ7Cmdsb2JhbCAkcGFyYW1zOwokdGhpcy0+TG9nKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwokdGhpcy0+TG9nKCIgKioqICIgLiBfX0ZJTEVfXyk7CgoKZ2xvYmFsICRnQ21zOwokc21hcnR5ID0gJiAkZ0Ntcy0+R2V0U21hcnR5KCk7CgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAiL29hdXRoLXBocF8xXzdfNS9saWJyYXJ5L09BdXRoUmVxdWVzdGVyLnBocCI7Cgokb3B0aW9ucyA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ2NvbnN1bWVyX2tleScgPT4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3R3aXR0ZXJfY29uc3VtZXJfa2V5JywgJycpLAogICAgICAgICAgICAgICAgICAgICdjb25zdW1lcl9zZWNyZXQnID0+ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0d2l0dGVyX2NvbnN1bWVyX3NlY3JldCcsICcnKSksCiAgICAgICAgICAgICAgICAkX0dFVCk7Ck9BdXRoU3RvcmU6Omluc3RhbmNlKCJTZXNzaW9uIiwgJG9wdGlvbnMpOwp0cnkgewogICAgJHJlcXVlc3QgPSBuZXcgT0F1dGhSZXF1ZXN0ZXIoImh0dHBzOi8vYXBpLnR3aXR0ZXIuY29tL29hdXRoL2FjY2Vzc190b2tlbiIsICJQT1NUIiwgJG9wdGlvbnMpOwogICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5kb1JlcXVlc3QoMCk7Cn0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgJHRoaXMtPkxvZygndHdpdHRlciBjYWxsYmFjayBleGNlcHRpb24gJy5wcmludF9yKCRlLCB0cnVlKSk7CiAgICBwcmludCAkdGhpcy0+TGFuZygndHdpdHRlcl9mYWlsZWRfb3JfY2FuY2VsZWQnLCAkc2NyZWVuTmFtZSwgJHNjcmVlbk5hbWUpOwogICAgcmV0dXJuOwp9CnBhcnNlX3N0cigkcmVzdWx0Wydib2R5J10sICRwYXJhbXMpOwokdGhpcy0+TG9nKCdyZXN1bHQgPSAnIC4gcHJpbnRfcigkcmVzdWx0LCB0cnVlKSk7CgokdXNlcklkID0gJHBhcmFtc1sndXNlcl9pZCddOwokc2NyZWVuTmFtZSA9ICRwYXJhbXNbJ3NjcmVlbl9uYW1lJ107CmlmICgkdXNlcklkKSB7CiAgICB0cnkgewoKICAgICAgICAvKiBAdmFyICRmZXUgRnJvbnRFbmRVc2VycyAqLwogICAgICAgICRmZXUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgICBpZiAoJGZldS0+TG9nZ2VkSW4oKSkgewogICAgICAgICAgICAkdGhpcy0+TG9nKCJSZWdpc3RlcmluZyB1c2VyICIgLiAkdXNlcklkIC4gIiAoIiAuICRzY3JlZW5OYW1lIC4gIikgYXMgVHdpdHRlciBpZGVudGl0eSIpOwogICAgICAgICAgICAvLyBVc2VyIGlzIGxvZ2dlZCBpbjogQWRkIFR3aXR0ZXIgaWRlbnRpZmVyIGFzIHVzZXIgaWRlbnRpdHkKICAgICAgICAgICAgJHRoaXMtPlJlZ2lzdGVyT3BlbklEKCRmZXUtPkxvZ2dlZEluSWQoKSwgJ3R3aXR0ZXI6JyAuICR1c2VySWQsICRzY3JlZW5OYW1lKTsKICAgICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgYW5kIGRpc3BsYXkgbGlzdCBvZiBwcm92aWRlcnMKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcoJ29wZW5pZF9hZGRlZF9pZGVudGl0eScsICdUd2l0dGVyJywgJHNjcmVlbk5hbWUgPyAkc2NyZWVuTmFtZSA6ICR1c2VySWQpKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlX3R5cGUnLCAnc3VjY2VzcycpOwogICAgICAgICAgICBpbmNsdWRlICdhY3Rpb24uZGVmYXVsdC5waHAnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5Mb2coIkxvZ2dpbmcgaW4gdHdpdHRlciB1c2VyICIgLiAkdXNlcklkIC4gIiAoIiAuICRzY3JlZW5OYW1lIC4gIikiKTsKICAgICAgICAgICAgLy8gVXNlciBpcyBub3QgbG9nZ2VkIGluOiBUcnkgdG8gbG9naW4gdXNlcgogICAgICAgICAgICAkdWlkID0gJHRoaXMtPkdldFVzZXJJZCgndHdpdHRlcjonIC4gJHVzZXJJZCk7CiAgICAgICAgICAgICR0aGlzLT5Mb2coIlVJRCA9ICIgLiAkdWlkKTsKICAgICAgICAgICAgJHVzZXJpbmZvID0gJGZldS0+R2V0VXNlckluZm8oJHVpZCk7CiAgICAgICAgICAgIGlmICgkdXNlcmluZm9bMF0pIHsKICAgICAgICAgICAgICAgICR1c2VybmFtZSA9ICR1c2VyaW5mb1sxXVsndXNlcm5hbWUnXTsKICAgICAgICAgICAgICAgICRwYXNzd29yZCA9ICR1c2VyaW5mb1sxXVsncGFzc3dvcmQnXTsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coInVzZXJuYW1lL3Bhc3N3b3JkIDogIiAuICR1c2VybmFtZSAuICIgIiAuICRwYXNzd29yZCk7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJGZldS0+TG9naW4oJHVzZXJuYW1lLCAkcGFzc3dvcmQsICcnLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coJ0xvZ2luIG1lc3NhZ2UgOiAnIC4gJHJlc3VsdFsxXSk7CiAgICAgICAgICAgICAgICBpZiAoISRyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAkdGhpcy0+TGFuZygnb3BlbmlkX2ZhaWwnLCAkc2NyZWVuTmFtZSwgJHNjcmVlbk5hbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCBvciBkaXNwbGF5IG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAkcmVkaXJlY3RQYWdlSWQgPSAkdGhpcy0+R2V0UmVkaXJlY3RMb2dpblBhZ2VJZCgpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlZGlyZWN0UGFnZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICR0aGlzLT5MYW5nKCdvcGVuaWRfc3VjY2VzcycsICRzY3JlZW5OYW1lLCAkc2NyZWVuTmFtZSwgJHVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3RDb250ZW50KCRyZWRpcmVjdFBhZ2VJZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5Mb2coIkVycm9yIHdoaWxlIGZldGNoaW5nIHVzZXJpbmZvIGZvciAiIC4gJHVpZCAuICIgOiAiIC4gJHVzZXJpbmZvWzFdKTsKICAgICAgICAgICAgICAgIHByaW50ICR0aGlzLT5MYW5nKCdvcGVuaWRfdW5rbm93bicsICRzY3JlZW5OYW1lLCAkc2NyZWVuTmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGNhdGNoIChPQXV0aEV4Y2VwdGlvbjIgJGUpIHsKICAgICAgICAkdGhpcy0+TG9nKCRlKTsKICAgIH0KfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.twitter_login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwppZiAoIWlzc2V0KCRnQ21zKSkKICAgIGV4aXQ7Cmdsb2JhbCAkcGFyYW1zOwokdGhpcy0+TG9nKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwokdGhpcy0+TG9nKCIgKioqICIuX19GSUxFX18pOwoKCmdsb2JhbCAkZ0NtczsKJHNtYXJ0eSA9ICYgJGdDbXMtPkdldFNtYXJ0eSgpOwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gIi9vYXV0aC1waHBfMV83XzUvbGlicmFyeS9PQXV0aFN0b3JlLnBocCI7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICIvb2F1dGgtcGhwXzFfN181L2xpYnJhcnkvT0F1dGhSZXF1ZXN0ZXIucGhwIjsKCi8vIENyZWF0ZSBsaW5rIHRvIGFjdGlvbi50d2l0dGVyLmNhbGxiYWNrLnBocCAoZG9uJ3QgdXNlIHhodG1sIGVuY29kaW5nKQokY2FsbGJhY2tVcmwgPSBzdHJfcmVwbGFjZSgnYW1wOycsICcnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0d2l0dGVyX2NhbGxiYWNrJywgJHJldHVybmlkLCBudWxsLCBudWxsLCBudWxsLCB0cnVlLCB0cnVlLCBudWxsLCBudWxsKSk7CiR0aGlzLT5Mb2coIlR3aXR0ZXIgY2FsbGJhY2sgVVJMIDogJGNhbGxiYWNrVXJsIik7CnRyeSB7CiAgICAkb3B0aW9ucyA9IGFycmF5KAogICAgICAgICdjb25zdW1lcl9rZXknID0+ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0d2l0dGVyX2NvbnN1bWVyX2tleScsICcnKSwKICAgICAgICAnY29uc3VtZXJfc2VjcmV0JyA9PiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndHdpdHRlcl9jb25zdW1lcl9zZWNyZXQnLCAnJyksCiAgICAgICAgJ29hdXRoX2NhbGxiYWNrJyA9PiAkY2FsbGJhY2tVcmwpOwogICAgLy8gQ3JlYXRlIHNlc3Npb24gYmFzZWQgc3RvcmUKICAgIE9BdXRoU3RvcmU6Omluc3RhbmNlKCJTZXNzaW9uIiwgJG9wdGlvbnMpOwogICAgLy8gR2V0IHJlcXVlc3QgdG9rZW4KICAgICRyZXF1ZXN0ID0gbmV3IE9BdXRoUmVxdWVzdGVyKCJodHRwczovL3R3aXR0ZXIuY29tL29hdXRoL3JlcXVlc3RfdG9rZW4iLCAiUE9TVCIsICRvcHRpb25zKTsKICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+ZG9SZXF1ZXN0KDApOwogICAgcGFyc2Vfc3RyKCRyZXN1bHRbJ2JvZHknXSwgJHBhcmFtcyk7CiAgICAkdGhpcy0+TG9nKCdUd2l0dGVyIHJlcXVlc3QgdG9rZW4gcmVzdWx0ID0gJyAuIHByaW50X3IoJHJlc3VsdCwgdHJ1ZSkpOwogICAgLy8gQ3JlYXRlIHJlcXVlc3QgYmFzZWQgb24gdG9rZW4KICAgICRyZXF1ZXN0ID0gbmV3IE9BdXRoUmVxdWVzdGVyKCJodHRwczovL3R3aXR0ZXIuY29tL29hdXRoL2F1dGhlbnRpY2F0ZSIsICdHRVQnLCAkcGFyYW1zKTsKICAgIC8vIEdlbmVyYXRlIFVSTCBhbmQgcmVkaXJlY3QgdXNlcgogICAgJHVybCA9ICdodHRwczovL3R3aXR0ZXIuY29tL29hdXRoL2F1dGhlbnRpY2F0ZT8nIC4gJHJlcXVlc3QtPmdldE5vcm1hbGl6ZWRQYXJhbXMoKSAuICcmb2F1dGhfY2FsbGJhY2s9JyAuICRjYWxsYmFja1VybDsKICAgICR0aGlzLT5Mb2coJ1JlZGlyZWN0aW5nIHVzZXIgdG8gJy4kdXJsKTsKICAgIGhlYWRlcigiTG9jYXRpb246ICR1cmwiKTsKfSBjYXRjaCAoT0F1dGhFeGNlcHRpb24yICRlKSB7CiAgICBlY2hvICJFeGNlcHRpb24iIC4gJGUtPmdldE1lc3NhZ2UoKTsKfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/facebook_2_1_2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/facebook_2_1_2/facebook.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewogIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhY2Vib29rIG5lZWRzIHRoZSBDVVJMIFBIUCBleHRlbnNpb24uJyk7Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fZGVjb2RlJykpIHsKICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWNlYm9vayBuZWVkcyB0aGUgSlNPTiBQSFAgZXh0ZW5zaW9uLicpOwp9CgovKioKICogVGhyb3duIHdoZW4gYW4gQVBJIGNhbGwgcmV0dXJucyBhbiBleGNlcHRpb24uCiAqCiAqIEBhdXRob3IgTmFpdGlrIFNoYWggPG5haXRpa0BmYWNlYm9vay5jb20+CiAqLwpjbGFzcyBGYWNlYm9va0FwaUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgLyoqCiAgICogVGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgogICAqLwogIHByb3RlY3RlZCAkcmVzdWx0OwoKICAvKioKICAgKiBNYWtlIGEgbmV3IEFQSSBFeGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4gcmVzdWx0LgogICAqCiAgICogQHBhcmFtIEFycmF5ICRyZXN1bHQgdGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXN1bHQpIHsKICAgICR0aGlzLT5yZXN1bHQgPSAkcmVzdWx0OwoKICAgICRjb2RlID0gaXNzZXQoJHJlc3VsdFsnZXJyb3JfY29kZSddKSA/ICRyZXN1bHRbJ2Vycm9yX2NvZGUnXSA6IDA7CgogICAgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yX2Rlc2NyaXB0aW9uJ10pKSB7CiAgICAgIC8vIE9BdXRoIDIuMCBEcmFmdCAxMCBzdHlsZQogICAgICAkbXNnID0gJHJlc3VsdFsnZXJyb3JfZGVzY3JpcHRpb24nXTsKICAgIH0gZWxzZSBpZiAoaXNzZXQoJHJlc3VsdFsnZXJyb3InXSkgJiYgaXNfYXJyYXkoJHJlc3VsdFsnZXJyb3InXSkpIHsKICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDAwIHN0eWxlCiAgICAgICRtc2cgPSAkcmVzdWx0WydlcnJvciddWydtZXNzYWdlJ107CiAgICB9IGVsc2UgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yX21zZyddKSkgewogICAgICAvLyBSZXN0IHNlcnZlciBzdHlsZQogICAgICAkbXNnID0gJHJlc3VsdFsnZXJyb3JfbXNnJ107CiAgICB9IGVsc2UgewogICAgICAkbXNnID0gJ1Vua25vd24gRXJyb3IuIENoZWNrIGdldFJlc3VsdCgpJzsKICAgIH0KCiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2csICRjb2RlKTsKICB9CgogIC8qKgogICAqIFJldHVybiB0aGUgYXNzb2NpYXRlZCByZXN1bHQgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBBUEkgc2VydmVyLgogICAqCiAgICogQHJldHVybnMgQXJyYXkgdGhlIHJlc3VsdCBmcm9tIHRoZSBBUEkgc2VydmVyCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHsKICAgIHJldHVybiAkdGhpcy0+cmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCB0eXBlIGZvciB0aGUgZXJyb3IuIFRoaXMgd2lsbCBkZWZhdWx0IHRvCiAgICogJ0V4Y2VwdGlvbicgd2hlbiBhIHR5cGUgaXMgbm90IGF2YWlsYWJsZS4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKSB7CiAgICBpZiAoaXNzZXQoJHRoaXMtPnJlc3VsdFsnZXJyb3InXSkpIHsKICAgICAgJGVycm9yID0gJHRoaXMtPnJlc3VsdFsnZXJyb3InXTsKICAgICAgaWYgKGlzX3N0cmluZygkZXJyb3IpKSB7CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDEwIHN0eWxlCiAgICAgICAgcmV0dXJuICRlcnJvcjsKICAgICAgfSBlbHNlIGlmIChpc19hcnJheSgkZXJyb3IpKSB7CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDAwIHN0eWxlCiAgICAgICAgaWYgKGlzc2V0KCRlcnJvclsndHlwZSddKSkgewogICAgICAgICAgcmV0dXJuICRlcnJvclsndHlwZSddOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICdFeGNlcHRpb24nOwogIH0KCiAgLyoqCiAgICogVG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgogICAqCiAgICogQHJldHVybnMgU3RyaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CiAgICAkc3RyID0gJHRoaXMtPmdldFR5cGUoKSAuICc6ICc7CiAgICBpZiAoJHRoaXMtPmNvZGUgIT0gMCkgewogICAgICAkc3RyIC49ICR0aGlzLT5jb2RlIC4gJzogJzsKICAgIH0KICAgIHJldHVybiAkc3RyIC4gJHRoaXMtPm1lc3NhZ2U7CiAgfQp9CgovKioKICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBGYWNlYm9vayBQbGF0Zm9ybS4KICoKICogQGF1dGhvciBOYWl0aWsgU2hhaCA8bmFpdGlrQGZhY2Vib29rLmNvbT4KICovCmNsYXNzIEZhY2Vib29rCnsKICAvKioKICAgKiBWZXJzaW9uLgogICAqLwogIGNvbnN0IFZFUlNJT04gPSAnMi4xLjInOwoKICAvKioKICAgKiBEZWZhdWx0IG9wdGlvbnMgZm9yIGN1cmwuCiAgICovCiAgcHVibGljIHN0YXRpYyAkQ1VSTF9PUFRTID0gYXJyYXkoCiAgICBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUID0+IDEwLAogICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLAogICAgQ1VSTE9QVF9USU1FT1VUICAgICAgICA9PiA2MCwKICAgIENVUkxPUFRfVVNFUkFHRU5UICAgICAgPT4gJ2ZhY2Vib29rLXBocC0yLjAnLAogICk7CgogIC8qKgogICAqIExpc3Qgb2YgcXVlcnkgcGFyYW1ldGVycyB0aGF0IGdldCBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbiByZWJ1aWxkaW5nCiAgICogdGhlIGN1cnJlbnQgVVJMLgogICAqLwogIHByb3RlY3RlZCBzdGF0aWMgJERST1BfUVVFUllfUEFSQU1TID0gYXJyYXkoCiAgICAnc2Vzc2lvbicsCiAgICAnc2lnbmVkX3JlcXVlc3QnLAogICk7CgogIC8qKgogICAqIE1hcHMgYWxpYXNlcyB0byBGYWNlYm9vayBkb21haW5zLgogICAqLwogIHB1YmxpYyBzdGF0aWMgJERPTUFJTl9NQVAgPSBhcnJheSgKICAgICdhcGknICAgICAgPT4gJ2h0dHBzOi8vYXBpLmZhY2Vib29rLmNvbS8nLAogICAgJ2FwaV9yZWFkJyA9PiAnaHR0cHM6Ly9hcGktcmVhZC5mYWNlYm9vay5jb20vJywKICAgICdncmFwaCcgICAgPT4gJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLycsCiAgICAnd3d3JyAgICAgID0+ICdodHRwczovL3d3dy5mYWNlYm9vay5jb20vJywKICApOwoKICAvKioKICAgKiBUaGUgQXBwbGljYXRpb24gSUQuCiAgICovCiAgcHJvdGVjdGVkICRhcHBJZDsKCiAgLyoqCiAgICogVGhlIEFwcGxpY2F0aW9uIEFQSSBTZWNyZXQuCiAgICovCiAgcHJvdGVjdGVkICRhcGlTZWNyZXQ7CgogIC8qKgogICAqIFRoZSBhY3RpdmUgdXNlciBzZXNzaW9uLCBpZiBvbmUgaXMgYXZhaWxhYmxlLgogICAqLwogIHByb3RlY3RlZCAkc2Vzc2lvbjsKCiAgLyoqCiAgICogVGhlIGRhdGEgZnJvbSB0aGUgc2lnbmVkX3JlcXVlc3QgdG9rZW4uCiAgICovCiAgcHJvdGVjdGVkICRzaWduZWRSZXF1ZXN0OwoKICAvKioKICAgKiBJbmRpY2F0ZXMgdGhhdCB3ZSBhbHJlYWR5IGxvYWRlZCB0aGUgc2Vzc2lvbiBhcyBiZXN0IGFzIHdlIGNvdWxkLgogICAqLwogIHByb3RlY3RlZCAkc2Vzc2lvbkxvYWRlZCA9IGZhbHNlOwoKICAvKioKICAgKiBJbmRpY2F0ZXMgaWYgQ29va2llIHN1cHBvcnQgc2hvdWxkIGJlIGVuYWJsZWQuCiAgICovCiAgcHJvdGVjdGVkICRjb29raWVTdXBwb3J0ID0gZmFsc2U7CgogIC8qKgogICAqIEJhc2UgZG9tYWluIGZvciB0aGUgQ29va2llLgogICAqLwogIHByb3RlY3RlZCAkYmFzZURvbWFpbiA9ICcnOwoKICAvKioKICAgKiBJbmRpY2F0ZXMgaWYgdGhlIENVUkwgYmFzZWQgQCBzeW50YXggZm9yIGZpbGUgdXBsb2FkcyBpcyBlbmFibGVkLgogICAqLwogIHByb3RlY3RlZCAkZmlsZVVwbG9hZFN1cHBvcnQgPSBmYWxzZTsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIEZhY2Vib29rIEFwcGxpY2F0aW9uLgogICAqCiAgICogVGhlIGNvbmZpZ3VyYXRpb246CiAgICogLSBhcHBJZDogdGhlIGFwcGxpY2F0aW9uIElECiAgICogLSBzZWNyZXQ6IHRoZSBhcHBsaWNhdGlvbiBzZWNyZXQKICAgKiAtIGNvb2tpZTogKG9wdGlvbmFsKSBib29sZWFuIHRydWUgdG8gZW5hYmxlIGNvb2tpZSBzdXBwb3J0CiAgICogLSBkb21haW46IChvcHRpb25hbCkgZG9tYWluIGZvciB0aGUgY29va2llCiAgICogLSBmaWxlVXBsb2FkOiAob3B0aW9uYWwpIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBmaWxlIHVwbG9hZHMgYXJlIGVuYWJsZWQKICAgKgogICAqIEBwYXJhbSBBcnJheSAkY29uZmlnIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWcpIHsKICAgICR0aGlzLT5zZXRBcHBJZCgkY29uZmlnWydhcHBJZCddKTsKICAgICR0aGlzLT5zZXRBcGlTZWNyZXQoJGNvbmZpZ1snc2VjcmV0J10pOwogICAgaWYgKGlzc2V0KCRjb25maWdbJ2Nvb2tpZSddKSkgewogICAgICAkdGhpcy0+c2V0Q29va2llU3VwcG9ydCgkY29uZmlnWydjb29raWUnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJGNvbmZpZ1snZG9tYWluJ10pKSB7CiAgICAgICR0aGlzLT5zZXRCYXNlRG9tYWluKCRjb25maWdbJ2RvbWFpbiddKTsKICAgIH0KICAgIGlmIChpc3NldCgkY29uZmlnWydmaWxlVXBsb2FkJ10pKSB7CiAgICAgICR0aGlzLT5zZXRGaWxlVXBsb2FkU3VwcG9ydCgkY29uZmlnWydmaWxlVXBsb2FkJ10pOwogICAgfQogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBBcHBsaWNhdGlvbiBJRC4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJGFwcElkIHRoZSBBcHBsaWNhdGlvbiBJRAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXRBcHBJZCgkYXBwSWQpIHsKICAgICR0aGlzLT5hcHBJZCA9ICRhcHBJZDsKICAgIHJldHVybiAkdGhpczsKICB9CgogIC8qKgogICAqIEdldCB0aGUgQXBwbGljYXRpb24gSUQuCiAgICoKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgQXBwbGljYXRpb24gSUQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwSWQoKSB7CiAgICByZXR1cm4gJHRoaXMtPmFwcElkOwogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBBUEkgU2VjcmV0LgogICAqCiAgICogQHBhcmFtIFN0cmluZyAkYXBwSWQgdGhlIEFQSSBTZWNyZXQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0QXBpU2VjcmV0KCRhcGlTZWNyZXQpIHsKICAgICR0aGlzLT5hcGlTZWNyZXQgPSAkYXBpU2VjcmV0OwogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBBUEkgU2VjcmV0LgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIEFQSSBTZWNyZXQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBpU2VjcmV0KCkgewogICAgcmV0dXJuICR0aGlzLT5hcGlTZWNyZXQ7CiAgfQoKICAvKioKICAgKiBTZXQgdGhlIENvb2tpZSBTdXBwb3J0IHN0YXR1cy4KICAgKgogICAqIEBwYXJhbSBCb29sZWFuICRjb29raWVTdXBwb3J0IHRoZSBDb29raWUgU3VwcG9ydCBzdGF0dXMKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29va2llU3VwcG9ydCgkY29va2llU3VwcG9ydCkgewogICAgJHRoaXMtPmNvb2tpZVN1cHBvcnQgPSAkY29va2llU3VwcG9ydDsKICAgIHJldHVybiAkdGhpczsKICB9CgogIC8qKgogICAqIEdldCB0aGUgQ29va2llIFN1cHBvcnQgc3RhdHVzLgogICAqCiAgICogQHJldHVybiBCb29sZWFuIHRoZSBDb29raWUgU3VwcG9ydCBzdGF0dXMKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdXNlQ29va2llU3VwcG9ydCgpIHsKICAgIHJldHVybiAkdGhpcy0+Y29va2llU3VwcG9ydDsKICB9CgogIC8qKgogICAqIFNldCB0aGUgYmFzZSBkb21haW4gZm9yIHRoZSBDb29raWUuCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nICRkb21haW4gdGhlIGJhc2UgZG9tYWluCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNldEJhc2VEb21haW4oJGRvbWFpbikgewogICAgJHRoaXMtPmJhc2VEb21haW4gPSAkZG9tYWluOwogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBiYXNlIGRvbWFpbiBmb3IgdGhlIENvb2tpZS4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBiYXNlIGRvbWFpbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlRG9tYWluKCkgewogICAgcmV0dXJuICR0aGlzLT5iYXNlRG9tYWluOwogIH0KCiAgLyoqCiAgICogU2V0IHRoZSBmaWxlIHVwbG9hZCBzdXBwb3J0IHN0YXR1cy4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJGRvbWFpbiB0aGUgYmFzZSBkb21haW4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsZVVwbG9hZFN1cHBvcnQoJGZpbGVVcGxvYWRTdXBwb3J0KSB7CiAgICAkdGhpcy0+ZmlsZVVwbG9hZFN1cHBvcnQgPSAkZmlsZVVwbG9hZFN1cHBvcnQ7CiAgICByZXR1cm4gJHRoaXM7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGZpbGUgdXBsb2FkIHN1cHBvcnQgc3RhdHVzLgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIGJhc2UgZG9tYWluCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHVzZUZpbGVVcGxvYWRTdXBwb3J0KCkgewogICAgcmV0dXJuICR0aGlzLT5maWxlVXBsb2FkU3VwcG9ydDsKICB9CgogIC8qKgogICAqIEdldCB0aGUgZGF0YSBmcm9tIGEgc2lnbmVkX3JlcXVlc3QgdG9rZW4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBiYXNlIGRvbWFpbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduZWRSZXF1ZXN0KCkgewogICAgaWYgKCEkdGhpcy0+c2lnbmVkUmVxdWVzdCkgewogICAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWydzaWduZWRfcmVxdWVzdCddKSkgewogICAgICAgICR0aGlzLT5zaWduZWRSZXF1ZXN0ID0gJHRoaXMtPnBhcnNlU2lnbmVkUmVxdWVzdCgKICAgICAgICAgICRfUkVRVUVTVFsnc2lnbmVkX3JlcXVlc3QnXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdGhpcy0+c2lnbmVkUmVxdWVzdDsKICB9CgogIC8qKgogICAqIFNldCB0aGUgU2Vzc2lvbi4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkc2Vzc2lvbiB0aGUgc2Vzc2lvbgogICAqIEBwYXJhbSBCb29sZWFuICR3cml0ZV9jb29raWUgaW5kaWNhdGUgaWYgYSBjb29raWUgc2hvdWxkIGJlIHdyaXR0ZW4uIHRoaXMKICAgKiB2YWx1ZSBpcyBpZ25vcmVkIGlmIGNvb2tpZSBzdXBwb3J0IGhhcyBiZWVuIGRpc2FibGVkLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXRTZXNzaW9uKCRzZXNzaW9uPW51bGwsICR3cml0ZV9jb29raWU9dHJ1ZSkgewogICAgJHNlc3Npb24gPSAkdGhpcy0+dmFsaWRhdGVTZXNzaW9uT2JqZWN0KCRzZXNzaW9uKTsKICAgICR0aGlzLT5zZXNzaW9uTG9hZGVkID0gdHJ1ZTsKICAgICR0aGlzLT5zZXNzaW9uID0gJHNlc3Npb247CiAgICBpZiAoJHdyaXRlX2Nvb2tpZSkgewogICAgICAkdGhpcy0+c2V0Q29va2llRnJvbVNlc3Npb24oJHNlc3Npb24pOwogICAgfQogICAgcmV0dXJuICR0aGlzOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBzZXNzaW9uIG9iamVjdC4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYSBzaWduZWQgc2Vzc2lvbgogICAqIHNlbnQgdmlhIHRoZSBzaWduZWRfcmVxdWVzdCwgQ29va2llIG9yIFF1ZXJ5IFBhcmFtZXRlcnMgaWYgbmVlZGVkLgogICAqCiAgICogQHJldHVybiBBcnJheSB0aGUgc2Vzc2lvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXNzaW9uKCkgewogICAgaWYgKCEkdGhpcy0+c2Vzc2lvbkxvYWRlZCkgewogICAgICAkc2Vzc2lvbiA9IG51bGw7CiAgICAgICR3cml0ZV9jb29raWUgPSB0cnVlOwoKICAgICAgLy8gdHJ5IGxvYWRpbmcgc2Vzc2lvbiBmcm9tIHNpZ25lZF9yZXF1ZXN0IGluICRfUkVRVUVTVAogICAgICAkc2lnbmVkUmVxdWVzdCA9ICR0aGlzLT5nZXRTaWduZWRSZXF1ZXN0KCk7CiAgICAgIGlmICgkc2lnbmVkUmVxdWVzdCkgewogICAgICAgIC8vIHNpZyBpcyBnb29kLCB1c2UgdGhlIHNpZ25lZFJlcXVlc3QKICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT5jcmVhdGVTZXNzaW9uRnJvbVNpZ25lZFJlcXVlc3QoJHNpZ25lZFJlcXVlc3QpOwogICAgICB9CgogICAgICAvLyB0cnkgbG9hZGluZyBzZXNzaW9uIGZyb20gJF9SRVFVRVNUCiAgICAgIGlmICghJHNlc3Npb24gJiYgaXNzZXQoJF9SRVFVRVNUWydzZXNzaW9uJ10pKSB7CiAgICAgICAgJHNlc3Npb24gPSBqc29uX2RlY29kZSgKICAgICAgICAgIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkKICAgICAgICAgICAgPyBzdHJpcHNsYXNoZXMoJF9SRVFVRVNUWydzZXNzaW9uJ10pCiAgICAgICAgICAgIDogJF9SRVFVRVNUWydzZXNzaW9uJ10sCiAgICAgICAgICB0cnVlCiAgICAgICAgKTsKICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT52YWxpZGF0ZVNlc3Npb25PYmplY3QoJHNlc3Npb24pOwogICAgICB9CgogICAgICAvLyB0cnkgbG9hZGluZyBzZXNzaW9uIGZyb20gY29va2llIGlmIG5lY2Vzc2FyeQogICAgICBpZiAoISRzZXNzaW9uICYmICR0aGlzLT51c2VDb29raWVTdXBwb3J0KCkpIHsKICAgICAgICAkY29va2llTmFtZSA9ICR0aGlzLT5nZXRTZXNzaW9uQ29va2llTmFtZSgpOwogICAgICAgIGlmIChpc3NldCgkX0NPT0tJRVskY29va2llTmFtZV0pKSB7CiAgICAgICAgICAkc2Vzc2lvbiA9IGFycmF5KCk7CiAgICAgICAgICBwYXJzZV9zdHIodHJpbSgKICAgICAgICAgICAgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKQogICAgICAgICAgICAgID8gc3RyaXBzbGFzaGVzKCRfQ09PS0lFWyRjb29raWVOYW1lXSkKICAgICAgICAgICAgICA6ICRfQ09PS0lFWyRjb29raWVOYW1lXSwKICAgICAgICAgICAgJyInCiAgICAgICAgICApLCAkc2Vzc2lvbik7CiAgICAgICAgICAkc2Vzc2lvbiA9ICR0aGlzLT52YWxpZGF0ZVNlc3Npb25PYmplY3QoJHNlc3Npb24pOwogICAgICAgICAgLy8gd3JpdGUgb25seSBpZiB3ZSBuZWVkIHRvIGRlbGV0ZSBhIGludmFsaWQgc2Vzc2lvbiBjb29raWUKICAgICAgICAgICR3cml0ZV9jb29raWUgPSBlbXB0eSgkc2Vzc2lvbik7CiAgICAgICAgfQogICAgICB9CgogICAgICAkdGhpcy0+c2V0U2Vzc2lvbigkc2Vzc2lvbiwgJHdyaXRlX2Nvb2tpZSk7CiAgICB9CgogICAgcmV0dXJuICR0aGlzLT5zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBVSUQgZnJvbSB0aGUgc2Vzc2lvbi4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBVSUQgaWYgYXZhaWxhYmxlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXIoKSB7CiAgICAkc2Vzc2lvbiA9ICR0aGlzLT5nZXRTZXNzaW9uKCk7CiAgICByZXR1cm4gJHNlc3Npb24gPyAkc2Vzc2lvblsndWlkJ10gOiBudWxsOwogIH0KCiAgLyoqCiAgICogR2V0cyBhIE9BdXRoIGFjY2VzcyB0b2tlbi4KICAgKgogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY2Nlc3MgdG9rZW4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oKSB7CiAgICAkc2Vzc2lvbiA9ICR0aGlzLT5nZXRTZXNzaW9uKCk7CiAgICAvLyBlaXRoZXIgdXNlciBzZXNzaW9uIHNpZ25lZCwgb3IgYXBwIHNpZ25lZAogICAgaWYgKCRzZXNzaW9uKSB7CiAgICAgIHJldHVybiAkc2Vzc2lvblsnYWNjZXNzX3Rva2VuJ107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPmdldEFwcElkKCkgLid8Jy4gJHRoaXMtPmdldEFwaVNlY3JldCgpOwogICAgfQogIH0KCiAgLyoqCiAgICogR2V0IGEgTG9naW4gVVJMIGZvciB1c2Ugd2l0aCByZWRpcmVjdHMuIEJ5IGRlZmF1bHQsIGZ1bGwgcGFnZSByZWRpcmVjdCBpcwogICAqIGFzc3VtZWQuIElmIHlvdSBhcmUgdXNpbmcgdGhlIGdlbmVyYXRlZCBVUkwgd2l0aCBhIHdpbmRvdy5vcGVuKCkgY2FsbCBpbgogICAqIEphdmFTY3JpcHQsIHlvdSBjYW4gcGFzcyBpbiBkaXNwbGF5PXBvcHVwIGFzIHBhcnQgb2YgdGhlICRwYXJhbXMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyczoKICAgKiAtIG5leHQ6IHRoZSB1cmwgdG8gZ28gdG8gYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvZ2luCiAgICogLSBjYW5jZWxfdXJsOiB0aGUgdXJsIHRvIGdvIHRvIGFmdGVyIHRoZSB1c2VyIGNhbmNlbHMKICAgKiAtIHJlcV9wZXJtczogY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcmVxdWVzdGVkIGV4dGVuZGVkIHBlcm1zCiAgICogLSBkaXNwbGF5OiBjYW4gYmUgInBhZ2UiIChkZWZhdWx0LCBmdWxsIHBhZ2UpIG9yICJwb3B1cCIKICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHByb3ZpZGUgY3VzdG9tIHBhcmFtZXRlcnMKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgbG9naW4gZmxvdwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dpblVybCgkcGFyYW1zPWFycmF5KCkpIHsKICAgICRjdXJyZW50VXJsID0gJHRoaXMtPmdldEN1cnJlbnRVcmwoKTsKICAgIHJldHVybiAkdGhpcy0+Z2V0VXJsKAogICAgICAnd3d3JywKICAgICAgJ2xvZ2luLnBocCcsCiAgICAgIGFycmF5X21lcmdlKGFycmF5KAogICAgICAgICdhcGlfa2V5JyAgICAgICAgID0+ICR0aGlzLT5nZXRBcHBJZCgpLAogICAgICAgICdjYW5jZWxfdXJsJyAgICAgID0+ICRjdXJyZW50VXJsLAogICAgICAgICdkaXNwbGF5JyAgICAgICAgID0+ICdwYWdlJywKICAgICAgICAnZmJjb25uZWN0JyAgICAgICA9PiAxLAogICAgICAgICduZXh0JyAgICAgICAgICAgID0+ICRjdXJyZW50VXJsLAogICAgICAgICdyZXR1cm5fc2Vzc2lvbicgID0+IDEsCiAgICAgICAgJ3Nlc3Npb25fdmVyc2lvbicgPT4gMywKICAgICAgICAndicgICAgICAgICAgICAgICA9PiAnMS4wJywKICAgICAgKSwgJHBhcmFtcykKICAgICk7CiAgfQoKICAvKioKICAgKiBHZXQgYSBMb2dvdXQgVVJMIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCByZWRpcmVjdHMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyczoKICAgKiAtIG5leHQ6IHRoZSB1cmwgdG8gZ28gdG8gYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvZ291dAogICAqCiAgICogQHBhcmFtIEFycmF5ICRwYXJhbXMgcHJvdmlkZSBjdXN0b20gcGFyYW1ldGVycwogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBVUkwgZm9yIHRoZSBsb2dvdXQgZmxvdwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dvdXRVcmwoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPmdldFVybCgKICAgICAgJ3d3dycsCiAgICAgICdsb2dvdXQucGhwJywKICAgICAgYXJyYXlfbWVyZ2UoYXJyYXkoCiAgICAgICAgJ25leHQnICAgICAgICAgPT4gJHRoaXMtPmdldEN1cnJlbnRVcmwoKSwKICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkdGhpcy0+Z2V0QWNjZXNzVG9rZW4oKSwKICAgICAgKSwgJHBhcmFtcykKICAgICk7CiAgfQoKICAvKioKICAgKiBHZXQgYSBsb2dpbiBzdGF0dXMgVVJMIHRvIGZldGNoIHRoZSBzdGF0dXMgZnJvbSBmYWNlYm9vay4KICAgKgogICAqIFRoZSBwYXJhbWV0ZXJzOgogICAqIC0gb2tfc2Vzc2lvbjogdGhlIFVSTCB0byBnbyB0byBpZiBhIHNlc3Npb24gaXMgZm91bmQKICAgKiAtIG5vX3Nlc3Npb246IHRoZSBVUkwgdG8gZ28gdG8gaWYgdGhlIHVzZXIgaXMgbm90IGNvbm5lY3RlZAogICAqIC0gbm9fdXNlcjogdGhlIFVSTCB0byBnbyB0byBpZiB0aGUgdXNlciBpcyBub3Qgc2lnbmVkIGludG8gZmFjZWJvb2sKICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHByb3ZpZGUgY3VzdG9tIHBhcmFtZXRlcnMKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgbG9nb3V0IGZsb3cKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9naW5TdGF0dXNVcmwoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPmdldFVybCgKICAgICAgJ3d3dycsCiAgICAgICdleHRlcm4vbG9naW5fc3RhdHVzLnBocCcsCiAgICAgIGFycmF5X21lcmdlKGFycmF5KAogICAgICAgICdhcGlfa2V5JyAgICAgICAgID0+ICR0aGlzLT5nZXRBcHBJZCgpLAogICAgICAgICdub19zZXNzaW9uJyAgICAgID0+ICR0aGlzLT5nZXRDdXJyZW50VXJsKCksCiAgICAgICAgJ25vX3VzZXInICAgICAgICAgPT4gJHRoaXMtPmdldEN1cnJlbnRVcmwoKSwKICAgICAgICAnb2tfc2Vzc2lvbicgICAgICA9PiAkdGhpcy0+Z2V0Q3VycmVudFVybCgpLAogICAgICAgICdzZXNzaW9uX3ZlcnNpb24nID0+IDMsCiAgICAgICksICRwYXJhbXMpCiAgICApOwogIH0KCiAgLyoqCiAgICogTWFrZSBhbiBBUEkgY2FsbC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBBUEkgY2FsbCBwYXJhbWV0ZXJzCiAgICogQHJldHVybiB0aGUgZGVjb2RlZCByZXNwb25zZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBhcGkoLyogcG9seW1vcnBoaWMgKi8pIHsKICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgaWYgKGlzX2FycmF5KCRhcmdzWzBdKSkgewogICAgICByZXR1cm4gJHRoaXMtPl9yZXN0c2VydmVyKCRhcmdzWzBdKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJ19ncmFwaCcpLCAkYXJncyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBJbnZva2UgdGhlIG9sZCByZXN0c2VydmVyLnBocCBlbmRwb2ludC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIG1ldGhvZCBjYWxsIG9iamVjdAogICAqIEByZXR1cm4gdGhlIGRlY29kZWQgcmVzcG9uc2Ugb2JqZWN0CiAgICogQHRocm93cyBGYWNlYm9va0FwaUV4Y2VwdGlvbgogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVzdHNlcnZlcigkcGFyYW1zKSB7CiAgICAvLyBnZW5lcmljIGFwcGxpY2F0aW9uIGxldmVsIHBhcmFtZXRlcnMKICAgICRwYXJhbXNbJ2FwaV9rZXknXSA9ICR0aGlzLT5nZXRBcHBJZCgpOwogICAgJHBhcmFtc1snZm9ybWF0J10gPSAnanNvbi1zdHJpbmdzJzsKCiAgICAkcmVzdWx0ID0ganNvbl9kZWNvZGUoJHRoaXMtPl9vYXV0aFJlcXVlc3QoCiAgICAgICR0aGlzLT5nZXRBcGlVcmwoJHBhcmFtc1snbWV0aG9kJ10pLAogICAgICAkcGFyYW1zCiAgICApLCB0cnVlKTsKCiAgICAvLyByZXN1bHRzIGFyZSByZXR1cm5lZCwgZXJyb3JzIGFyZSB0aHJvd24KICAgIGlmIChpc19hcnJheSgkcmVzdWx0KSAmJiBpc3NldCgkcmVzdWx0WydlcnJvcl9jb2RlJ10pKSB7CiAgICAgIHRocm93IG5ldyBGYWNlYm9va0FwaUV4Y2VwdGlvbigkcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgLyoqCiAgICogSW52b2tlIHRoZSBHcmFwaCBBUEkuCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nICRwYXRoIHRoZSBwYXRoIChyZXF1aXJlZCkKICAgKiBAcGFyYW0gU3RyaW5nICRtZXRob2QgdGhlIGh0dHAgbWV0aG9kIChkZWZhdWx0ICdHRVQnKQogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBxdWVyeS9wb3N0IGRhdGEKICAgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIHJlc3BvbnNlIG9iamVjdAogICAqIEB0aHJvd3MgRmFjZWJvb2tBcGlFeGNlcHRpb24KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2dyYXBoKCRwYXRoLCAkbWV0aG9kPSdHRVQnLCAkcGFyYW1zPWFycmF5KCkpIHsKICAgIGlmIChpc19hcnJheSgkbWV0aG9kKSAmJiBlbXB0eSgkcGFyYW1zKSkgewogICAgICAkcGFyYW1zID0gJG1ldGhvZDsKICAgICAgJG1ldGhvZCA9ICdHRVQnOwogICAgfQogICAgJHBhcmFtc1snbWV0aG9kJ10gPSAkbWV0aG9kOyAvLyBtZXRob2Qgb3ZlcnJpZGUgYXMgd2UgYWx3YXlzIGRvIGEgUE9TVAoKICAgICRyZXN1bHQgPSBqc29uX2RlY29kZSgkdGhpcy0+X29hdXRoUmVxdWVzdCgKICAgICAgJHRoaXMtPmdldFVybCgnZ3JhcGgnLCAkcGF0aCksCiAgICAgICRwYXJhbXMKICAgICksIHRydWUpOwoKICAgIC8vIHJlc3VsdHMgYXJlIHJldHVybmVkLCBlcnJvcnMgYXJlIHRocm93bgogICAgaWYgKGlzX2FycmF5KCRyZXN1bHQpICYmIGlzc2V0KCRyZXN1bHRbJ2Vycm9yJ10pKSB7CiAgICAgICRlID0gbmV3IEZhY2Vib29rQXBpRXhjZXB0aW9uKCRyZXN1bHQpOwogICAgICBzd2l0Y2ggKCRlLT5nZXRUeXBlKCkpIHsKICAgICAgICAvLyBPQXV0aCAyLjAgRHJhZnQgMDAgc3R5bGUKICAgICAgICBjYXNlICdPQXV0aEV4Y2VwdGlvbic6CiAgICAgICAgLy8gT0F1dGggMi4wIERyYWZ0IDEwIHN0eWxlCiAgICAgICAgY2FzZSAnaW52YWxpZF90b2tlbic6CiAgICAgICAgICAkdGhpcy0+c2V0U2Vzc2lvbihudWxsKTsKICAgICAgfQogICAgICB0aHJvdyAkZTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgLyoqCiAgICogTWFrZSBhIE9BdXRoIFJlcXVlc3QKICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJHBhdGggdGhlIHBhdGggKHJlcXVpcmVkKQogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBxdWVyeS9wb3N0IGRhdGEKICAgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIHJlc3BvbnNlIG9iamVjdAogICAqIEB0aHJvd3MgRmFjZWJvb2tBcGlFeGNlcHRpb24KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX29hdXRoUmVxdWVzdCgkdXJsLCAkcGFyYW1zKSB7CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2FjY2Vzc190b2tlbiddKSkgewogICAgICAkcGFyYW1zWydhY2Nlc3NfdG9rZW4nXSA9ICR0aGlzLT5nZXRBY2Nlc3NUb2tlbigpOwogICAgfQoKICAgIC8vIGpzb25fZW5jb2RlIGFsbCBwYXJhbXMgdmFsdWVzIHRoYXQgYXJlIG5vdCBzdHJpbmdzCiAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgIGlmICghaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAkcGFyYW1zWyRrZXldID0ganNvbl9lbmNvZGUoJHZhbHVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICR0aGlzLT5tYWtlUmVxdWVzdCgkdXJsLCAkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIE1ha2VzIGFuIEhUVFAgcmVxdWVzdC4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRlbiBieSBzdWJjbGFzc2VzIGlmCiAgICogZGV2ZWxvcGVycyB3YW50IHRvIGRvIGZhbmNpZXIgdGhpbmdzIG9yIHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBjdXJsIHRvCiAgICogbWFrZSB0aGUgcmVxdWVzdC4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJHVybCB0aGUgVVJMIHRvIG1ha2UgdGhlIHJlcXVlc3QgdG8KICAgKiBAcGFyYW0gQXJyYXkgJHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBQT1NUIGJvZHkKICAgKiBAcGFyYW0gQ3VybEhhbmRsZXIgJGNoIG9wdGlvbmFsIGluaXRpYWxpemVkIGN1cmwgaGFuZGxlCiAgICogQHJldHVybiBTdHJpbmcgdGhlIHJlc3BvbnNlIHRleHQKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFrZVJlcXVlc3QoJHVybCwgJHBhcmFtcywgJGNoPW51bGwpIHsKICAgIGlmICghJGNoKSB7CiAgICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgfQoKICAgICRvcHRzID0gc2VsZjo6JENVUkxfT1BUUzsKICAgIGlmICgkdGhpcy0+dXNlRmlsZVVwbG9hZFN1cHBvcnQoKSkgewogICAgICAkb3B0c1tDVVJMT1BUX1BPU1RGSUVMRFNdID0gJHBhcmFtczsKICAgIH0gZWxzZSB7CiAgICAgICRvcHRzW0NVUkxPUFRfUE9TVEZJRUxEU10gPSBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsIG51bGwsICcmJyk7CiAgICB9CiAgICAkb3B0c1tDVVJMT1BUX1VSTF0gPSAkdXJsOwoKICAgIC8vIGRpc2FibGUgdGhlICdFeHBlY3Q6IDEwMC1jb250aW51ZScgYmVoYXZpb3VyLiBUaGlzIGNhdXNlcyBDVVJMIHRvIHdhaXQKICAgIC8vIGZvciAyIHNlY29uZHMgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaGVhZGVyLgogICAgaWYgKGlzc2V0KCRvcHRzW0NVUkxPUFRfSFRUUEhFQURFUl0pKSB7CiAgICAgICRleGlzdGluZ19oZWFkZXJzID0gJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXTsKICAgICAgJGV4aXN0aW5nX2hlYWRlcnNbXSA9ICdFeHBlY3Q6JzsKICAgICAgJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXSA9ICRleGlzdGluZ19oZWFkZXJzOwogICAgfSBlbHNlIHsKICAgICAgJG9wdHNbQ1VSTE9QVF9IVFRQSEVBREVSXSA9IGFycmF5KCdFeHBlY3Q6Jyk7CiAgICB9CgogICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCAkb3B0cyk7CiAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgJGUgPSBuZXcgRmFjZWJvb2tBcGlFeGNlcHRpb24oYXJyYXkoCiAgICAgICAgJ2Vycm9yX2NvZGUnID0+IGN1cmxfZXJybm8oJGNoKSwKICAgICAgICAnZXJyb3InICAgICAgPT4gYXJyYXkoCiAgICAgICAgICAnbWVzc2FnZScgPT4gY3VybF9lcnJvcigkY2gpLAogICAgICAgICAgJ3R5cGUnICAgID0+ICdDdXJsRXhjZXB0aW9uJywKICAgICAgICApLAogICAgICApKTsKICAgICAgY3VybF9jbG9zZSgkY2gpOwogICAgICB0aHJvdyAkZTsKICAgIH0KICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIENvb2tpZSB0aGF0IGNvbnRhaW5zIHRoZSBzZXNzaW9uLgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIGNvb2tpZSBuYW1lCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNlc3Npb25Db29raWVOYW1lKCkgewogICAgcmV0dXJuICdmYnNfJyAuICR0aGlzLT5nZXRBcHBJZCgpOwogIH0KCiAgLyoqCiAgICogU2V0IGEgSlMgQ29va2llIGJhc2VkIG9uIHRoZSBfcGFzc2VkIGluXyBzZXNzaW9uLiBJdCBkb2VzIG5vdCB1c2UgdGhlCiAgICogY3VycmVudGx5IHN0b3JlZCBzZXNzaW9uIC0tIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgcGFzcyBpdCBpbi4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkc2Vzc2lvbiB0aGUgc2Vzc2lvbiB0byB1c2UgZm9yIHNldHRpbmcgdGhlIGNvb2tpZQogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRDb29raWVGcm9tU2Vzc2lvbigkc2Vzc2lvbj1udWxsKSB7CiAgICBpZiAoISR0aGlzLT51c2VDb29raWVTdXBwb3J0KCkpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgICRjb29raWVOYW1lID0gJHRoaXMtPmdldFNlc3Npb25Db29raWVOYW1lKCk7CiAgICAkdmFsdWUgPSAnZGVsZXRlZCc7CiAgICAkZXhwaXJlcyA9IHRpbWUoKSAtIDM2MDA7CiAgICAkZG9tYWluID0gJHRoaXMtPmdldEJhc2VEb21haW4oKTsKICAgIGlmICgkc2Vzc2lvbikgewogICAgICAkdmFsdWUgPSAnIicgLiBodHRwX2J1aWxkX3F1ZXJ5KCRzZXNzaW9uLCBudWxsLCAnJicpIC4gJyInOwogICAgICBpZiAoaXNzZXQoJHNlc3Npb25bJ2Jhc2VfZG9tYWluJ10pKSB7CiAgICAgICAgJGRvbWFpbiA9ICRzZXNzaW9uWydiYXNlX2RvbWFpbiddOwogICAgICB9CiAgICAgICRleHBpcmVzID0gJHNlc3Npb25bJ2V4cGlyZXMnXTsKICAgIH0KCiAgICAvLyBwcmVwZW5kIGRvdCBpZiBhIGRvbWFpbiBpcyBmb3VuZAogICAgaWYgKCRkb21haW4pIHsKICAgICAgJGRvbWFpbiA9ICcuJyAuICRkb21haW47CiAgICB9CgogICAgLy8gaWYgYW4gZXhpc3RpbmcgY29va2llIGlzIG5vdCBzZXQsIHdlIGRvbnQgbmVlZCB0byBkZWxldGUgaXQKICAgIGlmICgkdmFsdWUgPT0gJ2RlbGV0ZWQnICYmIGVtcHR5KCRfQ09PS0lFWyRjb29raWVOYW1lXSkpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChoZWFkZXJzX3NlbnQoKSkgewogICAgICBzZWxmOjplcnJvckxvZygnQ291bGQgbm90IHNldCBjb29raWUuIEhlYWRlcnMgYWxyZWFkeSBzZW50LicpOwoKICAgIC8vIGlnbm9yZSBmb3IgY29kZSBjb3ZlcmFnZSBhcyB3ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gc2V0Y29va2llIGluIGEgQ0xJCiAgICAvLyBlbnZpcm9ubWVudAogICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICB9IGVsc2UgewogICAgICBzZXRjb29raWUoJGNvb2tpZU5hbWUsICR2YWx1ZSwgJGV4cGlyZXMsICcvJywgJGRvbWFpbik7CiAgICB9CiAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCiAgfQoKICAvKioKICAgKiBWYWxpZGF0ZXMgYSBzZXNzaW9uX3ZlcnNpb249MyBzdHlsZSBzZXNzaW9uIG9iamVjdC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkc2Vzc2lvbiB0aGUgc2Vzc2lvbiBvYmplY3QKICAgKiBAcmV0dXJuIEFycmF5IHRoZSBzZXNzaW9uIG9iamVjdCBpZiBpdCB2YWxpZGF0ZXMsIG51bGwgb3RoZXJ3aXNlCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlU2Vzc2lvbk9iamVjdCgkc2Vzc2lvbikgewogICAgLy8gbWFrZSBzdXJlIHNvbWUgZXNzZW50aWFsIGZpZWxkcyBleGlzdAogICAgaWYgKGlzX2FycmF5KCRzZXNzaW9uKSAmJgogICAgICAgIGlzc2V0KCRzZXNzaW9uWyd1aWQnXSkgJiYKICAgICAgICBpc3NldCgkc2Vzc2lvblsnYWNjZXNzX3Rva2VuJ10pICYmCiAgICAgICAgaXNzZXQoJHNlc3Npb25bJ3NpZyddKSkgewogICAgICAvLyB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlCiAgICAgICRzZXNzaW9uX3dpdGhvdXRfc2lnID0gJHNlc3Npb247CiAgICAgIHVuc2V0KCRzZXNzaW9uX3dpdGhvdXRfc2lnWydzaWcnXSk7CiAgICAgICRleHBlY3RlZF9zaWcgPSBzZWxmOjpnZW5lcmF0ZVNpZ25hdHVyZSgKICAgICAgICAkc2Vzc2lvbl93aXRob3V0X3NpZywKICAgICAgICAkdGhpcy0+Z2V0QXBpU2VjcmV0KCkKICAgICAgKTsKICAgICAgaWYgKCRzZXNzaW9uWydzaWcnXSAhPSAkZXhwZWN0ZWRfc2lnKSB7CiAgICAgICAgc2VsZjo6ZXJyb3JMb2coJ0dvdCBpbnZhbGlkIHNlc3Npb24gc2lnbmF0dXJlIGluIGNvb2tpZS4nKTsKICAgICAgICAkc2Vzc2lvbiA9IG51bGw7CiAgICAgIH0KICAgICAgLy8gY2hlY2sgZXhwaXJ5IHRpbWUKICAgIH0gZWxzZSB7CiAgICAgICRzZXNzaW9uID0gbnVsbDsKICAgIH0KICAgIHJldHVybiAkc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBvdXIgSlMgc2Vzc2lvbiBvYmplY3QgZnJvbSB0aGUKICAgKiBzaWduZWQgdG9rZW4ncyBkYXRhCiAgICoKICAgKiBUT0RPOiBOdWtlIHRoaXMgb25jZSB0aGUgbG9naW4gZmxvdyB1c2VzIE9BdXRoMgogICAqCiAgICogQHBhcmFtIEFycmF5IHRoZSBvdXRwdXQgb2YgZ2V0U2lnbmVkUmVxdWVzdAogICAqIEByZXR1cm4gQXJyYXkgU29tZXRoaW5nIHRoYXQgd2lsbCB3b3JrIGFzIGEgc2Vzc2lvbgogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVTZXNzaW9uRnJvbVNpZ25lZFJlcXVlc3QoJGRhdGEpIHsKICAgIGlmICghaXNzZXQoJGRhdGFbJ29hdXRoX3Rva2VuJ10pKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgICRzZXNzaW9uID0gYXJyYXkoCiAgICAgICd1aWQnICAgICAgICAgID0+ICRkYXRhWyd1c2VyX2lkJ10sCiAgICAgICdhY2Nlc3NfdG9rZW4nID0+ICRkYXRhWydvYXV0aF90b2tlbiddLAogICAgICAnZXhwaXJlcycgICAgICA9PiAkZGF0YVsnZXhwaXJlcyddLAogICAgKTsKCiAgICAvLyBwdXQgYSByZWFsIHNpZywgc28gdGhhdCB2YWxpZGF0ZVNpZ25hdHVyZSB3b3JrcwogICAgJHNlc3Npb25bJ3NpZyddID0gc2VsZjo6Z2VuZXJhdGVTaWduYXR1cmUoCiAgICAgICRzZXNzaW9uLAogICAgICAkdGhpcy0+Z2V0QXBpU2VjcmV0KCkKICAgICk7CgogICAgcmV0dXJuICRzZXNzaW9uOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgc2lnbmVkX3JlcXVlc3QgYW5kIHZhbGlkYXRlcyB0aGUgc2lnbmF0dXJlLgogICAqIFRoZW4gc2F2ZXMgaXQgaW4gJHRoaXMtPnNpZ25lZF9kYXRhCiAgICoKICAgKiBAcGFyYW0gU3RyaW5nIEEgc2lnbmVkIHRva2VuCiAgICogQHBhcmFtIEJvb2xlYW4gU2hvdWxkIHdlIHJlbW92ZSB0aGUgcGFydHMgb2YgdGhlIHBheWxvYWQgdGhhdAogICAqICAgICAgICAgICAgICAgIGFyZSB1c2VkIGJ5IHRoZSBhbGdvcml0aG0/CiAgICogQHJldHVybiBBcnJheSB0aGUgcGF5bG9hZCBpbnNpZGUgaXQgb3IgbnVsbCBpZiB0aGUgc2lnIGlzIHdyb25nCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlU2lnbmVkUmVxdWVzdCgkc2lnbmVkX3JlcXVlc3QpIHsKICAgIGxpc3QoJGVuY29kZWRfc2lnLCAkcGF5bG9hZCkgPSBleHBsb2RlKCcuJywgJHNpZ25lZF9yZXF1ZXN0LCAyKTsKCiAgICAvLyBkZWNvZGUgdGhlIGRhdGEKICAgICRzaWcgPSBzZWxmOjpiYXNlNjRVcmxEZWNvZGUoJGVuY29kZWRfc2lnKTsKICAgICRkYXRhID0ganNvbl9kZWNvZGUoc2VsZjo6YmFzZTY0VXJsRGVjb2RlKCRwYXlsb2FkKSwgdHJ1ZSk7CgogICAgaWYgKHN0cnRvdXBwZXIoJGRhdGFbJ2FsZ29yaXRobSddKSAhPT0gJ0hNQUMtU0hBMjU2JykgewogICAgICBzZWxmOjplcnJvckxvZygnVW5rbm93biBhbGdvcml0aG0uIEV4cGVjdGVkIEhNQUMtU0hBMjU2Jyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIGNoZWNrIHNpZwogICAgJGV4cGVjdGVkX3NpZyA9IGhhc2hfaG1hYygnc2hhMjU2JywgJHBheWxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRBcGlTZWNyZXQoKSwgJHJhdyA9IHRydWUpOwogICAgaWYgKCRzaWcgIT09ICRleHBlY3RlZF9zaWcpIHsKICAgICAgc2VsZjo6ZXJyb3JMb2coJ0JhZCBTaWduZWQgSlNPTiBzaWduYXR1cmUhJyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiAkZGF0YTsKICB9CgogIC8qKgogICAqIEJ1aWxkIHRoZSBVUkwgZm9yIGFwaSBnaXZlbiBwYXJhbWV0ZXJzLgogICAqCiAgICogQHBhcmFtICRtZXRob2QgU3RyaW5nIHRoZSBtZXRob2QgbmFtZS4KICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgVVJMIGZvciB0aGUgZ2l2ZW4gcGFyYW1ldGVycwogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBcGlVcmwoJG1ldGhvZCkgewogICAgc3RhdGljICRSRUFEX09OTFlfQ0FMTFMgPQogICAgICBhcnJheSgnYWRtaW4uZ2V0YWxsb2NhdGlvbicgPT4gMSwKICAgICAgICAgICAgJ2FkbWluLmdldGFwcHByb3BlcnRpZXMnID0+IDEsCiAgICAgICAgICAgICdhZG1pbi5nZXRiYW5uZWR1c2VycycgPT4gMSwKICAgICAgICAgICAgJ2FkbWluLmdldGxpdmVzdHJlYW12aWFsaW5rJyA9PiAxLAogICAgICAgICAgICAnYWRtaW4uZ2V0bWV0cmljcycgPT4gMSwKICAgICAgICAgICAgJ2FkbWluLmdldHJlc3RyaWN0aW9uaW5mbycgPT4gMSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLmdldHB1YmxpY2luZm8nID0+IDEsCiAgICAgICAgICAgICdhdXRoLmdldGFwcHB1YmxpY2tleScgPT4gMSwKICAgICAgICAgICAgJ2F1dGguZ2V0c2Vzc2lvbicgPT4gMSwKICAgICAgICAgICAgJ2F1dGguZ2V0c2lnbmVkcHVibGljc2Vzc2lvbmRhdGEnID0+IDEsCiAgICAgICAgICAgICdjb21tZW50cy5nZXQnID0+IDEsCiAgICAgICAgICAgICdjb25uZWN0LmdldHVuY29ubmVjdGVkZnJpZW5kc2NvdW50JyA9PiAxLAogICAgICAgICAgICAnZGFzaGJvYXJkLmdldGFjdGl2aXR5JyA9PiAxLAogICAgICAgICAgICAnZGFzaGJvYXJkLmdldGNvdW50JyA9PiAxLAogICAgICAgICAgICAnZGFzaGJvYXJkLmdldGdsb2JhbG5ld3MnID0+IDEsCiAgICAgICAgICAgICdkYXNoYm9hcmQuZ2V0bmV3cycgPT4gMSwKICAgICAgICAgICAgJ2Rhc2hib2FyZC5tdWx0aWdldGNvdW50JyA9PiAxLAogICAgICAgICAgICAnZGFzaGJvYXJkLm11bHRpZ2V0bmV3cycgPT4gMSwKICAgICAgICAgICAgJ2RhdGEuZ2V0Y29va2llcycgPT4gMSwKICAgICAgICAgICAgJ2V2ZW50cy5nZXQnID0+IDEsCiAgICAgICAgICAgICdldmVudHMuZ2V0bWVtYmVycycgPT4gMSwKICAgICAgICAgICAgJ2ZibWwuZ2V0Y3VzdG9tdGFncycgPT4gMSwKICAgICAgICAgICAgJ2ZlZWQuZ2V0YXBwZnJpZW5kc3RvcmllcycgPT4gMSwKICAgICAgICAgICAgJ2ZlZWQuZ2V0cmVnaXN0ZXJlZHRlbXBsYXRlYnVuZGxlYnlpZCcgPT4gMSwKICAgICAgICAgICAgJ2ZlZWQuZ2V0cmVnaXN0ZXJlZHRlbXBsYXRlYnVuZGxlcycgPT4gMSwKICAgICAgICAgICAgJ2ZxbC5tdWx0aXF1ZXJ5JyA9PiAxLAogICAgICAgICAgICAnZnFsLnF1ZXJ5JyA9PiAxLAogICAgICAgICAgICAnZnJpZW5kcy5hcmVmcmllbmRzJyA9PiAxLAogICAgICAgICAgICAnZnJpZW5kcy5nZXQnID0+IDEsCiAgICAgICAgICAgICdmcmllbmRzLmdldGFwcHVzZXJzJyA9PiAxLAogICAgICAgICAgICAnZnJpZW5kcy5nZXRsaXN0cycgPT4gMSwKICAgICAgICAgICAgJ2ZyaWVuZHMuZ2V0bXV0dWFsZnJpZW5kcycgPT4gMSwKICAgICAgICAgICAgJ2dpZnRzLmdldCcgPT4gMSwKICAgICAgICAgICAgJ2dyb3Vwcy5nZXQnID0+IDEsCiAgICAgICAgICAgICdncm91cHMuZ2V0bWVtYmVycycgPT4gMSwKICAgICAgICAgICAgJ2ludGwuZ2V0dHJhbnNsYXRpb25zJyA9PiAxLAogICAgICAgICAgICAnbGlua3MuZ2V0JyA9PiAxLAogICAgICAgICAgICAnbm90ZXMuZ2V0JyA9PiAxLAogICAgICAgICAgICAnbm90aWZpY2F0aW9ucy5nZXQnID0+IDEsCiAgICAgICAgICAgICdwYWdlcy5nZXRpbmZvJyA9PiAxLAogICAgICAgICAgICAncGFnZXMuaXNhZG1pbicgPT4gMSwKICAgICAgICAgICAgJ3BhZ2VzLmlzYXBwYWRkZWQnID0+IDEsCiAgICAgICAgICAgICdwYWdlcy5pc2ZhbicgPT4gMSwKICAgICAgICAgICAgJ3Blcm1pc3Npb25zLmNoZWNrYXZhaWxhYmxlYXBpYWNjZXNzJyA9PiAxLAogICAgICAgICAgICAncGVybWlzc2lvbnMuY2hlY2tncmFudGVkYXBpYWNjZXNzJyA9PiAxLAogICAgICAgICAgICAncGhvdG9zLmdldCcgPT4gMSwKICAgICAgICAgICAgJ3Bob3Rvcy5nZXRhbGJ1bXMnID0+IDEsCiAgICAgICAgICAgICdwaG90b3MuZ2V0dGFncycgPT4gMSwKICAgICAgICAgICAgJ3Byb2ZpbGUuZ2V0aW5mbycgPT4gMSwKICAgICAgICAgICAgJ3Byb2ZpbGUuZ2V0aW5mb29wdGlvbnMnID0+IDEsCiAgICAgICAgICAgICdzdHJlYW0uZ2V0JyA9PiAxLAogICAgICAgICAgICAnc3RyZWFtLmdldGNvbW1lbnRzJyA9PiAxLAogICAgICAgICAgICAnc3RyZWFtLmdldGZpbHRlcnMnID0+IDEsCiAgICAgICAgICAgICd1c2Vycy5nZXRpbmZvJyA9PiAxLAogICAgICAgICAgICAndXNlcnMuZ2V0bG9nZ2VkaW51c2VyJyA9PiAxLAogICAgICAgICAgICAndXNlcnMuZ2V0c3RhbmRhcmRpbmZvJyA9PiAxLAogICAgICAgICAgICAndXNlcnMuaGFzYXBwcGVybWlzc2lvbicgPT4gMSwKICAgICAgICAgICAgJ3VzZXJzLmlzYXBwdXNlcicgPT4gMSwKICAgICAgICAgICAgJ3VzZXJzLmlzdmVyaWZpZWQnID0+IDEsCiAgICAgICAgICAgICd2aWRlby5nZXR1cGxvYWRsaW1pdHMnID0+IDEpOwogICAgJG5hbWUgPSAnYXBpJzsKICAgIGlmIChpc3NldCgkUkVBRF9PTkxZX0NBTExTW3N0cnRvbG93ZXIoJG1ldGhvZCldKSkgewogICAgICAkbmFtZSA9ICdhcGlfcmVhZCc7CiAgICB9CiAgICByZXR1cm4gc2VsZjo6Z2V0VXJsKCRuYW1lLCAncmVzdHNlcnZlci5waHAnKTsKICB9CgogIC8qKgogICAqIEJ1aWxkIHRoZSBVUkwgZm9yIGdpdmVuIGRvbWFpbiBhbGlhcywgcGF0aCBhbmQgcGFyYW1ldGVycy4KICAgKgogICAqIEBwYXJhbSAkbmFtZSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGRvbWFpbgogICAqIEBwYXJhbSAkcGF0aCBTdHJpbmcgb3B0aW9uYWwgcGF0aCAod2l0aG91dCBhIGxlYWRpbmcgc2xhc2gpCiAgICogQHBhcmFtICRwYXJhbXMgQXJyYXkgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycwogICAqIEByZXR1cm4gU3RyaW5nIHRoZSBVUkwgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFVybCgkbmFtZSwgJHBhdGg9JycsICRwYXJhbXM9YXJyYXkoKSkgewogICAgJHVybCA9IHNlbGY6OiRET01BSU5fTUFQWyRuYW1lXTsKICAgIGlmICgkcGF0aCkgewogICAgICBpZiAoJHBhdGhbMF0gPT09ICcvJykgewogICAgICAgICRwYXRoID0gc3Vic3RyKCRwYXRoLCAxKTsKICAgICAgfQogICAgICAkdXJsIC49ICRwYXRoOwogICAgfQogICAgaWYgKCRwYXJhbXMpIHsKICAgICAgJHVybCAuPSAnPycgLiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsIG51bGwsICcmJyk7CiAgICB9CiAgICByZXR1cm4gJHVybDsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIEN1cnJlbnQgVVJMLCBzdHJpcHBpbmcgaXQgb2Yga25vd24gRkIgcGFyYW1ldGVycyB0aGF0IHNob3VsZAogICAqIG5vdCBwZXJzaXN0LgogICAqCiAgICogQHJldHVybiBTdHJpbmcgdGhlIGN1cnJlbnQgVVJMCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnJlbnRVcmwoKSB7CiAgICAkcHJvdG9jb2wgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJwogICAgICA/ICdodHRwczovLycKICAgICAgOiAnaHR0cDovLyc7CiAgICAkY3VycmVudFVybCA9ICRwcm90b2NvbCAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgJHBhcnRzID0gcGFyc2VfdXJsKCRjdXJyZW50VXJsKTsKCiAgICAvLyBkcm9wIGtub3duIGZiIHBhcmFtcwogICAgJHF1ZXJ5ID0gJyc7CiAgICBpZiAoIWVtcHR5KCRwYXJ0c1sncXVlcnknXSkpIHsKICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgIHBhcnNlX3N0cigkcGFydHNbJ3F1ZXJ5J10sICRwYXJhbXMpOwogICAgICBmb3JlYWNoKHNlbGY6OiREUk9QX1FVRVJZX1BBUkFNUyBhcyAka2V5KSB7CiAgICAgICAgdW5zZXQoJHBhcmFtc1ska2V5XSk7CiAgICAgIH0KICAgICAgaWYgKCFlbXB0eSgkcGFyYW1zKSkgewogICAgICAgICRxdWVyeSA9ICc/JyAuIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcywgbnVsbCwgJyYnKTsKICAgICAgfQogICAgfQoKICAgIC8vIHVzZSBwb3J0IGlmIG5vbiBkZWZhdWx0CiAgICAkcG9ydCA9CiAgICAgIGlzc2V0KCRwYXJ0c1sncG9ydCddKSAmJgogICAgICAoKCRwcm90b2NvbCA9PT0gJ2h0dHA6Ly8nICYmICRwYXJ0c1sncG9ydCddICE9PSA4MCkgfHwKICAgICAgICgkcHJvdG9jb2wgPT09ICdodHRwczovLycgJiYgJHBhcnRzWydwb3J0J10gIT09IDQ0MykpCiAgICAgID8gJzonIC4gJHBhcnRzWydwb3J0J10gOiAnJzsKCiAgICAvLyByZWJ1aWxkCiAgICByZXR1cm4gJHByb3RvY29sIC4gJHBhcnRzWydob3N0J10gLiAkcG9ydCAuICRwYXJ0c1sncGF0aCddIC4gJHF1ZXJ5OwogIH0KCiAgLyoqCiAgICogR2VuZXJhdGUgYSBzaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBwYXJhbXMgYW5kIHNlY3JldC4KICAgKgogICAqIEBwYXJhbSBBcnJheSAkcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIHNpZ24KICAgKiBAcGFyYW0gU3RyaW5nICRzZWNyZXQgdGhlIHNlY3JldCB0byBzaWduIHdpdGgKICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgZ2VuZXJhdGVkIHNpZ25hdHVyZQogICAqLwogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVTaWduYXR1cmUoJHBhcmFtcywgJHNlY3JldCkgewogICAgLy8gd29yayB3aXRoIHNvcnRlZCBkYXRhCiAgICBrc29ydCgkcGFyYW1zKTsKCiAgICAvLyBnZW5lcmF0ZSB0aGUgYmFzZSBzdHJpbmcKICAgICRiYXNlX3N0cmluZyA9ICcnOwogICAgZm9yZWFjaCgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICRiYXNlX3N0cmluZyAuPSAka2V5IC4gJz0nIC4gJHZhbHVlOwogICAgfQogICAgJGJhc2Vfc3RyaW5nIC49ICRzZWNyZXQ7CgogICAgcmV0dXJuIG1kNSgkYmFzZV9zdHJpbmcpOwogIH0KCiAgLyoqCiAgICogUHJpbnRzIHRvIHRoZSBlcnJvciBsb2cgaWYgeW91IGFyZW4ndCBpbiBjb21tYW5kIGxpbmUgbW9kZS4KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgbG9nIG1lc3NhZ2UKICAgKi8KICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGVycm9yTG9nKCRtc2cpIHsKICAgIC8vIGRpc2FibGUgZXJyb3IgbG9nIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgQ0xJIGVudmlyb25tZW50CiAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKICAgIGlmIChwaHBfc2FwaV9uYW1lKCkgIT0gJ2NsaScpIHsKICAgICAgZXJyb3JfbG9nKCRtc2cpOwogICAgfQogICAgLy8gdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBlcnJvcnMgb24gdGhlIHBhZ2UKICAgIC8vIHByaW50ICdlcnJvcl9sb2c6ICcuJG1zZy4iXG4iOwogICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAogIH0KCiAgLyoqCiAgICogQmFzZTY0IGVuY29kaW5nIHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlIHVybGVuY29kZSgpZWQuCiAgICogRXhhY3RseSB0aGUgc2FtZSBhcyBiYXNlNjRfZW5jb2RlIGV4Y2VwdCBpdCB1c2VzCiAgICogICAtIGluc3RlYWQgb2YgKwogICAqICAgXyBpbnN0ZWFkIG9mIC8KICAgKgogICAqIEBwYXJhbSBTdHJpbmcgYmFzZTY0VXJsRW5jb2RlZGVkIHN0cmluZwogICAqLwogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYmFzZTY0VXJsRGVjb2RlKCRpbnB1dCkgewogICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RydHIoJGlucHV0LCAnLV8nLCAnKy8nKSk7CiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_tab_providers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgoKLyogQHZhciAkdGhpcyBPcGVuSUQgKi8KLyogQHZhciAkZ0NtcyBDbXNPYmplY3QgKi8KCmZ1bmN0aW9uIENyZWF0ZVByb3ZpZGVySW5wdXQoJHByb3ZpZGVyLCAkbW9kdWxlLCAkZGVmYXVsdCA9IDEpIHsKICAgIGdsb2JhbCAkc21hcnR5OwogICAgJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF8nLiRwcm92aWRlciwKCQlSUlV0aWxzOjpteUNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaW5wdXRfcHJvdmlkZXJfJy4kcHJvdmlkZXIsIDEsCgkJCQkJICAgICAgICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2VuYWJsZV9wcm92aWRlcl8nLiRwcm92aWRlciwkZGVmYXVsdCkpKTsKfQoKJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2FkbWluX3VwZGF0ZXByb3ZpZGVycycpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgpDcmVhdGVQcm92aWRlcklucHV0KCdnb29nbGUnLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ3lhaG9vJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCdhb2wnLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ215b3BlbmlkJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCdteXNwYWNlJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCdmbGlja3InLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ2ZhY2Vib29rJywgJHRoaXMsIDApOwpDcmVhdGVQcm92aWRlcklucHV0KCd0d2l0dGVyJywgJHRoaXMsIDApOwpDcmVhdGVQcm92aWRlcklucHV0KCd0d2l0dGVyX3NtYWxsJywgJHRoaXMsIDApOwpDcmVhdGVQcm92aWRlcklucHV0KCd0ZWNobm9yYXRpJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCd3b3JkcHJlc3MnLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ2Jsb2dnZXInLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ2xpdmVqb3VybmFsJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCdjbGFpbWlkJywgJHRoaXMpOwpDcmVhdGVQcm92aWRlcklucHV0KCd2aWRvb3AnLCAkdGhpcyk7CkNyZWF0ZVByb3ZpZGVySW5wdXQoJ3ZlcmlzaWduJywgJHRoaXMpOwoKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSwnJywnJykpOwokc21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLAoJCSAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsCgkJCQkJICAgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3RhYl9wcm92aWRlcnMudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_tab_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwovKiBAdmFyICRnQ21zIENtc09iamVjdCAqLwoKJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCSR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2FkbWluX3VwZGF0ZXNldHRpbmdzJykpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCmdsb2JhbCAkZ0NtczsKJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCiRzbWFydHktPmFzc2lnbignaW5wdXRfdmlzdWFsJywgJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCgkaWQsICdpbnB1dF92aXN1YWxfZnJhbWV3b3JrJywKICAgICAgICBhcnJheSgKICAgICAgICAgICAgJ2pRdWVyeSBPcGVuSUQgUGx1Z2luIDxhIGhyZWY9Imh0dHA6Ly9qdmFuY2UuY29tL3BhZ2VzL0pRdWVyeU9wZW5JRFBsdWdpbi54aHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmV4YW1wbGU8L2E+JyA9PiAnanF1ZXJ5cGx1Z2luJywKICAgICAgICAgICAgJ09wZW5JRCBTZWxlY3RvciA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BlbmlkLXNlbGVjdG9yLyIgdGFyZ2V0PSJfYmxhbmsiPmV4YW1wbGU8L2E+JyA9PiAnb3Blbmlkc2VsZWN0b3InKSwKICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndmlzdWFsX2ZyYW1ld29yaycsICdqcXVlcnlwbHVnaW4nKSwgJycsICc8YnIvPjxici8+JykpOwoKJHNtYXJ0eS0+YXNzaWduKCdidWdneV9nbXBfc3RhdHVzJywgT3BlbklEOjpHZXRDb25maWdCb29sKCdvcGVuaWQuYnVnZ3kuZ21wJykgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnKTsKCiRzbWFydHktPmFzc2lnbignaW5zZWN1cmVfcmFuZF9zdGF0dXMnLCBPcGVuSUQ6OkdldENvbmZpZ0Jvb2woJ29wZW5pZC5pbnNlY3VyZS5yYW5kJykgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnKTsKCiRzbWFydHktPmFzc2lnbignY2FfZmlsZV9vdmVycmlkZV9zdGF0dXMnLCBPcGVuSUQ6OkdldENvbmZpZ0Jvb2woJ29wZW5pZC5jYS5vdmVycmlkZScpID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJyk7CgovKiogRmFjZWJvb2sgKiovCiRzbWFydHktPmFzc2lnbignaW5wdXRfZmFjZWJvb2tfYXBwX2lkJywKICAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfZmFjZWJvb2tfYXBwX2lkJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZhY2Vib29rX2FwcF9pZCcpLCAzMCkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2ZhY2Vib29rX2FwcF9zZWNyZXQnLAogICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9mYWNlYm9va19hcHBfc2VjcmV0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZhY2Vib29rX2FwcF9zZWNyZXQnKSwgNTApKTsKCi8qKiBUd2l0dGVyICoqLwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3R3aXR0ZXJfY29uc3VtZXJfa2V5JywKICAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfdHdpdHRlcl9jb25zdW1lcl9rZXknLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndHdpdHRlcl9jb25zdW1lcl9rZXknKSwgMzApKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF90d2l0dGVyX2NvbnN1bWVyX3NlY3JldCcsCiAgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X3R3aXR0ZXJfY29uc3VtZXJfc2VjcmV0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3R3aXR0ZXJfY29uc3VtZXJfc2VjcmV0JyksIDUwKSk7Ci8qIGRlYnVnIHNldHRpbmdzICovCiRzbWFydHktPmFzc2lnbignZGVidWdfc3RhdHVzJywgT3BlbklEOjpHZXRDb25maWdCb29sKCdvcGVuaWQuZGVidWcnKSA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCcpOwovKiByZWRpcmVjdCAqLwokZmV1UmVkaXJlY3QgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKS0+R2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ2luJyk7CiRmZXVSZWRpcmVjdCA9ICRmZXVSZWRpcmVjdCA/ICRmZXVSZWRpcmVjdCA6ICdub3Qgc2V0JzsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb2dpbl9yZWRpcmVjdCcsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJGlkLCAnaW5wdXRfbG9naW5fcmVkaXJlY3QnLAogICAgICAgIGFycmF5KAogICAgICAgICAgICAnTm9uZSAoZGlzcGxheXMgaW5mb3JtYXRpb24gbWVzc2FnZSknID0+ICdub25lJywKICAgICAgICAgICAgJ1VzZSBzZXR0aW5nIGZyb20gRnJvbnRFbmRVc2VycyAoY3VycmVudGx5IDxzdHJvbmc+Jy4kZmV1UmVkaXJlY3QuJzwvc3Ryb25nPiknID0+ICdmZXUnLAogICAgICAgICAgICAnVXNlIHRoZSBjdXN0b20gcmVkaXJlY3QgYmVsb3cnID0+ICdjdXN0b20nKSwKICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9naW5fcmVkaXJlY3QnLCAnbm9uZScpLCAnJywgJzxici8+PGJyLz4nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbG9naW5fcmVkaXJlY3RfcGFnZWlkJywKICAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfbG9naW5fcmVkaXJlY3RfcGFnZWlkJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvZ2luX3JlZGlyZWN0X3BhZ2VpZCcpLCA1MCkpOwovKiBidXR0b25zICovCiRzbWFydHktPmFzc2lnbignc3VibWl0JywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJICAkdGhpcy0+TGFuZygnc3VibWl0JyksJycsJycpKTsKJHNtYXJ0eS0+YXNzaWduICgnY2FuY2VsJywKCQkgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdjYW5jZWwnLAoJCQkJCSAgICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl90YWJfc2V0dGluZ3MudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_tab_users.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwovKiBAdmFyICRnQ21zIENtc09iamVjdCAqLwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl90YWJfdXNlcnMudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/ajax-loader.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/images/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icons/error.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/info.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/success.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/warning.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/twitter.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACHklEQVQ4EQXBvYpdZRgG0PV+e+8zzmQSE4lINHaSRiGNoGBhl0uwshcszS14DcKgXTrvQASxEYIoilX8AUUHI2RiJJkz53d/j2vV3e+evrub+yeJVwoKgCR6ovcgVIGmtFZ/T+P44Zi4N7T2ahXzHOcXXU8cHw4W06Aneu/mHkRQCp6f5/neWK1eaOg9VsvZm9dHx4vm/sOtucq4KFWDqi6JnkhImJNrY7GvYrOLG0eD91+/7Lix3MW3j/euTaOEqtKqNNHn6AL7ESA4msocNjheNPO2u3i2V+hhHy4fD8ax9AAjBZKSsA8XM+/cfM7tFxeqKMA3pxvfn82uXp2UQhnLoNCqlK4n4Pphc+OoCWCBsTU/nq2kL1QVGNMnqqTvJTNQ/LPsnqyjodAa9093NvvBYtdAMG52Daw3zTzNgqmVr//Y+vL3vUuLQUTCnHJ4OLlYExFlXK6A5Tq2B3R0HE/lfM16plJgMTY2TU8ExHi+CsV2V/76r1ttYyjevjkSnqy6oZHww8Od06cxTpOEYFyuSEV6+fMZX/yy9d7tA0cH3Lk1KQSLxhsv7X381dZqNygNMS7XqRRC5oXPf9ro4c6tydECgLnxaBmrbWxRFempeuuz3XnUJUKKdLJ180q8fKUZB4R95+ez7t/VpNdAwHLc7Jyk5yMFkRQO/Pq4e/AoAGCoiSoQiJOxd3d79wAf4DWAaKoAgI4K+A0n+PR/VrU14dLO8TcAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/twitterB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/twitterW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/aolB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/aolW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAQCAYAAABKkhw/AAAFIElEQVR42tVXa2yTVRjeHxNQDD9Ag/GaqPH+Q/2lGoISjYlECQGJBuXuEFAiARIhYZQgc3UXBoNt1jIGrEBpd2m7rTe6rt1Ku62M3mm/Xtf72H3ughs8nu8EanBJ1+4P+CVP8vY97+057+n7fSfn3pOXl/cIwVI+n79fIpGcVSqV8geNM80mRmO8bleqVIpsfQmH89XV1RzC6ROCeXdppsguKSsrO2A2m7uCwaAlEom44vF4rKenZ+xBYkNFO3gtDKSdgds2JjSRjW8gEIhFo1G3xWKxlpeXs8SfS3WWJcswjJcY6MLh8BiR8TDg03w11pTqsO5UO7bxTeAprLDf8GQVw+12/+31eiM8Hq+AcH2MJbyMdLaTdFRHdgXZwOxgcE5tmaH3+QM4LjVjdZEaKwqU2Fvdji47k1pXdTjxVYkaJpsnbfx39jdi+a8qnLtig4vxU91c4Pf7b9vtdv/Ro0dX5VRVVR0kx/haIpFgjwKywe4z7XhtTwOCoX91Hl8QyzhyzNtwEY9vvoTFuSIqL9kugvSqi9oUiDuo7qzakjb+27/I0GZhYLAyOCazoEbnQZsjDJc3RNf1Fl/GtZKTOykUCk/lyGQyYTKZvEGOM7KBNxjGUztEoIVfsaf023ltVPd9pZ61oTqB1oHF20R4YVc9fKEwfq/rojbnNba0OcqbrhPCPmyoMEBgCMATH0ZscBwaexQuXw/qrroh0DPwhmavl8ylO3K5vDGHnWi9vb3D5EgjG3DrzXc7J8bSw3Kqi8bieIIQe2uflMix++wPXeqk9mfUNhTe9RW0OGbNs7WyDVv/NILf4oXSGoPJexM6VxINJh+YYARbeEaIOkKw+hPoicTSxmK5UsJ9fX3jhDQyRSKZxKt7JHj/YDPyxbR4qK754PBHqPzdSd0MH6nRQ9c4wk4US7qpfLHVNWuuZYcVWFncin2CayhpcoGv9dLJfaLZQde/JGs7qjpQILGj3uhNGytFuL+/f4IAmeJ8q4sWnCfswpVuPxaQ/+raUi1iyZtUXn5EOcOnUmGnPqfkNpTILFQW6t2z5lp7TIuXfm7AR0fU+OZkO3L5JtrxY4022HxRvJenoNO8UGJBON6bNlaK8ODg4OjQ0BAyxVKOgi34Pjy68RJs/jhWFmownz2uOnfKngn34vW9UizcIoQnnERpo5X6iAxM2jx6RwQGZ5gMvst4ZmcdXtkjxRv7ZPjgkAKuYAKHLpux9Y92OAKJjOqmhMnQEg8MDHhHR0eRCVrtYVrsT1VGSDv9LOj0nL/xInaf7YAjmMTzu+oo6Y+PqLCqWIsnfxDR32VyB41xopl2G0/vrMXLuxso1pe3zch1WGyBN9qHDncM357U40OOHLk8A80xODxCNyTTukdGRqBQKJpyLly4wCVj2zA+Pn6HALOh25fE6hItojeH7tMfFHajQuWisjc2gE2VBjz7Yx0W5V6mxKVdwZSt1h7BCm4LgSYFjuj6jFxfFLaguNEJlSWM3sERqpsrxsbG7ojF4tM5HA7nc/JSdpJduHrr1i08RKD/zzWlemw7bcJnv2mQ32BF3/Bfc4pFmhrjcrnr2C+tBeTCwPX5fC6yC8bp6Wk8LHj3QBMdVpvJabGG+ucUY2pqip3QiZqamgrCddG97+kXyc2i1Ol03iAvaM3k5GT/xMTE5IPG8WbHdK0pMEWOZNa+5GEHcYh0NioQCFiyb/73xrQwPz//69ra2nMqlYpesf7vqK+vrykqKtqU6ix5/gE0XHGoPyVgYQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/blogger.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAC+RQe3cFrFUAHuYwfufQPwdSLDlYzWsLL4roL4wZ/qzLn11sP328f03s/y4dbz5t309+79+fj///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTh2lAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAAAGRJREFUeNplj0EOgCAMBFkLVURB2P+/Fb1ASpxbJ2m767osdCc+GLw4Cd4QhlBVK/Qk2w6ZIjEfbBuGUN5AZIRMUXN5WAtgRLkqAbPi9abAHD0zE2S8Tfz45iWYmmA2+q/cr/4LSnQJ/wFqhNMAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/claimid.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAACaxCel1CKwyzu+4F/O6Ifp3ZfR7NLx+Nz09+78//j///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD3zwCtAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAAAF1JREFUeNptjkEOwCAIBKGAovz/vVTSVLDpHDxMJivgeOCAJAVCwOvgR9B6SbpQFWpmSikohEkKHiE4hcwUWQz+jLb6S4+gHMar0H0YS4uJ2d6NlT+MUIjgXTcd0W/7pQguXrQqAAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/facebookB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/facebookW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/fadegrey.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAADACAAAAAAoprySAAAFK0lEQVQYGQWA0ZHrNhYFu++PBUjg5B/bJrGPoAC67OFx+b8OQK6PRKi+AsBxBYFKvyGYcaFQ0raCjBlIAW0JkDGjJdAXBvlcWEHSN4A1TkoA+oqEfM46RUO70ehRxwUxtgVGis+MAfoOhiJjBoHXTUxFj0sA2xZLwphgoC1SAPlMUOjLAijHBIB+1wYCxyQgr+pbhIwJBIq2AWBcKJa+NgB8ZiCV8F4icFyRQp+2CcKYUERoWxHGRWGU9woE3lddAMl7g+hRnwtQ+gYwxZhooG0gFowLEuwboMDPTAnpN6QIfi5iSLu1lDhOkeK1LaRgXEJSbdVOQhwnIryqbaFgzEBi0bfGeFwRU6SvEML4ApSk3aBhTK1CeN0CZpxQRGyLGDgmhQh9g5IxawKQdgPIqDEBirYDSDEuMNBu4LHwMwlI+1tMEcYlBv9aYgGOKRHbIlUaPjOl0LeVgI6L50Hedy0xME5NyKveWwgeFwoUfYnEMRWppC+QZJwYStK3II7TsrDoKwIcMylA2iagn9MCgPcWCcesM0TS7wLwqJ9vjNB2EFIZVwRoW8Qy40IDfQMUMiYItAWWwLgCQN9SAfxcKtC+KRQYZyLw3nUHgHEZMa3ajrEYU0QqbUce+ZwkUNrvUMSfU7AMbScqxzQUQrsJiWNqBbBtgTBmSkT6UoAxaxKDfQXAnxoX4pO+FUgxLgTtmwIKx6kE+36EInzOx4LndYuF1PjyEG1LSoTPNKB9pwjgcVkmvO5aFYRxBo293ksQxozKU2k3BhzfBKvwrxsBPxeQgmorCowLKCF9C8iYsQLQFhXg+KaAim2lQD7fuiBSfQHAqDEBnupfCFKMKfDw2SopOaaCaUtiRY4JEvo3UgbGRCz6DZXiyfgGYvqmDBSfqT6m37VFZJxJAa36UoDjIgKVvjElY6pQ8toY5JiRlNi2CTBmpADaooIZF1VR6DdAOWZKAPpGQj6zTpTQNho56meGCH1HkcqYiNBuAAvGRIT2BVLomBik31gFMK5Hgn0nJRSfiUjem0KQYyLkaXfdAZNjEqx61WsTqBwXAJZtk4oZEyGFbYuBMUks8L1A4phKEZ62iabGKQVqW2LFMfErAderSOCqKyD0G1CPGhcitAUqlTEBsG8DlIwJAG1LKGBMAGkbKYAxgUjbUCqOiUbatgDDuAhgW7UN6jElYq/XV2L4TCCh6LcV43GpUtLWA5AxgxSh3UHCcRmKCu1vQplxapmStjWBccbbxLhfGOCqK4h5bVUc9T5DLPt+UCh/rphAuyGxYFwo8rqposRxEaFeX0IBjlMC9A0FwDFRsG2KiIwTIvRd2xD4ORGwVdsEyDEBQtm3CBxTxSJtA5pxEqlg2wBwnEUKtS2DZpxYEOiLgI5T/3mK4H4BJlf9kUDaRoJH/cygpO0gpnJMAavdIpQck5BUW2AVME4pYlsJJea4TIjthgL0MynBtuI/Esx5yIOu2kHwZ5Iq06rtJMAxhWjZN0WSz0mAgr6hgOOPQgF9EdGfCRSQvkDCOKEA6RsAjhP/BcDVTIRZEwDaDgJHjYkY2gKAYlwYtC+F+BuuI0HYL6Einz+xIG1BSvG4eBLzXlpE+EwR7Av/1Uc8B0HYtYmYYyKGVu8FhoxJoVT6NgjHTIDCtsogx9Tgr/htCGEexofotwOQOeA3z2+eK89v8jz///VXH8zu+FT846/Rp/g2Y7TEAPStKD7EaGR1IKUlBngtCBVAIqF9HygSBGLlfWuheSgg9fSFgQgASbH/A44fS0GZIGgIAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/flickerB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/flickr.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIVBMVEUAAAAAAAAAAACCgoLv7+8Fbda51OXi0d78//j/AIT////9UfVSAAAABXRSTlMAIjNVzLtjHUcAAABJSURBVHjahY9BDgAhCMRgFJX5/4MVD7saTexteiBURLGgY6fMj5xUEPs3EHDjKoqZFbK6e53CAtKDt7jfWHmLhuP1La6NuCO/A8ioByc+DEj8AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/flickrW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAQCAYAAABKkhw/AAAEpklEQVR42t2Xf0icdRzHb62iahAUVBEMaMAo/DtwGytWEbQiKAiCgHIzt8aYVIy2SnGpNp0sh/n7VF3qdqnYqXrqprZpOvU09Tydzz3367l77od3nueld6br3ff7ffArBsKdCGAPvOB5f76f79d7Pd/Hh+dRrR+pqamPEI6q1eqLWq22urOzU7ebIQ6/VFVVpRGntwiPKZYbss/n5+d/q9frR6xW67gsyzaXyyXb7falXcyy0+m8Pz4+PlFYWEjF9/OdpbKCIJiI6IAkSUvkHNFgmBZQ3G5Cer2Apj4BYwYBN3pMDOOM0jM0acK9CROmWN6anhFlbuuAieYdhWyir7S09DJxfZIKv052dtjtdg9YLBZEiyBaEPedCaoTAiOhRET9HTPPwwYz69v3hdJzrYXlLfmsWJkbf8lE844zOzsrZWZmfqCqqKhIIVdglAjT2wDRUt9n43I5Witu621o7Lfy2ui0jfV9eM2Cd3LNaOhneUsSSixs3qEfRJp3HHJ7P9BoNAWqlpYWjdfrtZECoqV/UsL3GkXuidMm6EYkDBkdaBqwc+Hx+w7W26WX2PiUiWWGXXKieVBCoc4OzV07LDYnTpQq6x1ON7Meg+Cg8yhk3AHPXSO8ugm4pszw9k5hvrgPspmJRI1Op2tV0ScaEV4mDylEyxuX+a3L+bTYAu2gg+dJwUl7+S1d2CGx3DfpxMEL4qa5V1slnCyzbQjLLrx6yczy21cskEleiS8DVOkIf3QT/+zNYOceoxWx/G7qyoR9Pt8ykUa0lNxy4r2ryo48mmTChZsSbvTJaBmWucSU2U17uXBRlxMutwcHLyqyzyWLSKl34HydhHa9C4lqO6sfybAgo0m5cC98KWLG6qHrEGE1k8SeDKy+XIDI+7XwyuxvRA0X9vv9YQJioaCTyVEhXmvXu7nwjG2O1rhwyW0Xeie9fLx+wL1pvc/LJVZ/6bzI/k32nBTw29BGz9+HFOG1Vwrgd7O1Y4YLBwKB8MLCAmKh6JZ7XZjXOsbmuJAgzdMaFy7r8aB5ZGN8TPRvWi+pUtnV/V+LeDhRwENEuH10jo+vHi5nwpEkLc3bgQnTh1bD/Py8MxQKIRZKur3rwrzWNeHnQmZ5gda4cPnvXohyEHsTlfHEcicCwUUsLi7C41/EqSonqx/NsiFBrZwf+MZMx9g6a0cqmPDK2Taat0VHR0ebqq6uLps8tv9YXl5GLJT1+taFea3bEODCVk+I1rhw5R0fy+dqXLzn6bMink0WkdXsxelqpf7aj3aYXCE8fkrpOXNdpvOIcCUTXj3XTvO2aGhoKFelpaUdNxgMRnIF7q2srCBa2v5cwLEcO97Nc/DamCVEawxPIMxqx39ysNwxEWQ5HImgsNuP+AwbXvxKRFyKFb8OBZDX6WN9yXVu1pfTPsfym1ckiO4lrJ3T4cGxaqz+PETHY0aWZW92dvYn9E1rH/lgyBZFcXppaWlwbW0N/zd8Pl+gpqamiLg+s/4+fYB8WeQZjcYZh8PRHYlE/gqHw5HdDDlCwWDQQw5vbW0tlY377xfTU1lZWR83NjZe7+rqop9Yu56mpqaa3NzcBL6z5PgXE3NWDmDLxtEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/googleB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/googleW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/livejournal.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAMAAAD+iNU2AAAAPFBMVEVKSkqCgoISM2YZQplEWpJOl8dUf7RancpdfKBhhrJrpM9xlsKAsNWCgoKDnsyMjIym0ObDlYzp3Zf4wZ83KKCZAAAAAnRSTlMiVcogLmMAAABiSURBVHjaVcnREoAgCERRQioRVNP//9eUsWG6b2cXgFsjJN4BSVuDqFUgXZcNUVYKyQdz8MFMNqgKopnjGqg+eVsJ0517H5+Fwln7cAthHvPH7TXM3JbbMxdnmRZVT+DgXy+J8Akzz5cMswAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/myopenid.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFVBMVEUAAADMzMyCgoKMjIyZmZnMzMzW1NZEVavIAAAAAnRSTlMAzORBQ6MAAABOSURBVHjaZc9BDsAgCAVRnS+9/5ErSrGGWaC+hQmtdfvV5/u56s3WidC62AZQSIDwoYCoAnygGT5GAA7DLUAIdMOWhPzkAIiEKyvLlfVfd8QEkZ65rL0AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/myopenidB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/myopenidW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAQCAYAAABKkhw/AAAG70lEQVR42tWXe2xT1x3H8880Vqq1W9WuRWs3qVVXylqGpm3sUTaJbWxDEKBrsvBqR2lJl1LBAhRSCARoEJHSqV1IMvI0ifNwYiczTmInBGICeZDEwbPjxPH77TiJjZPYJpDsu985k+9kxDapqJV6pK/u75zzu7/z+5xz7rn3JsXL8ePHv0RaU1ZWliWXyy+0t7crv8gihmqRSJRDTL8iLYlzxmGfLCgo+GBoaGjQbrdrvV6vw+fzeZ1OZ+TTymSxRdp7R2JNXdqYenA0arc7WPvnqajH4zFqtdp/FBUVMfBnhJVlsCaTyUygvS6XK0I2Pq0Mo0YcKLqEZdtE+HJyKb6yuQRL6Pqd3WKck/ZgfHyc+X2uokWcKikpOUusSxnwL2hlB/x+f6/NZsODyGiyYO37MjycUowVp47gN9W7kCJLw6vi1/H97CN4aMt5ZBZ1wmq1Mv8HFY/Tf3MMFosVGv04ejSjuE7S6Iz3+rKJduXm5m5JqqioyKYZ0BAw2wZ4EP258DKWphZj1fm92NC0Bztb0rFVnoo3W7fgXdUGJBe/RdAlqFZqmP8Dy2i24au/L8eQ3oRl2y/gx/sbsC6rGSv21OKVTClar+kEX9reixKJpDBJoVBIAoGAgxpwr+xOl2C7XG44SWTfV2NmOx7/QyWeOXUUaxv3wjc3iTuLd5Dbe1IAPtD5W6w6chRrDsjgdrsTxhHq/xkvPn6CKAfWx22zzYmlW8owbLDg8bRKDOrNgs9Hkj4+CQM63salVCpbktiJRsBROqTAJL2iw/6iK9iUo8Bzb4rxzieXUKW6iVXvSrAivQ4Nl3W8r0mtR/ye10634v0SNZbQ87q8MgPJ8kNY+OciWBHpyhKA0yp24GspFTjXNIDM4itIO9OG5W/X4me0IteGTTzeX2UDWL2vAasy6lkulKwXaw8340NxD1b+qR4vvVOHRsrT6nBzYO2YjQNrDFZ2v6DkEwqWl1BnrBx4amoqStBgauzS4+upFei4YYTe5MTTO6uw+WQLHG4f8iX9eJkGPFx6FSkftnH/fp0V39xRhfyGG3go5W94sTodq+t2I6enACJ9Dd5o2Z4AnC7bjCWbynBa3ItHXivH37sN8PsncPC8Gj94rwGqvjF8L0MCs90Dt9dP21SK+k4dntwmosnv5G1/abyB53fXwOHycmDduBNPELDW6GA5CTpS1s0WQ6gLwNPT0zESmJq7R/HTTBni9XUfyFEk13B7xOzGo7Q6OpOLBhDB4vThVHUv0j/uxMXrY3yFX6jIwDrZPqjs1zDg0+Bw14EE4NTynXxCP2ocwK8pdnwch9uPR2kC/pjfgZ8fakJW+TUuyoUn/tS2C+jT2biv1eWj078UJgcHhsHiZvlQXm7WL+hgyVUWT6gLwKFQKHbr1i0wya8b8crBJsTrvzumQGmrltvjdj/bjtzeeKIFhfJh/HBfI7qGrfD4p/CNrSI8nXMMFSOtiJfx4FgC8MuHsvHLLDmPueF4izCOPzDNY6fmKrH1rAr1VwyCBkddHJiu3NczMQUO7PRzYKPdhydobIPVK8QLBkM8t+KLN4U2DkyHljQYDHpmZ2fBpOg1Yc3BZsTr67MVKFfquG12BVhS3G5Uj2Elbb3V+2UIh2d424mqPiylbV3W1y0Am0PjAvD6gnRKsBSt/WYe81uvV8PmmeT3lrXp8BI9LhXU/qN9UngDQdbOY8/MzOApOoA0Rg9v80+GOLDVPcmACTzAgY2OCd7vnQjivUI1jxOYDgksKpWqNam2tjaPju2eaDQKJtWAlbbaRcTrr55WouqSgdt27zSW7ajidig8i2+/IcYnzTcF3/DMHPfPrh4QgAe9GiRX7sLKrGP8lXRWMoRIJILK9hF6Vhv45K47qsALb9dBrXVidm4OewuvYvmeOmzMaaVVksJG4z67qwY6i5+PMxWawWOplXD6g/ywon46a6rxk8wmHu/F9HpknFPDRf3kL0gqlZYn5eTkrNfr9Qaagf75+XnMRWKYDs+BbCZuz0ai3I7FbmMiOMvtQaMPz79Vi0CI1wVFojEMmwMCcE2Xia0CT/xir1Xwu3BpFMkn2xCejcLiCbJrQhz/9AxsvpCQCxsnGotx+/Ztnodwpby4v3OCtvtkmBi4X4LoKzKQl5e3nX1pPUw/DHkWi2WUZr5vYWEB/0+qISee212Lhm7zffsXFxcF4MlwFI6JMO7evZvgU9VpxKZTSmZ/5qK3UEgsFhcT62Px7+ln6c/iY4PBMEYfAJdp5uZiNG3/TRK18U7bDeud/+Wz8O+ySPb8/fpHbIH5lj4Lj/FZiMpsOByeoBKoqalhsN+994/pkTNnzqTJZLKqjo4O9ov1hVdzc7M4Pz9/l7CyVP4FU0jsuMljUgoAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/myspaceB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/myspaceW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/openidB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/openidico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABFFBMVEUAAACysrKysrKysrL3kx73kx6ysrKysrKysrKysrKysrKysrKysrKysrKysrKysrL3kx6ysrKysrL3kx73kx73kx6ysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrL3kx6ysrKysrKysrKysrL3kx6ysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrL3kx6ysrKysrKysrL3kx6ysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLWomWysrKysrLjnEiysrKysrKysrL3kx6ysrKysrKysrKysrKysrKysrKysrKysrKysrL3kx6ysrKysrKysrLZoV/3kx6lBKZuAAAAWXRSTlMAAQMEBAUGBwkMDg8QFxgcHB4gICIjJC00ODk6REdJTU9XWF1jZGhpa3BzenyAhomPkpSVl5ibn5+nqKqwsri7vb7CxsvLzdPT1Njb4OPk6e3y9Pb3+fv9/tFOeXgAAADQSURBVHjaxdHHVgJBFATQhwqSg5JzziI5M0oGAUGRUMz//wc9sxDOmV6wo5Z1F13vNN0Ye9XK7R3NvfjKlaYo3k90kfrUIEteyLkuva3yC8AoSxHAKGp8D7Jeld0C2Ha1skS/wLJDkuixA2CT0f+/411I9kZUAjAwXxZYBEipkfsIzHXX20zhwucPelRmHlKsfnAFqM/kmXvPh7SXKwUmca7Y/oD1C08oBWDl4wllD8Ch5eEI+eWjv9szhZAmMZHsJC7TasXfOJON4Tj2RLfkDHZLQJjZ3VMqAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/openidW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAQCAYAAABKkhw/AAAFS0lEQVR42tVXe0ibVxQXYDDYYMAA9lcRBC0wtAJUFRwKSK3DtxWnQ7tZFNsKUER1lokC6oSqYzrfcepU0WrVOfFVtZoYNbU1Naa+otrEV9RqtSaRuZ6dc+Bm0miBUop+8CP3nu/ee+7v/s45342VeFJTUz9BfFNeXv5TW1tbVXd3d+dJ6Ovt6p3pLlBT+ywDOfxZWVmZhpw8EZ8KnoLsV/n5+Snj4+OPl5aWlKurq8tra2urL168ODgOvbrPZKjyeHNQfvkN9c84DCsrKzNKpfJZYWEhEb9gVpbIzs3NzSNRuVarPcA2nITt4WIw/nYBkDD1zw1QxK3S0tJfkOtnRNgdlVWsr6/LFxcX4V3YGSkBJiy5TP1zhdnZWW1GRkagVUVFxc94Ak+QMIUBnAYMANgdKzcT1mgWcKGlU8cvLCzAvXv3IDg4GMLCwqCmpgaWl5fp3QfB3bt32UdHRwfExsYybt++zT5nZmYsxmN4/9vQ0PC7VXt7e4Ner19GA7yNeY0GxhTj0Nc/CL0PB2Bb/r/CIyMKtg1J5aCaUosD4HmYFnDt2jW4fv069PT0QGtrK7i5uUFKSgq9/yCwtbVlwpiO4O3tDY2NjVBdXU0+yRepajGns7PzbyuqaEjYgEUKBFBtUCpV8LDvEZN9NqlidfYUEiZskDjxArOoulQ6TMQZKpWa52OFBFdXV8CaINbkU7e2tsYxKsjKyoKCggIICQmB5ORkXlvMCw0NhfDwcBgYGGBbZmYmlJWVQWBgIKs4Pz9PdiJMucnrREVFCT/s09PTE7BCC5sZxJUJb21tGZA0CExNPWcCg0My0CExYd9/XCEIUx8XX4OxsXHoHxji8RPKSbanp6fDnTt3xDwB2ggr4evrCxEREaxCfHw8k1YoFHDp0iX+HRoaAkdHRybn4+MDN27cAKy2EBkZCZiHvJadnR1HElZgen/cD0dSYmKihX8z4e3tbSMCCEjeTGBhcYltAq/H/xCEhU0AFV8FrW6F22lpaeTQYsyVK1egqakJ/Pz8iBTbJicnwcnJCfLy8sDZ2RkSEhIYFy9ehJaWFj6c3t5eHltSUgI3b96kNhFmNYuLiyE6Ovq4HyaclJRk4d9MeGdnx7i7uwsE/eYmhTIT3tDr2SZgeFoJTLjCifqnoqurC9zd3eHly5dmm06nAxsbG/5M+Pv7g1wuJzsTdnFxgdzcXA5lrCkEigQay4czODhIYzm0b926RW0+kI2NDcDPDcTExJj9IBe4evUq3L9/32JfTBgXb8KNrezv7wNhb28fZMMjTHhmdo5tAsaJKkGY+5YQa+xRdaaNcIhKpVLw8vKik+f3AQEBlHd8CHFxcZynExMT4ODgQL8Me3t78+HIZDKeJ5FIqBJTmwhzNOLNkMKe87+5uZnX8/DwIEUt9oVCdFjV1dVlY9keNhgMIIC5ScWKlZ7H6ntwcMB2k7JaEKb+u0CkKQSpCHHuPXjwQKxDBYjCnhXNycmhzbC9v7+fqiyBVCUb5Sh9Q6nNB4f7pTbNJx9kE58lJltUVERkT9oTpZPECid+q8Lyik5HDw8PgWAymWB9Qw9SmZyUZsWnp2dhU1bMhE0VzjTuvREUFASjo6PU/ligfNdnZ2d/TzetzzEssjUazXNUYOTo6AgEaKBWq4MnTyfg0aAUJluywPTXD/CPbpTevzfq6+upwlL7Y4BCfwcvPkXI9Utxn7bB79avarV6GvOqDxV+bTQaTceBIXH4em/30GgwUP/MA5/9V69ebeCjr62tJbJfv/2P6QssHt9h4lfj7Yj+Yp174GetBq+aPwpl6fkP4uE4fZ1ZC58AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/technorati.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEVKSko9oAA9oAA+pkBLswBWvAJ8yUCMwmzO6IfR7NLx+Nz09+739/f8//j////pTef3AAAAAnRSTlMizEPzBYMAAABySURBVHjaZc9BDsMgDERRcD02ODD3P26cQiOkfonFvI1FKVWOam5Y5n2QHN1qEQPgk5xjJskXbDBcRT24oLGrAlCNBcGGVVvQGRtigU2G5/SLclzJx7lBgw9d7bMBpIuKqL3giqcX1j7gtxMq7Aj17/s3ZTIF/3Kmz4IAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/verisign.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAaVBMVEUAAAAAAAAAAACCgoLv7+/MzMwRERElJSVQFhJyPHOCgoKMjIyZmZm0sqm1T0O3cFq3iYS6c2/CwsLDlYzMzMzWsLLW1Nbb3uHi0d7qzLns6ejv7+/y4dbz5t309+739/f8//j9+fj////0IaR3AAAABnRSTlMAIjNVzO59s5fcAAAAmUlEQVR42mXP0Q6DIBQDUFTEORxyRVRRUPr/HzkimdmyvvWkL2WsKL9SpF5x3OFVwUoO98k8LCMrr74aY53rRtQJQvCktCEtn+GC6JQ5YoztQ8cLYPUBQApNLgP5l8QgJPo1gzq3RrbigLYZaMMkRId7YSzQNgF77zMsasE8IZJGBqxkdm97c+BMwJE2hogsgK3+OXemc3/33zqGE2qkHB83AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/vidoop.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAARERElJSVQFhKSFhG/IRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoouTWAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAAAE5JREFUeNqdj1EOwCAIQy1l9z+ya3UmJPyY9aPWJxAZc1T5iiiCWKAo7gAfK9NOAx2ACKAnA0ekqH1XKHKBr8JZE+K0cI3bxj8fa8u19V8IIAW0anvKtgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/wordpress.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAAkbY0lg60/kcZOl8dancprpM+AsNWawt2m0Oa51OXb3uHe6e/v7+/39/f///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNCfDAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAAAGpJREFUeNptz1kKw0AMA9AZWV7GddP7nzYNNC4pqfDXwyA09vmTfUzwEswxiUv4AboKzb4gQaHgsRpiU6lAvvwEL8cqeMYJGgl/kt4fZnVcUKNBM+kHWrdYFmRL7RZILLU0NHT+w23cbf4bHiUHr+ILDogAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/yahooB.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/images/yahooW.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAQCAYAAABKkhw/AAAFV0lEQVR42t1XW0yTZxjmZsmSLdnFbna1m9268ynZEmOyLSYz2aY7ONQ52dQ5dVFBLIDhJJRaQQHKedAWaQvFVqwFCkWKwkCBcl6l9ExP0HESAuB0Pnv/L/GPnIzLbsQ/eUL7vYfved735ev/hT18EhMTnyNsLi0tjdPpdOWNjY2GjQzSUCGXy5NJ02eE55nIR8S+IpFI4s1mc7fb7e73+Xy3g8FgYHR0dH6jwuVyBfx+v7W/v3+goKCAE/4q31lOrM1ms5PDDa/XO0+f8azAarX+bbfbfSUlJWdJ6wuc4C3U2S7q6A2qCmwjdvR2DqCva5Ch52Y/Q++tAYwM20A+Ty3q1SZkC6SQnauGw+7g151O5z9DQ0NOoVC4I0wqlSbQGPeMjY1xo4D+riHkxMgQ930GwjedYEiKyIZMXE3CB0A+/wt9nYPQXTRCr2hCnaqZ7feksUO9FlQX16IgoYJxLBVW4XpdB2+vzNMxvpFfCFfF0uQuqdXq/DC9Xq8eHx8fpnHGo6D/Y0jiylmC45+nwuVw8zbR4UJaO4MDH8fjl82nEfPtOdRXmZbFD/ZYUJSsQm6sHDkCGZFUoKd9ALZhB1r07Yj4MAaXywx8XrvVCUNVC1S5OlTlXWU+RJKzsb9FSUrsfTca2adkqK80oUnbCkVWDQ5/ksjxIVFeaErqGN/iFBXW0PPAYDDUhnEnWigUukMjjRVgjqkHJCzJ+cjSZTapqBrHt6Whu7UPbqeHETDp2tF0uQ1Om4v3S/wxG0mEQCCwLD7igxguln2uLqzlCseIGtQtnHASJoXgazFG/rRDmXOFcWisvr6Ko5Xse987BZ3ciJqyBubXfOUPrKWH08oET0xMLJBorIVRtxcntqVyiShhI4KBICSx5RAfLYbX4+N8KNkYLkSW4dCWBBQmKjkfPj71Zwlid2bgGhWiSdsG46VW1KtM+OGtk7jV3IP2xm6Wu/N676q9z1BsfnwFUiJysfedaNAkrskx+isRm8ar5U3Y9XokPM7RNf14wZOTk4sErAdLrxX73hewTeN3ZuL3NDWoSLzd7w0iPvw8ExO9XbQsNm1/Hn7bmgK5WIsqiZ4VrU5pYuPZYTRDmaXDrjciERoPrdo3RyBH2sF8yESXuKIQj5FVPl63j6ZFQEVswVV5E05+KVpXBy94enp6bmZmBo8Bbaphm57afhbkv8xGpDnBJEqDPW9Hwdw6yNtS9uUilUSvzLf/ozi01XdxYHk1RYZldp87wApVW2HCeDAE4cECHNt6BqYrHfA4vPDYvSw25ptzKE6uZJzcNjp0b1rW1cAE06GlmZqass/NzeExYISIGHUsf9m63xNkh9pf4xPse3FSJY23FLYhJ9IPFeLop0k4Qjj7axGG++ywmEdwIUqKYxQjPlKM2702mGo6EPtdBh1+GciKkiGdxAl2iKGXX+P3mZ2dRXuDGbmCclbEtAP5kAovYbBzmPdRUeF1ZcaV3Pn4hoaGujCVSiWmY7t9YWHhAQHrQS2pZYJPh1/g17pbBpCwOwtxNObN2g7cmZmFUd2G3W9God1gxvTkDPN7UsxM3YHPFcTE+CT7/l/RVtuFzmt9a9rm5+cfaDSasrDk5ORt9KNsoSp03L17FytASbqREy2nqhdCdKgIIupU5rFS5MUqVvmG/BOoLTcx6GXNcA172frTAGpqQCwW7+HetF6kC4PY4XDcpircvH//Pp4l3Lt3jzuhxxQKRSFpffnh+/RrdLPItlgsw/QD3by0tDS5uLi4tJFBD3cQe6izfqVSyYndtPLG9FJ6enq4Vqu9aDQa2RVro6OmpkaRmZn5E99Zev4F4dhYuNEmrrMAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/jquery.openid.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9qUXVlcnkgT3BlbklEIFBsdWdpbiAxLjEgQ29weXJpZ2h0IDIwMDkgSmFycmV0dCBWYW5jZSBodHRwOi8vanZhbmNlLmNvbS9wYWdlcy9qUXVlcnlPcGVuSWRQbHVnaW4ueGh0bWwNCiQuZm4ub3BlbmlkID0gZnVuY3Rpb24oKSB7DQogIHZhciAkdGhpcyA9ICQodGhpcyk7DQogIHZhciAkdXNyID0gJHRoaXMuZmluZCgnaW5wdXRbbmFtZT1vcGVuaWRfdXNlcm5hbWVdJyk7DQogIHZhciAkaWQgPSAkdGhpcy5maW5kKCdpbnB1dFtuYW1lPW9wZW5pZF9pZGVudGlmaWVyXScpOw0KICB2YXIgJGZyb250ID0gJHRoaXMuZmluZCgnZGl2OmhhcyhpbnB1dFtuYW1lPW9wZW5pZF91c2VybmFtZV0pPnNwYW46ZXEoMCknKTsNCiAgdmFyICRlbmQgPSAkdGhpcy5maW5kKCdkaXY6aGFzKGlucHV0W25hbWU9b3BlbmlkX3VzZXJuYW1lXSk+c3BhbjplcSgxKScpOw0KICB2YXIgJHVzcmZzID0gJHRoaXMuZmluZCgnZmllbGRzZXQ6aGFzKGlucHV0W25hbWU9b3BlbmlkX3VzZXJuYW1lXSknKTsNCiAgdmFyICRpZGZzID0gJHRoaXMuZmluZCgnZmllbGRzZXQ6aGFzKGlucHV0W25hbWU9b3BlbmlkX2lkZW50aWZpZXJdKScpOw0KDQogIHZhciBzdWJtaXR1c3IgPSBmdW5jdGlvbigpIHsNCiAgICBpZiAoJHVzci52YWwoKS5sZW5ndGggPCAxKSB7DQogICAgICAkdXNyLmZvY3VzKCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgICRpZC52YWwoJGZyb250LnRleHQoKSArICR1c3IudmFsKCkgKyAkZW5kLnRleHQoKSk7DQogICAgcmV0dXJuIHRydWU7DQogIH07DQoNCiAgdmFyIHN1Ym1pdGlkID0gZnVuY3Rpb24oKSB7DQogICAgaWYgKCRpZC52YWwoKS5sZW5ndGggPCAxKSB7DQogICAgICAkaWQuZm9jdXMoKTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQoNCiAgfTsNCiAgdmFyIGRpcmVjdCA9IGZ1bmN0aW9uKCkgew0KICAgIHZhciAkbGkgPSAkKHRoaXMpOw0KICAgICRsaS5wYXJlbnQoKS5maW5kKCdsaScpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHQnKTsNCiAgICAkbGkuYWRkQ2xhc3MoJ2hpZ2hsaWdodCcpOw0KICAgICR1c3Jmcy5mYWRlT3V0KCk7DQogICAgJGlkZnMuZmFkZU91dCgpOw0KDQogICAgJHRoaXMudW5iaW5kKCdzdWJtaXQnKS5zdWJtaXQoZnVuY3Rpb24oKSB7DQogICAgICAkaWQudmFsKCR0aGlzLmZpbmQoImxpLmhpZ2hsaWdodCBzcGFuIikudGV4dCgpKTsNCiAgICB9KTsNCiAgICAkdGhpcy5zdWJtaXQoKTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH07DQoNCiAgdmFyIG9wZW5pZCA9IGZ1bmN0aW9uKCkgew0KICAgIHZhciAkbGkgPSAkKHRoaXMpOw0KICAgICRsaS5wYXJlbnQoKS5maW5kKCdsaScpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHQnKTsNCiAgICAkbGkuYWRkQ2xhc3MoJ2hpZ2hsaWdodCcpOw0KICAgICR1c3Jmcy5oaWRlKCk7DQogICAgJGlkZnMuc2hvdygpOw0KICAgICRpZC5mb2N1cygpOw0KICAgICR0aGlzLnVuYmluZCgnc3VibWl0Jykuc3VibWl0KHN1Ym1pdGlkKTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH07DQoNCiAgdmFyIHVzZXJuYW1lID0gZnVuY3Rpb24oKSB7DQogICAgdmFyICRsaSA9ICQodGhpcyk7DQogICAgJGxpLnBhcmVudCgpLmZpbmQoJ2xpJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodCcpOw0KICAgICRsaS5hZGRDbGFzcygnaGlnaGxpZ2h0Jyk7DQogICAgJGlkZnMuaGlkZSgpOw0KICAgICR1c3Jmcy5zaG93KCk7DQogICAgJHRoaXMuZmluZCgnbGFiZWxbZm9yPW9wZW5pZF91c2VybmFtZV0gc3BhbicpLnRleHQoJGxpLmF0dHIoInRpdGxlIikpOw0KICAgICRmcm9udC50ZXh0KCRsaS5maW5kKCJzcGFuIikudGV4dCgpLnNwbGl0KCJ1c2VybmFtZSIpWzBdKTsNCiAgICAkZW5kLnRleHQoIiIpLnRleHQoJGxpLmZpbmQoInNwYW4iKS50ZXh0KCkuc3BsaXQoInVzZXJuYW1lIilbMV0pOw0KICAgICRpZC5mb2N1cygpOw0KICAgICR0aGlzLnVuYmluZCgnc3VibWl0Jykuc3VibWl0KHN1Ym1pdHVzcik7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9Ow0KDQogICR0aGlzLmZpbmQoJ2xpLmRpcmVjdCcpLmNsaWNrKGRpcmVjdCk7DQogICR0aGlzLmZpbmQoJ2xpLm9wZW5pZCcpLmNsaWNrKG9wZW5pZCk7DQogICR0aGlzLmZpbmQoJ2xpLnVzZXJuYW1lJykuY2xpY2sodXNlcm5hbWUpOw0KICAkaWQua2V5cHJlc3MoZnVuY3Rpb24oZSkgew0KICAgIGlmICgoZS53aGljaCAmJiBlLndoaWNoID09IDEzKSB8fCAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSA9PSAxMykpIHsNCiAgICAgIHJldHVybiBzdWJtaXRpZCgpOw0KICAgIH0NCiAgfSk7DQogICR1c3Iua2V5cHJlc3MoZnVuY3Rpb24oZSkgew0KICAgIGlmICgoZS53aGljaCAmJiBlLndoaWNoID09IDEzKSB8fCAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSA9PSAxMykpIHsNCiAgICAgIHJldHVybiBzdWJtaXR1c3IoKTsNCiAgICB9DQogIH0pOw0KICAkdGhpcy5maW5kKCdsaSBzcGFuJykuaGlkZSgpOw0KICAkdGhpcy5maW5kKCdsaScpLmNzcygnbGluZS1oZWlnaHQnLCAwKS5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7DQogICR0aGlzLmZpbmQoJ2xpOmVxKDApJykuY2xpY2soKTsNCiAgcmV0dXJuIHRoaXM7DQp9Ow0K]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/Login.xhtml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4NCjxoZWFkPg0KICAgIDx0aXRsZT5qUXVlcnkgT3BlbklEIFBsdWdpbjwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgaHJlZj0ib3BlbmlkLmNzcyIgLz4NCiAgICA8IS0tIGpRdWVyeSBPcGVuSUQgUGx1Z2luIDEuMSBDb3B5cmlnaHQgMjAwOSBKYXJyZXR0IFZhbmNlIGh0dHA6Ly9qdmFuY2UuY29tL3BhZ2VzL2pRdWVyeU9wZW5JZFBsdWdpbi54aHRtbCAtLT4NCjwvaGVhZD4NCjxib2R5Pg0KCTxoMT5qUXVlcnkgT3BlbklEIFBsdWdpbjwvaDE+DQo8YWRkcmVzcz5CeSA8YSBocmVmPSJodHRwOi8vanZhbmNlLmNvbSI+SmFycmV0dCBWYW5jZTwvYT48L2FkZHJlc3M+PGJyIC8+DQoNCjxoMj5Mb2dpbiAod2l0aCBqYXZhc2NyaXB0KTwvaDI+DQo8Zm9ybSBjbGFzcz0ib3BlbmlkIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iL0xvZ2luLnhodG1sP1JldHVyblVybD0iPiANCiAgPGRpdj48dWwgY2xhc3M9InByb3ZpZGVycyI+IA0KICA8bGkgY2xhc3M9Im9wZW5pZCIgdGl0bGU9Ik9wZW5JRCI+PGltZyBzcmM9ImltYWdlcy9vcGVuaWRXLnBuZyIgYWx0PSJpY29uIiAvPiANCiAgPHNwYW4+PHN0cm9uZz5odHRwOi8ve3lvdXItb3BlbmlkLXVybH08L3N0cm9uZz48L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0iZGlyZWN0IiB0aXRsZT0iR29vZ2xlIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvZ29vZ2xlVy5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwczovL3d3dy5nb29nbGUuY29tL2FjY291bnRzL284L2lkPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9ImRpcmVjdCIgdGl0bGU9IllhaG9vIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMveWFob29XLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly95YWhvby5jb20vPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iQU9MIHNjcmVlbiBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvYW9sVy5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vb3BlbmlkLmFvbC5jb20vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPjwvc3Bhbj48L2xpPiANCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9Ik15T3BlbklEIHVzZXIgbmFtZSI+IA0KCQk8aW1nIHNyYz0iaW1hZ2VzL215b3BlbmlkLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lm15b3BlbmlkLmNvbS88L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJGbGlja3IgdXNlciBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvZmxpY2tyLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly9mbGlja3IuY29tLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4vPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iVGVjaG5vcmF0aSB1c2VyIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy90ZWNobm9yYXRpLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly90ZWNobm9yYXRpLmNvbS9wZW9wbGUvdGVjaG5vcmF0aS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lzwvc3Bhbj48L2xpPiANCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IldvcmRwcmVzcyBibG9nIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy93b3JkcHJlc3MucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ud29yZHByZXNzLmNvbTwvc3Bhbj48L2xpPiANCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkJsb2dnZXIgYmxvZyBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvYmxvZ2dlci5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi5ibG9nc3BvdC5jb20vPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iTGl2ZUpvdXJuYWwgYmxvZyBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvbGl2ZWpvdXJuYWwucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ubGl2ZWpvdXJuYWwuY29tPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iQ2xhaW1JRCB1c2VyIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9jbGFpbWlkLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly9jbGFpbWlkLmNvbS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+PC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iVmlkb29wIHVzZXIgbmFtZSI+IA0KCQk8aW1nIHNyYz0iaW1hZ2VzL3ZpZG9vcC5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi5teXZpZG9vcC5jb20vPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iVmVyaXNpZ24gdXNlciBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvdmVyaXNpZ24ucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ucGlwLnZlcmlzaWdubGFicy5jb20vPC9zcGFuPjwvbGk+IA0KICA8L3VsPjwvZGl2PiANCiAgPGZpZWxkc2V0PiANCiAgPGxhYmVsIGZvcj0ib3BlbmlkX3VzZXJuYW1lIj5FbnRlciB5b3VyIDxzcGFuPlByb3ZpZGVyIHVzZXIgbmFtZTwvc3Bhbj48L2xhYmVsPiANCiAgPGRpdj48c3Bhbj48L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9wZW5pZF91c2VybmFtZSIgLz48c3Bhbj48L3NwYW4+IA0KICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4iIC8+PC9kaXY+IA0KICA8L2ZpZWxkc2V0PiANCiAgPGZpZWxkc2V0PiANCiAgPGxhYmVsIGZvcj0ib3BlbmlkX2lkZW50aWZpZXIiPkVudGVyIHlvdXIgPGEgY2xhc3M9Im9wZW5pZF9sb2dvIiBocmVmPSJodHRwOi8vb3BlbmlkLm5ldCI+T3BlbklEPC9hPjwvbGFiZWw+IA0KICA8ZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcGVuaWRfaWRlbnRpZmllciIgLz4gDQogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiIgLz48L2Rpdj4gDQogIDwvZmllbGRzZXQ+IA0KPC9mb3JtPg0KPGgyPkxvZ2luICh3aXRob3V0IGphdmFzY3JpcHQpPC9oMj4NCjxmb3JtIGNsYXNzPSJvcGVuaWQiIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIvTG9naW4ueGh0bWw/UmV0dXJuVXJsPSI+IA0KICA8ZGl2Pjx1bCBjbGFzcz0icHJvdmlkZXJzIj4gDQogIDxsaSBjbGFzcz0ib3BlbmlkIiB0aXRsZT0iT3BlbklEIj48aW1nIHNyYz0iaW1hZ2VzL29wZW5pZFcucG5nIiBhbHQ9Imljb24iIC8+IA0KICA8c3Bhbj48c3Ryb25nPmh0dHA6Ly97eW91ci1vcGVuaWQtdXJsfTwvc3Ryb25nPjwvc3Bhbj48L2xpPiANCiAgPGxpIGNsYXNzPSJkaXJlY3QiIHRpdGxlPSJHb29nbGUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9nb29nbGVXLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYWNjb3VudHMvbzgvaWQ8L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0iZGlyZWN0IiB0aXRsZT0iWWFob28iPiANCgkJPGltZyBzcmM9ImltYWdlcy95YWhvb1cucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL3lhaG9vLmNvbS88L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJBT0wgc2NyZWVuIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9hb2xXLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly9vcGVuaWQuYW9sLmNvbS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+PC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iTXlPcGVuSUQgdXNlciBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvbXlvcGVuaWQucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ubXlvcGVuaWQuY29tLzwvc3Bhbj48L2xpPiANCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkZsaWNrciB1c2VyIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9mbGlja3IucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL2ZsaWNrci5jb20vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi88L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJUZWNobm9yYXRpIHVzZXIgbmFtZSI+IA0KCQk8aW1nIHNyYz0iaW1hZ2VzL3RlY2hub3JhdGkucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL3RlY2hub3JhdGkuY29tL3Blb3BsZS90ZWNobm9yYXRpLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4vPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iV29yZHByZXNzIGJsb2cgbmFtZSI+IA0KCQk8aW1nIHNyYz0iaW1hZ2VzL3dvcmRwcmVzcy5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi53b3JkcHJlc3MuY29tPC9zcGFuPjwvbGk+IA0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iQmxvZ2dlciBibG9nIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9ibG9nZ2VyLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+LmJsb2dzcG90LmNvbS88L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJMaXZlSm91cm5hbCBibG9nIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy9saXZlam91cm5hbC5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi5saXZlam91cm5hbC5jb208L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJDbGFpbUlEIHVzZXIgbmFtZSI+IA0KCQk8aW1nIHNyYz0iaW1hZ2VzL2NsYWltaWQucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL2NsYWltaWQuY29tLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz48L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJWaWRvb3AgdXNlciBuYW1lIj4gDQoJCTxpbWcgc3JjPSJpbWFnZXMvdmlkb29wLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lm15dmlkb29wLmNvbS88L3NwYW4+PC9saT4gDQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJWZXJpc2lnbiB1c2VyIG5hbWUiPiANCgkJPGltZyBzcmM9ImltYWdlcy92ZXJpc2lnbi5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi5waXAudmVyaXNpZ25sYWJzLmNvbS88L3NwYW4+PC9saT4gDQogIDwvdWw+PC9kaXY+IA0KICA8ZmllbGRzZXQ+IA0KICA8bGFiZWwgZm9yPSJvcGVuaWRfdXNlcm5hbWUiPkVudGVyIHlvdXIgPHNwYW4+UHJvdmlkZXIgdXNlciBuYW1lPC9zcGFuPjwvbGFiZWw+IA0KICA8ZGl2PjxzcGFuPjwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3BlbmlkX3VzZXJuYW1lIiAvPjxzcGFuPjwvc3Bhbj4gDQogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiIgLz48L2Rpdj4gDQogIDwvZmllbGRzZXQ+IA0KICA8ZmllbGRzZXQ+IA0KICA8bGFiZWwgZm9yPSJvcGVuaWRfaWRlbnRpZmllciI+RW50ZXIgeW91ciA8YSBjbGFzcz0ib3BlbmlkX2xvZ28iIGhyZWY9Imh0dHA6Ly9vcGVuaWQubmV0Ij5PcGVuSUQ8L2E+PC9sYWJlbD4gDQogIDxkaXY+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9wZW5pZF9pZGVudGlmaWVyIiAvPiANCiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkxvZ2luIiAvPjwvZGl2PiANCiAgPC9maWVsZHNldD4gDQo8L2Zvcm0+DQo8YnIgLz4NCjxoMj5BZGRpdGlvbmFsIEltYWdlczwvaDI+DQo8aW1nIHNyYz0iaW1hZ2VzL2ZsaWNrclcucG5nIiBhbHQ9Imljb24iIC8+DQo8aW1nIHNyYz0iaW1hZ2VzL215c3BhY2VXLnBuZyIgYWx0PSJpY29uIiAvPg0KPGltZyBzcmM9ImltYWdlcy9teW9wZW5pZFcucG5nIiBhbHQ9Imljb24iIC8+DQo8aW1nIHNyYz0iaW1hZ2VzL2ZhY2Vib29rVy5wbmciIGFsdD0iaWNvbiIgLz48YnIgLz4NCg0KPHA+VmlzaXQgPGEgaHJlZj0iaHR0cDovL2p2YW5jZS5jb20vcGFnZXMvalF1ZXJ5T3BlbklkUGx1Z2luLnhodG1sIj5qUXVlcnkgT3BlbklEIFBsdWdpbiBIb21lcGFnZTwvYT4gZm9yIHVwZGF0ZXMuPC9wPg0KDQo8cD48YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzMuMC8iPjxpbWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UiIHN0eWxlPSJib3JkZXItd2lkdGg6MCIgc3JjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9pbWFnZXMvcHVibGljL3NvbWVyaWdodHMyMC5wbmciIC8+PC9hPjxiciAvPlRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIDxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAgVW5wb3J0ZWQgTGljZW5zZTwvYT4uPC9wPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMy4xL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5Lm9wZW5pZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ICAkKGZ1bmN0aW9uKCkgeyAkKCJmb3JtLm9wZW5pZDplcSgwKSIpLm9wZW5pZCgpOyB9KTs8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCg==]]></data>
	</file>
	<file>
	  <filename>/jQueryOpenIdPlugin/openid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/Ym9keSB7Zm9udC1mYW1pbHk6IEFyaWFsO30NCmZpZWxkc2V0IHtib3JkZXItc3R5bGU6bm9uZTt9DQppbWcge2JvcmRlci1zdHlsZTpub25lO30NCg0KZm9ybS5vcGVuaWRfZm9ybSB1bCB7IHRleHQtYWxpZ246Y2VudGVyOyBkaXNwbGF5OmlubGluZTt9DQpmb3JtLm9wZW5pZF9mb3JtIHVsIGxpIHtmbG9hdDpsZWZ0OyBwYWRkaW5nOjRweCAhaW1wb3J0YW50OyBsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luOjBweCAhaW1wb3J0YW50O30NCmZvcm0ub3BlbmlkX2Zvcm0gdWwgbGkgc3BhbiB7cGFkZGluZzowIDFlbSAwIDNweH0NCmZvcm0ub3BlbmlkX2Zvcm0gZmllbGRzZXQge2NsZWFyOmJvdGg7IHBhZGRpbmc6MWVtIDB9DQpmb3JtLm9wZW5pZF9mb3JtIGRpditmaWVsZHNldCB7ZGlzcGxheTpub25lfQ0KZm9ybS5vcGVuaWRfZm9ybSBsYWJlbCB7ZGlzcGxheTpibG9jazsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udC1zaXplOmxhcmdlcjsgbWFyZ2luLWJvdHRvbTouNWVtfQ0KaW5wdXRbbmFtZT1vcGVuaWRfdXNlcm5hbWVdIHt3aWR0aDo4ZW19DQppbnB1dFtuYW1lPW9wZW5pZF9pZGVudGlmaWVyXSB7d2lkdGg6MThlbX0NCmZvcm0ub3BlbmlkX2Zvcm0gdWwgbGkuaGlnaGxpZ2h0IHsgLW1vei1ib3JkZXItcmFkaXVzOjRweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZENn0NCmZvcm0ub3BlbmlkX2Zvcm0gZmllbGRzZXQgZGl2IHtmb250LWZhbWlseTphcmlhbDstbW96LWJvcmRlci1yYWRpdXM6NHB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRENEQ0RDIHVybChpbWFnZXMvZmFkZWdyZXkucG5nKTsgcGFkZGluZzoxMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfQ0KZm9ybS5vcGVuaWRfZm9ybSBpbnB1dFt0eXBlPSdzdWJtaXQnXSB7bWFyZ2luLWxlZnQ6MWVtO30NCg0KLm9wZW5pZF9sb2dve2NvbG9yOiNGNzkzMUU7cGFkZGluZzo2cHggMHB4IDhweCAyOHB4OyBiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL29wZW5pZGljby5wbmcpIG5vLXJlcGVhdH0NCg0KI29wZW5pZF9sb2dpbntmbG9hdDpsZWZ0OyBmb250LXNpemU6bGFyZ2VyOyB3aWR0aDozMCU7IG1hcmdpbjoyZW0gMWVtOyB0ZXh0LWFsaWduOmNlbnRlcn0NCiNvcGVuaWRfbG9naW4gZGl2e21hcmdpbi10b3A6MC41ZW19DQojb3BlbmlkX2xvZ2luIGRpditzcGFue2ZvbnQtc2l6ZTpzbWFsbGVyfQ0KDQoNCi8qIE9wZW5JRCBtb2R1bGUgcHJvdmlkZXIgbGlzdGluZyAqLw0KZGl2I21haW4gbGkuUHJvdmlkZXIgeyBtYXJnaW4tbGVmdDogMHB4OyBwYWRkaW5nLWxlZnQ6IDcwcHg7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgcGFkZGluZy10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDt9DQpkaXYjbWFpbiBsaS5Qcm92aWRlci5nb29nbGUgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2dvb2dsZVcucG5nKTsgfQ0KZGl2I21haW4gbGkuUHJvdmlkZXIueWFob28geyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3lhaG9vVy5wbmcpOyB9DQpkaXYjbWFpbiBsaS5Qcm92aWRlci5teW9wZW5pZCB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbXlvcGVuaWRXLnBuZyk7IH0NCmRpdiNtYWluIGxpLlByb3ZpZGVyLmFvbCB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvYW9sVy5wbmcpOyB9DQpkaXYjbWFpbiBsaS5Qcm92aWRlci5teXNwYWNlIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9teXNwYWNlVy5wbmcpOyB9DQpkaXYjbWFpbiBsaS5Qcm92aWRlci5vcGVuaWQgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL29wZW5pZFcucG5nKTsgfQ0KZGl2I21haW4gbGkuUHJvdmlkZXIuZmFjZWJvb2sgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2ZhY2Vib29rVy5wbmcpOyB9DQpkaXYjbWFpbiBsaS5Qcm92aWRlci50d2l0dGVyIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy90d2l0dGVyVy5wbmcpOyB9]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09wZW5JRCBNb2R1bGUnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdPcGVuSUQgbW9kdWxlcyBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ09wZW5JRCBtb2R1bGUgdW5pbnN0YWxsZWQiJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoZSBPcGVuSUQgbW9kdWxlPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1RoaXMgbW9kdWxlIGFkZHMgT3BlbklEIGxvZ2luIGNhcGFiaWxpdGllcyB0byBDTVMgTWFkZSBTaW1wbGUgYW5kIEZyb250RW5kVXNlcnMuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMS4wLjAgRmlyc3QgcHVibGljIHJlbGVhc2Ugd2l0aCBzdXBwb3J0IGZvciBPcGVuSUQgYW5kIEZhY2Vib29rIGF1dGhlbnRpY2F0aW9uPC9saT4KPGxpPlZlcnNpb24gMS4xLjAgQWRkZWQgc3VwcG9ydCBmb3IgVHdpdHRlciBhdXRoZW50aWNhdGlvbi4gUG9zc2libGUgdG8gY29uZmlndXJlIHJlZGlyZWN0cyBhZnRlciBsb2dpbi4gQWRkZWQgT3BlbklEIFNlbGVjdG9yIGFzIGFkZGl0aW9uYWwgT3BlbklEIGxvZ2luIHBhZ2Ugc3R5bGUuCjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhlIE9wZW5JRCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBhZGQgYW4gT3BlbklEIG9yIEZhY2Vib29rIGFjY291bnQgdG8gYSByZWdpc3RlcmVkIGZyb250ZW5kIHVzZXIuIFRoYXQgdXNlciBjYW4gdGhlbiBsb2cgaW4gdXNpbmcgdGhhdCBpZGVudGl0eSBpbnN0ZWFkIG9mIHRoZSBvcmRpbmFyeSBmcm9udGVuZCBhY2NvdW50LjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPjxvbD4KICAgIDxsaT5NYWtlIHN1cmUgdGhhdCBGcm9udEVuZFVzZXJzIGlzIGluc3RhbGxlZDwvbGk+CiAgICA8bGk+SW5zdGFsbCB0aGUgT3BlbklEIG1vZHVsZTwvbGk+CiAgICA8bGk+Q2hlY2sgb3V0IHRoZSBzZXR0aW5ncyBwYWdlIGlmIHlvdSB3YW50IHRvIHVzZSBGYWNlYm9vayBhcyBhIHByb3ZpZGVyPC9saT4KICAgIDxsaT5BZGQgdGhlIHRhZyA8aT57T3BlbklEfTwvaT4gdG8gYSBuZXcgb3IgYW4gZXhpc3RpbmcgcGFnZTwvbGk+CiAgICA8bGk+TG9nIGluIGFzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9udGVuZCB1c2VyPC9saT4KICAgIDxsaT5WaXNpdCB0aGUgcGFnZSB3aXRoIHRoZSBPcGVuSUQgdGFnIGFuZCByZWdpc3RlciBhIHByb3ZpZGVyPC9saT4KICAgIDxsaT5Mb2dvdXQ8L2xpPgogICAgPGxpPlJldmlzaXQgdGhlIHBhZ2Ugd2l0aCB0aGUgT3BlbklEIHRhZywgc2VsZWN0IHRoZSBzYW1lIHByb3ZpZGVyIHlvdSBqdXN0IHJlZ2lzdGVyZWQsIGF1dGhlbnRpY2F0ZSBhbmQgYmVob2xkOiBZb3UgYXJlIG5vdyBsb2dnZWQgaW48L2xpPgo8L29sPjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5HZXR0aW5nIE9wZW5JRCB0byB3b3JrIHByb3Blcmx5IGNhbiBiZSBhIGJpdCBvZiBhIHN0cnVnZ2xlIGlmIHlvdSBhcmUgbm90CmZvcnR1bmF0ZSBlbm91Z2ggdG8gaGF2ZSBhbiBlbnZpcm9ubWVudCB0aGF0IGFscmVhZHkgaGFzIGFsbCB0aGUgYml0cyBhbmQgcGllY2VzIGluIHBsYWNlLgo8YnIvPlNvbWUgcGxhY2VzIHRvIGNoZWNrIGJlZm9yZSBhc2tpbmcgZm9yIGhlbHA6PGJyLz4KPHVsPgogICAgPGxpPlRoZSBqYW5yYWluIFJFQURNRSBmaWxlIGluIHRoZSAvbW9kdWxlcy9PcGVuSUQvb3BlbmlkLXBocC1vcGVuaWQtKnZlcnNpb24qIGRpcmVjdG9yeTwvbGk+CiAgICA8bGk+UnVuIHRoZSBkZXRlY3QucGhwIGZpbGUgaW4gL21vZHVsZXMvT3BlbklEL29wZW5pZC1waHAtb3BlbmlkLSp2ZXJzaW9uKi9leGFtcGxlcy88L2xpPgogICAgPGxpPlRyeSBkaWZmZXJlbnQgT3BlbklEIHByb3ZpZGVycyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgYWxsIGFyZSBicm9rZW4gb3IganVzdCBzb21lLgogICAgQSBydWxlIG9mIHRodW1iIGlzIHRoYXQgRmFjZWJvb2sgaXMgYSBzZXBhcmF0ZSB0aGluZyBjb21wYXJlZCB0byB0aGUgT3BlbklEIHByb3ZpZGVycy4KICAgIFByb3ZpZGVycyB0aGF0IHVzZSBkaXNjb3ZlcnkgKGxpa2UgR29vZ2xlKSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2ltcGxlciBvbmVzIGxpa2UgbXlPcGVuSUQ8L2xpPgogICAgPGxpPkNoZWNrIHlvdXIgcGhwIGVycm9yIGxvZ3MgZm9yIGFueSBleGNlcHRpb25zIG9yIGVycm9yIG1lc3NhZ2VzLiBHb29nbGUgYW55IG91dHB1dCBmb3IgY2x1ZXMgYWJvdXQgaG93IHRvIHNvbHZlIHRoZW08L2xpPgogICAgPGxpPlNldCBvcGVuaWQuZGVidWcgdG8gdHJ1ZSBpbiB5b3VyIGNvbmZpZy5waHAuIFRoaXMgd2lsbCBvdXRwdXQgYSB0b24gb2YgbWVzc2FnZXMgdG8gdGhlIHBocCBlcnJvciBsb2c8L2xpPgo8L3VsPgo8L3A+CjxoMz5DcmVkaXRzPC9oMz4KPHA+VGhlIE9wZW5JRCBsaWJyYXJ5IGlzIHN0YW5kaW5nIG9uIHRoZSBzaG91bGRlcnMgb2YgZ2lhbnRzLCBuYW1lbHk6Cjx1bD4KICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9vcGVuaWQvcGhwLW9wZW5pZC8iIHRhcmdldD0iX2JsYW5rIj5QSFAgT3BlbklEIGxpYnJhcnkgYnkgSmFuUmFpbiwgSW5jLjwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9qdmFuY2UuY29tL3BhZ2VzL0pRdWVyeU9wZW5JRFBsdWdpbi54aHRtbCIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5JRCBqUXVlcnkgcGx1Z2luIGJ5IEphcnJldCBWYW5jZTwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9waHAtc2RrLyIgdGFyZ2V0PSJfYmxhbmsiPkZhY2Vib29rIFBIUCBTREs8L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpxdWVyeS5jb20iIHRhcmdldD0iX2JsYW5rIj5qUXVlcnk8L2E+PC9saT4KPC91bD4KPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxMC0yMDExLCA8YSBocmVmPSJtYWlsdG86b3BlbmlkQGxlbm5hcnRzc29ucy5uZXQiPkhlbnJpayBMZW5uYXJ0c3NvbjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sIj5BcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMDwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+Cic7CiRsYW5nWydvcGVuaWRfcHJvdmlkZXJzJ10gPSAnRW5hYmxlZCBwcm92aWRlcnMnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWyd1c2VycyddID0gJ1VzZXJzJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWwnOwokbGFuZ1snb3BlbmlkX2ZhaWwnXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIDxhIGhyZWY9IiVzIj4lczwvYT4gYnV0IHRoZSBsb2dpbiBmYWlsZWQnOwokbGFuZ1snb3BlbmlkX3N1Y2Nlc3MnXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIDxhIGhyZWY9IiVzIj4lczwvYT4gYW5kIHlvdSBoYXZlIGJlZW4gbG9nZ2VkIGluIGFzIHVzZXIgJXMnOwokbGFuZ1snb3BlbmlkX3Vua25vd24nXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIDxhIGhyZWY9IiVzIj4lczwvYT4gYnV0IGlzIG5vdCByZWdpc3RlcmVkIHdpdGggYW55IHVzZXIuJzsKJGxhbmdbJ29wZW5pZF9yZWRpcmVjdGluZyddID0gJ1BsZWFzZSB3YWl0LCByZWRpcmVjdGluZyB0byB5b3VyIHNlbGVjdGVkIE9wZW5JRCBwcm92aWRlcic7CiRsYW5nWydvcGVuaWRfYWRkZWRfaWRlbnRpdHknXSA9ICdTdWNjZXNzZnVsbHkgYWRkZWQgJXMgaWRlbnRpdHkgJXMnOwokbGFuZ1snb3BlbmlkX3JlbW92ZV9pZGVudGl0eV9zdWNjZXNzJ10gPSAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgaWRlbnRpdHknOwokbGFuZ1snb3BlbmlkX3JlbW92ZV9pZGVudGl0eV9mYWlsZWQnXSA9ICdDb3VsZCBub3QgcmVtb3ZlIGlkZW50aXR5JzsKLy8gbGlzdF9wcm92aWRlcnMKJGxhbmdbJ2xpc3RfcmVnaXN0ZXJlZF9wcm92aWRlcnMnXSA9ICdSZWdpc3RlcmVkIHByb3ZpZGVycyc7CiRsYW5nWydsaXN0X2luZm9ybWF0aW9uJ10gPSAnVGhlIGZvbGxvd2luZyBPcGVuSUQgcHJvdmlkZXJzIGhhdmUgYmVlbiBhc3NvY2lhdGVkIHdpdGggeW91ciBhY2NvdW50LiBZb3UgY2FuIHVzZSBhbnkgb25lIHRvIGxvZyBpbiB0byB0aGlzIHNpdGUuJzsKJGxhbmdbJ2xpc3RfbGlua19yZW1vdmUnXSA9ICdSZW1vdmUnOwokbGFuZ1snbGlzdF9hZGQnXSA9ICdBZGQgb3IgdXBkYXRlIHByb3ZpZGVyJzsKJGxhbmdbJ2xpc3RfYWRkX2luZm9ybWF0aW9uJ10gPSAnU2VsZWN0IGEgcHJvdmlkZXIgaW4gdGhlIGZvcm0gYW5kIGNvbXBsZXRlIHRoZSBzaWduaW4gcHJvY2Vzcy4gSWYgc3VjY2Vzc2Z1bCB0aGUgcHJvdmlkZXIgd2lsbCBiZSBhZGRlZCB0byB5b3VyIGxpc3Qgb2YgcmVnaXN0ZXJlZCBwcm92aWRlcnMuCiAgICBJZiB5b3VcJ3ZlIGFscmVhZHkgZ290IGFub3RoZXIgaWQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzYW1lIHByb3ZpZGVyIHRoYXQgSUQgd2lsbCBiZSByZXBsYWNlZC4nOwovLyBsb2dpbl9mb3JtCiRsYW5nWydsb2dpbl9lbnRlcl95b3VyJ10gPSAnRW50ZXIgeW91cic7CiRsYW5nWydsb2dpbl9wcm92aWRlcl91c2VyX25hbWUnXSA9ICdQcm92aWRlciB1c2VyIG5hbWUnOwokbGFuZ1snbG9naW5fb3BlbmlkJ10gPSAnT3BlbklEJzsKJGxhbmdbJ2xvZ2luX2xvZ2luJ10gPSAnTG9naW4nOwovLyBsb2dpbl9mb3JtX29wZW5pZF9zZWxlY3RvcgokbGFuZ1snbG9naW5fc2lnbmluJ10gPSAnU2lnbi1pbic7CiRsYW5nWydsb2dpbl9jbGlja19wcm92aWRlciddID0gJ1BsZWFzZSBjbGljayB0byBzZWxlY3QgeW91ciBhY2NvdW50IHByb3ZpZGVyJzsKJGxhbmdbJ2xvZ2luX29wZW5pZF9pbmZvcm1hdGlvbiddID0gJ09wZW5JRCBpcyBzZXJ2aWNlIHRoYXQgYWxsb3dzIHlvdSB0byBsb2ctb24gdG8gbWFueSBkaWZmZXJlbnQgd2Vic2l0ZXMgdXNpbmcgYSBzaW5nbGUgaW5kZW50aXR5LgogRmluZCBvdXQgPGEgaHJlZj0iaHR0cDovL29wZW5pZC5uZXQvd2hhdC8iPm1vcmUgYWJvdXQgT3BlbklEPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL29wZW5pZC5uZXQvZ2V0LyI+aG93IHRvIGdldCBhbiBPcGVuSUQgZW5hYmxlZCBhY2NvdW50PC9hPic7Ci8vIHJlZ2lzdGVyX3Byb3ZpZGVyCiRsYW5nWydyZWdpc3Rlcl9wcm92aWRlciddID0gJ1JlZ2lzdGVyIE9wZW5JRCBwcm92aWRlcic7CiRsYW5nWydyZWdpc3Rlcl9pbmZvcm1hdGlvbiddID0gJ1NlbGVjdCB5b3VyIE9wZW5JRCBwcm92aWRlciBpbiB0aGUgZm9ybSBiZWxvdyBhbmQgY29tcGxldGUgdGhlIHNpZ24gaW4gcHJvY2Vzcy4KT25jZSBjb21wbGV0ZWQgeW91ciB1c2VyIGFjY291bnQgb24gdGhpcyBzaXRlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHlvdXIKT3BlbklEIHByb3ZpZGVyLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciB5b3UgdG8gc2lnbiBpbiB1c2luZyBPcGVuSUQgaW5zdGVhZApvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQuJzsKLy8gdHdpdHRlcgokbGFuZ1sndHdpdHRlcl9mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdUd2l0dGVyIGxvZ2luIHdhcyBjYW5jZWxsZWQgb3IgZmFpbGVkIGZvciBzb21lIG90aGVyIHJlYXNvbic7Ci8vIGZhY2Vib29rCiRsYW5nWydmYWNlYm9va19mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdGYWNlYm9vayBsb2dpbiB3YXMgY2FuY2VsbGVkIG9yIGZhaWxlZCBmb3Igc29tZSBvdGhlciByZWFzb24nOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ01vZHVsZSBPcGVuSUQnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNZXNzYWdlIHBvc3QgaW5zdGFsbGF0aW9uJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNZXNzYWdlIHBvc3QtZCZlYWN1dGU7c2luc3RhbGxhdGlvbic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7ciBkZSB2b3Vsb2lyIGQmZWFjdXRlO3NpbnN0YWxsZXIgbGUgbW9kdWxlIE9wZW5JRCA/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIGQmZWFjdXRlO3NpbnN0YWxsJmVhY3V0ZTsnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIGluc3RhbGwmZWFjdXRlOyBlbiB2ZXJzaW9uICVzLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSBtaXMgJmFncmF2ZTsgam91ciBlbiB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NlIG1vZHVsZSBwZXJtZXQgbCYjMDM5O2lkZW50aWZpY2F0aW9uIHZpYSBPcGVuSUQgZGFucyBDTVNNUyBldCBGcm9udEVuZFVzZXJzLic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAxLjAuMCBGaXJzdCBwdWJsaWMgcmVsZWFzZSB3aXRoIHN1cHBvcnQgZm9yIE9wZW5JRCBhbmQgRmFjZWJvb2sgYXV0aGVudGljYXRpb248L2xpPg0KPGxpPlZlcnNpb24gMS4xLjAgQWRkZWQgc3VwcG9ydCBmb3IgVHdpdHRlciBhdXRoZW50aWNhdGlvbi4gUG9zc2libGUgdG8gY29uZmlndXJlIHJlZGlyZWN0cyBhZnRlciBsb2dpbi4gQWRkZWQgT3BlbklEIFNlbGVjdG9yIGFzIGFkZGl0aW9uYWwgT3BlbklEIGxvZ2luIHBhZ2Ugc3R5bGUuDQo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPlF1ZSBmYWl0IGNlIG1vZHVsZSA/PC9oMz4NCjxwPlRoZSBPcGVuSUQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gYWRkIGFuIE9wZW5JRCBvciBGYWNlYm9vayBhY2NvdW50IHRvIGEgcmVnaXN0ZXJlZCBmcm9udGVuZCB1c2VyLiBUaGF0IHVzZXIgY2FuIHRoZW4gbG9nIGluIHVzaW5nIHRoYXQgaWRlbnRpdHkgaW5zdGVhZCBvZiB0aGUgb3JkaW5hcnkgZnJvbnRlbmQgYWNjb3VudC48L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPjxvbD4NCiAgICA8bGk+TWFrZSBzdXJlIHRoYXQgRnJvbnRFbmRVc2VycyBpcyBpbnN0YWxsZWQ8L2xpPg0KICAgIDxsaT5JbnN0YWxsIHRoZSBPcGVuSUQgbW9kdWxlPC9saT4NCiAgICA8bGk+Q2hlY2sgb3V0IHRoZSBzZXR0aW5ncyBwYWdlIGlmIHlvdSB3YW50IHRvIHVzZSBGYWNlYm9vayBhcyBhIHByb3ZpZGVyPC9saT4NCiAgICA8bGk+QWRkIHRoZSB0YWcgPGk+e09wZW5JRH08L2k+IHRvIGEgbmV3IG9yIGFuIGV4aXN0aW5nIHBhZ2U8L2xpPg0KICAgIDxsaT5Mb2cgaW4gYXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZyb250ZW5kIHVzZXI8L2xpPg0KICAgIDxsaT5WaXNpdCB0aGUgcGFnZSB3aXRoIHRoZSBPcGVuSUQgdGFnIGFuZCByZWdpc3RlciBhIHByb3ZpZGVyPC9saT4NCiAgICA8bGk+TG9nb3V0PC9saT4NCiAgICA8bGk+UmV2aXNpdCB0aGUgcGFnZSB3aXRoIHRoZSBPcGVuSUQgdGFnLCBzZWxlY3QgdGhlIHNhbWUgcHJvdmlkZXIgeW91IGp1c3QgcmVnaXN0ZXJlZCwgYXV0aGVudGljYXRlIGFuZCBiZWhvbGQ6IFlvdSBhcmUgbm93IGxvZ2dlZCBpbjwvbGk+DQo8L29sPjwvcD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPkdldHRpbmcgT3BlbklEIHRvIHdvcmsgcHJvcGVybHkgY2FuIGJlIGEgYml0IG9mIGEgc3RydWdnbGUgaWYgeW91IGFyZSBub3QNCmZvcnR1bmF0ZSBlbm91Z2ggdG8gaGF2ZSBhbiBlbnZpcm9ubWVudCB0aGF0IGFscmVhZHkgaGFzIGFsbCB0aGUgYml0cyBhbmQgcGllY2VzIGluIHBsYWNlLg0KPGJyLz5Tb21lIHBsYWNlcyB0byBjaGVjayBiZWZvcmUgYXNraW5nIGZvciBoZWxwOjxici8+DQo8dWw+DQogICAgPGxpPlRoZSBqYW5yYWluIFJFQURNRSBmaWxlIGluIHRoZSAvbW9kdWxlcy9PcGVuSUQvb3BlbmlkLXBocC1vcGVuaWQtKnZlcnNpb24qIGRpcmVjdG9yeTwvbGk+DQogICAgPGxpPlJ1biB0aGUgZGV0ZWN0LnBocCBmaWxlIGluIC9tb2R1bGVzL09wZW5JRC9vcGVuaWQtcGhwLW9wZW5pZC0qdmVyc2lvbiovZXhhbXBsZXMvPC9saT4NCiAgICA8bGk+VHJ5IGRpZmZlcmVudCBPcGVuSUQgcHJvdmlkZXJzIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiBhbGwgYXJlIGJyb2tlbiBvciBqdXN0IHNvbWUuDQogICAgQSBydWxlIG9mIHRodW1iIGlzIHRoYXQgRmFjZWJvb2sgaXMgYSBzZXBhcmF0ZSB0aGluZyBjb21wYXJlZCB0byB0aGUgT3BlbklEIHByb3ZpZGVycy4NCiAgICBQcm92aWRlcnMgdGhhdCB1c2UgZGlzY292ZXJ5IChsaWtlIEdvb2dsZSkgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpbXBsZXIgb25lcyBsaWtlIG15T3BlbklEPC9saT4NCiAgICA8bGk+Q2hlY2sgeW91ciBwaHAgZXJyb3IgbG9ncyBmb3IgYW55IGV4Y2VwdGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMuIEdvb2dsZSBhbnkgb3V0cHV0IGZvciBjbHVlcyBhYm91dCBob3cgdG8gc29sdmUgdGhlbTwvbGk+DQogICAgPGxpPlNldCBvcGVuaWQuZGVidWcgdG8gdHJ1ZSBpbiB5b3VyIGNvbmZpZy5waHAuIFRoaXMgd2lsbCBvdXRwdXQgYSB0b24gb2YgbWVzc2FnZXMgdG8gdGhlIHBocCBlcnJvciBsb2c8L2xpPg0KPC91bD4NCjwvcD4NCjxoMz5DcmVkaXRzPC9oMz4NCjxwPlRoZSBPcGVuSUQgbGlicmFyeSBpcyBzdGFuZGluZyBvbiB0aGUgc2hvdWxkZXJzIG9mIGdpYW50cywgbmFtZWx5Og0KPHVsPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9vcGVuaWQvcGhwLW9wZW5pZC8iIHRhcmdldD0iX2JsYW5rIj5QSFAgT3BlbklEIGxpYnJhcnkgYnkgSmFuUmFpbiwgSW5jLjwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vanZhbmNlLmNvbS9wYWdlcy9KUXVlcnlPcGVuSURQbHVnaW4ueGh0bWwiIHRhcmdldD0iX2JsYW5rIj5PcGVuSUQgalF1ZXJ5IHBsdWdpbiBieSBKYXJyZXQgVmFuY2U8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3BocC1zZGsvIiB0YXJnZXQ9Il9ibGFuayI+RmFjZWJvb2sgUEhQIFNESzwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpxdWVyeS5jb20iIHRhcmdldD0iX2JsYW5rIj5qUXVlcnk8L2E+PC9saT4NCjwvdWw+DQo8L3A+DQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEwLCA8YSBocmVmPSJtYWlsdG86b3BlbmlkQGxlbm5hcnRzc29ucy5uZXQiPkhlbnJpayBMZW5uYXJ0c3NvbjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAuaHRtbCI+QXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjA8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KJzsKJGxhbmdbJ29wZW5pZF9wcm92aWRlcnMnXSA9ICdBY3RpdmVyIGxlcyBmb3Vybmlzc2V1cnMnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWyd1c2VycyddID0gJ1V0aWxpc2F0ZXVycyc7CiRsYW5nWydzdWJtaXQnXSA9ICdFbnZveWVyJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsZXInOwokbGFuZ1snb3BlbmlkX2ZhaWwnXSA9ICdMJiMwMzk7aWRlbnRpdCZlYWN1dGU7IGZvdXJuaWUgZXN0IDxhIGhyZWY9IiVzIj4lczwvYT4gbWFpcyBsJiMwMzk7aWRlbnRpZmljYXRpb24gYSAmZWFjdXRlO2Nob3UmZWFjdXRlOy4nOwokbGFuZ1snb3BlbmlkX3N1Y2Nlc3MnXSA9ICdMJiMwMzk7aWRlbnRpdCZlYWN1dGU7IGZvdXJuaWUgZXN0IDxhIGhyZWY9IiVzIj4lczwvYT4gZXQgdm91cyBhdmV6ICZlYWN1dGU7dCZlYWN1dGU7IGlkZW50aWZpJmVhY3V0ZTsgZW4gdGFudCBxdWUgJXMnOwokbGFuZ1snb3BlbmlkX3Vua25vd24nXSA9ICdMJiMwMzk7aWRlbnRpdCZlYWN1dGU7IGZvdXJuaWUgZXN0IDxhIGhyZWY9IiVzIj4lczwvYT4gbWFpcyBuJiMwMzk7ZXN0IHBhcyBsaSZlYWN1dGU7ZSAmYWdyYXZlOyB1biB1dGlsaXNhdGV1ci4nOwokbGFuZ1snb3BlbmlkX3JlZGlyZWN0aW5nJ10gPSAnTWVyY2kgZGUgcGF0aWVudGVyLCB2b3VzIGFsbGV6ICZlY2lyYzt0cmUgcmVkaXJpZyZlYWN1dGU7IHZlcnMgdm90cmUgZm91cm5pc3NldXIgT3BlbklEJzsKJGxhbmdbJ29wZW5pZF9hZGRlZF9pZGVudGl0eSddID0gJyVzIGlkZW50aXR5ICVzIGFqb3V0JmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzJzsKJGxhbmdbJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfc3VjY2VzcyddID0gJ0lkZW50aXQmZWFjdXRlOyBlZmZhYyZlYWN1dGU7ZSBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snb3BlbmlkX3JlbW92ZV9pZGVudGl0eV9mYWlsZWQnXSA9ICdJbXBvc3NpYmxlIGQmIzAzOTtlZmZhY2VyIGwmIzAzOTtpZGVudGl0JmVhY3V0ZTsnOwokbGFuZ1snbGlzdF9yZWdpc3RlcmVkX3Byb3ZpZGVycyddID0gJ1JlZ2lzdGVyZWQgcHJvdmlkZXJzJzsKJGxhbmdbJ2xpc3RfaW5mb3JtYXRpb24nXSA9ICdUaGUgZm9sbG93aW5nIE9wZW5JRCBwcm92aWRlcnMgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGFjY291bnQuIFlvdSBjYW4gdXNlIGFueSBvbmUgdG8gbG9nIGluIHRvIHRoaXMgc2l0ZS4nOwokbGFuZ1snbGlzdF9saW5rX3JlbW92ZSddID0gJ1JlbW92ZSc7CiRsYW5nWydsaXN0X2FkZCddID0gJ0FkZCBvciB1cGRhdGUgcHJvdmlkZXInOwokbGFuZ1snbGlzdF9hZGRfaW5mb3JtYXRpb24nXSA9ICdTZWxlY3QgYSBwcm92aWRlciBpbiB0aGUgZm9ybSBhbmQgY29tcGxldGUgdGhlIHNpZ25pbiBwcm9jZXNzLiBJZiBzdWNjZXNzZnVsIHRoZSBwcm92aWRlciB3aWxsIGJlIGFkZGVkIHRvIHlvdXIgbGlzdCBvZiByZWdpc3RlcmVkIHByb3ZpZGVycy4NCiAgICBJZiB5b3UmIzAzOTt2ZSBhbHJlYWR5IGdvdCBhbm90aGVyIGlkIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2FtZSBwcm92aWRlciB0aGF0IElEIHdpbGwgYmUgcmVwbGFjZWQuJzsKJGxhbmdbJ2xvZ2luX2VudGVyX3lvdXInXSA9ICdFbnRyZXogdm90cmUnOwokbGFuZ1snbG9naW5fcHJvdmlkZXJfdXNlcl9uYW1lJ10gPSAnUHJvdmlkZXIgdXNlciBuYW1lJzsKJGxhbmdbJ2xvZ2luX29wZW5pZCddID0gJ09wZW5JRCc7CiRsYW5nWydsb2dpbl9sb2dpbiddID0gJ0xvZ2luJzsKJGxhbmdbJ2xvZ2luX3NpZ25pbiddID0gJ1NpZ24taW4nOwokbGFuZ1snbG9naW5fY2xpY2tfcHJvdmlkZXInXSA9ICdQbGVhc2UgY2xpY2sgdG8gc2VsZWN0IHlvdXIgYWNjb3VudCBwcm92aWRlcic7CiRsYW5nWydsb2dpbl9vcGVuaWRfaW5mb3JtYXRpb24nXSA9ICdPcGVuSUQgaXMgc2VydmljZSB0aGF0IGFsbG93cyB5b3UgdG8gbG9nLW9uIHRvIG1hbnkgZGlmZmVyZW50IHdlYnNpdGVzIHVzaW5nIGEgc2luZ2xlIGluZGVudGl0eS4NCiBGaW5kIG91dCA8YSBocmVmPSJodHRwOi8vb3BlbmlkLm5ldC93aGF0LyI+bW9yZSBhYm91dCBPcGVuSUQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vb3BlbmlkLm5ldC9nZXQvIj5ob3cgdG8gZ2V0IGFuIE9wZW5JRCBlbmFibGVkIGFjY291bnQ8L2E+JzsKJGxhbmdbJ3JlZ2lzdGVyX3Byb3ZpZGVyJ10gPSAnUmVnaXN0ZXIgT3BlbklEIHByb3ZpZGVyJzsKJGxhbmdbJ3JlZ2lzdGVyX2luZm9ybWF0aW9uJ10gPSAnU2VsZWN0IHlvdXIgT3BlbklEIHByb3ZpZGVyIGluIHRoZSBmb3JtIGJlbG93IGFuZCBjb21wbGV0ZSB0aGUgc2lnbiBpbiBwcm9jZXNzLg0KT25jZSBjb21wbGV0ZWQgeW91ciB1c2VyIGFjY291bnQgb24gdGhpcyBzaXRlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHlvdXINCk9wZW5JRCBwcm92aWRlci4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgeW91IHRvIHNpZ24gaW4gdXNpbmcgT3BlbklEIGluc3RlYWQNCm9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4nOwokbGFuZ1sndHdpdHRlcl9mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdUd2l0dGVyIGxvZ2luIHdhcyBjYW5jZWxsZWQgb3IgZmFpbGVkIGZvciBzb21lIG90aGVyIHJlYXNvbic7CiRsYW5nWydmYWNlYm9va19mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdGYWNlYm9vayBsb2dpbiB3YXMgY2FuY2VsbGVkIG9yIGZhaWxlZCBmb3Igc29tZSBvdGhlciByZWFzb24nOwokbGFuZ1sncWNhJ10gPSAnUDAtNTg3NDE0MjgtMTI3NjUzMTYzNTU1OSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNDkzOTUyMjQuMTI3NjUzNTYxNS4xMzAzODQzMTkyLjEzMDQ2OTA2NzkuNjgnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzA0NjkwNjc5LjY4LjY1LnV0bWNzcj1nb29nbGV8dXRtY2NuPShvcmdhbmljKXx1dG1jbWQ9b3JnYW5pY3x1dG1jdHI9Y21zbXMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xLjEwLjEzMDQ2OTA2NzknOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09wZW5JRCBtb2R1bCc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0V0dGVyIGluc3RhbGxhc2pvbnNtZWxkaW5nJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdFdHRlciBhdmluc3RhbGxhc2pvbiBtZWxkaW5nJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdFciBkdSBzaWtrZXIgcCZhcmluZzsgYXQgZHUgdmlsIGF2aW5zdGFsbGVyZSBPcGVuSUQgbW9kdWxlbj8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGVuIGJsZSBhdmluc3RhbGxlcnQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWx2ZXJzam9uICVzIGVyIGluc3RhbGxlcnQnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGVuIGVyIG9wcGdyYWRlcnQgdGlsIHZlcnNqb24gJXMnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdEZW5uZSBtb2R1bGVuIGxlZ2dlciB0aWwgT3BlbklEIGlubmxvZ2dpbmdzZWdlbnNrYXBlciB0aWwgQ01TIE1hZGUgU2ltcGxlIG9nIEZyb250RW5kVXNlcnMuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDEuMC4wIEZpcnN0IHB1YmxpYyByZWxlYXNlIHdpdGggc3VwcG9ydCBmb3IgT3BlbklEIGFuZCBGYWNlYm9vayBhdXRoZW50aWNhdGlvbjwvbGk+DQo8bGk+VmVyc2lvbiAxLjEuMCBBZGRlZCBzdXBwb3J0IGZvciBUd2l0dGVyIGF1dGhlbnRpY2F0aW9uLiBQb3NzaWJsZSB0byBjb25maWd1cmUgcmVkaXJlY3RzIGFmdGVyIGxvZ2luLiBBZGRlZCBPcGVuSUQgU2VsZWN0b3IgYXMgYWRkaXRpb25hbCBPcGVuSUQgbG9naW4gcGFnZSBzdHlsZS4NCjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPlRoZSBPcGVuSUQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gYWRkIGFuIE9wZW5JRCBvciBGYWNlYm9vayBhY2NvdW50IHRvIGEgcmVnaXN0ZXJlZCBmcm9udGVuZCB1c2VyLiBUaGF0IHVzZXIgY2FuIHRoZW4gbG9nIGluIHVzaW5nIHRoYXQgaWRlbnRpdHkgaW5zdGVhZCBvZiB0aGUgb3JkaW5hcnkgZnJvbnRlbmQgYWNjb3VudC48L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPjxvbD4NCiAgICA8bGk+TWFrZSBzdXJlIHRoYXQgRnJvbnRFbmRVc2VycyBpcyBpbnN0YWxsZWQ8L2xpPg0KICAgIDxsaT5JbnN0YWxsIHRoZSBPcGVuSUQgbW9kdWxlPC9saT4NCiAgICA8bGk+Q2hlY2sgb3V0IHRoZSBzZXR0aW5ncyBwYWdlIGlmIHlvdSB3YW50IHRvIHVzZSBGYWNlYm9vayBhcyBhIHByb3ZpZGVyPC9saT4NCiAgICA8bGk+QWRkIHRoZSB0YWcgPGk+e09wZW5JRH08L2k+IHRvIGEgbmV3IG9yIGFuIGV4aXN0aW5nIHBhZ2U8L2xpPg0KICAgIDxsaT5Mb2cgaW4gYXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZyb250ZW5kIHVzZXI8L2xpPg0KICAgIDxsaT5WaXNpdCB0aGUgcGFnZSB3aXRoIHRoZSBPcGVuSUQgdGFnIGFuZCByZWdpc3RlciBhIHByb3ZpZGVyPC9saT4NCiAgICA8bGk+TG9nb3V0PC9saT4NCiAgICA8bGk+UmV2aXNpdCB0aGUgcGFnZSB3aXRoIHRoZSBPcGVuSUQgdGFnLCBzZWxlY3QgdGhlIHNhbWUgcHJvdmlkZXIgeW91IGp1c3QgcmVnaXN0ZXJlZCwgYXV0aGVudGljYXRlIGFuZCBiZWhvbGQ6IFlvdSBhcmUgbm93IGxvZ2dlZCBpbjwvbGk+DQo8L29sPjwvcD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPkdldHRpbmcgT3BlbklEIHRvIHdvcmsgcHJvcGVybHkgY2FuIGJlIGEgYml0IG9mIGEgc3RydWdnbGUgaWYgeW91IGFyZSBub3QNCmZvcnR1bmF0ZSBlbm91Z2ggdG8gaGF2ZSBhbiBlbnZpcm9ubWVudCB0aGF0IGFscmVhZHkgaGFzIGFsbCB0aGUgYml0cyBhbmQgcGllY2VzIGluIHBsYWNlLg0KPGJyLz5Tb21lIHBsYWNlcyB0byBjaGVjayBiZWZvcmUgYXNraW5nIGZvciBoZWxwOjxici8+DQo8dWw+DQogICAgPGxpPlRoZSBqYW5yYWluIFJFQURNRSBmaWxlIGluIHRoZSAvbW9kdWxlcy9PcGVuSUQvb3BlbmlkLXBocC1vcGVuaWQtKnZlcnNpb24qIGRpcmVjdG9yeTwvbGk+DQogICAgPGxpPlJ1biB0aGUgZGV0ZWN0LnBocCBmaWxlIGluIC9tb2R1bGVzL09wZW5JRC9vcGVuaWQtcGhwLW9wZW5pZC0qdmVyc2lvbiovZXhhbXBsZXMvPC9saT4NCiAgICA8bGk+VHJ5IGRpZmZlcmVudCBPcGVuSUQgcHJvdmlkZXJzIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiBhbGwgYXJlIGJyb2tlbiBvciBqdXN0IHNvbWUuDQogICAgQSBydWxlIG9mIHRodW1iIGlzIHRoYXQgRmFjZWJvb2sgaXMgYSBzZXBhcmF0ZSB0aGluZyBjb21wYXJlZCB0byB0aGUgT3BlbklEIHByb3ZpZGVycy4NCiAgICBQcm92aWRlcnMgdGhhdCB1c2UgZGlzY292ZXJ5IChsaWtlIEdvb2dsZSkgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpbXBsZXIgb25lcyBsaWtlIG15T3BlbklEPC9saT4NCiAgICA8bGk+Q2hlY2sgeW91ciBwaHAgZXJyb3IgbG9ncyBmb3IgYW55IGV4Y2VwdGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMuIEdvb2dsZSBhbnkgb3V0cHV0IGZvciBjbHVlcyBhYm91dCBob3cgdG8gc29sdmUgdGhlbTwvbGk+DQogICAgPGxpPlNldCBvcGVuaWQuZGVidWcgdG8gdHJ1ZSBpbiB5b3VyIGNvbmZpZy5waHAuIFRoaXMgd2lsbCBvdXRwdXQgYSB0b24gb2YgbWVzc2FnZXMgdG8gdGhlIHBocCBlcnJvciBsb2c8L2xpPg0KPC91bD4NCjwvcD4NCjxoMz5DcmVkaXRzPC9oMz4NCjxwPlRoZSBPcGVuSUQgbGlicmFyeSBpcyBzdGFuZGluZyBvbiB0aGUgc2hvdWxkZXJzIG9mIGdpYW50cywgbmFtZWx5Og0KPHVsPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9vcGVuaWQvcGhwLW9wZW5pZC8iIHRhcmdldD0iX2JsYW5rIj5QSFAgT3BlbklEIGxpYnJhcnkgYnkgSmFuUmFpbiwgSW5jLjwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vanZhbmNlLmNvbS9wYWdlcy9KUXVlcnlPcGVuSURQbHVnaW4ueGh0bWwiIHRhcmdldD0iX2JsYW5rIj5PcGVuSUQgalF1ZXJ5IHBsdWdpbiBieSBKYXJyZXQgVmFuY2U8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3BocC1zZGsvIiB0YXJnZXQ9Il9ibGFuayI+RmFjZWJvb2sgUEhQIFNESzwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpxdWVyeS5jb20iIHRhcmdldD0iX2JsYW5rIj5qUXVlcnk8L2E+PC9saT4NCjwvdWw+DQo8L3A+DQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZhbXA7Y29weTsgMjAxMC0yMDExLCA8YSBocmVmPSJtYWlsdG86b3BlbmlkQGxlbm5hcnRzc29ucy5uZXQiPkhlbnJpayBMZW5uYXJ0c3NvbjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAuaHRtbCI+QXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjA8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPic7CiRsYW5nWydvcGVuaWRfcHJvdmlkZXJzJ10gPSAnQWt0aXZlcnRlIHRpbGJ5ZGVyZSc7CiRsYW5nWydzZXR0aW5ncyddID0gJ0lubnN0aWxsaW5nZXInOwokbGFuZ1sndXNlcnMnXSA9ICdCcnVrZXJlJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1V0ZiZvc2xhc2g7cic7CiRsYW5nWydjYW5jZWwnXSA9ICdBdmJyeXQnOwokbGFuZ1snb3BlbmlkX2ZhaWwnXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIFggYnV0IHRoZSBsb2dpbiBmYWlsZWQnOwokbGFuZ1snb3BlbmlkX3N1Y2Nlc3MnXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIFggYW5kIHlvdSBoYXZlIGJlZW4gbG9nZ2VkIGluIGFzIHVzZXIgJXMnOwokbGFuZ1snb3BlbmlkX3Vua25vd24nXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzIFggYnV0IGlzIG5vdCByZWdpc3RlcmVkIHdpdGggYW55IHVzZXIuJzsKJGxhbmdbJ29wZW5pZF9yZWRpcmVjdGluZyddID0gJ1Zlbm5saWdzdCB2ZW50LCBvbWRpcmlnZXJlciB0aWwgZGluIHZhbGd0ZSBPcGVuSUQgdGlsYnlkZXInOwokbGFuZ1snb3BlbmlkX2FkZGVkX2lkZW50aXR5J10gPSAnTGEgdmVsbHlra2V0IHRpbCAlcyBpZGVudGl0ZXQgJXMnOwokbGFuZ1snb3BlbmlkX3JlbW92ZV9pZGVudGl0eV9zdWNjZXNzJ10gPSAnSWRlbnRpdGV0IHZlbGx5a2tldCBmamVybmV0JzsKJGxhbmdbJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfZmFpbGVkJ10gPSAnS2xhcnRlIGlra2UgJmFyaW5nOyBmamVybmUgaWRlbnRpdGV0JzsKJGxhbmdbJ2xpc3RfcmVnaXN0ZXJlZF9wcm92aWRlcnMnXSA9ICdSZWdpc3RyZXJ0ZSB0aWxieWRlcmUnOwokbGFuZ1snbGlzdF9pbmZvcm1hdGlvbiddID0gJ0Ymb3NsYXNoO2xnZW5kZSBPcGVuSUQgdGlsYnlkZXJlIGhhciBibGl0dCBhc3Nvc2llcnQgbWVkIGRpbiBrb250by4gRHUga2FuIGJlbnl0dGUgaHZlbSBkdSB2aWwgYXYgZGlzc2UgZm9yICZhcmluZzsgbG9nZ2UgaW5uIHAmYXJpbmc7IGRldHRlIG5ldHRzdGVkZXQuJzsKJGxhbmdbJ2xpc3RfbGlua19yZW1vdmUnXSA9ICdGamVybic7CiRsYW5nWydsaXN0X2FkZCddID0gJ0tlZ2cgdGlsIGVsbGVyIG9wcGRhdGVyIGVuIHRpbGJ5ZGVyJzsKJGxhbmdbJ2xpc3RfYWRkX2luZm9ybWF0aW9uJ10gPSAnVmVsZyBlbiB0aWxieWRlciBpIHNramVtYWV0IGZvciAmYXJpbmc7IGZ1bGxmJm9zbGFzaDtyZSBpbm5sb2dnaW5nc3Byb3Nlc3Nlbi4gT20gdmVsbHlra2V0IC0gdmlsIHRpbGJ5ZGVyZW4gYmxpIGxhZ3QgdGlsIGRpbiBsaXN0ZSBtZWQgcmVnaXN0cmVydGUgdGlsYnlkZXJlLg0KICAgIE9tIGR1IGFsbGVyZWRlIGhhciBlbiBhbm5lbiBpZCByZWdpc3RyZXJ0IG1vdCBzYW1tZSB0aWxieWRlciBzJmFyaW5nOyB2aWwgZGVuIFVEIGJsaSBlcnN0YXR0ZXQgbWVkIGRlbiBueWUuJzsKJGxhbmdbJ2xvZ2luX2VudGVyX3lvdXInXSA9ICdPcHBnaSBkaW4nOwokbGFuZ1snbG9naW5fcHJvdmlkZXJfdXNlcl9uYW1lJ10gPSAnVGlsYnlkZXIgYnJ1a2VybmF2bic7CiRsYW5nWydsb2dpbl9vcGVuaWQnXSA9ICdPcGVuSUQgJzsKJGxhbmdbJ2xvZ2luX2xvZ2luJ10gPSAnSW5ubG9nZ2luZyc7CiRsYW5nWydsb2dpbl9zaWduaW4nXSA9ICdMb2dnIGlubic7CiRsYW5nWydsb2dpbl9jbGlja19wcm92aWRlciddID0gJ1Zlbm5saWdzdCBrbGlrayBmb3IgJmFyaW5nOyB2ZWxnZSBkaW4ga29udG90aWxieWRlcic7CiRsYW5nWydsb2dpbl9vcGVuaWRfaW5mb3JtYXRpb24nXSA9ICdPcGVuSUQgZXIgZW4gdGplbmVzdGUgc29tIHRpbGxhdGVyIGRlZyAmYXJpbmc7IGxvZ2dlIHAmYXJpbmc7IG1hbmdlIGZvcnNramVsbGlnZSBuZXR0c3RlZGVyIHZlZCAmYXJpbmc7IGJlbnl0dGUgJmVhY3V0ZTtuIGlkZW50aXRldC4NCiBGaW5uIHV0IDxhIGhyZWY9Imh0dHA6Ly9vcGVuaWQubmV0L3doYXQvIj5tZXJlIG9tIE9wZW5JRDwvYT4gb2cgPGEgaHJlZj0iaHR0cDovL29wZW5pZC5uZXQvZ2V0LyI+aHZvcmRhbiBkdSBza2FmZmVyIGVuIE9wZW5JRCBha3RpdmVydCBrb250bzwvYT4nOwokbGFuZ1sncmVnaXN0ZXJfcHJvdmlkZXInXSA9ICdSZWdpc3RyZXIgT3BlbklEIHRpbGJ5ZGVyJzsKJGxhbmdbJ3JlZ2lzdGVyX2luZm9ybWF0aW9uJ10gPSAnVmVsZyBkaW4gT3BlbklEIHRpbGJ5ZGVyIGkgc2tqZW1hZXQgbmVkZW5mb3Igb2cgZnVsbGYmb3NsYXNoO3IgaW5ubG9nZ2luZ3Nwcm9zZXNzZW4uDQpOJmFyaW5nO3IgZnVsbGYmb3NsYXNoO3J0IC0gdmlsIGRpbiBicnVrZXJrb250byBwJmFyaW5nOyBkZXR0ZSBuZXR0c3RlZGV0IGJsaSBhc3Nvc2llcnQgbWVkIGRpbiBPcGVuSUQgdGlsYnlkZXIuIERldHRlIGdqJm9zbGFzaDtyIGRldCBtdWxpZyBmb3IgZGVnICZhcmluZzsgbG9nZ2UgaW5uIHZlZCAmYXJpbmc7IGJlbnl0dGUgT3BlbklEIGkgc3RlZGV0IGZvciBicnVrZXJuYXZuIG9nIHBhc3NvcmQuJzsKJGxhbmdbJ3R3aXR0ZXJfZmFpbGVkX29yX2NhbmNlbGVkJ10gPSAnVHdpdHRlciBpbm5sb2dnaW5nIGJsZSBrYW5zZWxsZXJ0IGVsbGVyIGZlaWxldCBhdiBlbiBlbGxlciBhbm5lbiBncnVubic7CiRsYW5nWydmYWNlYm9va19mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdGYWNlYm9vayBpbm5sb2dnaW5nIGJsZSBrYW5zZWxsZXJ0IGVsbGVyIGZlaWxldCBhdiBlbiBlbGxlciBhbm5lbiBncnVubic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDAyMjYzNjkuMzY5Mi44MS51dG1jc3I9ZGV2LmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9L2ZlYXR1cmVfcmVxdWVzdC9saXN0LzYnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xNzkwNTI2MjMwODQxMTAxMDAuMTIxMDQyMzU3Ny4xMzAyMDQ0MDE5LjEzMDIxMTg4MjIuMzc1Myc7CiRsYW5nWydxY2EnXSA9ICcxMjEwOTcxNjkwLTI3MzA4MDczLTgxOTUyODMyJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09wZW5JRCBNb2R1bGUgJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQmVyaWNodCB2b29yYWZnYWFuZCBhYW4gaW5zdGFsbGF0aWUnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0JlcmljaHQgdm9vcmFmZ2FhbmQgYWFuIGRlJml1bWw7bnN0YWxsYXRpZSc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnV2VldCB1IHpla2VyIGRhdCB1IGRlIE9wZW5JRCBtb2R1bGUgd2lsdCBkZSZpdW1sO25zdGFsbGVyZW4/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIGdlZGUmaXVtbDtuc3RhbGxlZXJkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2llICVzIGdlJml1bWw7bnN0YWxsZWVyZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgaXMgYmlqZ2V3ZXJrdCBuYWFyIHZlcnNpZSAlcy4nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdEZXplIG1vZHVsZSB2b2VndCBPcGVuSUQgbG9naW4gbW9nZWxpamtoZWRlbiB0b2UgYWFuIENNUyBNYWRlIFNpbXBsZSBlbiBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzaW9uIDEuMC4wIEZpcnN0IHB1YmxpYyByZWxlYXNlIHdpdGggc3VwcG9ydCBmb3IgT3BlbklEIGFuZCBGYWNlYm9vayBhdXRoZW50aWNhdGlvbjwvbGk+DQo8bGk+VmVyc2lvbiAxLjEuMCBBZGRlZCBzdXBwb3J0IGZvciBUd2l0dGVyIGF1dGhlbnRpY2F0aW9uLiBQb3NzaWJsZSB0byBjb25maWd1cmUgcmVkaXJlY3RzIGFmdGVyIGxvZ2luLiBBZGRlZCBPcGVuSUQgU2VsZWN0b3IgYXMgYWRkaXRpb25hbCBPcGVuSUQgbG9naW4gcGFnZSBzdHlsZS4NCjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2F0IGRvZXQgaGV0PzwvaDM+DQo8cD5UaGUgT3BlbklEIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGFkZCBhbiBPcGVuSUQgb3IgRmFjZWJvb2sgYWNjb3VudCB0byBhIHJlZ2lzdGVyZWQgZnJvbnRlbmQgdXNlci4gVGhhdCB1c2VyIGNhbiB0aGVuIGxvZyBpbiB1c2luZyB0aGF0IGlkZW50aXR5IGluc3RlYWQgb2YgdGhlIG9yZGluYXJ5IGZyb250ZW5kIGFjY291bnQuPC9wPg0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD48b2w+DQogICAgPGxpPk1ha2Ugc3VyZSB0aGF0IEZyb250RW5kVXNlcnMgaXMgaW5zdGFsbGVkPC9saT4NCiAgICA8bGk+SW5zdGFsbCB0aGUgT3BlbklEIG1vZHVsZTwvbGk+DQogICAgPGxpPkNoZWNrIG91dCB0aGUgc2V0dGluZ3MgcGFnZSBpZiB5b3Ugd2FudCB0byB1c2UgRmFjZWJvb2sgYXMgYSBwcm92aWRlcjwvbGk+DQogICAgPGxpPkFkZCB0aGUgdGFnIDxpPntPcGVuSUR9PC9pPiB0byBhIG5ldyBvciBhbiBleGlzdGluZyBwYWdlPC9saT4NCiAgICA8bGk+TG9nIGluIGFzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9udGVuZCB1c2VyPC9saT4NCiAgICA8bGk+VmlzaXQgdGhlIHBhZ2Ugd2l0aCB0aGUgT3BlbklEIHRhZyBhbmQgcmVnaXN0ZXIgYSBwcm92aWRlcjwvbGk+DQogICAgPGxpPkxvZ291dDwvbGk+DQogICAgPGxpPlJldmlzaXQgdGhlIHBhZ2Ugd2l0aCB0aGUgT3BlbklEIHRhZywgc2VsZWN0IHRoZSBzYW1lIHByb3ZpZGVyIHlvdSBqdXN0IHJlZ2lzdGVyZWQsIGF1dGhlbnRpY2F0ZSBhbmQgYmVob2xkOiBZb3UgYXJlIG5vdyBsb2dnZWQgaW48L2xpPg0KPC9vbD48L3A+DQo8aDM+T25kZXJzdGV1bmluZzwvaDM+DQo8cD5HZXR0aW5nIE9wZW5JRCB0byB3b3JrIHByb3Blcmx5IGNhbiBiZSBhIGJpdCBvZiBhIHN0cnVnZ2xlIGlmIHlvdSBhcmUgbm90DQpmb3J0dW5hdGUgZW5vdWdoIHRvIGhhdmUgYW4gZW52aXJvbm1lbnQgdGhhdCBhbHJlYWR5IGhhcyBhbGwgdGhlIGJpdHMgYW5kIHBpZWNlcyBpbiBwbGFjZS4NCjxici8+U29tZSBwbGFjZXMgdG8gY2hlY2sgYmVmb3JlIGFza2luZyBmb3IgaGVscDo8YnIvPg0KPHVsPg0KICAgIDxsaT5UaGUgamFucmFpbiBSRUFETUUgZmlsZSBpbiB0aGUgL21vZHVsZXMvT3BlbklEL29wZW5pZC1waHAtb3BlbmlkLSp2ZXJzaW9uKiBkaXJlY3Rvcnk8L2xpPg0KICAgIDxsaT5SdW4gdGhlIGRldGVjdC5waHAgZmlsZSBpbiAvbW9kdWxlcy9PcGVuSUQvb3BlbmlkLXBocC1vcGVuaWQtKnZlcnNpb24qL2V4YW1wbGVzLzwvbGk+DQogICAgPGxpPlRyeSBkaWZmZXJlbnQgT3BlbklEIHByb3ZpZGVycyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgYWxsIGFyZSBicm9rZW4gb3IganVzdCBzb21lLg0KICAgIEEgcnVsZSBvZiB0aHVtYiBpcyB0aGF0IEZhY2Vib29rIGlzIGEgc2VwYXJhdGUgdGhpbmcgY29tcGFyZWQgdG8gdGhlIE9wZW5JRCBwcm92aWRlcnMuDQogICAgUHJvdmlkZXJzIHRoYXQgdXNlIGRpc2NvdmVyeSAobGlrZSBHb29nbGUpIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzaW1wbGVyIG9uZXMgbGlrZSBteU9wZW5JRDwvbGk+DQogICAgPGxpPkNoZWNrIHlvdXIgcGhwIGVycm9yIGxvZ3MgZm9yIGFueSBleGNlcHRpb25zIG9yIGVycm9yIG1lc3NhZ2VzLiBHb29nbGUgYW55IG91dHB1dCBmb3IgY2x1ZXMgYWJvdXQgaG93IHRvIHNvbHZlIHRoZW08L2xpPg0KICAgIDxsaT5TZXQgb3BlbmlkLmRlYnVnIHRvIHRydWUgaW4geW91ciBjb25maWcucGhwLiBUaGlzIHdpbGwgb3V0cHV0IGEgdG9uIG9mIG1lc3NhZ2VzIHRvIHRoZSBwaHAgZXJyb3IgbG9nPC9saT4NCjwvdWw+DQo8L3A+DQo8aDM+Q3JlZGl0czwvaDM+DQo8cD5UaGUgT3BlbklEIGxpYnJhcnkgaXMgc3RhbmRpbmcgb24gdGhlIHNob3VsZGVycyBvZiBnaWFudHMsIG5hbWVseToNCjx1bD4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vb3BlbmlkL3BocC1vcGVuaWQvIiB0YXJnZXQ9Il9ibGFuayI+UEhQIE9wZW5JRCBsaWJyYXJ5IGJ5IEphblJhaW4sIEluYy48L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2p2YW5jZS5jb20vcGFnZXMvSlF1ZXJ5T3BlbklEUGx1Z2luLnhodG1sIiB0YXJnZXQ9Il9ibGFuayI+T3BlbklEIGpRdWVyeSBwbHVnaW4gYnkgSmFycmV0IFZhbmNlPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9waHAtc2RrLyIgdGFyZ2V0PSJfYmxhbmsiPkZhY2Vib29rIFBIUCBTREs8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5qcXVlcnkuY29tIiB0YXJnZXQ9Il9ibGFuayI+alF1ZXJ5PC9hPjwvbGk+DQo8L3VsPg0KPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAxMCwgPGEgaHJlZj0ibWFpbHRvOm9wZW5pZEBsZW5uYXJ0c3NvbnMubmV0Ij5IZW5yaWsgTGVubmFydHNzb248L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLmh0bWwiPkFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWydvcGVuaWRfcHJvdmlkZXJzJ10gPSAnSW5nZXNjaGFrZWxkZSBwcm92aWRlcnMnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4nOwokbGFuZ1sndXNlcnMnXSA9ICdHZWJydWlrZXJzJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ09wc2xhYW4nOwokbGFuZ1snY2FuY2VsJ10gPSAnQW5udWxlcmVuJzsKJGxhbmdbJ29wZW5pZF9mYWlsJ10gPSAnWW91ciBwcm92aWRlZCBpZGVudGl0eSBpcyAlcyBidXQgdGhlIGxvZ2luIGZhaWxlZCc7CiRsYW5nWydvcGVuaWRfc3VjY2VzcyddID0gJ1lvdXIgcHJvdmlkZWQgaWRlbnRpdHkgaXMgJXMgYW5kIHlvdSBoYXZlIGJlZW4gbG9nZ2VkIGluIGFzIHVzZXIgJXMnOwokbGFuZ1snb3BlbmlkX3Vua25vd24nXSA9ICdZb3VyIHByb3ZpZGVkIGlkZW50aXR5IGlzICVzIGJ1dCBpcyBub3QgcmVnaXN0ZXJlZCB3aXRoIGFueSB1c2VyLic7CiRsYW5nWydvcGVuaWRfcmVkaXJlY3RpbmcnXSA9ICdQbGVhc2Ugd2FpdCwgcmVkaXJlY3RpbmcgdG8geW91ciBzZWxlY3RlZCBPcGVuSUQgcHJvdmlkZXInOwokbGFuZ1snb3BlbmlkX2FkZGVkX2lkZW50aXR5J10gPSAnRGUgaWRlbnRpdGVpdCAlcyBpcyBzdWNjZXN2b2wgdG9lZ2V2b2VnZCc7CiRsYW5nWydvcGVuaWRfcmVtb3ZlX2lkZW50aXR5X3N1Y2Nlc3MnXSA9ICdEZSBpZGVudGl0ZWl0IGlzIHN1Y2Nlc3ZvbCB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfZmFpbGVkJ10gPSAnS2FuIGRlIGlkZW50aXRlaXQgbmlldCB2ZXJ3aWpkZXJlbic7CiRsYW5nWydsaXN0X3JlZ2lzdGVyZWRfcHJvdmlkZXJzJ10gPSAnR2VyZWdpc3RyZWVyZGUgcHJvdmlkZXJzJzsKJGxhbmdbJ2xpc3RfaW5mb3JtYXRpb24nXSA9ICdUaGUgZm9sbG93aW5nIE9wZW5JRCBwcm92aWRlcnMgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGFjY291bnQuIFlvdSBjYW4gdXNlIGFueSBvbmUgdG8gbG9nIGluIHRvIHRoaXMgc2l0ZS4nOwokbGFuZ1snbGlzdF9saW5rX3JlbW92ZSddID0gJ1ZlcndpamRlcmVuJzsKJGxhbmdbJ2xpc3RfYWRkJ10gPSAnUHJvdmlkZXIgdG9ldm9lZ2VuIG9mIGJpandlcmtlbic7CiRsYW5nWydsaXN0X2FkZF9pbmZvcm1hdGlvbiddID0gJ1NlbGVjdCBhIHByb3ZpZGVyIGluIHRoZSBmb3JtIGFuZCBjb21wbGV0ZSB0aGUgc2lnbmluIHByb2Nlc3MuIElmIHN1Y2Nlc3NmdWwgdGhlIHByb3ZpZGVyIHdpbGwgYmUgYWRkZWQgdG8geW91ciBsaXN0IG9mIHJlZ2lzdGVyZWQgcHJvdmlkZXJzLg0KICAgIElmIHlvdSYjMDM5O3ZlIGFscmVhZHkgZ290IGFub3RoZXIgaWQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzYW1lIHByb3ZpZGVyIHRoYXQgSUQgd2lsbCBiZSByZXBsYWNlZC4nOwokbGFuZ1snbG9naW5fZW50ZXJfeW91ciddID0gJ1ZvZXIgdXcnOwokbGFuZ1snbG9naW5fcHJvdmlkZXJfdXNlcl9uYW1lJ10gPSAnUHJvdmlkZXIgZ2VicnVpa2Vyc25hYW0nOwokbGFuZ1snbG9naW5fb3BlbmlkJ10gPSAnT3BlbklEICc7CiRsYW5nWydsb2dpbl9sb2dpbiddID0gJ0xvZ2luICc7CiRsYW5nWydsb2dpbl9zaWduaW4nXSA9ICdBYW5tZWxkZW4nOwokbGFuZ1snbG9naW5fY2xpY2tfcHJvdmlkZXInXSA9ICdLbGlrIG9wIHV3IGFjY291bnRwcm92aWRlcic7CiRsYW5nWydsb2dpbl9vcGVuaWRfaW5mb3JtYXRpb24nXSA9ICdPcGVuSUQgaXMgc2VydmljZSB0aGF0IGFsbG93cyB5b3UgdG8gbG9nLW9uIHRvIG1hbnkgZGlmZmVyZW50IHdlYnNpdGVzIHVzaW5nIGEgc2luZ2xlIGluZGVudGl0eS4NCiBGaW5kIG91dCA8YSBocmVmPSJodHRwOi8vb3BlbmlkLm5ldC93aGF0LyI+bW9yZSBhYm91dCBPcGVuSUQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vb3BlbmlkLm5ldC9nZXQvIj5ob3cgdG8gZ2V0IGFuIE9wZW5JRCBlbmFibGVkIGFjY291bnQ8L2E+JzsKJGxhbmdbJ3JlZ2lzdGVyX3Byb3ZpZGVyJ10gPSAnUmVnaXN0ZXIgT3BlbklEIHByb3ZpZGVyJzsKJGxhbmdbJ3JlZ2lzdGVyX2luZm9ybWF0aW9uJ10gPSAnU2VsZWN0IHlvdXIgT3BlbklEIHByb3ZpZGVyIGluIHRoZSBmb3JtIGJlbG93IGFuZCBjb21wbGV0ZSB0aGUgc2lnbiBpbiBwcm9jZXNzLg0KT25jZSBjb21wbGV0ZWQgeW91ciB1c2VyIGFjY291bnQgb24gdGhpcyBzaXRlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHlvdXINCk9wZW5JRCBwcm92aWRlci4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgeW91IHRvIHNpZ24gaW4gdXNpbmcgT3BlbklEIGluc3RlYWQNCm9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4nOwokbGFuZ1sndHdpdHRlcl9mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdUd2l0dGVyIGxvZ2luIHdhcyBjYW5jZWxsZWQgb3IgZmFpbGVkIGZvciBzb21lIG90aGVyIHJlYXNvbic7CiRsYW5nWydmYWNlYm9va19mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdGYWNlYm9vayBsb2dpbiB3YXMgY2FuY2VsbGVkIG9yIGZhaWxlZCBmb3Igc29tZSBvdGhlciByZWFzb24nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xODUyMjIxMjcxLjEyODc0NzkwOTIuMTMwMDYwNjAwMC4xMzAxMDM1OTM5LjEyOSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDA2MDYwMDAuMTI4LjgwLnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1kZXYuY21zbWFkZXNpbXBsZS5vcmd8dXRtY2N0PS9wcm9qZWN0L2ZpbGVzLzk4NHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sncWNhJ10gPSAnUDAtMTYxMDMxODk3LTEyODc0NzkwOTIxNzEnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09wZW5JRC1tb2R1bGUnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdPcGVuSUQtbW9kdWxlbiBoYXIgaW5zdGFsbGVyYXRzJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdPcGVuSUQtbW9kdWxlbiBoYXIgYXZpbnN0YWxsZXJhdHMnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJyZBdW1sO3IgZHUgcyZhdW1sO2tlciBwJmFyaW5nOyBhdHQgZHUgdmlsbCBhdmluc3RhbGxlcmEgbW9kdWxlbiBPcGVuSUQnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGVuIGhhciBhdmluc3RhbGxlcmF0cy4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWwgdmVyc2lvbiAlcyBpbnN0YWxsZXJhZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGVuIHVwcGdyYWRlcmFkIHRpbGwgdmVyc2lvbiAlcy4nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdEZW5uYSBtb2R1bCBnZXIgbSZvdW1sO2psaWdoZXQgYXR0IGFudiZhdW1sO25kYSBPcGVuSUQgc29tIGlubG9nZ25pbmdzbWV0b2QgdGlsbCBDTVMgTWFkZSBTaW1wbGUgb2NoIEZyb250RW5kVXNlcnMtbW9kdWxlbi4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMS4wLjAgRmlyc3QgcHVibGljIHJlbGVhc2Ugd2l0aCBzdXBwb3J0IGZvciBPcGVuSUQgYW5kIEZhY2Vib29rIGF1dGhlbnRpY2F0aW9uPC9saT4NCjxsaT5WZXJzaW9uIDEuMS4wIEFkZGVkIHN1cHBvcnQgZm9yIFR3aXR0ZXIgYXV0aGVudGljYXRpb24uIFBvc3NpYmxlIHRvIGNvbmZpZ3VyZSByZWRpcmVjdHMgYWZ0ZXIgbG9naW4uIEFkZGVkIE9wZW5JRCBTZWxlY3RvciBhcyBhZGRpdGlvbmFsIE9wZW5JRCBsb2dpbiBwYWdlIHN0eWxlLg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhlIE9wZW5JRCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBhZGQgYW4gT3BlbklEIG9yIEZhY2Vib29rIGFjY291bnQgdG8gYSByZWdpc3RlcmVkIGZyb250ZW5kIHVzZXIuIFRoYXQgdXNlciBjYW4gdGhlbiBsb2cgaW4gdXNpbmcgdGhhdCBpZGVudGl0eSBpbnN0ZWFkIG9mIHRoZSBvcmRpbmFyeSBmcm9udGVuZCBhY2NvdW50LjwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+PG9sPg0KICAgIDxsaT5NYWtlIHN1cmUgdGhhdCBGcm9udEVuZFVzZXJzIGlzIGluc3RhbGxlZDwvbGk+DQogICAgPGxpPkluc3RhbGwgdGhlIE9wZW5JRCBtb2R1bGU8L2xpPg0KICAgIDxsaT5DaGVjayBvdXQgdGhlIHNldHRpbmdzIHBhZ2UgaWYgeW91IHdhbnQgdG8gdXNlIEZhY2Vib29rIGFzIGEgcHJvdmlkZXI8L2xpPg0KICAgIDxsaT5BZGQgdGhlIHRhZyA8aT57T3BlbklEfTwvaT4gdG8gYSBuZXcgb3IgYW4gZXhpc3RpbmcgcGFnZTwvbGk+DQogICAgPGxpPkxvZyBpbiBhcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbnRlbmQgdXNlcjwvbGk+DQogICAgPGxpPlZpc2l0IHRoZSBwYWdlIHdpdGggdGhlIE9wZW5JRCB0YWcgYW5kIHJlZ2lzdGVyIGEgcHJvdmlkZXI8L2xpPg0KICAgIDxsaT5Mb2dvdXQ8L2xpPg0KICAgIDxsaT5SZXZpc2l0IHRoZSBwYWdlIHdpdGggdGhlIE9wZW5JRCB0YWcsIHNlbGVjdCB0aGUgc2FtZSBwcm92aWRlciB5b3UganVzdCByZWdpc3RlcmVkLCBhdXRoZW50aWNhdGUgYW5kIGJlaG9sZDogWW91IGFyZSBub3cgbG9nZ2VkIGluPC9saT4NCjwvb2w+PC9wPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+R2V0dGluZyBPcGVuSUQgdG8gd29yayBwcm9wZXJseSBjYW4gYmUgYSBiaXQgb2YgYSBzdHJ1Z2dsZSBpZiB5b3UgYXJlIG5vdA0KZm9ydHVuYXRlIGVub3VnaCB0byBoYXZlIGFuIGVudmlyb25tZW50IHRoYXQgYWxyZWFkeSBoYXMgYWxsIHRoZSBiaXRzIGFuZCBwaWVjZXMgaW4gcGxhY2UuDQo8YnIvPlNvbWUgcGxhY2VzIHRvIGNoZWNrIGJlZm9yZSBhc2tpbmcgZm9yIGhlbHA6PGJyLz4NCjx1bD4NCiAgICA8bGk+VGhlIGphbnJhaW4gUkVBRE1FIGZpbGUgaW4gdGhlIC9tb2R1bGVzL09wZW5JRC9vcGVuaWQtcGhwLW9wZW5pZC0qdmVyc2lvbiogZGlyZWN0b3J5PC9saT4NCiAgICA8bGk+UnVuIHRoZSBkZXRlY3QucGhwIGZpbGUgaW4gL21vZHVsZXMvT3BlbklEL29wZW5pZC1waHAtb3BlbmlkLSp2ZXJzaW9uKi9leGFtcGxlcy88L2xpPg0KICAgIDxsaT5UcnkgZGlmZmVyZW50IE9wZW5JRCBwcm92aWRlcnMgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIGFsbCBhcmUgYnJva2VuIG9yIGp1c3Qgc29tZS4NCiAgICBBIHJ1bGUgb2YgdGh1bWIgaXMgdGhhdCBGYWNlYm9vayBpcyBhIHNlcGFyYXRlIHRoaW5nIGNvbXBhcmVkIHRvIHRoZSBPcGVuSUQgcHJvdmlkZXJzLg0KICAgIFByb3ZpZGVycyB0aGF0IHVzZSBkaXNjb3ZlcnkgKGxpa2UgR29vZ2xlKSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2ltcGxlciBvbmVzIGxpa2UgbXlPcGVuSUQ8L2xpPg0KICAgIDxsaT5DaGVjayB5b3VyIHBocCBlcnJvciBsb2dzIGZvciBhbnkgZXhjZXB0aW9ucyBvciBlcnJvciBtZXNzYWdlcy4gR29vZ2xlIGFueSBvdXRwdXQgZm9yIGNsdWVzIGFib3V0IGhvdyB0byBzb2x2ZSB0aGVtPC9saT4NCiAgICA8bGk+U2V0IG9wZW5pZC5kZWJ1ZyB0byB0cnVlIGluIHlvdXIgY29uZmlnLnBocC4gVGhpcyB3aWxsIG91dHB1dCBhIHRvbiBvZiBtZXNzYWdlcyB0byB0aGUgcGhwIGVycm9yIGxvZzwvbGk+DQo8L3VsPg0KPC9wPg0KPGgzPkNyZWRpdHM8L2gzPg0KPHA+VGhlIE9wZW5JRCBsaWJyYXJ5IGlzIHN0YW5kaW5nIG9uIHRoZSBzaG91bGRlcnMgb2YgZ2lhbnRzLCBuYW1lbHk6DQo8dWw+DQogICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL29wZW5pZC9waHAtb3BlbmlkLyIgdGFyZ2V0PSJfYmxhbmsiPlBIUCBPcGVuSUQgbGlicmFyeSBieSBKYW5SYWluLCBJbmMuPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9qdmFuY2UuY29tL3BhZ2VzL0pRdWVyeU9wZW5JRFBsdWdpbi54aHRtbCIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5JRCBqUXVlcnkgcGx1Z2luIGJ5IEphcnJldCBWYW5jZTwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcGhwLXNkay8iIHRhcmdldD0iX2JsYW5rIj5GYWNlYm9vayBQSFAgU0RLPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuanF1ZXJ5LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmpRdWVyeTwvYT48L2xpPg0KPC91bD4NCjwvcD4NCg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTAsIDxhIGhyZWY9Im1haWx0bzpvcGVuaWRAbGVubmFydHNzb25zLm5ldCI+SGVucmlrIExlbm5hcnRzc29uPC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sIj5BcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMDwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQonOwokbGFuZ1snb3BlbmlkX3Byb3ZpZGVycyddID0gJ0FrdGl2YSBsZXZlcmFudCZvdW1sO3Jlcic7CiRsYW5nWydzZXR0aW5ncyddID0gJ0luc3QmYXVtbDtsbG5pbmdhcic7CiRsYW5nWyd1c2VycyddID0gJ0FudiZhdW1sO25kYXJlJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NraWNrYSc7CiRsYW5nWydjYW5jZWwnXSA9ICdBdmJyeXQnOwokbGFuZ1snb3BlbmlkX2ZhaWwnXSA9ICdEaW4gaWRlbnRpdGV0ICZhdW1sO3IgJXMgbWVuIGlubG9nZ25pbmdlbiBtaXNzbHlja2FkZXMnOwokbGFuZ1snb3BlbmlkX3N1Y2Nlc3MnXSA9ICdEaW4gaWRlbnRpdGV0ICZhdW1sO3IgJXMgb2NoIGR1IGhhciBibGl2aXQgaW5sb2dnYWQgc29tIGFudiZhdW1sO25kYXJlICVzJzsKJGxhbmdbJ29wZW5pZF91bmtub3duJ10gPSAnRGluIGlkZW50aXRldCAmYXVtbDtyICVzIG1lbiAmYXVtbDtyIGludGUgcmVnaXN0cmVyYWQgdGlsbCBuJmFyaW5nO2dvbiBhbnYmYXVtbDtuZGFyZS4nOwokbGFuZ1snb3BlbmlkX3JlZGlyZWN0aW5nJ10gPSAnViZhdW1sO250YSwgZHUgc2tpY2thcyBudSB2aWRhcmUgdGlsbCBkaW4gT3BlbklELWxldmVyYW50Jm91bWw7cic7CiRsYW5nWydvcGVuaWRfYWRkZWRfaWRlbnRpdHknXSA9ICdMYWRlIHRpbGwgJXMgaWRlbnRpdGV0ICVzJzsKJGxhbmdbJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfc3VjY2VzcyddID0gJ1RvZyBib3J0IGlkZW50aXRldGVuJzsKJGxhbmdbJ29wZW5pZF9yZW1vdmVfaWRlbnRpdHlfZmFpbGVkJ10gPSAnRGV0IGdpY2sgaW50ZSBhdHQgdGEgYm9ydCBpZGVudGl0ZW4nOwokbGFuZ1snbGlzdF9yZWdpc3RlcmVkX3Byb3ZpZGVycyddID0gJ1JlZ2lzdHJlcmFkZSBpZGVudGl0ZXRlcic7CiRsYW5nWydsaXN0X2luZm9ybWF0aW9uJ10gPSAnRiZvdW1sO2xqYW5kZSBPcGVuSUQtbGV2ZXJhbnQmb3VtbDtyZXIgaGFyIGFzc29jaWVyYXRzIG1lZCBkaXR0IGFudiZhdW1sO25kYXJrb250by4gRHUga2FuIGFudiZhdW1sO25kYSB2aWxrZXQgc29tIGhlbHN0IGF2IGRlc3NhIGYmb3VtbDtyIGF0dCBsb2dnYSBpbic7CiRsYW5nWydsaXN0X2xpbmtfcmVtb3ZlJ10gPSAnVGFnIGJvcnQnOwokbGFuZ1snbGlzdF9hZGQnXSA9ICdMJmF1bWw7Z2cgdGlsbCBlbGxlciB1cHBkYXRlcmEgaWRlbnRpdGV0JzsKJGxhbmdbJ2xpc3RfYWRkX2luZm9ybWF0aW9uJ10gPSAnViZhdW1sO2xqIGVuIGxldmVyYW50Jm91bWw7ciBvY2ggc2x1dGYmb3VtbDtyIGlubG9nZ25pbmdlbi4gT20gaW5sb2dnbmluZ2VuIGx5Y2thcyBrb21tZXIgZGluIGlkZW50aXRldCBsJmF1bWw7Z2dhcyB0aWxsIGkgbGlzdGFuIG1lZCBkaW5hIHJlZ2lzdHJlcmFkZSBpZGVudGl0ZXRlci4gT20gZHUgcmVkYW4gaGFyIGVuIGlkZW50aXRldCBmciZhcmluZztuIHNhbW1hIGxldmVyYW50Jm91bWw7ciBrb21tZXIgZGVuIGF0dCBlcnMmYXVtbDt0dGFzLic7CiRsYW5nWydsb2dpbl9lbnRlcl95b3VyJ10gPSAnQW5nZSBkaW4nOwokbGFuZ1snbG9naW5fcHJvdmlkZXJfdXNlcl9uYW1lJ10gPSAnQW52JmF1bWw7bmRhcm5hbW4nOwokbGFuZ1snbG9naW5fb3BlbmlkJ10gPSAnT3BlbklEICc7CiRsYW5nWydsb2dpbl9sb2dpbiddID0gJ0lubG9nZ25pbmcnOwokbGFuZ1snbG9naW5fc2lnbmluJ10gPSAnTG9nZ2EgaW4nOwokbGFuZ1snbG9naW5fY2xpY2tfcHJvdmlkZXInXSA9ICdWJmF1bWw7bGogZGluIE9wZW5JRC1sZXZlcmFudCZvdW1sO3InOwokbGFuZ1snbG9naW5fb3BlbmlkX2luZm9ybWF0aW9uJ10gPSAnT3BlbklEICZhdW1sO3IgZW4gc3RhbmRhcmQgc29tIGcmb3VtbDtyIGF0dCBkdSBrYW4gbG9nZ2EgaW4gcCZhcmluZzsgZmxlcmEgb2xpa2Egd2ViYnBsYXRzZXIgbWVkIHNhbW1hIGFudiZhdW1sO25kYXJ1cHBnaWZ0ZXIuDQogTCZhdW1sO3MgbWVyIG9tIE9wZW5JRCA8YSBocmVmPSJodHRwOi8vb3BlbmlkLm5ldC93aGF0LyI+aCZhdW1sO3I8L2E+IG9jaCBodXIgZHUgPGEgaHJlZj0iaHR0cDovL29wZW5pZC5uZXQvZ2V0Ij5za2FmZmFyIGV0dCBlZ2V0IE9wZW5JRC1rb250bzwvYT4nOwokbGFuZ1sncmVnaXN0ZXJfcHJvdmlkZXInXSA9ICdSZWdpc3RyZXJhIGVuIE9wZW5JRC1sZXZlcmFudCZvdW1sO3InOwokbGFuZ1sncmVnaXN0ZXJfaW5mb3JtYXRpb24nXSA9ICdWJmF1bWw7bGogZW4gbGV2ZXJhbnQmb3VtbDtyIG9jaCBzbHV0ZiZvdW1sO3IgaW5sb2dnbmluZ2VuLiBOJmF1bWw7ciBkZW4gJmF1bWw7ciBhdnNsdXRhZCBrb21tZXIgZGl0dCBhbnYmYXVtbDtuZGFya29udG8gYXR0IGFzc29jaWVyYXMgbWVkIGRpbiBPcGVuSUQtaWRlbnRpdGV0LiBEZXR0YSBnJm91bWw7ciBhdHQgZHUga2FuIGxvZ2dhIGluIG1lZCBkaXR0IE9wZW5JRC1rb250byBpc3QmYXVtbDtsbGV0IGYmb3VtbDtyIGRpdHQgdmFubGlnYSBhbnYmYXVtbDtuZGFybmFtbiBvY2ggbCZvdW1sO3Nlbm9yZC4nOwokbGFuZ1sndHdpdHRlcl9mYWlsZWRfb3JfY2FuY2VsZWQnXSA9ICdUd2l0dGVyLWlubG9nZ25pbmcgYXZiciZvdW1sO3RzIGVsbGVyIG1pc3NseWNrYWRlcyBhdiBhbm5hbiBhbmxlZG5pbmcnOwokbGFuZ1snZmFjZWJvb2tfZmFpbGVkX29yX2NhbmNlbGVkJ10gPSAnRmFjZWJvb2staW5sb2dnbmluZyBhdmJyJm91bWw7dHMgZWxsZXIgbWlzc2x5Y2thZGVzIGF2IGFubmFuIGFubGVkbmluZyc7CiRsYW5nWydxY2EnXSA9ICdQMC00MzM0NDE1NzYtMTI3ODAyMDA0ODk2Nic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDE3ODY2MDIuMTguMTEudXRtY3NyPWNtc21zLm9yZ3x1dG1jY249KHJlZmVycmFsKXx1dG1jbWQ9cmVmZXJyYWx8dXRtY2N0PS8nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xNzI3NDAwNTA4LjEyODQxNTY2MjkuMTMwMTc3MTY5Mi4xMzAxNzg2NjAyLjE4JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My40LjkuMTMwMTc4NjYxMjg5NCc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.CMSMSDatabaseConnection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy8uLi9PcGVuSUQubW9kdWxlLnBocCc7CnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvRGF0YWJhc2VDb25uZWN0aW9uLnBocCc7CgpjbGFzcyBDTVNNU0RhdGFiYXNlQ29ubmVjdGlvbiBleHRlbmRzIEF1dGhfT3BlbklEX0RhdGFiYXNlQ29ubmVjdGlvbiB7CgogICAgLyoqCiAgICAgKgogICAgICogQGdsb2JhbCBDbXNPYmplY3QgJGdDbXMKICAgICAqIEByZXR1cm4gQURPQ29ubmVjdGlvbgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfR2V0RGIoKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgIHJldHVybiAkZ0Ntcy0+R2V0RGIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0b0NvbW1pdCgkbW9kZSkgewogICAgICAgIE9wZW5JRDo6TG9nKCJhdXRvQ29tbWl0IDogIi4kbW9kZSk7CiAgICAgICAgQ01TTVNEYXRhYmFzZUNvbm5lY3Rpb246Ol9HZXREYigpLT5hdXRvQ29tbWl0ID0gJG1vZGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luKCkgewogICAgICAgIE9wZW5JRDo6TG9nKCJiZWdpbiB0cmFuc2FjdGlvbiIpOwogICAgICAgIENNU01TRGF0YWJhc2VDb25uZWN0aW9uOjpfR2V0RGIoKS0+QmVnaW5UcmFucygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21taXQoKSB7CiAgICAgICAgT3BlbklEOjpMb2coImNvbW1pdCB0cmFuc2FjdGlvbiIpOwogICAgICAgIENNU01TRGF0YWJhc2VDb25uZWN0aW9uOjpfR2V0RGIoKS0+Q29tbWl0VHJhbnMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsKCRzcWwsICRwYXJhbXMgPSBhcnJheSgpKSB7CiAgICAgICAgT3BlbklEOjpMb2coImdldEFsbCA6ICIuJHNxbC4iICIucHJpbnRfcigkcGFyYW1zLCBUUlVFKSk7CiAgICAgICAgJGRicmVzdWx0ID0gQ01TTVNEYXRhYmFzZUNvbm5lY3Rpb246Ol9HZXREYigpLT5FeGVjdXRlKCRzcWwsICRwYXJhbXMpOwogICAgICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgICAgIHdoaWxlICgkZGJyZXN1bHQgJiYgISRkYnJlc3VsdC0+RU9GKSB7CiAgICAgICAgICAgICRmaWVsZHMgPSAmICRkYnJlc3VsdC0+ZmllbGRzOwogICAgICAgICAgICAkcm93ID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGZpZWxkcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgJHJvd1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0W10gPSAkcm93OwogICAgICAgICAgICAkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CiAgICAgICAgfQogICAgICAgIE9wZW5JRDo6TG9nKCJyZXN1bHQgOiAiLnByaW50X3IoJHJlc3VsdCwgVFJVRSkpOwogICAgICAgIHJldHVybiAkcmVzdWx0OwoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T25lKCRzcWwsICRwYXJhbXMgPSBhcnJheSgpKSB7CiAgICAgICAgT3BlbklEOjpMb2coImdldE9uZSA6ICIuJHNxbC4iICIucHJpbnRfcigkcGFyYW1zLCBUUlVFKSk7CiAgICAgICAgJHJlc3VsdCA9IENNU01TRGF0YWJhc2VDb25uZWN0aW9uOjpfR2V0RGIoKS0+R2V0T25lKCRzcWwsICRwYXJhbXMpOwogICAgICAgIE9wZW5JRDo6TG9nKCJyZXN1bHQgOiAiLnByaW50X3IoJHJlc3VsdCwgVFJVRSkpOwogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb3coJHNxbCwgJHBhcmFtcyA9IGFycmF5KCkpIHsKICAgICAgICBPcGVuSUQ6OkxvZygiZ2V0Um93IDogIi4kc3FsLiIgIi5wcmludF9yKCRwYXJhbXMsIFRSVUUpKTsKICAgICAgICAkZGJyZXN1bHQgPSBDTVNNU0RhdGFiYXNlQ29ubmVjdGlvbjo6X0dldERiKCktPkV4ZWN1dGUoJHNxbCwgJHBhcmFtcyk7CiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAgICAgaWYgKCRkYnJlc3VsdCAmJiAhJGRicmVzdWx0LT5FT0YpIHsKICAgICAgICAgICAgJGZpZWxkcyA9ICYgJGRicmVzdWx0LT5maWVsZHM7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWVsZHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgT3BlbklEOjpMb2coInJlc3VsdCA6ICIucHJpbnRfcigkcmVzdWx0LCBUUlVFKSk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5KCRzcWwsICRwYXJhbXMgPSBhcnJheSgpKSB7CiAgICAgICAgT3BlbklEOjpMb2coInF1ZXJ5IDogIi4kc3FsLiIgIi5wcmludF9yKCRwYXJhbXMsIFRSVUUpKTsKICAgICAgICAkcmVzdWx0ID0mIENNU01TRGF0YWJhc2VDb25uZWN0aW9uOjpfR2V0RGIoKS0+RXhlY3V0ZSgkc3FsLCAkcGFyYW1zKTsKICAgICAgICBPcGVuSUQ6OkxvZygicmVzdWx0IDogIi5wcmludF9yKCRyZXN1bHQsIFRSVUUpKTsKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sbGJhY2soKSB7CiAgICAgICAgT3BlbklEOjpMb2coInJvbGxiYWNrIHRyYW5zYWN0aW9uIik7CiAgICAgICAgQ01TTVNEYXRhYmFzZUNvbm5lY3Rpb246Ol9HZXREYigpLT5Sb2xsYmFja1RyYW5zKCk7CiAgICB9CgoKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwoKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCgogICAxLiBEZWZpbml0aW9ucy4KCiAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCiAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgoKICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAogICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCiAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQogICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgogICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KCiAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAogICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCiAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgogICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAogICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CiAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgoKICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQogICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KCiAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQogICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCiAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCiAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgogICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCiAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCgogICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwogICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCiAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQogICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCiAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgogICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAogICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwogICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAogICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQogICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCgogICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCgogICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQogICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCiAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCgogICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQogICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCiAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCiAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCiAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawogICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAogICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCiAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQogICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCgogICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQogICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgogICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgogICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKCiAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAoKICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCiAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCiAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAogICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgogICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAoKICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCiAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CiAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAogICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCiAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAogICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgogICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCiAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCiAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCiAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQogICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCiAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KCiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAogICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCiAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCiAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAogICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgoKICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAogICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCiAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgoKICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQogICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCiAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQogICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KCiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgogICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCiAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQogICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CiAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KCiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAogICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAogICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQogICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCiAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgoKICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwogICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAogICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAogICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwogICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQogICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgogICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCiAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQogICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgoKICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCgogICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZwogICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCiAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCiAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQogICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCiAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgogICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCgogICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KCiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwoKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKICAgIC8vIE9wZW5JRCB0YWJsZXMgZm9yIGphbnJhaW4gbGlicmFyeQogICAgJGRic3RvcmUgPSYgJHRoaXMtPl9HZXRTdG9yZU15c3FsKCk7CiAgICAkZGJzdG9yZS0+Y3JlYXRlVGFibGVzKCk7CgogICAgLy8gVXNlciB0YWJsZSBmb3IgT3BlbklEIG1vZHVsZQogICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwogICAgJG9wdGlvbnMgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwogICAgJHF1ZXJ5ID0gIgogICAgICAgICAgICAgaWQgSSBLRVksCgkgICAgIHByb3ZpZGVyIEMoODApIEtFWSwKICAgICAgICAgICAgIG9wZW5pZF9pZGVudGl0eSBDKDUwMCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBlbWFpbCBDKDUwMCkgTlVMTCI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfb3BlbmlkX3VzZXJzIiwgJHF1ZXJ5LCAkb3B0aW9ucyApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgovKiBAdmFyICR0aGlzIE9wZW5JRCAqLwoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwokZGIgPSAmICR0aGlzLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoJHRoaXMtPl9HZXRBc3NvY2lhdGlvbnNUYWJsZU5hbWUoKSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkdGhpcy0+X0dldE5vbmNlc1RhYmxlTmFtZSgpKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfb3BlbmlkX3VzZXJzIik7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/NOTICE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQogICBPcGVuSUQgbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUNCiAgIENvcHlyaWdodCAyMDEwIEhlbnJpayBMZW5uYXJ0c3NvbiBvcGVuaWRbYXRdbGVubmFydHNzb25zLm5ldA0KDQogICBUaGlzIG1vZHVsZSBpcyBiYXNlZCBvbiB0aGUgUEhQIE9wZW5JRCBsaWJyYXJ5IGJ5IEphblJhaW4sIEluYy4NCiAgIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgdjIgbGljZW5zZToNCg0KICAgICAgaHR0cDovL2dpdGh1Yi5jb20vb3BlbmlkL3BocC1vcGVuaWQvDQogICAgICBodHRwOi8vd3d3Lm9wZW5pZGVuYWJsZWQuY29tLw0KDQogICBUaGUgZnJvbnRlbmQgdXNlcyBvbmUgb2YgdHdvIGpRdWVyeSBwbHVnaW5zOg0KDQogICBFaXRoZXIgdGhlIE9wZW5JRCBqUXVlcnkgcGx1Z2luIGRldmVsb3BlZCBieSBKYXJyZXQgVmFuY2UNCiAgIGFuZCByZWxlYXNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlOg0KDQogICAgICBodHRwOi8vanZhbmNlLmNvbS9wYWdlcy9KUXVlcnlPcGVuSURQbHVnaW4ueGh0bWwNCg0KICAgb3IgdGhlIE9wZW5JRCBTZWxlY3RvciBwbHVnaW4gcmVsZWFzZWQgdW5kZXIgdGhlIG5ldyBCU0QgbGljZW5zZToNCg0KICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wZW5pZC1zZWxlY3Rvci8NCg0KICAgalF1ZXJ5IGlzIGRldmVsb3BlZCBieSBhbiBhd2Vzb21lIGJ1bmNoIG9mIHBlb3BsZSBhbmQgZHVhbCBsaWNlbnNlZA0KICAgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIGFuZCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyOg0KDQogICAgIGh0dHA6Ly93d3cuanF1ZXJ5LmNvbQ0KDQogICBUaGUgRmFjZWJvb2sgaW50ZWdyYXRpb24gdXNlcyB0aGUgRmFjZWJvb2sgb2ZmaWNpYWwgUEhQIGxpYnJhcnkNCiAgIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5jZSwgVmVyc2lvbiAyLjANCg0KICAgICBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vDQogICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9waHAtc2RrLw0KDQogICBUaGUgVHdpdHRlciBpbnRlZ3JhdGlvbiB1c2VzIHRoZSBPQXV0aCBQSFAgbGlicmFyeSByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2VuY2UNCg0KICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb2F1dGgtcGhwLw0KDQogICBDTVMgTWFkZSBTaW1wbGUgaXMgYSBraWNrLWFzcyBjb250ZW50IG1hbmFnZW1lbnQgc3lzdGVtIHJlbGVhc2VkIHVuZGVyIHRoZQ0KICAgR1BMIHYyIGxpY2Vuc2UuIFlvdSBzaG91bGQgcmVhbGx5IGNoZWNrIGl0IG91dCBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5Lg0KDQogICAgIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvDQoNCiAgIEljb25zIGJ5IGlUd2VldA0KDQogICAgIGh0dHA6Ly9pdHdlZWsuZGV2aWFudGFydC5jb20vYXJ0L0tub2ItQnV0dG9ucy1Ub29sYmFyLWljb25zLTczNDYzOTYwDQoNCg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/body/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/body/OAuthBodyContentDisposition.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBZGQgdGhlIGV4dHJhIGhlYWRlcnMgZm9yIGEgUFVUIG9yIFBPU1QgcmVxdWVzdCB3aXRoIGEgZmlsZS4KICogCiAqIEB2ZXJzaW9uICRJZCQKICogQGF1dGhvciBNYXJjIFdvcnJlbGwgPG1hcmN3QHBvYm94LmNvbT4KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKY2xhc3MgT0F1dGhCb2R5Q29udGVudERpc3Bvc2l0aW9uCnsKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSByZXF1ZXN0IHN0cmluZy4KICAgICAqIAogICAgICogVGhlIGZpbGVzIGFycmF5IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgKGVpdGhlciBkYXRhIG9yIGZpbGUpOgogICAgICogCiAgICAgKiBmaWxlID0+ICJwYXRoL3RvL2ZpbGUiLCBmaWxlbmFtZT0sIG1pbWU9LCBkYXRhPQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSBmaWxlcwkJKG5hbWUgPT4gZmlsZWRlc2MpIChub3QgdXJsZW5jb2RlZCkKICAgICAqIEByZXR1cm4gYXJyYXkgKGhlYWRlcnMsIGJvZHkpCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVCb2R5ICggJGZpbGVzICkKICAgIHsKICAgIAkkaGVhZGVycyAgCT0gYXJyYXkoKTsKCQkkYm9keQkJPSBudWxsOwoKCQkvLyAxLiBBZGQgYWxsIHRoZSBmaWxlcyB0byB0aGUgcG9zdAoJCWlmICghZW1wdHkoJGZpbGVzKSkKCQl7CgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkbmFtZSA9PiAkZikKCQkJewoJCQkJJGRhdGEgICAgID0gZmFsc2U7CgkJCQkkZmlsZW5hbWUgPSBmYWxzZTsKCgkJCQlpZiAoaXNzZXQoJGZbJ2ZpbGVuYW1lJ10pKQoJCQkJewoJCQkJCSRmaWxlbmFtZSA9ICRmWydmaWxlbmFtZSddOwoJCQkJfQoKCQkJCWlmICghZW1wdHkoJGZbJ2ZpbGUnXSkpCgkJCQl7CgkJCQkJJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJGZbJ2ZpbGUnXSk7CgkJCQkJaWYgKCRkYXRhID09PSBmYWxzZSkKCQkJCQl7CgkJCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoc3ByaW50ZignQ291bGQgbm90IHJlYWQgdGhlIGZpbGUgIiVzIiBmb3IgcmVxdWVzdCBib2R5JywgJGZbJ2ZpbGUnXSkpOwoJCQkJCX0KCQkJCQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkKCQkJCQl7CgkJCQkJCSRmaWxlbmFtZSA9IGJhc2VuYW1lKCRmWydmaWxlJ10pOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKGlzc2V0KCRmWydkYXRhJ10pKQoJCQkJewoJCQkJCSRkYXRhID0gJGZbJ2RhdGEnXTsKCQkJCX0KCQkJCQoJCQkJLy8gV2hlbiB0aGVyZSBpcyBkYXRhLCBhZGQgaXQgYXMgYSByZXF1ZXN0IGJvZHksIG90aGVyd2lzZSBzaWxlbnRseSBza2lwIHRoZSB1cGxvYWQKCQkJCWlmICgkZGF0YSAhPT0gZmFsc2UpCgkJCQl7CgkJCQkJaWYgKGlzc2V0KCRoZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10pKQoJCQkJCXsKCQkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignT25seSBhIHNpbmdsZSBmaWxlIChvciBkYXRhKSBhbGxvd2VkIGluIGEgc2lnbmVkIFBVVC9QT1NUIHJlcXVlc3QgYm9keS4nKTsKCQkJCQl9CgoJCQkJCWlmIChlbXB0eSgkZmlsZW5hbWUpKQoJCQkJCXsKCQkJCQkJJGZpbGVuYW1lID0gJ3VudGl0bGVkJzsKCQkJCQl9CgkJCQkJJG1pbWUgID0gIWVtcHR5KCRmWydtaW1lJ10pID8gJGZbJ21pbWUnXSA6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOwoJCQkJCQoJCQkJCSRoZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9IicuT0F1dGhCb2R5Q29udGVudERpc3Bvc2l0aW9uOjplbmNvZGVQYXJhbWV0ZXJOYW1lKCRmaWxlbmFtZSkuJyInOwoJCQkJCSRoZWFkZXJzWydDb250ZW50LVR5cGUnXQkJPSAkbWltZTsKCgkJCQkJJGJvZHkgPSAkZGF0YTsKCQkJCX0KCQkJCQoJCQl9CgoJCQkvLyBXaGVuIHdlIGhhdmUgYSBib2R5LCBhZGQgdGhlIGNvbnRlbnQtbGVuZ3RoCgkJCWlmICghaXNfbnVsbCgkYm9keSkpCgkJCXsKCQkJCSRoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gc3RybGVuKCRib2R5KTsKCQkJfQoJCX0KCQlyZXR1cm4gYXJyYXkoJGhlYWRlcnMsICRib2R5KTsKCX0KCQoJCgkvKioKCSAqIEVuY29kZSBhIHBhcmFtZXRlcidzIG5hbWUgZm9yIHVzZSBpbiBhIG11bHRpcGFydCBoZWFkZXIuCgkgKiBGb3Igbm93IHdlIGRvIGEgc2ltcGxlIGZpbHRlciB0aGF0IHJlbW92ZXMgc29tZSB1bndhbnRlZCBjaGFyYWN0ZXJzLgoJICogV2UgbWlnaHQgd2FudCB0byBpbXBsZW1lbnQgUkZDMTUyMiBoZXJlLiAgU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE1MjIKCSAqIAoJICogQHBhcmFtIHN0cmluZyBuYW1lCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglzdGF0aWMgZnVuY3Rpb24gZW5jb2RlUGFyYW1ldGVyTmFtZSAoICRuYW1lICkKCXsKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCcvW15ceDIwLVx4N2ZdfCIvJywgJy0nLCAkbmFtZSk7Cgl9Cn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/body/OAuthBodyMultipartFormdata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDcmVhdGUgdGhlIGJvZHkgZm9yIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBtZXNzYWdlLgogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aE11bHRpcGFydEZvcm1kYXRhLnBocCA2IDIwMDgtMDItMTMgMTI6MzU6MDlaIG1hcmN3QHBvYm94LmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBKYW4gMzEsIDIwMDggMTI6NTA6MDUgUE0KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKCmNsYXNzIE9BdXRoQm9keU11bHRpcGFydEZvcm1kYXRhCnsKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSByZXF1ZXN0IHN0cmluZy4KICAgICAqIAogICAgICogVGhlIGZpbGVzIGFycmF5IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgKGVpdGhlciBkYXRhIG9yIGZpbGUpOgogICAgICogCiAgICAgKiBmaWxlID0+ICJwYXRoL3RvL2ZpbGUiLCBmaWxlbmFtZT0sIG1pbWU9LCBkYXRhPQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSBwYXJhbXMJCShuYW1lID0+IHZhbHVlKSAoYWxsIG5hbWVzIGFuZCB2YWx1ZXMgc2hvdWxkIGJlIHVybGVuY29kZWQpCiAgICAgKiBAcGFyYW0gYXJyYXkgZmlsZXMJCShuYW1lID0+IGZpbGVkZXNjKSAobm90IHVybGVuY29kZWQpCiAgICAgKiBAcmV0dXJuIGFycmF5IChoZWFkZXJzLCBib2R5KQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlQm9keSAoICRwYXJhbXMsICRmaWxlcyApCiAgICB7CiAgICAJJGhlYWRlcnMgIAk9IGFycmF5KCk7CgkJJGJvZHkJCT0gJyc7CgkJJGJvdW5kYXJ5CT0gJ09BdXRoUmVxdWVzdGVyXycubWQ1KHVuaXFpZCgnbXVsdGlwYXJ0JykgLiBtaWNyb3RpbWUoKSk7CgkJJGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgLiAkYm91bmRhcnk7CgoKCQkvLyAxLiBBZGQgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHBvc3QKCQlpZiAoIWVtcHR5KCRwYXJhbXMpKQoJCXsKCQkJZm9yZWFjaCAoJHBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpCgkJCXsKCQkJCSRib2R5IC49ICctLScuJGJvdW5kYXJ5LiJcclxuIjsKCQkJCSRib2R5IC49ICdDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IicuT0F1dGhCb2R5TXVsdGlwYXJ0Rm9ybWRhdGE6OmVuY29kZVBhcmFtZXRlck5hbWUocmF3dXJsZGVjb2RlKCRuYW1lKSkuJyInOwoJCQkJJGJvZHkgLj0gIlxyXG5cclxuIjsKCQkJCSRib2R5IC49IHVybGRlY29kZSgkdmFsdWUpOwoJCQkJJGJvZHkgLj0gIlxyXG4iOwoJCQl9CgkJfQoJCQoJCS8vIDIuIEFkZCBhbGwgdGhlIGZpbGVzIHRvIHRoZSBwb3N0CgkJaWYgKCFlbXB0eSgkZmlsZXMpKQoJCXsKCQkJJHVudGl0bGVkID0gMTsKCQkJCgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkbmFtZSA9PiAkZikKCQkJewoJCQkJJGRhdGEgICAgID0gZmFsc2U7CgkJCQkkZmlsZW5hbWUgPSBmYWxzZTsKCgkJCQlpZiAoaXNzZXQoJGZbJ2ZpbGVuYW1lJ10pKQoJCQkJewoJCQkJCSRmaWxlbmFtZSA9ICRmWydmaWxlbmFtZSddOwoJCQkJfQoKCQkJCWlmICghZW1wdHkoJGZbJ2ZpbGUnXSkpCgkJCQl7CgkJCQkJJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJGZbJ2ZpbGUnXSk7CgkJCQkJaWYgKCRkYXRhID09PSBmYWxzZSkKCQkJCQl7CgkJCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoc3ByaW50ZignQ291bGQgbm90IHJlYWQgdGhlIGZpbGUgIiVzIiBmb3IgZm9ybS1kYXRhIHBhcnQnLCAkZlsnZmlsZSddKSk7CgkJCQkJfQoJCQkJCWlmIChlbXB0eSgkZmlsZW5hbWUpKQoJCQkJCXsKCQkJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZbJ2ZpbGUnXSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoaXNzZXQoJGZbJ2RhdGEnXSkpCgkJCQl7CgkJCQkJJGRhdGEgPSAkZlsnZGF0YSddOwoJCQkJfQoJCQkJCgkJCQkvLyBXaGVuIHRoZXJlIGlzIGRhdGEsIGFkZCBpdCBhcyBhIGZvcm0tZGF0YSBwYXJ0LCBvdGhlcndpc2Ugc2lsZW50bHkgc2tpcCB0aGUgdXBsb2FkCgkJCQlpZiAoJGRhdGEgIT09IGZhbHNlKQoJCQkJewoJCQkJCWlmIChlbXB0eSgkZmlsZW5hbWUpKQoJCQkJCXsKCQkJCQkJJGZpbGVuYW1lID0gc3ByaW50ZigndW50aXRsZWQtJWQnLCAkdW50aXRsZWQrKyk7CgkJCQkJfQoJCQkJCSRtaW1lICA9ICFlbXB0eSgkZlsnbWltZSddKSA/ICRmWydtaW1lJ10gOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKCQkJCQkkYm9keSAuPSAnLS0nLiRib3VuZGFyeS4iXHJcbiI7CgkJCQkJJGJvZHkgLj0gJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJy5PQXV0aEJvZHlNdWx0aXBhcnRGb3JtZGF0YTo6ZW5jb2RlUGFyYW1ldGVyTmFtZSgkbmFtZSkuJyI7IGZpbGVuYW1lPSInLk9BdXRoQm9keU11bHRpcGFydEZvcm1kYXRhOjplbmNvZGVQYXJhbWV0ZXJOYW1lKCRmaWxlbmFtZSkuJyInLiJcclxuIjsKCQkJCQkkYm9keSAuPSAnQ29udGVudC1UeXBlOiAnLiRtaW1lOwoJCQkJCSRib2R5IC49ICJcclxuXHJcbiI7CgkJCQkJJGJvZHkgLj0gJGRhdGE7CgkJCQkJJGJvZHkgLj0gIlxyXG4iOwoJCQkJfQoJCQkJCgkJCX0KCQl9CgkJJGJvZHkgLj0gJy0tJy4kYm91bmRhcnkuIi0tXHJcbiI7CgoJCSRoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gc3RybGVuKCRib2R5KTsKCQlyZXR1cm4gYXJyYXkoJGhlYWRlcnMsICRib2R5KTsKCX0KCQoJCgkvKioKCSAqIEVuY29kZSBhIHBhcmFtZXRlcidzIG5hbWUgZm9yIHVzZSBpbiBhIG11bHRpcGFydCBoZWFkZXIuCgkgKiBGb3Igbm93IHdlIGRvIGEgc2ltcGxlIGZpbHRlciB0aGF0IHJlbW92ZXMgc29tZSB1bndhbnRlZCBjaGFyYWN0ZXJzLgoJICogV2UgbWlnaHQgd2FudCB0byBpbXBsZW1lbnQgUkZDMTUyMiBoZXJlLiAgU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE1MjIKCSAqIAoJICogQHBhcmFtIHN0cmluZyBuYW1lCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglzdGF0aWMgZnVuY3Rpb24gZW5jb2RlUGFyYW1ldGVyTmFtZSAoICRuYW1lICkKCXsKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCcvW15ceDIwLVx4N2ZdfCIvJywgJy0nLCAkbmFtZSk7Cgl9Cn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/discovery/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/discovery/xrds_parse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQYXJzZSBhIFhSRFMgZGlzY292ZXJ5IGRlc2NyaXB0aW9uIHRvIGEgc2ltcGxlIGFycmF5IGZvcm1hdC4KICogCiAqIEZvciBub3cgYSBzaW1wbGUgcGFyc2Ugb2YgdGhlIGRvY3VtZW50LiBCZXR0ZXIgZXJyb3IgY2hlY2tpbmcKICogaW4gYSBsYXRlciB2ZXJzaW9uLgogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKLyogZXhhbXBsZSBvZiB1c2U6CgpoZWFkZXIoJ2NvbnRlbnQtdHlwZTogdGV4dC9wbGFpbicpOwokZmlsZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCcuLi8uLi90ZXN0L2Rpc2NvdmVyeS94cmRzLW1hZ25vbGlhLnhyZHMnKTsKJHhyZHMgPSB4cmRzX3BhcnNlKCRmaWxlKTsKcHJpbnRfcigkeHJkcyk7CgogKi8gCgovKioKICogUGFyc2UgdGhlIHhyZHMgZmlsZSBpbiB0aGUgYXJndW1lbnQuICBUaGUgeHJkcyBkZXNjcmlwdGlvbiBtdXN0IGhhdmUgYmVlbiAKICogZmV0Y2hlZCB2aWEgY3VybCBvciBzb21ldGhpbmcgZWxzZS4KICogCiAqIFRPRE86IG1vcmUgcm9idXN0IGNoZWNraW5nLCBzdXBwb3J0IGZvciBtb3JlIHNlcnZpY2UgZG9jdW1lbnRzCiAqIFRPRE86IHN1cHBvcnQgZm9yIFVSSXMgdG8gZGVmaW5pdGlvbiBpbnN0ZWFkIG9mIGxvY2FsIHhtbDppZAogKiAKICogQHBhcmFtIHN0cmluZyBkYXRhIGNvbnRlbnRzIG9mIHhyZHMgZmlsZQogKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbiB3aGVuIHRoZSBmaWxlIGlzIGluIGFuIHVua25vd24gZm9ybWF0CiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhyZHNfcGFyc2UgKCAkZGF0YSApCnsKCSRvYXV0aCA9IGFycmF5KCk7CgkkZG9jICAgPSBARE9NRG9jdW1lbnQ6OmxvYWRYTUwoJGRhdGEpOwoJaWYgKCRkb2MgPT09IGZhbHNlKQoJewoJCXRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIGluIFhNTCwgY2FuXCd0IGxvYWQgWFJEUyBkb2N1bWVudCcpOwoJfQoJCgkkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CgkkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4cmRzJywJJ3hyaTovLyR4cmRzJyk7CgkkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4cmQnLCAgCSd4cmk6Ly8kWFJEKigkdioyLjApJyk7CgkkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzaW1wbGUnLCAnaHR0cDovL3hyZHMtc2ltcGxlLm5ldC9jb3JlLzEuMCcpOwoKCS8vIFlhaG9vISB1c2VzIHRoaXMgbmFtZXNwYWNlLCB3aXRoIGxvd2VyY2FzZSB4cmQgaW4gaXQKCSR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3hyZDInLCAgCSd4cmk6Ly8keHJkKigkdioyLjApJyk7CgoJJHVyaXMgPSB4cmRzX29hdXRoX3NlcnZpY2VfdXJpcygkeHBhdGgpOwoKCWZvcmVhY2ggKCR1cmlzIGFzICR1cmkpCgl7CgkJLy8gVE9ETzogc3VwcG9ydCB1cmlzIHJlZmVycmluZyB0byBzZXJ2aWNlIGRvY3VtZW50cyBvdXRzaWRlIHRoaXMgb25lCgkJaWYgKCR1cml7MH0gPT0gJyMnKQoJCXsKCQkJJGlkICAgID0gc3Vic3RyKCR1cmksIDEpOwoJCQkkb2F1dGggPSB4cmRzX3hyZF9vYXV0aCgkeHBhdGgsICRpZCk7CgkJCWlmIChpc19hcnJheSgkb2F1dGgpICYmICFlbXB0eSgkb2F1dGgpKQoJCQl7CgkJCQlyZXR1cm4gJG9hdXRoOwoJCQl9CgkJfQoJfQoKCXJldHVybiBmYWxzZTsKfQoKCi8qKgogKiBQYXJzZSBhIFhSRCBkZWZpbml0aW9uIGZvciBPQXV0aCBhbmQgcmV0dXJuIHRoZSB1cmlzIGV0Yy4KICogCiAqIEBwYXJhbSBYUGF0aCB4cGF0aAogKiBAcGFyYW0gc3RyaW5nIGlkCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhyZHNfeHJkX29hdXRoICggJHhwYXRoLCAkaWQgKQp7Cgkkb2F1dGggPSBhcnJheSgpOwoJJHhyZCAgID0gJHhwYXRoLT5xdWVyeSgnLy94cmRzOlhSRFMveHJkOlhSRFtAeG1sOmlkPSInLiRpZC4nIl0nKTsKCWlmICgkeHJkLT5sZW5ndGggPT0gMCkKCXsKCQkvLyBZYWhvbyEgdXNlcyBhbm90aGVyIG5hbWVzcGFjZQoJCSR4cmQgPSAkeHBhdGgtPnF1ZXJ5KCcvL3hyZHM6WFJEUy94cmQyOlhSRFtAeG1sOmlkPSInLiRpZC4nIl0nKTsKCX0KCglpZiAoJHhyZC0+bGVuZ3RoID49IDEpCgl7CgkJJHggCQkgID0gJHhyZC0+aXRlbSgwKTsKCQkkc2VydmljZXMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCR4LT5jaGlsZE5vZGVzIGFzICRuKQoJCXsKCQkJc3dpdGNoICgkbi0+bm9kZU5hbWUpCgkJCXsKCQkJY2FzZSAnVHlwZSc6CgkJCQlpZiAoJG4tPm5vZGVWYWx1ZSAhPSAneHJpOi8vJHhyZHMqc2ltcGxlJykKCQkJCXsKCQkJCQkvLyBOb3QgYSBzaW1wbGUgWFJEUyBkb2N1bWVudAoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICdFeHBpcmVzJzoKCQkJCSRvYXV0aFsnZXhwaXJlcyddID0gJG4tPm5vZGVWYWx1ZTsKCQkJCWJyZWFrOwoJCQljYXNlICdTZXJ2aWNlJzoKCQkJCWxpc3QoJHR5cGUsJHNlcnZpY2UpID0geHJkc194cmRfb2F1dGhfc2VydmljZSgkbik7CgkJCQlpZiAoJHR5cGUpCgkJCQl7CgkJCQkJJHNlcnZpY2VzWyR0eXBlXVt4cmRzX3ByaW9yaXR5KCRuKV1bXSA9ICRzZXJ2aWNlOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJCgkJLy8gRmxhdHRlbiB0aGUgc2VydmljZXMgb24gcHJpb3JpdHkKCQlmb3JlYWNoICgkc2VydmljZXMgYXMgJHR5cGUgPT4gJHNlcnZpY2UpCgkJewoJCQkkb2F1dGhbJHR5cGVdID0geHJkc19wcmlvcml0eV9mbGF0dGVuKCRzZXJ2aWNlKTsKCQl9Cgl9CgllbHNlCgl7CgkJJG9hdXRoID0gZmFsc2U7Cgl9CglyZXR1cm4gJG9hdXRoOwp9CgoKLyoqCiAqIFBhcnNlIGEgc2VydmljZSBkZWZpbml0aW9uIGZvciBPQXV0aCBpbiBhIHNpbXBsZSB4cmQgZWxlbWVudAogKiAKICogQHBhcmFtIERPTUVsZW1lbnQgbgogKiBAcmV0dXJuIGFycmF5ICh0eXBlLCBzZXJ2aWNlIGRlc2MpCiAqLwpmdW5jdGlvbiB4cmRzX3hyZF9vYXV0aF9zZXJ2aWNlICggJG4gKQp7Cgkkc2VydmljZSA9IGFycmF5KAoJCQkJJ3VyaScJCQkJPT4gJycsCgkJCQknc2lnbmF0dXJlX21ldGhvZCcJPT4gYXJyYXkoKSwKCQkJCSdwYXJhbWV0ZXJzJwkJPT4gYXJyYXkoKQoJCQkJKTsKCgkkdHlwZSAgICA9IGZhbHNlOwoJZm9yZWFjaCAoJG4tPmNoaWxkTm9kZXMgYXMgJGMpCgl7CgkJJG5hbWUgID0gJGMtPm5vZGVOYW1lOwoJCSR2YWx1ZSA9ICRjLT5ub2RlVmFsdWU7CgkJCgkJaWYgKCRuYW1lID09ICdVUkknKQoJCXsKCQkJJHNlcnZpY2VbJ3VyaSddID0gJHZhbHVlOwoJCX0KCQllbHNlIGlmICgkbmFtZSA9PSAnVHlwZScpCgkJewoJCQlpZiAoc3RybmNtcCgkdmFsdWUsICdodHRwOi8vb2F1dGgubmV0L2NvcmUvMS4wL2VuZHBvaW50LycsIDM1KSA9PSAwKQoJCQl7CgkJCQkkdHlwZSA9IGJhc2VuYW1lKCR2YWx1ZSk7CgkJCX0KCQkJZWxzZSBpZiAoc3RybmNtcCgkdmFsdWUsICdodHRwOi8vb2F1dGgubmV0L2NvcmUvMS4wL3NpZ25hdHVyZS8nLCAzNikgPT0gMCkKCQkJewoJCQkJJHNlcnZpY2VbJ3NpZ25hdHVyZV9tZXRob2QnXVtdID0gYmFzZW5hbWUoJHZhbHVlKTsKCQkJfQoJCQllbHNlIGlmIChzdHJuY21wKCR2YWx1ZSwgJ2h0dHA6Ly9vYXV0aC5uZXQvY29yZS8xLjAvcGFyYW1ldGVycy8nLCAzNykgPT0gMCkKCQkJewoJCQkJJHNlcnZpY2VbJ3BhcmFtZXRlcnMnXVtdID0gYmFzZW5hbWUoJHZhbHVlKTsKCQkJfQoJCQllbHNlIGlmIChzdHJuY21wKCR2YWx1ZSwgJ2h0dHA6Ly9vYXV0aC5uZXQvZGlzY292ZXJ5LzEuMC9jb25zdW1lci1pZGVudGl0eS8nLCA0OSkgPT0gMCkKCQkJewoJCQkJJHR5cGUgPSAnY29uc3VtZXJfaWRlbnRpdHknOwoJCQkJJHNlcnZpY2VbJ21ldGhvZCddID0gYmFzZW5hbWUoJHZhbHVlKTsKCQkJCXVuc2V0KCRzZXJ2aWNlWydzaWduYXR1cmVfbWV0aG9kJ10pOwoJCQkJdW5zZXQoJHNlcnZpY2VbJ3BhcmFtZXRlcnMnXSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkc2VydmljZVsndW5rbm93biddW10gPSAkdmFsdWU7CgkJCX0KCQl9CgkJZWxzZSBpZiAoJG5hbWUgPT0gJ0xvY2FsSUQnKQoJCXsKCQkJJHNlcnZpY2VbJ2NvbnN1bWVyX2tleSddID0gJHZhbHVlOwoJCX0KCQllbHNlIGlmICgkbmFtZXswfSAhPSAnIycpCgkJewoJCQkkc2VydmljZVtzdHJ0b2xvd2VyKCRuYW1lKV0gPSAkdmFsdWU7CgkJfQoJfQoJcmV0dXJuIGFycmF5KCR0eXBlLCAkc2VydmljZSk7Cn0KCgovKioKICogUmV0dXJuIHRoZSBPQXV0aCBzZXJ2aWNlIHVyaXMgaW4gb3JkZXIgb2YgdGhlIHByaW9yaXR5LgogKiAKICogQHBhcmFtIFhQYXRoIHhwYXRoCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhyZHNfb2F1dGhfc2VydmljZV91cmlzICggJHhwYXRoICkKewoJJHVyaXMJICAgPSBhcnJheSgpOwoJJHhyZF9vYXV0aCA9ICR4cGF0aC0+cXVlcnkoJy8veHJkczpYUkRTL3hyZDpYUkQveHJkOlNlcnZpY2UveHJkOlR5cGVbLj1cJ2h0dHA6Ly9vYXV0aC5uZXQvZGlzY292ZXJ5LzEuMFwnXScpOwoJaWYgKCR4cmRfb2F1dGgtPmxlbmd0aCA+IDApCgl7CgkJJHNlcnZpY2UgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCR4cmRfb2F1dGggYXMgJHhvKQoJCXsKCQkJLy8gRmluZCB0aGUgVVJJIG9mIHRoZSBzZXJ2aWNlIGRlZmluaXRpb24KCQkJJGNzID0gJHhvLT5wYXJlbnROb2RlLT5jaGlsZE5vZGVzOwoJCQlmb3JlYWNoICgkY3MgYXMgJGMpCgkJCXsKCQkJCWlmICgkYy0+bm9kZU5hbWUgPT0gJ1VSSScpCgkJCQl7CgkJCQkJJHByaW8gCQkJICA9IHhyZHNfcHJpb3JpdHkoJHhvKTsKCQkJCQkkc2VydmljZVskcHJpb11bXSA9ICRjLT5ub2RlVmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJJHVyaXMgPSB4cmRzX3ByaW9yaXR5X2ZsYXR0ZW4oJHNlcnZpY2UpOwoJfQoJcmV0dXJuICR1cmlzOwp9CgoKCi8qKgogKiBGbGF0dGVuIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgcHJpb3JpdHkKICogCiAqIEBwYXJhbSBhcnJheSAgcHMgYnVja2V0cyBwZXIgcHJpbwogKiBAcmV0dXJuIGFycmF5IG9uZSBkaW1lbnNpb25hbCBhcnJheQogKi8KZnVuY3Rpb24geHJkc19wcmlvcml0eV9mbGF0dGVuICggJHBzICkKewoJJHByaW8gPSBhcnJheSgpOwoJJG51bGwgPSBhcnJheSgpOwoJa3NvcnQoJHBzKTsKCWZvcmVhY2ggKCRwcyBhcyAkaWR4ID0+ICRidWNrZXQpCgl7CgkJaWYgKCFlbXB0eSgkYnVja2V0KSkKCQl7CgkJCWlmICgkaWR4ID09ICdudWxsJykKCQkJewoJCQkJJG51bGwgPSAkYnVja2V0OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHByaW8gPSBhcnJheV9tZXJnZSgkcHJpbywgJGJ1Y2tldCk7CgkJCX0KCQl9Cgl9CgkkcHJpbyA9IGFycmF5X21lcmdlKCRwcmlvLCAkYnVja2V0KTsKCXJldHVybiAkcHJpbzsKfQoKCi8qKgogKiBGZXRjaCB0aGUgcHJpb3JpdHkgb2YgYSBlbGVtZW50CiAqIAogKiBAcGFyYW0gRE9NRWxlbWVudCBlbHQKICogQHJldHVybiBtaXhlZAkJJ251bGwnIG9yIGludAogKi8KZnVuY3Rpb24geHJkc19wcmlvcml0eSAoICRlbHQgKQp7CglpZiAoJGVsdC0+aGFzQXR0cmlidXRlKCdwcmlvcml0eScpKQoJewoJCSRwcmlvID0gJGVsdC0+Z2V0QXR0cmlidXRlKCdwcmlvcml0eScpOwoJCWlmIChpc19udW1lcmljKCRwcmlvKSkKCQl7CgkJCSRwcmlvID0gaW50dmFsKCRwcmlvKTsKCQl9Cgl9CgllbHNlCgl7CgkJJHByaW8gPSAnbnVsbCc7Cgl9CglyZXR1cm4gJHByaW87Cn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KIAo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/discovery/xrds_parse.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIHhyZHNfcGFyc2UucGhwIHNjcmlwdCBjb250YWlucyB0aGUgZnVuY3Rpb246CgoJIGZ1bmN0aW9uIHhyZHNfcGFyc2UgKCAkZGF0YS4gKQoKJGRhdGEgQ29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGEgWFJEUyBYTUwgZmlsZS4KV2hlbiB0aGUgZGF0YSBpcyBpbnZhbGlkIFhNTCB0aGVuIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCgpBZnRlciBwYXJzaW5nIGEgWFJEUyBkZWZpbml0aW9uIGl0IHdpbGwgcmV0dXJuIGEgZGF0YXN0cnVjdHVyZSBtdWNoIGxpa2UgdGhlIG9uZSBiZWxvdy4KCkFycmF5CigKICAgIFtleHBpcmVzXSA9PiAyMDA4LTA0LTEzVDA3OjM0OjU4WgogICAgW3JlcXVlc3RdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbdXJpXSA9PiBodHRwczovL21hLmdub2xpYS5jb20vb2F1dGgvZ2V0X3JlcXVlc3RfdG9rZW4KICAgICAgICAgICAgICAgICAgICBbc2lnbmF0dXJlX21ldGhvZF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzBdID0+IEhNQUMtU0hBMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdID0+IFJTQS1TSEExCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gUExBSU5URVhUCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgW3BhcmFtZXRlcnNdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswXSA9PiBhdXRoLWhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdID0+IHBvc3QtYm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdID0+IHVyaS1xdWVyeQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgKQoKICAgIFthdXRob3JpemVdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbdXJpXSA9PiBodHRwOi8vbWEuZ25vbGlhLmNvbS9vYXV0aC9hdXRob3JpemUKICAgICAgICAgICAgICAgICAgICBbc2lnbmF0dXJlX21ldGhvZF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0gPT4gYXV0aC1oZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSA9PiB1cmktcXVlcnkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICkKCiAgICBbYWNjZXNzXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgW3VyaV0gPT4gaHR0cHM6Ly9tYS5nbm9saWEuY29tL29hdXRoL2dldF9hY2Nlc3NfdG9rZW4KICAgICAgICAgICAgICAgICAgICBbc2lnbmF0dXJlX21ldGhvZF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzBdID0+IEhNQUMtU0hBMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdID0+IFJTQS1TSEExCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gUExBSU5URVhUCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgW3BhcmFtZXRlcnNdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswXSA9PiBhdXRoLWhlYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdID0+IHBvc3QtYm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdID0+IHVyaS1xdWVyeQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgKQoKICAgIFtyZXNvdXJjZV0gPT4gQXJyYXkKICAgICAgICAoCiAgICAgICAgICAgIFswXSA9PiBBcnJheQogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIFt1cmldID0+IAogICAgICAgICAgICAgICAgICAgIFtzaWduYXR1cmVfbWV0aG9kXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0gPT4gSE1BQy1TSEExCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gPT4gUlNBLVNIQTEKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICBbcGFyYW1ldGVyc10gPT4gQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzBdID0+IGF1dGgtaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gPT4gcG9zdC1ib2R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gdXJpLXF1ZXJ5CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICApCgogICAgW2NvbnN1bWVyX2lkZW50aXR5XSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgW3VyaV0gPT4gaHR0cDovL21hLmdub2xpYS5jb20vYXBwbGljYXRpb25zL25ldwogICAgICAgICAgICAgICAgICAgIFttZXRob2RdID0+IG9vYgogICAgICAgICAgICAgICAgKQogICAgICAgICkKKQoK]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthDiscovery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBIYW5kbGUgdGhlIGRpc2NvdmVyeSBvZiBPQXV0aCBzZXJ2aWNlIHByb3ZpZGVyIGVuZHBvaW50cyBhbmQgc3RhdGljIGNvbnN1bWVyIGlkZW50aXR5LgogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiBAZGF0ZSAgU2VwIDQsIDIwMDggNTowNToxOSBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy9kaXNjb3ZlcnkveHJkc19wYXJzZS5waHAnOwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pLicvT0F1dGhFeGNlcHRpb24yLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKS4nL09BdXRoUmVxdWVzdExvZ2dlci5waHAnOwoKCmNsYXNzIE9BdXRoRGlzY292ZXJ5CnsKCS8qKgoJICogUmV0dXJuIGEgZGVzY3JpcHRpb24gaG93IHdlIGNhbiBkbyBhIGNvbnN1bWVyIGFsbG9jYXRpb24uICBQcmVmZXJzIHN0YXRpYyBhbGxvY2F0aW9uIGlmCgkgKiBwb3NzaWJsZS4gIElmIHN0YXRpYyBhbGxvY2F0aW9uIGlzIHBvc3NpYmxlCgkgKiAKCSAqIFNlZSBhbHNvOiBodHRwOi8vb2F1dGgubmV0L2Rpc2NvdmVyeS8jY29uc3VtZXJfaWRlbnRpdHlfdHlwZXMKCSAqIAoJICogQHBhcmFtIHN0cmluZyB1cmkKCSAqIEByZXR1cm4gYXJyYXkJCXByb3ZpZGVyIGRlc2NyaXB0aW9uCgkgKi8KCXN0YXRpYyBmdW5jdGlvbiBkaXNjb3ZlciAoICR1cmkgKQoJewoJCS8vIFNlZSB3aGF0IGtpbmQgb2YgY29uc3VtZXIgYWxsb2NhdGlvbnMgYXJlIGF2YWlsYWJsZQoJCSR4cmRzX2ZpbGUgPSBzZWxmOjpkaXNjb3ZlclhSRFMoJHVyaSk7CgkJaWYgKCFlbXB0eSgkeHJkc19maWxlKSkKCQl7CgkJCSR4cmRzID0geHJkc19wYXJzZSgkeHJkc19maWxlKTsKCQkJaWYgKGVtcHR5KCR4cmRzKSkKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQ291bGQgbm90IGRpc2NvdmVyIE9BdXRoIGluZm9ybWF0aW9uIGZvciAnLiR1cmkpOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBkaXNjb3ZlciBYUkRTIGZpbGUgYXQgJy4kdXJpKTsKCQl9CgoJCS8vIEZpbGwgYW4gT0F1dGhTZXJ2ZXIgcmVjb3JkIGZvciB0aGUgdXJpIGZvdW5kCgkJJHBzCQkJPSBwYXJzZV91cmwoJHVyaSk7CgkJJGhvc3QJCT0gaXNzZXQoJHBzWydob3N0J10pID8gJHBzWydob3N0J10gOiAnbG9jYWxob3N0JzsKCQkkc2VydmVyX3VyaSA9ICRwc1snc2NoZW1lJ10uJzovLycuJGhvc3QuJy8nOwoKCQkkcCA9IGFycmF5KAoJCQkJJ3VzZXJfaWQnCQkJPT4gbnVsbCwKCQkJCSdjb25zdW1lcl9rZXknCQk9PiAnJywKCQkJCSdjb25zdW1lcl9zZWNyZXQnCT0+ICcnLAoJCQkJJ3NpZ25hdHVyZV9tZXRob2RzJwk9PiAnJywKCQkJCSdzZXJ2ZXJfdXJpJwkJPT4gJHNlcnZlcl91cmksCgkJCQkncmVxdWVzdF90b2tlbl91cmknCT0+ICcnLAoJCQkJJ2F1dGhvcml6ZV91cmknCQk9PiAnJywKCQkJCSdhY2Nlc3NfdG9rZW5fdXJpJwk9PiAnJwoJCQkpOwoKCgkJLy8gQ29uc3VtZXIgaWRlbnRpdHkgKG91dCBvZiBib3VuZHMgb3Igc3RhdGljKQoJCWlmIChpc3NldCgkeHJkc1snY29uc3VtZXJfaWRlbnRpdHknXSkpCgkJewoJCQkvLyBUcnkgdG8gZmluZCBhIHN0YXRpYyBjb25zdW1lciBhbGxvY2F0aW9uLCB3ZSBsaWtlIHRob3NlIDopCgkJCWZvcmVhY2ggKCR4cmRzWydjb25zdW1lcl9pZGVudGl0eSddIGFzICRjaSkKCQkJewoJCQkJaWYgKCRjaVsnbWV0aG9kJ10gPT0gJ3N0YXRpYycgJiYgIWVtcHR5KCRjaVsnY29uc3VtZXJfa2V5J10pKQoJCQkJewoJCQkJCSRwWydjb25zdW1lcl9rZXknXSAgICA9ICRjaVsnY29uc3VtZXJfa2V5J107CgkJCQkJJHBbJ2NvbnN1bWVyX3NlY3JldCddID0gJyc7CgkJCQl9CgkJCQllbHNlIGlmICgkY2lbJ21ldGhvZCddID09ICdvb2InICYmICFlbXB0eSgkY2lbJ3VyaSddKSkKCQkJCXsKCQkJCQkvLyBUT0RPOiBLZWVwIHRoaXMgdXJpIHNvbWV3aGVyZSBmb3IgdGhlIHVzZXI/CgkJCQkJJHBbJ2NvbnN1bWVyX29vYl91cmknXSA9ICRjaVsndXJpJ107CgkJCQl9CgkJCX0KCQl9CgoJCS8vIFRoZSB0b2tlbiB1cmlzCgkJaWYgKGlzc2V0KCR4cmRzWydyZXF1ZXN0J11bMF1bJ3VyaSddKSkKCQl7CgkJCSRwWydyZXF1ZXN0X3Rva2VuX3VyaSddID0gJHhyZHNbJ3JlcXVlc3QnXVswXVsndXJpJ107CgkJCWlmICghZW1wdHkoJHhyZHNbJ3JlcXVlc3QnXVswXVsnc2lnbmF0dXJlX21ldGhvZCddKSkKCQkJewoJCQkJJHBbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSAkeHJkc1sncmVxdWVzdCddWzBdWydzaWduYXR1cmVfbWV0aG9kJ107CgkJCX0KCQl9CgkJaWYgKGlzc2V0KCR4cmRzWydhdXRob3JpemUnXVswXVsndXJpJ10pKQoJCXsKCQkJJHBbJ2F1dGhvcml6ZV91cmknXSA9ICR4cmRzWydhdXRob3JpemUnXVswXVsndXJpJ107CgkJCWlmICghZW1wdHkoJHhyZHNbJ2F1dGhvcml6ZSddWzBdWydzaWduYXR1cmVfbWV0aG9kJ10pKQoJCQl7CgkJCQkkcFsnc2lnbmF0dXJlX21ldGhvZHMnXSA9ICR4cmRzWydhdXRob3JpemUnXVswXVsnc2lnbmF0dXJlX21ldGhvZCddOwoJCQl9CgkJfQoJCWlmIChpc3NldCgkeHJkc1snYWNjZXNzJ11bMF1bJ3VyaSddKSkKCQl7CgkJCSRwWydhY2Nlc3NfdG9rZW5fdXJpJ10gPSAkeHJkc1snYWNjZXNzJ11bMF1bJ3VyaSddOwoJCQlpZiAoIWVtcHR5KCR4cmRzWydhY2Nlc3MnXVswXVsnc2lnbmF0dXJlX21ldGhvZCddKSkKCQkJewoJCQkJJHBbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSAkeHJkc1snYWNjZXNzJ11bMF1bJ3NpZ25hdHVyZV9tZXRob2QnXTsKCQkJfQoJCX0KCQlyZXR1cm4gJHA7Cgl9CgkKCQoJLyoqCgkgKiBEaXNjb3ZlciB0aGUgWFJEUyBmaWxlIGF0IHRoZSB1cmkuICBUaGlzIGlzIGEgYml0IHByaW1pdGl2ZSwgeW91IHNob3VsZCBvdmVycnVsZQoJICogdGhpcyBmdW5jdGlvbiBzbyB0aGF0IHRoZSBYUkRTIGZpbGUgY2FuIGJlIGNhY2hlZCBmb3IgbGF0ZXIgcmVmZXJyYWwuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdXJpCgkgKiBAcmV0dXJuIHN0cmluZwkJZmFsc2Ugd2hlbiBubyBYUkRTIGZpbGUgZm91bmQKCSAqLwoJc3RhdGljIHByb3RlY3RlZCBmdW5jdGlvbiBkaXNjb3ZlclhSRFMgKCAkdXJpLCAkcmVjdXIgPSAwICkKCXsKCQkvLyBCYWlsIG91dCB3aGVuIHdlIGFyZSBmb2xsb3dpbmcgcmVkaXJlY3RzCgkJaWYgKCRyZWN1ciA+IDEwKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkKCQkkZGF0YSA9IHNlbGY6OmN1cmwoJHVyaSk7CgoJCS8vIENoZWNrIHdoYXQgd2UgZ290IGJhY2ssIGNvdWxkIGJlOgoJCS8vIDEuIFRoZSBYUkRTIGRpc2NvdmVyeSBmaWxlIGl0c2VsZiAoY2hlY2sgY29udGVudC10eXBlKQoJCS8vIDIuIFRoZSBYLVhSRFMtTG9jYXRpb24gaGVhZGVyCgkJCgkJaWYgKGlzX3N0cmluZygkZGF0YSkgJiYgIWVtcHR5KCRkYXRhKSkKCQl7CgkJCWxpc3QoJGhlYWQsJGJvZHkpID0gZXhwbG9kZSgiXHJcblxyXG4iLCAkZGF0YSk7CgkJCSRib2R5ID0gdHJpbSgkYm9keSk7CgkJCSRtCSAgPSBmYWxzZTsKCgkJCS8vIFNlZSBpZiB3ZSBnb3QgdGhlIFhSRFMgZmlsZSBpdHNlbGYgb3Igd2UgaGF2ZSB0byBmb2xsb3cgYSBsb2NhdGlvbiBoZWFkZXIKCQkJaWYgKAlwcmVnX21hdGNoKCcvXkNvbnRlbnQtVHlwZTpccyphcHBsaWNhdGlvblwveHJkcyt4bWwvaW0nLCAkaGVhZCkKCQkJCXx8CXByZWdfbWF0Y2goJy9ePFw/eG1sW14+XSpcPz5ccyo8eHJkc1xzL2knLCAkYm9keSkKCQkJCXx8CXByZWdfbWF0Y2goJy9ePHhyZHNccy9pJywgJGJvZHkpCgkJCQkpCgkJCXsKCQkJCSR4cmRzID0gJGJvZHk7CgkJCX0KCQkJZWxzZSBpZiAoCXByZWdfbWF0Y2goJy9eWC1YUkRTLUxvY2F0aW9uOlxzKihbXlxyXG5dKikvaW0nLCAkaGVhZCwgJG0pCgkJCQkJfHwJcHJlZ19tYXRjaCgnL15Mb2NhdGlvbjpccyooW15cclxuXSopL2ltJywgJGhlYWQsICRtKSkKCQkJewoJCQkJLy8gUmVjdXJzZSB0byB0aGUgZ2l2ZW4gbG9jYXRpb24KCQkJCWlmICgkdXJpICE9ICRtWzFdKQoJCQkJewoJCQkJCSR4cmRzID0gc2VsZjo6ZGlzY292ZXJYUkRTKCRtWzFdLCAkcmVjdXIrMSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJLy8gUmVmZXJyaW5nIHRvIHRoZSBzYW1lIHVyaSwgYmFpbCBvdXQKCQkJCQkkeHJkcyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy8gTm90IGFuIFhSRFMgZmlsZSBhbiBub3doZXJlIGVsc2UgdG8gY2hlY2sKCQkJCSR4cmRzID0gZmFsc2U7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHhyZHMgPSBmYWxzZTsKCQl9CgkJcmV0dXJuICR4cmRzOwoJfQoJCgkKCS8qKgoJICogVHJ5IHRvIGZldGNoIGFuIFhSRFMgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uICBTZW5kcyBhbiBhY2NlcHQgaGVhZGVyIHByZWZlcnJpbmcgdGhlIHhyZHMgZmlsZS4KCSAqIAoJICogQHBhcmFtIHN0cmluZyB1cmkKCSAqIEByZXR1cm4gYXJyYXkJKGhlYWQsYm9keSksIGZhbHNlIG9uIGFuIGVycm9yCgkgKi8KCXN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gY3VybCAoICR1cmkgKQoJewoJCSRjaCA9IGN1cmxfaW5pdCgpOwoKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwJIGFycmF5KCdBY2NlcHQ6IGFwcGxpY2F0aW9uL3hyZHMreG1sLCAqLyo7cT0wLjEnKSk7CgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwJCSAnYW55TWV0YS9PQXV0aCAxLjAgLSAoT0F1dGggRGlzY292ZXJ5ICRMYXN0Q2hhbmdlZFJldmlzaW9uOiA0NSAkKScpOwoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsIAkJCSAkdXJpKTsKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIAkJIHRydWUpOwoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAJCSAzMCk7CgoJCSR0eHQgPSBjdXJsX2V4ZWMoJGNoKTsKCQljdXJsX2Nsb3NlKCRjaCk7CgoJCS8vIFRlbGwgdGhlIGxvZ2dlciB3aGF0IHdlIHJlcXVlc3RlZCBhbmQgd2hhdCB3ZSByZWNlaXZlZCBiYWNrCgkJJGRhdGEgPSAiR0VUICR1cmkiOwoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6c2V0U2VudCgkZGF0YSwgIiIpOwoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6c2V0UmVjZWl2ZWQoJHR4dCk7CgoJCXJldHVybiAkdHh0OwoJfQp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthException2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTaW1wbGUgZXhjZXB0aW9uIHdyYXBwZXIgZm9yIE9BdXRoCiAqIAogKiBAdmVyc2lvbiAkSWQ6IE9BdXRoRXhjZXB0aW9uMi5waHAgNjcgMjAxMC0wMS0xMiAxODo0MjowNFogYnJ1bm9iZ0Bjb3JvbGxhcml1bS5jb20gJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiBAZGF0ZSAgTm92IDI5LCAyMDA3IDU6MzM6NTQgUE0KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKLy8gVE9ETzogc29tZXRoaW5nIHdpdGggdGhlIEhUVFAgcmV0dXJuIGNvZGUgbWF0Y2hpbmcgdG8gdGhlIHByb2JsZW0KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhSZXF1ZXN0TG9nZ2VyLnBocCc7CgpjbGFzcyBPQXV0aEV4Y2VwdGlvbjIgZXh0ZW5kcyBFeGNlcHRpb24KewoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkbWVzc2FnZSApCgl7CgkJRXhjZXB0aW9uOjpfX2NvbnN0cnVjdCgkbWVzc2FnZSk7CgkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjphZGROb3RlKCdPQXV0aEV4Y2VwdGlvbjI6ICcuJG1lc3NhZ2UpOwoJfQoKfQoKCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSZXF1ZXN0IHdyYXBwZXIgY2xhc3MuICBQcmVwYXJlcyBhIHJlcXVlc3QgZm9yIGNvbnN1bXB0aW9uIGJ5IHRoZSBPQXV0aCByb3V0aW5lcwogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFJlcXVlc3QucGhwIDE3NCAyMDEwLTExLTI0IDE1OjE1OjQxWiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMTYsIDIwMDcgMTI6MjA6MzEgUE0KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhFeGNlcHRpb24yLnBocCc7CgovKioKICogT2JqZWN0IHRvIHBhcnNlIGFuIGluY29taW5nIE9BdXRoIHJlcXVlc3Qgb3IgcHJlcGFyZSBhbiBvdXRnb2luZyBPQXV0aCByZXF1ZXN0CiAqLwpjbGFzcyBPQXV0aFJlcXVlc3QgCnsKCS8qIHRoZSByZWFsbSBmb3IgdGhpcyByZXF1ZXN0ICovCglwcm90ZWN0ZWQgJHJlYWxtOwoJCgkvKiBhbGwgdGhlIHBhcmFtZXRlcnMsIFJGQzM5ODYgZW5jb2RlZCBuYW1lL3ZhbHVlIHBhaXJzICovCglwcm90ZWN0ZWQgJHBhcmFtID0gYXJyYXkoKTsKCgkvKiB0aGUgcGFyc2VkIHJlcXVlc3QgdXJpICovCglwcm90ZWN0ZWQgJHVyaV9wYXJ0czsKCgkvKiB0aGUgcmF3IHJlcXVlc3QgdXJpICovCglwcm90ZWN0ZWQgJHVyaTsKCgkvKiB0aGUgcmVxdWVzdCBoZWFkZXJzICovCglwcm90ZWN0ZWQgJGhlYWRlcnM7CgoJLyogdGhlIHJlcXVlc3QgbWV0aG9kICovCglwcm90ZWN0ZWQgJG1ldGhvZDsKCQoJLyogdGhlIGJvZHkgb2YgdGhlIE9BdXRoIHJlcXVlc3QgKi8KCXByb3RlY3RlZCAkYm9keTsKCQoKCS8qKgoJICogQ29uc3RydWN0IGZyb20gdGhlIGN1cnJlbnQgcmVxdWVzdC4gVXNlZnVsIGZvciBjaGVja2luZyB0aGUgc2lnbmF0dXJlIG9mIGEgcmVxdWVzdC4KCSAqIFdoZW4gbm90IHN1cHBsaWVkIHdpdGggYW55IHBhcmFtZXRlcnMgdGhpcyB3aWxsIHVzZSB0aGUgY3VycmVudCByZXF1ZXN0LgoJICogCgkgKiBAcGFyYW0gc3RyaW5nCXVyaQkJCQltaWdodCBpbmNsdWRlIHBhcmFtZXRlcnMKCSAqIEBwYXJhbSBzdHJpbmcJbWV0aG9kCQkJR0VULCBQVVQsIFBPU1QgZXRjLgoJICogQHBhcmFtIHN0cmluZwlwYXJhbWV0ZXJzCQlhZGRpdGlvbmFsIHBvc3QgcGFyYW1ldGVycywgdXJsZW5jb2RlZCAoUkZDMTczOCkKCSAqIEBwYXJhbSBhcnJheQkJaGVhZGVycwkJCWhlYWRlcnMgZm9yIHJlcXVlc3QKCSAqIEBwYXJhbSBzdHJpbmcJYm9keQkJCW9wdGlvbmFsIGJvZHkgb2YgdGhlIE9BdXRoIHJlcXVlc3QgKFBPU1Qgb3IgUFVUKQoJICovCglmdW5jdGlvbiBfX2NvbnN0cnVjdCAoICR1cmkgPSBudWxsLCAkbWV0aG9kID0gbnVsbCwgJHBhcmFtZXRlcnMgPSAnJywgJGhlYWRlcnMgPSBhcnJheSgpLCAkYm9keSA9IG51bGwgKQoJewoJCWlmIChpc19vYmplY3QoJF9TRVJWRVIpKQoJCXsKCQkJLy8gVGFpbnRlZCBhcnJheXMgLSB0aGUgbm9ybWFsIHN0dWZmIGluIGFueU1ldGEKCQkJaWYgKCEkbWV0aG9kKSB7CgkJCQkkbWV0aG9kCT0gJF9TRVJWRVItPlJFUVVFU1RfTUVUSE9ELT5nZXRSYXdVbnNhZmUoKTsKCQkJfQoJCQlpZiAoZW1wdHkoJHVyaSkpIHsKCQkJCSR1cmkJPSAkX1NFUlZFUi0+UkVRVUVTVF9VUkktPmdldFJhd1Vuc2FmZSgpOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vIG5vbiBhbnlNZXRhIHN5c3RlbXMKCQkJaWYgKCEkbWV0aG9kKSB7CgkJCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pKSB7CgkJCQkJJG1ldGhvZAk9ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJJG1ldGhvZCA9ICdHRVQnOwoJCQkJfQoJCQl9CgkJCSRwcm90byA9IChpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJykgPyAnaHR0cHMnIDogJ2h0dHAnOwoJCQlpZiAoZW1wdHkoJHVyaSkpIHsKCQkJCWlmIChzdHJwb3MoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sICI6Ly8iKSAhPT0gZmFsc2UpIHsKCQkJCQkkdXJpID0gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkdXJpID0gc3ByaW50ZignJXM6Ly8lcyVzJywgJHByb3RvLCAkX1NFUlZFUlsnSFRUUF9IT1NUJ10sICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKTsKCQkJCX0KCQkJfQoJCX0KCQkkaGVhZGVycyAgICAgID0gT0F1dGhSZXF1ZXN0TG9nZ2VyOjpnZXRBbGxIZWFkZXJzKCk7CgkJJHRoaXMtPm1ldGhvZCA9IHN0cnRvdXBwZXIoJG1ldGhvZCk7CgkJCgkJLy8gSWYgdGhpcyBpcyBhIHBvc3QgdGhlbiBhbHNvIGNoZWNrIHRoZSBwb3N0ZWQgdmFyaWFibGVzCgkJaWYgKHN0cmNhc2VjbXAoJG1ldGhvZCwgJ1BPU1QnKSA9PSAwKQoJCXsKCQkJLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoICdtdWx0aXBhcnQvZm9ybS1kYXRhJz8KCQkJaWYgKCR0aGlzLT5nZXRSZXF1ZXN0Q29udGVudFR5cGUoKSA9PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpCgkJCXsKCQkJCS8vIEdldCB0aGUgcG9zdGVkIGJvZHkgKHdoZW4gYXZhaWxhYmxlKQoJCQkJaWYgKCFpc3NldCgkaGVhZGVyc1snWC1PQXV0aC1UZXN0J10pKQoJCQkJewoJCQkJCSRwYXJhbWV0ZXJzIC49ICR0aGlzLT5nZXRSZXF1ZXN0Qm9keU9mTXVsdGlwYXJ0KCk7CgkJCQl9CgkJCX0KCQkJaWYgKCR0aGlzLT5nZXRSZXF1ZXN0Q29udGVudFR5cGUoKSA9PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykKCQkJewoJCQkJLy8gR2V0IHRoZSBwb3N0ZWQgYm9keSAod2hlbiBhdmFpbGFibGUpCgkJCQlpZiAoIWlzc2V0KCRoZWFkZXJzWydYLU9BdXRoLVRlc3QnXSkpCgkJCQl7CgkJCQkJJHBhcmFtZXRlcnMgLj0gJHRoaXMtPmdldFJlcXVlc3RCb2R5KCk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkYm9keSA9ICR0aGlzLT5nZXRSZXF1ZXN0Qm9keSgpOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHN0cmNhc2VjbXAoJG1ldGhvZCwgJ1BVVCcpID09IDApCgkJewoJCQkkYm9keSA9ICR0aGlzLT5nZXRSZXF1ZXN0Qm9keSgpOwoJCX0KCgkJJHRoaXMtPm1ldGhvZCAgPSBzdHJ0b3VwcGVyKCRtZXRob2QpOwoJCSR0aGlzLT5oZWFkZXJzID0gJGhlYWRlcnM7CgkJLy8gU3RvcmUgdGhlIHZhbHVlcywgcHJlcGFyZSBmb3Igb2F1dGgKCQkkdGhpcy0+dXJpICAgICA9ICR1cmk7CgkJJHRoaXMtPmJvZHkgICAgPSAkYm9keTsKCQkkdGhpcy0+cGFyc2VVcmkoJHBhcmFtZXRlcnMpOwoJCSR0aGlzLT5wYXJzZUhlYWRlcnMoKTsKCQkkdGhpcy0+dHJhbnNjb2RlUGFyYW1zKCk7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBzaWduYXR1cmUgYmFzZSBzdHJpbmcuCgkgKiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHJhd3VybGVuY29kZSBkdWUgdG8gc3BlY2lmaWVkIHVzZSBvZiBSRkMzOTg2LgoJICogCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglmdW5jdGlvbiBzaWduYXR1cmVCYXNlU3RyaW5nICgpCgl7CgkJJHNpZyAJPSBhcnJheSgpOwoJCSRzaWdbXQk9ICR0aGlzLT5tZXRob2Q7CgkJJHNpZ1tdCT0gJHRoaXMtPmdldFJlcXVlc3RVcmwoKTsKCQkkc2lnW10JPSAkdGhpcy0+Z2V0Tm9ybWFsaXplZFBhcmFtcygpOwoJCQoJCXJldHVybiBpbXBsb2RlKCcmJywgYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAndXJsZW5jb2RlJyksICRzaWcpKTsKCX0KCQoJCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSByZXF1ZXN0LCB1c2luZyB0aGUgbWV0aG9kIGluIG9hdXRoX3NpZ25hdHVyZV9tZXRob2QuCgkgKiBUaGUgc2lnbmF0dXJlIGlzIHJldHVybmVkIGVuY29kZWQgaW4gdGhlIGZvcm0gYXMgdXNlZCBpbiB0aGUgdXJsLiAgU28gdGhlIGJhc2U2NCBhbmQKCSAqIHVybGVuY29kaW5nIGhhcyBiZWVuIGRvbmUuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldAoJICogQHBhcmFtIHN0cmluZyB0b2tlbl90eXBlCgkgKiBAZXhjZXB0aW9uIHdoZW4gbm90IGFsbCBwYXJ0cyBhdmFpbGFibGUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCWZ1bmN0aW9uIGNhbGN1bGF0ZVNpZ25hdHVyZSAoICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICR0b2tlbl90eXBlID0gJ2FjY2VzcycgKQoJewoJCSRyZXF1aXJlZCA9IGFycmF5KAoJCQkJCQknb2F1dGhfY29uc3VtZXJfa2V5JywKCQkJCQkJJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnLAoJCQkJCQknb2F1dGhfdGltZXN0YW1wJywKCQkJCQkJJ29hdXRoX25vbmNlJwoJCQkJCSk7CgoJCWlmICgkdG9rZW5fdHlwZSAhPSAncmVxdWVzdFRva2VuJykKCQl7CgkJCSRyZXF1aXJlZFtdID0gJ29hdXRoX3Rva2VuJzsKCQl9CgoJCWZvcmVhY2ggKCRyZXF1aXJlZCBhcyAkcmVxKQoJCXsKCQkJaWYgKCFpc3NldCgkdGhpcy0+cGFyYW1bJHJlcV0pKQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDYW5cJ3Qgc2lnbiByZXF1ZXN0LCBtaXNzaW5nIHBhcmFtZXRlciAiJy4kcmVxLiciJyk7CgkJCX0KCQl9CgoJCSR0aGlzLT5jaGVja3MoKTsKCgkJJGJhc2UgICAgICA9ICR0aGlzLT5zaWduYXR1cmVCYXNlU3RyaW5nKCk7CgkJJHNpZ25hdHVyZSA9ICR0aGlzLT5jYWxjdWxhdGVEYXRhU2lnbmF0dXJlKCRiYXNlLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0LCAkdGhpcy0+cGFyYW1bJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnXSk7CgkJcmV0dXJuICRzaWduYXR1cmU7Cgl9CgoJCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIG9mIGEgc3RyaW5nLgoJICogVXNlcyB0aGUgc2lnbmF0dXJlIG1ldGhvZCBmcm9tIHRoZSBjdXJyZW50IHBhcmFtZXRlcnMuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgCWRhdGEKCSAqIEBwYXJhbSBzdHJpbmcJY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nCXRva2VuX3NlY3JldAoJICogQHBhcmFtIHN0cmluZyAJc2lnbmF0dXJlX21ldGhvZAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gdGhlIHNpZ25hdHVyZSBtZXRob2QgaXMgdW5rbm93biAKCSAqIEByZXR1cm4gc3RyaW5nIHNpZ25hdHVyZQoJICovCglmdW5jdGlvbiBjYWxjdWxhdGVEYXRhU2lnbmF0dXJlICggJGRhdGEsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICRzaWduYXR1cmVfbWV0aG9kICkKCXsKCQlpZiAoaXNfbnVsbCgkZGF0YSkpCgkJewoJCQkkZGF0YSA9ICcnOwoJCX0KCgkJJHNpZyA9ICR0aGlzLT5nZXRTaWduYXR1cmVNZXRob2QoJHNpZ25hdHVyZV9tZXRob2QpOwoJCXJldHVybiAkc2lnLT5zaWduYXR1cmUoJHRoaXMsICRkYXRhLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0KTsKCX0KCgoJLyoqCgkgKiBTZWxlY3QgYSBzaWduYXR1cmUgbWV0aG9kIGZyb20gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG1ldGhvZHMuCgkgKiBXZSB0cnkgdG8gY2hlY2sgdGhlIG1vc3Qgc2VjdXJlIG1ldGhvZHMgZmlyc3QuCgkgKiAKCSAqIEB0b2RvIExldCB0aGUgc2lnbmF0dXJlIG1ldGhvZCB0ZWxsIHVzIGhvdyBzZWN1cmUgaXQgaXMKCSAqIEBwYXJhbSBhcnJheSBtZXRob2RzCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHdlIGRvbid0IHN1cHBvcnQgYW55IG1ldGhvZCBpbiB0aGUgbGlzdAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNlbGVjdFNpZ25hdHVyZU1ldGhvZCAoICRtZXRob2RzICkKCXsKCQlpZiAoaW5fYXJyYXkoJ0hNQUMtU0hBMScsICRtZXRob2RzKSkKCQl7CgkJCSRtZXRob2QgPSAnSE1BQy1TSEExJzsKCQl9CgkJZWxzZSBpZiAoaW5fYXJyYXkoJ01ENScsICRtZXRob2RzKSkKCQl7CgkJCSRtZXRob2QgPSAnTUQ1JzsKCQl9CgkJZWxzZQoJCXsKCQkJJG1ldGhvZCA9IGZhbHNlOwoJCQlmb3JlYWNoICgkbWV0aG9kcyBhcyAkbSkKCQkJewoJCQkJJG0gPSBzdHJ0b3VwcGVyKCRtKTsKCQkJCSRtMiA9IHByZWdfcmVwbGFjZSgnL1teQS1aMC05XS8nLCAnXycsICRtKTsKCQkJCWlmIChmaWxlX2V4aXN0cyhkaXJuYW1lKF9fRklMRV9fKS4nL3NpZ25hdHVyZV9tZXRob2QvT0F1dGhTaWduYXR1cmVNZXRob2RfJy4kbTIuJy5waHAnKSkKCQkJCXsKCQkJCQkkbWV0aG9kID0gJG07CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJCgkJCWlmIChlbXB0eSgkbWV0aG9kKSkKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm9uZSBvZiB0aGUgc2lnbmluZyBtZXRob2RzIGlzIHN1cHBvcnRlZC4nKTsKCQkJfQoJCX0KCQlyZXR1cm4gJG1ldGhvZDsKCX0KCgkKCS8qKgoJICogRmV0Y2ggdGhlIHNpZ25hdHVyZSBvYmplY3QgdXNlZCBmb3IgY2FsY3VsYXRpbmcgYW5kIGNoZWNraW5nIHRoZSBzaWduYXR1cmUgYmFzZSBzdHJpbmcKCSAqIAoJICogQHBhcmFtIHN0cmluZyBtZXRob2QKCSAqIEByZXR1cm4gT0F1dGhTaWduYXR1cmVNZXRob2Qgb2JqZWN0CgkgKi8KCWZ1bmN0aW9uIGdldFNpZ25hdHVyZU1ldGhvZCAoICRtZXRob2QgKQoJewoJCSRtICAgICA9IHN0cnRvdXBwZXIoJG1ldGhvZCk7CgkJJG0gICAgID0gcHJlZ19yZXBsYWNlKCcvW15BLVowLTldLycsICdfJywgJG0pOwoJCSRjbGFzcyA9ICdPQXV0aFNpZ25hdHVyZU1ldGhvZF8nLiRtOwoKCQlpZiAoZmlsZV9leGlzdHMoZGlybmFtZShfX0ZJTEVfXykuJy9zaWduYXR1cmVfbWV0aG9kLycuJGNsYXNzLicucGhwJykpCgkJewoJCQlyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy9zaWduYXR1cmVfbWV0aG9kLycuJGNsYXNzLicucGhwJzsKCQkJJHNpZyA9IG5ldyAkY2xhc3MoKTsKCQl9CgkJZWxzZQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5zdXBwb3J0ZWQgc2lnbmF0dXJlIG1ldGhvZCAiJy4kbS4nIi4nKTsKCQl9CgkJcmV0dXJuICRzaWc7Cgl9CgoKCS8qKgoJICogUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MuCgkgKiAKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHRocm93biB3aGVuIHNhbml0eSBjaGVja3MgZmFpbGVkCgkgKi8KCWZ1bmN0aW9uIGNoZWNrcyAoKQoJewoJCWlmIChpc3NldCgkdGhpcy0+cGFyYW1bJ29hdXRoX3ZlcnNpb24nXSkpCgkJewoJCQkkdmVyc2lvbiA9ICR0aGlzLT51cmxkZWNvZGUoJHRoaXMtPnBhcmFtWydvYXV0aF92ZXJzaW9uJ10pOwoJCQlpZiAoJHZlcnNpb24gIT0gJzEuMCcpCgkJCXsKCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0V4cGVjdGVkIE9BdXRoIHZlcnNpb24gMS4wLCBnb3QgIicuJHRoaXMtPnBhcmFtWydvYXV0aF92ZXJzaW9uJ10uJyInKTsKCQkJfQoJCX0KCX0KCgoJLyoqCgkgKiBSZXR1cm4gdGhlIHJlcXVlc3QgbWV0aG9kCgkgKiAKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCWZ1bmN0aW9uIGdldE1ldGhvZCAoKQoJewoJCXJldHVybiAkdGhpcy0+bWV0aG9kOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBjb21wbGV0ZSBwYXJhbWV0ZXIgc3RyaW5nIGZvciB0aGUgc2lnbmF0dXJlIGNoZWNrLgoJICogQWxsIHBhcmFtZXRlcnMgYXJlIGNvcnJlY3RseSB1cmxlbmNvZGVkIGFuZCBzb3J0ZWQgb24gbmFtZSBhbmQgdmFsdWUKCSAqIAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZFBhcmFtcyAoKQoJewoJCS8qCgkJLy8gc29ydCBieSBuYW1lLCB0aGVuIGJ5IHZhbHVlIAoJCS8vIChuZWVkZWQgd2hlbiB3ZSBzdGFydCBhbGxvd2luZyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCB0aGUgc2FtZSBuYW1lKQoJCSRrZXlzICAgPSBhcnJheV9rZXlzKCR0aGlzLT5wYXJhbSk7CgkJJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkdGhpcy0+cGFyYW0pOwoJCWFycmF5X211bHRpc29ydCgka2V5cywgU09SVF9BU0MsICR2YWx1ZXMsIFNPUlRfQVNDKTsKICAgICAgICAqLwogICAgICAgICRwYXJhbXMgICAgID0gJHRoaXMtPnBhcmFtOwoJCSRub3JtYWxpemVkID0gYXJyYXkoKTsKCgkJa3NvcnQoJHBhcmFtcyk7CgkJZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkKCQl7CgkJICAgIC8vIGFsbCBuYW1lcyBhbmQgdmFsdWVzIGFyZSBhbHJlYWR5IHVybGVuY29kZWQsIGV4Y2x1ZGUgdGhlIG9hdXRoIHNpZ25hdHVyZQoJCSAgICBpZiAoJGtleSAhPSAnb2F1dGhfc2lnbmF0dXJlJykKCQkgICAJewoJCQkJaWYgKGlzX2FycmF5KCR2YWx1ZSkpCgkJCQl7CgkJCQkJJHZhbHVlX3NvcnQgPSAkdmFsdWU7CgkJCQkJc29ydCgkdmFsdWVfc29ydCk7CgkJCQkJZm9yZWFjaCAoJHZhbHVlX3NvcnQgYXMgJHYpCgkJCQkJewoJCQkJCQkkbm9ybWFsaXplZFtdID0gJGtleS4nPScuJHY7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRub3JtYWxpemVkW10gPSAka2V5Lic9Jy4kdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGltcGxvZGUoJyYnLCAkbm9ybWFsaXplZCk7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBub3JtYWxpc2VkIHVybCBmb3Igc2lnbmF0dXJlIGNoZWNrcwoJICovCglmdW5jdGlvbiBnZXRSZXF1ZXN0VXJsICgpCgl7CiAgICAgICAgJHVybCA9ICAkdGhpcy0+dXJpX3BhcnRzWydzY2hlbWUnXSAuICc6Ly8nCiAgICAgICAgICAgICAgLiAkdGhpcy0+dXJpX3BhcnRzWyd1c2VyJ10gLiAoIWVtcHR5KCR0aGlzLT51cmlfcGFydHNbJ3Bhc3MnXSkgPyAnOicgOiAnJykKICAgICAgICAgICAgICAuICR0aGlzLT51cmlfcGFydHNbJ3Bhc3MnXSAuICghZW1wdHkoJHRoaXMtPnVyaV9wYXJ0c1sndXNlciddKSA/ICdAJyA6ICcnKQoJCQkgIC4gJHRoaXMtPnVyaV9wYXJ0c1snaG9zdCddOwoJCQkgIAoJCWlmICgJJHRoaXMtPnVyaV9wYXJ0c1sncG9ydCddIAoJCQkmJgkkdGhpcy0+dXJpX3BhcnRzWydwb3J0J10gIT0gJHRoaXMtPmRlZmF1bHRQb3J0Rm9yU2NoZW1lKCR0aGlzLT51cmlfcGFydHNbJ3NjaGVtZSddKSkKCQl7CgkJCSR1cmwgLj0gJzonLiR0aGlzLT51cmlfcGFydHNbJ3BvcnQnXTsKCQl9CgkJaWYgKCFlbXB0eSgkdGhpcy0+dXJpX3BhcnRzWydwYXRoJ10pKQoJCXsKCQkJJHVybCAuPSAkdGhpcy0+dXJpX3BhcnRzWydwYXRoJ107CgkJfQoJCXJldHVybiAkdXJsOwoJfQoJCgkKCS8qKgoJICogR2V0IGEgcGFyYW1ldGVyLCB2YWx1ZSBpcyBhbHdheXMgdXJsZW5jb2RlZAoJICogCgkgKiBAcGFyYW0gc3RyaW5nCW5hbWUKCSAqIEBwYXJhbSBib29sZWFuCXVybGRlY29kZQlzZXQgdG8gdHJ1ZSB0byBkZWNvZGUgdGhlIHZhbHVlIHVwb24gcmV0dXJuCgkgKiBAcmV0dXJuIHN0cmluZyB2YWx1ZQkJZmFsc2Ugd2hlbiBub3QgZm91bmQKCSAqLwoJZnVuY3Rpb24gZ2V0UGFyYW0gKCAkbmFtZSwgJHVybGRlY29kZSA9IGZhbHNlICkKCXsKCQlpZiAoaXNzZXQoJHRoaXMtPnBhcmFtWyRuYW1lXSkpCgkJewoJCQkkcyA9ICR0aGlzLT5wYXJhbVskbmFtZV07CgkJfQoJCWVsc2UgaWYgKGlzc2V0KCR0aGlzLT5wYXJhbVskdGhpcy0+dXJsZW5jb2RlKCRuYW1lKV0pKQoJCXsKCQkJJHMgPSAkdGhpcy0+cGFyYW1bJHRoaXMtPnVybGVuY29kZSgkbmFtZSldOwoJCX0KCQllbHNlCgkJewoJCQkkcyA9IGZhbHNlOwoJCX0KCQlpZiAoIWVtcHR5KCRzKSAmJiAkdXJsZGVjb2RlKQoJCXsKCQkJaWYgKGlzX2FycmF5KCRzKSkKCQkJewoJCQkJJHMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsJ3VybGRlY29kZScpLCAkcyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkcyA9ICR0aGlzLT51cmxkZWNvZGUoJHMpOwoJCQl9CgkJfQoJCXJldHVybiAkczsKCX0KCgkvKioKCSAqIFNldCBhIHBhcmFtZXRlcgoJICogCgkgKiBAcGFyYW0gc3RyaW5nCW5hbWUKCSAqIEBwYXJhbSBzdHJpbmcJdmFsdWUKCSAqIEBwYXJhbSBib29sZWFuCWVuY29kZWQJc2V0IHRvIHRydWUgd2hlbiB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IGVuY29kZWQKCSAqLwoJZnVuY3Rpb24gc2V0UGFyYW0gKCAkbmFtZSwgJHZhbHVlLCAkZW5jb2RlZCA9IGZhbHNlICkKCXsKCQlpZiAoISRlbmNvZGVkKQoJCXsKCQkJJG5hbWVfZW5jb2RlZCA9ICR0aGlzLT51cmxlbmNvZGUoJG5hbWUpOwoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkJewoJCQkJZm9yZWFjaCAoJHZhbHVlIGFzICR2KQoJCQkJewoJCQkJCSR0aGlzLT5wYXJhbVskbmFtZV9lbmNvZGVkXVtdID0gJHRoaXMtPnVybGVuY29kZSgkdik7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+cGFyYW1bJG5hbWVfZW5jb2RlZF0gPSAkdGhpcy0+dXJsZW5jb2RlKCR2YWx1ZSk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnBhcmFtWyRuYW1lXSA9ICR2YWx1ZTsKCQl9Cgl9CgoKCS8qKgoJICogUmUtZW5jb2RlIGFsbCBwYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgZW5jb2RlZCB1c2luZyBSRkMzOTg2LgoJICogVXBkYXRlcyB0aGUgJHRoaXMtPnBhcmFtIGF0dHJpYnV0ZS4KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHRyYW5zY29kZVBhcmFtcyAoKQoJewoJCSRwYXJhbXMgICAgICA9ICR0aGlzLT5wYXJhbTsKCQkkdGhpcy0+cGFyYW0gPSBhcnJheSgpOwoJCQoJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJG5hbWU9PiR2YWx1ZSkKCQl7CgkJCWlmIChpc19hcnJheSgkdmFsdWUpKQoJCQl7CgkJCQkkdGhpcy0+cGFyYW1bJHRoaXMtPnVybHRyYW5zY29kZSgkbmFtZSldID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCd1cmx0cmFuc2NvZGUnKSwgJHZhbHVlKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5wYXJhbVskdGhpcy0+dXJsdHJhbnNjb2RlKCRuYW1lKV0gPSAkdGhpcy0+dXJsdHJhbnNjb2RlKCR2YWx1ZSk7CgkJCX0KCQl9Cgl9CgoKCgkvKioKCSAqIFJldHVybiB0aGUgYm9keSBvZiB0aGUgT0F1dGggcmVxdWVzdC4KCSAqIAoJICogQHJldHVybiBzdHJpbmcJCW51bGwgd2hlbiBubyBib2R5CgkgKi8KCWZ1bmN0aW9uIGdldEJvZHkgKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmJvZHk7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBib2R5IG9mIHRoZSBPQXV0aCByZXF1ZXN0LgoJICogCgkgKiBAcmV0dXJuIHN0cmluZwkJbnVsbCB3aGVuIG5vIGJvZHkKCSAqLwoJZnVuY3Rpb24gc2V0Qm9keSAoICRib2R5ICkKCXsKCQkkdGhpcy0+Ym9keSA9ICRib2R5OwoJfQoKCgkvKioKCSAqIFBhcnNlIHRoZSB1cmkgaW50byBpdHMgcGFydHMuICBGaWxsIGluIHRoZSBtaXNzaW5nIHBhcnRzLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nICRwYXJhbWV0ZXJzICBvcHRpb25hbCBleHRyYSBwYXJhbWV0ZXJzIChmcm9tIGVnIHRoZSBodHRwIHBvc3QpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZVVyaSAoICRwYXJhbWV0ZXJzICkKCXsKCQkkcHMgPSBAcGFyc2VfdXJsKCR0aGlzLT51cmkpOwoKCQkvLyBHZXQgdGhlIGN1cnJlbnQvcmVxdWVzdGVkIG1ldGhvZAoJCSRwc1snc2NoZW1lJ10gPSBzdHJ0b2xvd2VyKCRwc1snc2NoZW1lJ10pOwoKCQkvLyBHZXQgdGhlIGN1cnJlbnQvcmVxdWVzdGVkIGhvc3QKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJ0b2xvd2VyJykpCgkJCSRwc1snaG9zdCddID0gbWJfc3RydG9sb3dlcigkcHNbJ2hvc3QnXSk7CgkJZWxzZQoJCQkkcHNbJ2hvc3QnXSA9IHN0cnRvbG93ZXIoJHBzWydob3N0J10pOwoJCQkKCQlpZiAoIXByZWdfbWF0Y2goJy9eW2EtejAtOVwuXC1dKyQvJywgJHBzWydob3N0J10pKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5zdXBwb3J0ZWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUnKTsKCQl9CgoJCS8vIEdldCB0aGUgcG9ydCB3ZSBhcmUgdGFsa2luZyBvbgoJCWlmIChlbXB0eSgkcHNbJ3BvcnQnXSkpCgkJewoJCQkkcHNbJ3BvcnQnXSA9ICR0aGlzLT5kZWZhdWx0UG9ydEZvclNjaGVtZSgkcHNbJ3NjaGVtZSddKTsKCQl9CgkJCgkJaWYgKGVtcHR5KCRwc1sndXNlciddKSkKCQl7CgkJCSRwc1sndXNlciddID0gJyc7CgkJfQoJCWlmIChlbXB0eSgkcHNbJ3Bhc3MnXSkpCgkJewoJCQkkcHNbJ3Bhc3MnXSA9ICcnOwoJCX0KCQlpZiAoZW1wdHkoJHBzWydwYXRoJ10pKQoJCXsKCQkJJHBzWydwYXRoJ10gPSAnLyc7CgkJfQoJCWlmIChlbXB0eSgkcHNbJ3F1ZXJ5J10pKQoJCXsKCQkJJHBzWydxdWVyeSddID0gJyc7CgkJfQoJCWlmIChlbXB0eSgkcHNbJ2ZyYWdtZW50J10pKQoJCXsKCQkJJHBzWydmcmFnbWVudCddID0gJyc7CgkJfQoKCQkvLyBOb3cgYWxsIGlzIGNvbXBsZXRlIC0gcGFyc2UgYWxsIHBhcmFtZXRlcnMKCQlmb3JlYWNoIChhcnJheSgkcHNbJ3F1ZXJ5J10sICRwYXJhbWV0ZXJzKSBhcyAkcGFyYW1zKQoJCXsKCQkJaWYgKHN0cmxlbigkcGFyYW1zKSA+IDApCgkJCXsKCQkJCSRwYXJhbXMgPSBleHBsb2RlKCcmJywgJHBhcmFtcyk7CgkJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwKQoJCQkJewoJCQkJCUBsaXN0KCRuYW1lLCAkdmFsdWUpID0gZXhwbG9kZSgnPScsICRwLCAyKTsKCQkJCQlpZiAoIXN0cmxlbigkbmFtZSkpIAoJCQkJCXsKCQkJCQkJY29udGludWU7CgkJCQkJfQoKCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHRoaXMtPnBhcmFtKSkgCgkJCQkJewoJCQkJCQlpZiAoaXNfYXJyYXkoJHRoaXMtPnBhcmFtWyRuYW1lXSkpCgkJCQkJCQkkdGhpcy0+cGFyYW1bJG5hbWVdW10gPSAkdmFsdWU7CgkJCQkJCWVsc2UKCQkJCQkJCSR0aGlzLT5wYXJhbVskbmFtZV0gPSBhcnJheSgkdGhpcy0+cGFyYW1bJG5hbWVdLCAkdmFsdWUpOwoJCQkJCX0KCQkJCQllbHNlIAoJCQkJCXsKCQkJCQkJJHRoaXMtPnBhcmFtWyRuYW1lXSAgPSAkdmFsdWU7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCSR0aGlzLT51cmlfcGFydHMgPSAkcHM7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBkZWZhdWx0IHBvcnQgZm9yIGEgc2NoZW1lCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc2NoZW1lCgkgKiBAcmV0dXJuIGludAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZGVmYXVsdFBvcnRGb3JTY2hlbWUgKCAkc2NoZW1lICkKCXsKCQlzd2l0Y2ggKCRzY2hlbWUpCgkJewoJCWNhc2UgJ2h0dHAnOglyZXR1cm4gODA7CgkJY2FzZSAnaHR0cHMnOglyZXR1cm4gNDQzOwoJCWRlZmF1bHQ6CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1Vuc3VwcG9ydGVkIHNjaGVtZSB0eXBlLCBleHBlY3RlZCBodHRwIG9yIGh0dHBzLCBnb3QgIicuJHNjaGVtZS4nIicpOwoJCQlicmVhazsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBFbmNvZGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBSRkMzOTg2CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcwoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJZnVuY3Rpb24gdXJsZW5jb2RlICggJHMgKQoJewoJCWlmICgkcyA9PT0gZmFsc2UpCgkJewoJCQlyZXR1cm4gJHM7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiBzdHJfcmVwbGFjZSgnJTdFJywgJ34nLCByYXd1cmxlbmNvZGUoJHMpKTsKCQl9Cgl9CgkKCS8qKgoJICogRGVjb2RlIGEgc3RyaW5nIGFjY29yZGluZyB0byBSRkMzOTg2LgoJICogQWxzbyBjb3JyZWN0bHkgZGVjb2RlcyBSRkMxNzM4IHVybHMuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcwoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJZnVuY3Rpb24gdXJsZGVjb2RlICggJHMgKQoJewoJCWlmICgkcyA9PT0gZmFsc2UpCgkJewoJCQlyZXR1cm4gJHM7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiByYXd1cmxkZWNvZGUoJHMpOwoJCX0KCX0KCgkvKioKCSAqIHVybHRyYW5zY29kZSAtIG1ha2Ugc3VyZSB0aGF0IGEgdmFsdWUgaXMgZW5jb2RlZCB1c2luZyBSRkMzOTg2LgoJICogV2UgdXNlIGEgYmFzaWMgdXJsZGVjb2RlKCkgZnVuY3Rpb24gc28gdGhhdCBhbnkgdXNlIG9mICcrJyBhcyB0aGUKCSAqIGVuY29kaW5nIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIgaXMgY29ycmVjdGx5IGhhbmRsZWQuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcwoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJZnVuY3Rpb24gdXJsdHJhbnNjb2RlICggJHMgKQoJewoJCWlmICgkcyA9PT0gZmFsc2UpCgkJewoJCQlyZXR1cm4gJHM7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAkdGhpcy0+dXJsZW5jb2RlKHJhd3VybGRlY29kZSgkcykpOwoJCQkvLyByZXR1cm4gJHRoaXMtPnVybGVuY29kZSh1cmxkZWNvZGUoJHMpKTsKCQl9Cgl9CgoKCS8qKgoJICogUGFyc2UgdGhlIG9hdXRoIHBhcmFtZXRlcnMgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXJzCgkgKiBMb29rcyBmb3Igc29tZXRoaW5nIGxpa2U6CgkgKgogICAgICogQXV0aG9yaXphdGlvbjogT0F1dGggcmVhbG09Imh0dHA6Ly9waG90b3MuZXhhbXBsZS5uZXQvYXV0aG9yaXplIiwKICAgICAqICAgICAgICAgICBvYXV0aF9jb25zdW1lcl9rZXk9ImRwZjQzZjNwMmw0azNsMDMiLAogICAgICogICAgICAgICAgIG9hdXRoX3Rva2VuPSJubmNoNzM0ZDAwc2wyamRrIiwKICAgICAqICAgICAgICAgICBvYXV0aF9zaWduYXR1cmVfbWV0aG9kPSJITUFDLVNIQTEiLAogICAgICogICAgICAgICAgIG9hdXRoX3NpZ25hdHVyZT0idFIzJTJCVHk4MWxNZVlBciUyRkZpZDBrTVRZYSUyRldNJTNEIiwKICAgICAqICAgICAgICAgICBvYXV0aF90aW1lc3RhbXA9IjExOTEyNDIwOTYiLAogICAgICogICAgICAgICAgIG9hdXRoX25vbmNlPSJrbGxvOTk0MHBkOTMzM2poIiwKICAgICAqICAgICAgICAgICBvYXV0aF92ZXJzaW9uPSIxLjAiCiAgICAgKi8KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VIZWFkZXJzICgpCgl7Ci8qCgkJJHRoaXMtPmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdPQXV0aCByZWFsbT0iaHR0cDovL3Bob3Rvcy5leGFtcGxlLm5ldC9hdXRob3JpemUiLAogICAgICAgICAgICAgICAgb2F1dGhfY29uc3VtZXJfa2V5PSJkcGY0M2YzcDJsNGszbDAzIiwKICAgICAgICAgICAgICAgIG9hdXRoX3Rva2VuPSJubmNoNzM0ZDAwc2wyamRrIiwKICAgICAgICAgICAgICAgIG9hdXRoX3NpZ25hdHVyZV9tZXRob2Q9IkhNQUMtU0hBMSIsCiAgICAgICAgICAgICAgICBvYXV0aF9zaWduYXR1cmU9InRSMyUyQlR5ODFsTWVZQXIlMkZGaWQwa01UWWElMkZXTSUzRCIsCiAgICAgICAgICAgICAgICBvYXV0aF90aW1lc3RhbXA9IjExOTEyNDIwOTYiLAogICAgICAgICAgICAgICAgb2F1dGhfbm9uY2U9ImtsbG85OTQwcGQ5MzMzamgiLAogICAgICAgICAgICAgICAgb2F1dGhfdmVyc2lvbj0iMS4wIic7CiovCQkKCQlpZiAoaXNzZXQoJHRoaXMtPmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSkpCgkJewoJCQkkYXV0aCA9IHRyaW0oJHRoaXMtPmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSk7CgkJCWlmIChzdHJuY2FzZWNtcCgkYXV0aCwgJ09BdXRoJywgNCkgPT0gMCkKCQkJewoJCQkJJHZzID0gZXhwbG9kZSgnLCcsIHN1YnN0cigkYXV0aCwgNikpOwoJCQkJZm9yZWFjaCAoJHZzIGFzICR2KQoJCQkJewoJCQkJCWlmIChzdHJwb3MoJHYsICc9JykpCgkJCQkJewoJCQkJCQkkdiA9IHRyaW0oJHYpOwoJCQkJCQlsaXN0KCRuYW1lLCR2YWx1ZSkgPSBleHBsb2RlKCc9JywgJHYsIDIpOwoJCQkJCQlpZiAoIWVtcHR5KCR2YWx1ZSkgJiYgJHZhbHVlezB9ID09ICciJyAmJiBzdWJzdHIoJHZhbHVlLCAtMSkgPT0gJyInKQoJCQkJCQl7CgkJCQkJCQkkdmFsdWUgPSBzdWJzdHIoc3Vic3RyKCR2YWx1ZSwgMSksIDAsIC0xKTsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYgKHN0cmNhc2VjbXAoJG5hbWUsICdyZWFsbScpID09IDApCgkJCQkJCXsKCQkJCQkJCSR0aGlzLT5yZWFsbSA9ICR2YWx1ZTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSR0aGlzLT5wYXJhbVskbmFtZV0gPSAkdmFsdWU7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgoKCS8qKgoJICogRmV0Y2ggdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgY3VycmVudCByZXF1ZXN0CgkgKiAKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gZ2V0UmVxdWVzdENvbnRlbnRUeXBlICgpCgl7CgkJJGNvbnRlbnRfdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOwoJCWlmICghZW1wdHkoJF9TRVJWRVIpICYmIGFycmF5X2tleV9leGlzdHMoJ0NPTlRFTlRfVFlQRScsICRfU0VSVkVSKSkKCQl7CgkJCWxpc3QoJGNvbnRlbnRfdHlwZSkgPSBleHBsb2RlKCc7JywgJF9TRVJWRVJbJ0NPTlRFTlRfVFlQRSddKTsKCQl9CgkJcmV0dXJuIHRyaW0oJGNvbnRlbnRfdHlwZSk7Cgl9CgoKCS8qKgoJICogR2V0IHRoZSBib2R5IG9mIGEgUE9TVCBvciBQVVQuCgkgKiAKCSAqIFVzZWQgZm9yIGZldGNoaW5nIHRoZSBwb3N0IHBhcmFtZXRlcnMgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSBzaWduYXR1cmUuCgkgKiAKCSAqIEByZXR1cm4gc3RyaW5nCQludWxsIHdoZW4gbm8gYm9keSBwcmVzZW50IChvciB3cm9uZyBjb250ZW50IHR5cGUgZm9yIGJvZHkpCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gZ2V0UmVxdWVzdEJvZHkgKCkKCXsKCQkkYm9keSA9IG51bGw7CgkJaWYgKCR0aGlzLT5tZXRob2QgPT0gJ1BPU1QnIHx8ICR0aGlzLT5tZXRob2QgPT0gJ1BVVCcpCgkJewoJCQkkYm9keSA9ICcnOwoJCQkkZmggICA9IEBmb3BlbigncGhwOi8vaW5wdXQnLCAncicpOwoJCQlpZiAoJGZoKQoJCQl7CgkJCQl3aGlsZSAoIWZlb2YoJGZoKSkKCQkJCXsKCQkJCQkkcyA9IGZyZWFkKCRmaCwgMTAyNCk7CgkJCQkJaWYgKGlzX3N0cmluZygkcykpCgkJCQkJewoJCQkJCQkkYm9keSAuPSAkczsKCQkJCQl9CgkJCQl9CgkJCQlmY2xvc2UoJGZoKTsKCQkJfQoJCX0KCQlyZXR1cm4gJGJvZHk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGJvZHkgb2YgYSBQT1NUIHdpdGggbXVsdGlwYXJ0L2Zvcm0tZGF0YSBieSBFZGlzb24gdHNhaSBvbiAxNjo1MiAyMDEwLzA5LzE2CgkgKgoJICogVXNlZCBmb3IgZmV0Y2hpbmcgdGhlIHBvc3QgcGFyYW1ldGVycyBhbmQgdG8gY2FsY3VsYXRlIHRoZSBib2R5IHNpZ25hdHVyZS4KCSAqCgkgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgICAgIG51bGwgd2hlbiBubyBib2R5IHByZXNlbnQgKG9yIHdyb25nIGNvbnRlbnQgdHlwZSBmb3IgYm9keSkKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRSZXF1ZXN0Qm9keU9mTXVsdGlwYXJ0KCkKCXsKCQkkYm9keSA9IG51bGw7CgkJaWYgKCR0aGlzLT5tZXRob2QgPT0gJ1BPU1QnKQoJCXsKCQkJJGJvZHkgPSAnJzsKCQkJaWYgKGlzX2FycmF5KCRfUE9TVCkgJiYgY291bnQoJF9QT1NUKSA+IDEpIAoJCQl7CgkJCQlmb3JlYWNoICgkX1BPU1QgQVMgJGsgPT4gJHYpIHsKCQkJCQkkYm9keSAuPSAkayAuICc9JyAuICR0aGlzLT51cmxlbmNvZGUoJHYpIC4gJyYnOwoJCQkJfSAjZW5kIGZvcmVhY2gKCQkJCWlmKHN1YnN0cigkYm9keSwtMSkgPT0gJyYnKQoJCQkJewoJCQkJCSRib2R5ID0gc3Vic3RyKCRib2R5LCAwLCBzdHJsZW4oJGJvZHkpLTEpOwoJCQkJfSAjZW5kIGlmCgkJCX0gI2VuZCBpZgoJCX0gI2VuZCBpZgoKCQlyZXR1cm4gJGJvZHk7Cgl9CgkKCQoJLyoqCgkgKiBTaW1wbGUgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIHJlZGlyZWN0IChHRVQpLgoJICogUmVkaXJlY3RzIHRoZSBVc2VyLUFnZW50LCBkb2VzIG5vdCByZXR1cm4uCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdXJpCgkgKiBAcGFyYW0gYXJyYXkgcGFyYW1zCQlwYXJhbWV0ZXJzLCB1cmxlbmNvZGVkCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHJlZGlyZWN0IHVyaSBpcyBpbGxlZ2FsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZWRpcmVjdCAoICR1cmksICRwYXJhbXMgKQoJewoJCWlmICghZW1wdHkoJHBhcmFtcykpCgkJewoJCQkkcSA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJG5hbWU9PiR2YWx1ZSkKCQkJewoJCQkJJHFbXSA9ICRuYW1lLic9Jy4kdmFsdWU7CgkJCX0KCQkJJHFfcyA9IGltcGxvZGUoJyYnLCAkcSk7CgkJCQoJCQlpZiAoc3RycG9zKCR1cmksICc/JykpCgkJCXsKCQkJCSR1cmkgLj0gJyYnLiRxX3M7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdXJpIC49ICc/Jy4kcV9zOwoJCQl9CgkJfQoJCQoJCS8vIHNpbXBsZSBzZWN1cml0eSAtIG11bHRpbGluZSBsb2NhdGlvbiBoZWFkZXJzIGNhbiBpbmplY3QgYWxsIGtpbmRzIG9mIGV4dHJhcwoJCSR1cmkgPSBwcmVnX3JlcGxhY2UoJy9ccy8nLCAnJTIwJywgJHVyaSk7CgkJaWYgKHN0cm5jYXNlY21wKCR1cmksICdodHRwOi8vJywgNykgJiYgc3RybmNhc2VjbXAoJHVyaSwgJ2h0dHBzOi8vJywgOCkpCgkJewoJCQlpZiAoc3RycG9zKCR1cmksICc6Ly8nKSkKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignSWxsZWdhbCBwcm90b2NvbCBpbiByZWRpcmVjdCB1cmkgJy4kdXJpKTsKCQkJfQoJCQkkdXJpID0gJ2h0dHA6Ly8nLiR1cmk7CgkJfQoJCQoJCWhlYWRlcignSFRUUC8xLjEgMzAyIEZvdW5kJyk7CgkJaGVhZGVyKCdMb2NhdGlvbjogJy4kdXJpKTsKCQllY2hvICcnOwoJCWV4aXQoKTsKCX0KfQoKCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthRequester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQZXJmb3JtIGEgc2lnbmVkIE9BdXRoIHJlcXVlc3Qgd2l0aCBhIEdFVCwgUE9TVCwgUFVUIG9yIERFTEVURSBvcGVyYXRpb24uCiAqIAogKiBAdmVyc2lvbiAkSWQ6IE9BdXRoUmVxdWVzdGVyLnBocCAxNzQgMjAxMC0xMS0yNCAxNToxNTo0MVogYnJ1bm9iZ0Bjb3JvbGxhcml1bS5jb20gJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiBAZGF0ZSAgTm92IDIwLCAyMDA3IDE6NDE6MzggUE0KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9PQXV0aFJlcXVlc3RTaWduZXIucGhwJzsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9ib2R5L09BdXRoQm9keUNvbnRlbnREaXNwb3NpdGlvbi5waHAnOwoKCmNsYXNzIE9BdXRoUmVxdWVzdGVyIGV4dGVuZHMgT0F1dGhSZXF1ZXN0U2lnbmVyCnsKCXByb3RlY3RlZCAkZmlsZXM7CgoJLyoqCgkgKiBDb25zdHJ1Y3QgYSBuZXcgcmVxdWVzdCBzaWduZXIuICBQZXJmb3JtIHRoZSByZXF1ZXN0IHdpdGggdGhlIGRvUmVxdWVzdCgpIG1ldGhvZCBiZWxvdy4KCSAqIAoJICogQSByZXF1ZXN0IGNhbiBoYXZlIGVpdGhlciBvbmUgZmlsZSBvciBhIGJvZHksIG5vdCBib3RoLiAKCSAqIAoJICogVGhlIGZpbGVzIGFycmF5IGNvbnNpc3RzIG9mIGFycmF5czoKCSAqIC0gZmlsZQkJCXRoZSBmaWxlbmFtZS9wYXRoIGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSBQT1NUL1BVVAoJICogLSBkYXRhCQkJZGF0YSBmb3IgdGhlIGZpbGUsIG9taXQgd2hlbiB5b3UgaGF2ZSBhIGZpbGUKCSAqIC0gbWltZQkJCWNvbnRlbnQtdHlwZSBvZiB0aGUgZmlsZQoJICogLSBmaWxlbmFtZQkJZmlsZW5hbWUgZm9yIGNvbnRlbnQgZGlzcG9zaXRpb24gaGVhZGVyCgkgKiAKCSAqIFdoZW4gT0F1dGggKGFuZCBQSFApIGNhbiBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGEgdGhlbiB3ZSBjYW4gaGFuZGxlIG1vcmUgdGhhbiBvbmUgZmlsZS4KCSAqIEZvciBub3cgbWF4IG9uZSBmaWxlLCB3aXRoIGFsbCB0aGUgcGFyYW1zIGVuY29kZWQgaW4gdGhlIHF1ZXJ5IHN0cmluZy4KCSAqIAoJICogQHBhcmFtIHN0cmluZyByZXF1ZXN0CgkgKiBAcGFyYW0gc3RyaW5nIG1ldGhvZAkJaHR0cCBtZXRob2QuICBHRVQsIFBVVCwgUE9TVCBldGMuCgkgKiBAcGFyYW0gYXJyYXkgcGFyYW1zCQluYW1lPT52YWx1ZSBhcnJheSB3aXRoIHJlcXVlc3QgcGFyYW1ldGVycwoJICogQHBhcmFtIHN0cmluZyBib2R5CQlvcHRpb25hbCBib2R5IHRvIHNlbmQKCSAqIEBwYXJhbSBhcnJheSBmaWxlcwkJb3B0aW9uYWwgZmlsZXMgdG8gc2VuZCAobWF4IDEgdGlsbCBPQXV0aCBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGEgcG9zdHMpCgkgKi8KCWZ1bmN0aW9uIF9fY29uc3RydWN0ICggJHJlcXVlc3QsICRtZXRob2QgPSBudWxsLCAkcGFyYW1zID0gbnVsbCwgJGJvZHkgPSBudWxsLCAkZmlsZXMgPSBudWxsICkKCXsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRyZXF1ZXN0LCAkbWV0aG9kLCAkcGFyYW1zLCAkYm9keSk7CgoJCS8vIFdoZW4gdGhlcmUgYXJlIGZpbGVzLCB0aGVuIHdlIGNhbiBjb25zdHJ1Y3QgYSBQT1NUIHdpdGggYSBzaW5nbGUgZmlsZQoJCWlmICghZW1wdHkoJGZpbGVzKSkKCQl7CgkJCSRlbXB0eSA9IHRydWU7CgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZikKCQkJewoJCQkJJGVtcHR5ID0gJGVtcHR5ICYmIGVtcHR5KCRmWydmaWxlJ10pICYmICFpc3NldCgkZlsnZGF0YSddKTsKCQkJfQoJCQkKCQkJaWYgKCEkZW1wdHkpCgkJCXsKCQkJCWlmICghaXNfbnVsbCgkYm9keSkpCgkJCQl7CgkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignV2hlbiBzZW5kaW5nIGZpbGVzLCB5b3UgY2FuXCd0IHNlbmQgYSBib2R5IGFzIHdlbGwuJyk7CgkJCQl9CgkJCQkkdGhpcy0+ZmlsZXMgPSAkZmlsZXM7CgkJCX0KCQl9Cgl9CgoKCS8qKgoJICogUGVyZm9ybSB0aGUgcmVxdWVzdCwgcmV0dXJucyB0aGUgcmVzcG9uc2UgY29kZSwgaGVhZGVycyBhbmQgYm9keS4KCSAqIAoJICogQHBhcmFtIGludCB1c3JfaWQJCQlvcHRpb25hbCB1c2VyIGlkIGZvciB3aGljaCB3ZSBtYWtlIHRoZSByZXF1ZXN0CgkgKiBAcGFyYW0gYXJyYXkgY3VybF9vcHRpb25zCW9wdGlvbmFsIGV4dHJhIG9wdGlvbnMgZm9yIGN1cmwgcmVxdWVzdAoJICogQHBhcmFtIGFycmF5IG9wdGlvbnMJCQlvcHRpb25zIGxpa2UgbmFtZSBhbmQgdG9rZW5fdHRsCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIGF1dGhlbnRpY2F0aW9uIG5vdCBhY2NlcHRlZAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBzaWduaW5nIHdhcyBub3QgcG9zc2libGUKCSAqIEByZXR1cm4gYXJyYXkgKGNvZGU9PmludCwgaGVhZGVycz0+YXJyYXkoKSwgYm9keT0+c3RyaW5nKQoJICovCglmdW5jdGlvbiBkb1JlcXVlc3QgKCAkdXNyX2lkID0gMCwgJGN1cmxfb3B0aW9ucyA9IGFycmF5KCksICRvcHRpb25zID0gYXJyYXkoKSApCgl7CgkJJG5hbWUgPSBpc3NldCgkb3B0aW9uc1snbmFtZSddKSA/ICRvcHRpb25zWyduYW1lJ10gOiAnJzsKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSkKCQl7CgkJCSR0aGlzLT5zZXRQYXJhbSgneG9hdXRoX3Rva2VuX3R0bCcsIGludHZhbCgkb3B0aW9uc1sndG9rZW5fdHRsJ10pKTsKCQl9CgoJCWlmICghZW1wdHkoJHRoaXMtPmZpbGVzKSkKCQl7CgkJCS8vIEF0IHRoZSBtb21lbnQgT0F1dGggZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhLCBzbyB0cnkgdG8gZW5jb2RlCgkJCS8vIHRoZSBzdXBwbGllZCBmaWxlIChvciBkYXRhKSBhcyB0aGUgcmVxdWVzdCBib2R5IGFuZCBhZGQgYSBjb250ZW50LWRpc3Bvc2l0aW9uIGhlYWRlci4KCQkJbGlzdCgkZXh0cmFfaGVhZGVycywgJGJvZHkpID0gT0F1dGhCb2R5Q29udGVudERpc3Bvc2l0aW9uOjplbmNvZGVCb2R5KCR0aGlzLT5maWxlcyk7CgkJCSR0aGlzLT5zZXRCb2R5KCRib2R5KTsKCQkJJGN1cmxfb3B0aW9ucyA9ICR0aGlzLT5wcmVwYXJlQ3VybE9wdGlvbnMoJGN1cmxfb3B0aW9ucywgJGV4dHJhX2hlYWRlcnMpOwoJCX0KCQkkdGhpcy0+c2lnbigkdXNyX2lkLCBudWxsLCAkbmFtZSk7CgkJJHRleHQgICA9ICR0aGlzLT5jdXJsX3JhdygkY3VybF9vcHRpb25zKTsKCQkkcmVzdWx0ID0gJHRoaXMtPmN1cmxfcGFyc2UoJHRleHQpOwkKCQlpZiAoJHJlc3VsdFsnY29kZSddID49IDQwMCkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1JlcXVlc3QgZmFpbGVkIHdpdGggY29kZSAnIC4gJHJlc3VsdFsnY29kZSddIC4gJzogJyAuICRyZXN1bHRbJ2JvZHknXSk7CgkJfQoKCQkvLyBSZWNvcmQgdGhlIHRva2VuIHRpbWUgdG8gbGl2ZSBmb3IgdGhpcyBzZXJ2ZXIgYWNjZXNzIHRva2VuLCBpbW1lZGlhdGUgZGVsZXRlIGlmZiB0dGwgPD0gMAoJCS8vIE9ubHkgZG9uZSBvbiBhIHN1Y2Nlc2Z1bCByZXF1ZXN0LgkKCQkkdG9rZW5fdHRsID0gJHRoaXMtPmdldFBhcmFtKCd4b2F1dGhfdG9rZW5fdHRsJywgZmFsc2UpOwoJCWlmIChpc19udW1lcmljKCR0b2tlbl90dGwpKQoJCXsKCQkJJHRoaXMtPnN0b3JlLT5zZXRTZXJ2ZXJUb2tlblR0bCgkdGhpcy0+Z2V0UGFyYW0oJ29hdXRoX2NvbnN1bWVyX2tleScsdHJ1ZSksICR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfdG9rZW4nLHRydWUpLCAkdG9rZW5fdHRsKTsKCQl9CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCQoJLyoqCgkgKiBSZXF1ZXN0IGEgcmVxdWVzdCB0b2tlbiBmcm9tIHRoZSBzaXRlIGJlbG9uZ2luZyB0byBjb25zdW1lcl9rZXkKCSAqIAoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKCSAqIEBwYXJhbSBpbnQgdXNyX2lkCgkgKiBAcGFyYW0gYXJyYXkgcGFyYW1zIChvcHRpb25hbCkgZXh0cmEgYXJndW1lbnRzIGZvciB3aGVuIHJlcXVlc3RpbmcgdGhlIHJlcXVlc3QgdG9rZW4KCSAqIEBwYXJhbSBzdHJpbmcgbWV0aG9kIChvcHRpb25hbCkgY2hhbmdlIHRoZSBtZXRob2Qgb2YgdGhlIHJlcXVlc3QsIGRlZmF1bHRzIHRvIFBPU1QgKGFzIGl0IHNob3VsZCBiZSkKCSAqIEBwYXJhbSBhcnJheSBvcHRpb25zIChvcHRpb25hbCkgb3B0aW9ucyBsaWtlIG5hbWUgYW5kIHRva2VuX3R0bAoJICogQHBhcmFtIGFycmF5IGN1cmxfb3B0aW9ucwlvcHRpb25hbCBleHRyYSBvcHRpb25zIGZvciBjdXJsIHJlcXVlc3QKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm8ga2V5IGNvdWxkIGJlIGZldGNoZWQKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm8gc2VydmVyIHdpdGggY29uc3VtZXJfa2V5IHJlZ2lzdGVyZWQKCSAqIEByZXR1cm4gYXJyYXkgKGF1dGhvcml6ZV91cmksIHRva2VuKQoJICovCglzdGF0aWMgZnVuY3Rpb24gcmVxdWVzdFJlcXVlc3RUb2tlbiAoICRjb25zdW1lcl9rZXksICR1c3JfaWQsICRwYXJhbXMgPSBudWxsLCAkbWV0aG9kID0gJ1BPU1QnLCAkb3B0aW9ucyA9IGFycmF5KCksICRjdXJsX29wdGlvbnMgPSBhcnJheSgpKQoJewoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6c3RhcnQoKTsKCgkJaWYgKGlzc2V0KCRvcHRpb25zWyd0b2tlbl90dGwnXSkgJiYgaXNfbnVtZXJpYygkb3B0aW9uc1sndG9rZW5fdHRsJ10pKQoJCXsKCQkJJHBhcmFtc1sneG9hdXRoX3Rva2VuX3R0bCddID0gaW50dmFsKCRvcHRpb25zWyd0b2tlbl90dGwnXSk7CgkJfQoKCQkkc3RvcmUJPSBPQXV0aFN0b3JlOjppbnN0YW5jZSgpOwoJCSRyCQk9ICRzdG9yZS0+Z2V0U2VydmVyKCRjb25zdW1lcl9rZXksICR1c3JfaWQpOwoJCSR1cmkgCT0gJHJbJ3JlcXVlc3RfdG9rZW5fdXJpJ107CgoJCSRvYXV0aCAJPSBuZXcgT0F1dGhSZXF1ZXN0ZXIoJHVyaSwgJG1ldGhvZCwgJHBhcmFtcyk7CgkJJG9hdXRoLT5zaWduKCR1c3JfaWQsICRyLCAnJywgJ3JlcXVlc3RUb2tlbicpOwoJCSR0ZXh0CT0gJG9hdXRoLT5jdXJsX3JhdygkY3VybF9vcHRpb25zKTsKCgkJaWYgKGVtcHR5KCR0ZXh0KSkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIGFuc3dlciBmcm9tIHRoZSBzZXJ2ZXIgIicuJHVyaS4nIiB3aGlsZSByZXF1ZXN0aW5nIGEgcmVxdWVzdCB0b2tlbicpOwoJCX0KCQkkZGF0YQk9ICRvYXV0aC0+Y3VybF9wYXJzZSgkdGV4dCk7CgkJaWYgKCRkYXRhWydjb2RlJ10gIT0gMjAwKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5leHBlY3RlZCByZXN1bHQgZnJvbSB0aGUgc2VydmVyICInLiR1cmkuJyIgKCcuJGRhdGFbJ2NvZGUnXS4nKSB3aGlsZSByZXF1ZXN0aW5nIGEgcmVxdWVzdCB0b2tlbicpOwoJCX0KCQkkdG9rZW4gID0gYXJyYXkoKTsKCQkkcGFyYW1zID0gZXhwbG9kZSgnJicsICRkYXRhWydib2R5J10pOwoJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJHApCgkJewoJCQlAbGlzdCgkbmFtZSwgJHZhbHVlKSA9IGV4cGxvZGUoJz0nLCAkcCwgMik7CgkJCSR0b2tlblskbmFtZV0gPSAkb2F1dGgtPnVybGRlY29kZSgkdmFsdWUpOwoJCX0KCQkKCQlpZiAoIWVtcHR5KCR0b2tlblsnb2F1dGhfdG9rZW4nXSkgJiYgIWVtcHR5KCR0b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10pKQoJCXsKCQkJJG9wdHMgPSBhcnJheSgpOwoJCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ25hbWUnXSkpCgkJCXsKCQkJCSRvcHRzWyduYW1lJ10gPSAkb3B0aW9uc1snbmFtZSddOwoJCQl9CgkJCWlmIChpc3NldCgkdG9rZW5bJ3hvYXV0aF90b2tlbl90dGwnXSkpCgkJCXsKCQkJCSRvcHRzWyd0b2tlbl90dGwnXSA9ICR0b2tlblsneG9hdXRoX3Rva2VuX3R0bCddOwoJCQl9CgkJCSRzdG9yZS0+YWRkU2VydmVyVG9rZW4oJGNvbnN1bWVyX2tleSwgJ3JlcXVlc3QnLCAkdG9rZW5bJ29hdXRoX3Rva2VuJ10sICR0b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10sICR1c3JfaWQsICRvcHRzKTsKCQl9CgkJZWxzZQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHNlcnZlciAiJy4kdXJpLiciIGRpZCBub3QgcmV0dXJuIHRoZSBvYXV0aF90b2tlbiBvciB0aGUgb2F1dGhfdG9rZW5fc2VjcmV0Jyk7CgkJfQoKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OmZsdXNoKCk7CgoJCS8vIE5vdyB3ZSBjYW4gZGlyZWN0IGEgYnJvd3NlciB0byB0aGUgYXV0aG9yaXplX3VyaQoJCXJldHVybiBhcnJheSgKCQkJCQknYXV0aG9yaXplX3VyaScgPT4gJHJbJ2F1dGhvcml6ZV91cmknXSwKCQkJCQkndG9rZW4nCQkJPT4gJHRva2VuWydvYXV0aF90b2tlbiddCgkJCQkpOwoJfQoKCgkvKioKCSAqIFJlcXVlc3QgYW4gYWNjZXNzIHRva2VuIGZyb20gdGhlIHNpdGUgYmVsb25naW5nIHRvIGNvbnN1bWVyX2tleS4KCSAqIEJlZm9yZSB0aGlzIHdlIGdvdCBhbiByZXF1ZXN0IHRva2VuLCBub3cgd2Ugd2FudCB0byBleGNoYW5nZSBpdCBmb3IKCSAqIGFuIGFjY2VzcyB0b2tlbi4KCSAqIAoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KCSAqIEBwYXJhbSBpbnQgdXNyX2lkCQl1c2VyIHJlcXVlc3RpbmcgdGhlIGFjY2VzcyB0b2tlbgoJICogQHBhcmFtIHN0cmluZyBtZXRob2QgKG9wdGlvbmFsKSBjaGFuZ2UgdGhlIG1ldGhvZCBvZiB0aGUgcmVxdWVzdCwgZGVmYXVsdHMgdG8gUE9TVCAoYXMgaXQgc2hvdWxkIGJlKQoJICogQHBhcmFtIGFycmF5IG9wdGlvbnMgKG9wdGlvbmFsKSBleHRyYSBvcHRpb25zIGZvciByZXF1ZXN0LCBlZyB0b2tlbl90dGwKCSAqIEBwYXJhbSBhcnJheSBjdXJsX29wdGlvbnMJb3B0aW9uYWwgZXh0cmEgb3B0aW9ucyBmb3IgY3VybCByZXF1ZXN0CgkgKiAgCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIG5vIGtleSBjb3VsZCBiZSBmZXRjaGVkCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIG5vIHNlcnZlciB3aXRoIGNvbnN1bWVyX2tleSByZWdpc3RlcmVkCgkgKi8KCXN0YXRpYyBmdW5jdGlvbiByZXF1ZXN0QWNjZXNzVG9rZW4gKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR1c3JfaWQsICRtZXRob2QgPSAnUE9TVCcsICRvcHRpb25zID0gYXJyYXkoKSwgJGN1cmxfb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6c3RhcnQoKTsKCQkJCQoJCSRzdG9yZQkgICAgPSBPQXV0aFN0b3JlOjppbnN0YW5jZSgpOwoJCSRyCQkgICAgPSAkc3RvcmUtPmdldFNlcnZlclRva2VuU2VjcmV0cygkY29uc3VtZXJfa2V5LCAkdG9rZW4sICdyZXF1ZXN0JywgJHVzcl9pZCk7CgkJJHVyaSAJICAgID0gJHJbJ2FjY2Vzc190b2tlbl91cmknXTsKCQkkdG9rZW5fbmFtZQk9ICRyWyd0b2tlbl9uYW1lJ107CgkJCgkJLy8gRGVsZXRlIHRoZSBzZXJ2ZXIgcmVxdWVzdCB0b2tlbiwgdGhpcyBvbmUgd2FzIGZvciBvbmUgdXNlIG9ubHkKCQkkc3RvcmUtPmRlbGV0ZVNlcnZlclRva2VuKCRjb25zdW1lcl9rZXksICRyWyd0b2tlbiddLCAwLCB0cnVlKTsKCgkJLy8gVHJ5IHRvIGV4Y2hhbmdlIG91ciByZXF1ZXN0IHRva2VuIGZvciBhbiBhY2Nlc3MgdG9rZW4KCQkkb2F1dGggCT0gbmV3IE9BdXRoUmVxdWVzdGVyKCR1cmksICRtZXRob2QpOwoKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ29hdXRoX3ZlcmlmaWVyJ10pKSAKCQl7CgkJCSRvYXV0aC0+c2V0UGFyYW0oJ29hdXRoX3ZlcmlmaWVyJywgJG9wdGlvbnNbJ29hdXRoX3ZlcmlmaWVyJ10pOwogICAgICAgIH0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpCgkJewoJCQkkb2F1dGgtPnNldFBhcmFtKCd4b2F1dGhfdG9rZW5fdHRsJywgaW50dmFsKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpOwoJCX0KCgkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjpzZXRSZXF1ZXN0T2JqZWN0KCRvYXV0aCk7CgoJCSRvYXV0aC0+c2lnbigkdXNyX2lkLCAkciwgJycsICdhY2Nlc3NUb2tlbicpOwoJCSR0ZXh0CT0gJG9hdXRoLT5jdXJsX3JhdygkY3VybF9vcHRpb25zKTsKCQlpZiAoZW1wdHkoJHRleHQpKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gYW5zd2VyIGZyb20gdGhlIHNlcnZlciAiJy4kdXJpLiciIHdoaWxlIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuJyk7CgkJfQoJCSRkYXRhCT0gJG9hdXRoLT5jdXJsX3BhcnNlKCR0ZXh0KTsKCgkJaWYgKCRkYXRhWydjb2RlJ10gIT0gMjAwKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5leHBlY3RlZCByZXN1bHQgZnJvbSB0aGUgc2VydmVyICInLiR1cmkuJyIgKCcuJGRhdGFbJ2NvZGUnXS4nKSB3aGlsZSByZXF1ZXN0aW5nIGFuIGFjY2VzcyB0b2tlbicpOwoJCX0KCgkJJHRva2VuICA9IGFycmF5KCk7CgkJJHBhcmFtcyA9IGV4cGxvZGUoJyYnLCAkZGF0YVsnYm9keSddKTsKCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwKQoJCXsKCQkJQGxpc3QoJG5hbWUsICR2YWx1ZSkgPSBleHBsb2RlKCc9JywgJHAsIDIpOwoJCQkkdG9rZW5bJG9hdXRoLT51cmxkZWNvZGUoJG5hbWUpXSA9ICRvYXV0aC0+dXJsZGVjb2RlKCR2YWx1ZSk7CgkJfQoJCQoJCWlmICghZW1wdHkoJHRva2VuWydvYXV0aF90b2tlbiddKSAmJiAhZW1wdHkoJHRva2VuWydvYXV0aF90b2tlbl9zZWNyZXQnXSkpCgkJewoJCQkkb3B0cyAgICAgICAgID0gYXJyYXkoKTsKCQkJJG9wdHNbJ25hbWUnXSA9ICR0b2tlbl9uYW1lOwoJCQlpZiAoaXNzZXQoJHRva2VuWyd4b2F1dGhfdG9rZW5fdHRsJ10pKQoJCQl7CgkJCQkkb3B0c1sndG9rZW5fdHRsJ10gPSAkdG9rZW5bJ3hvYXV0aF90b2tlbl90dGwnXTsKCQkJfQoJCQkkc3RvcmUtPmFkZFNlcnZlclRva2VuKCRjb25zdW1lcl9rZXksICdhY2Nlc3MnLCAkdG9rZW5bJ29hdXRoX3Rva2VuJ10sICR0b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10sICR1c3JfaWQsICRvcHRzKTsKCQl9CgkJZWxzZQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHNlcnZlciAiJy4kdXJpLiciIGRpZCBub3QgcmV0dXJuIHRoZSBvYXV0aF90b2tlbiBvciB0aGUgb2F1dGhfdG9rZW5fc2VjcmV0Jyk7CgkJfQoKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OmZsdXNoKCk7Cgl9CgoKCgkvKioKCSAqIE9wZW4gYW5kIGNsb3NlIGEgY3VybCBzZXNzaW9uIHBhc3NpbmcgYWxsIHRoZSBvcHRpb25zIHRvIHRoZSBjdXJsIGxpYnMKCSAqIAoJICogQHBhcmFtIGFycmF5IG9wdHMgdGhlIGN1cmwgb3B0aW9ucy4KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gdGVtcG9yYXJ5IGZpbGUgZm9yIFBVVCBvcGVyYXRpb24gY291bGQgbm90IGJlIGNyZWF0ZWQKCSAqIEByZXR1cm4gc3RyaW5nIHRoZSByZXN1bHQgb2YgdGhlIGN1cmwgYWN0aW9uCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBjdXJsX3JhdyAoICRvcHRzID0gYXJyYXkoKSApCgl7CgkJaWYgKGlzc2V0KCRvcHRzW0NVUkxPUFRfSFRUUEhFQURFUl0pKQoJCXsKCQkJJGhlYWRlciA9ICRvcHRzW0NVUkxPUFRfSFRUUEhFQURFUl07CgkJfQoJCWVsc2UKCQl7CgkJCSRoZWFkZXIgPSBhcnJheSgpOwoJCX0KCQkKCQkkY2ggCQk9IGN1cmxfaW5pdCgpOwoJCSRtZXRob2QJCT0gJHRoaXMtPmdldE1ldGhvZCgpOwoJCSR1cmwJCT0gJHRoaXMtPmdldFJlcXVlc3RVcmwoKTsKCQkkaGVhZGVyW10JPSAkdGhpcy0+Z2V0QXV0aG9yaXphdGlvbkhlYWRlcigpOwoJCSRxdWVyeQkJPSAkdGhpcy0+Z2V0UXVlcnlTdHJpbmcoKTsKCQkkYm9keQkJPSAkdGhpcy0+Z2V0Qm9keSgpOwoKCQkkaGFzX2NvbnRlbnRfdHlwZSA9IGZhbHNlOwoJCWZvcmVhY2ggKCRoZWFkZXIgYXMgJGgpCgkJewoJCQlpZiAoc3RybmNhc2VjbXAoJGgsICdDb250ZW50LVR5cGU6JywgMTMpID09IDApCgkJCXsKCQkJCSRoYXNfY29udGVudF90eXBlID0gdHJ1ZTsKCQkJfQoJCX0KCQkKCQlpZiAoIWlzX251bGwoJGJvZHkpKQoJCXsKCQkJaWYgKCRtZXRob2QgPT0gJ1RSQUNFJykKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQSBib2R5IGNhbiBub3QgYmUgc2VudCB3aXRoIGEgVFJBQ0Ugb3BlcmF0aW9uJyk7CgkJCX0KCgkJCS8vIFBVVCBhbmQgUE9TVCBhbGxvdyBhIHJlcXVlc3QgYm9keQoJCQlpZiAoIWVtcHR5KCRxdWVyeSkpCgkJCXsKCQkJCSR1cmwgLj0gJz8nLiRxdWVyeTsKCQkJfQoKCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgcmVxdWVzdCBpcyBvawoJCQlpZiAoISRoYXNfY29udGVudF90eXBlKQoJCQl7CgkJCQkkaGVhZGVyW10gICAgICAgICA9ICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CgkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IHRydWU7CgkJCX0KCQkJCgkJCS8vIFdoZW4gUFVUdGluZywgd2UgbmVlZCB0byB1c2UgYW4gaW50ZXJtZWRpYXRlIGZpbGUgKGJlY2F1c2Ugb2YgdGhlIGN1cmwgaW1wbGVtZW50YXRpb24pCgkJCWlmICgkbWV0aG9kID09ICdQVVQnKQoJCQl7CgkJCQkvKgoJCQkJaWYgKHZlcnNpb25fY29tcGFyZShwaHB2ZXJzaW9uKCksICc1LjIuMCcpID49IDApCgkJCQl7CgkJCQkJLy8gVXNlIHRoZSBkYXRhIHdyYXBwZXIgdG8gY3JlYXRlIHRoZSBmaWxlIGV4cGVjdGVkIGJ5IHRoZSBwdXQgbWV0aG9kCgkJCQkJJHB1dF9maWxlID0gZm9wZW4oJ2RhdGE6Ly9hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCcuYmFzZTY0X2VuY29kZSgkYm9keSkpOwoJCQkJfQoJCQkJKi8KCQkJCQoJCQkJJHB1dF9maWxlID0gQHRtcGZpbGUoKTsKCQkJCWlmICghJHB1dF9maWxlKQoJCQkJewoJCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBjcmVhdGUgdG1wZmlsZSBmb3IgUFVUIG9wZXJhdGlvbicpOwoJCQkJfQoJCQkJZndyaXRlKCRwdXRfZmlsZSwgJGJvZHkpOwoJCQkJZnNlZWsoJHB1dF9maWxlLCAwKTsKCgkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUFVULCAJCSAgdHJ1ZSk7CiAgCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9JTkZJTEUsIAkgICRwdXRfZmlsZSk7CiAgCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCAgc3RybGVuKCRib2R5KSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwJCSAgdHJ1ZSk7CgkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgICRib2R5KTsKICAJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vIGEgJ25vcm1hbCcgcmVxdWVzdCwgbm8gYm9keSB0byBiZSBzZW5kCgkJCWlmICgkbWV0aG9kID09ICdQT1NUJykKCQkJewoJCQkJaWYgKCEkaGFzX2NvbnRlbnRfdHlwZSkKCQkJCXsKCQkJCQkkaGVhZGVyW10gICAgICAgICA9ICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7CgkJCQkJJGhhc19jb250ZW50X3R5cGUgPSB0cnVlOwoJCQkJfQoKCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAJCSAgdHJ1ZSk7CgkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgICRxdWVyeSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoIWVtcHR5KCRxdWVyeSkpCgkJCQl7CgkJCQkJJHVybCAuPSAnPycuJHF1ZXJ5OwoJCQkJfQoJCQkJaWYgKCRtZXRob2QgIT0gJ0dFVCcpCgkJCQl7CgkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICRtZXRob2QpOwoJCQkJfQoJCQl9CgkJfQoKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwJICRoZWFkZXIpOwoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsCQkgJ2FueU1ldGEvT0F1dGggMS4wIC0gKCRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNzQgJCknKTsKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAJCQkgJHVybCk7CgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAJCSB0cnVlKTsKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgCQkgMzApOwoJCgkJZm9yZWFjaCAoJG9wdHMgYXMgJGsgPT4gJHYpCgkJewoJCQlpZiAoJGsgIT0gQ1VSTE9QVF9IVFRQSEVBREVSKQoJCQl7CgkJCQljdXJsX3NldG9wdCgkY2gsICRrLCAkdik7CgkJCX0KCQl9CgoJCSR0eHQgPSBjdXJsX2V4ZWMoJGNoKTsKCQlpZiAoJHR4dCA9PT0gZmFsc2UpIHsKCQkJJGVycm9yID0gY3VybF9lcnJvcigkY2gpOwoJCQljdXJsX2Nsb3NlKCRjaCk7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NVUkwgZXJyb3I6ICcgLiAkZXJyb3IpOwoJCX0gCgkJY3VybF9jbG9zZSgkY2gpOwoJCQoJCWlmICghZW1wdHkoJHB1dF9maWxlKSkKCQl7CgkJCWZjbG9zZSgkcHV0X2ZpbGUpOwoJCX0KCgkJLy8gVGVsbCB0aGUgbG9nZ2VyIHdoYXQgd2UgcmVxdWVzdGVkIGFuZCB3aGF0IHdlIHJlY2VpdmVkIGJhY2sKCQkkZGF0YSA9ICRtZXRob2QgLiAiICR1cmxcbiIuaW1wbG9kZSgiXG4iLCRoZWFkZXIpOwoJCWlmIChpc19zdHJpbmcoJGJvZHkpKQoJCXsKCQkJJGRhdGEgLj0gIlxuXG4iLiRib2R5OwoJCX0KCQllbHNlIGlmICgkbWV0aG9kID09ICdQT1NUJykKCQl7CgkJCSRkYXRhIC49ICJcblxuIi4kcXVlcnk7CgkJfQoKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnNldFNlbnQoJGRhdGEsICRib2R5KTsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnNldFJlY2VpdmVkKCR0eHQpOwoKCQlyZXR1cm4gJHR4dDsKCX0KCQoJCgkvKioKCSAqIFBhcnNlIGFuIGh0dHAgcmVzcG9uc2UKCSAqIAoJICogQHBhcmFtIHN0cmluZyByZXNwb25zZSB0aGUgaHR0cCB0ZXh0IHRvIHBhcnNlCgkgKiBAcmV0dXJuIGFycmF5IChjb2RlPT5odHRwLWNvZGUsIGhlYWRlcnM9Pmh0dHAtaGVhZGVycywgYm9keT0+Ym9keSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGN1cmxfcGFyc2UgKCAkcmVzcG9uc2UgKQoJewoJCWlmIChlbXB0eSgkcmVzcG9uc2UpKQoJCXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoJCgkJQGxpc3QoJGhlYWRlcnMsJGJvZHkpID0gZXhwbG9kZSgiXHJcblxyXG4iLCRyZXNwb25zZSwyKTsKCQkkbGluZXMgPSBleHBsb2RlKCJcclxuIiwkaGVhZGVycyk7CgoJCWlmIChwcmVnX21hdGNoKCdAXkhUVFAvWzAtOV1cLlswLTldICsxMDBAJywgJGxpbmVzWzBdKSkKCQl7CgkJCS8qIEhUVFAvMS54IDEwMCBDb250aW51ZQoJCQkgKiB0aGUgcmVhbCBkYXRhIGlzIG9uIHRoZSBuZXh0IGxpbmUKCQkJICovCgkJCUBsaXN0KCRoZWFkZXJzLCRib2R5KSA9IGV4cGxvZGUoIlxyXG5cclxuIiwkYm9keSwyKTsKCQkJJGxpbmVzID0gZXhwbG9kZSgiXHJcbiIsJGhlYWRlcnMpOwoJCX0KCQoJCS8vIGZpcnN0IGxpbmUgb2YgaGVhZGVycyBpcyB0aGUgSFRUUCByZXNwb25zZSBjb2RlIAoJCSRodHRwX2xpbmUgPSBhcnJheV9zaGlmdCgkbGluZXMpOwoJCWlmIChwcmVnX21hdGNoKCdAXkhUVFAvWzAtOV1cLlswLTldICsoWzAtOV17M30pQCcsICRodHRwX2xpbmUsICRtYXRjaGVzKSkKCQl7CgkJCSRjb2RlID0gJG1hdGNoZXNbMV07CgkJfQoJCgkJLy8gcHV0IHRoZSByZXN0IG9mIHRoZSBoZWFkZXJzIGluIGFuIGFycmF5CgkJJGhlYWRlcnMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRsaW5lcyBhcyAkbCkKCQl7CgkJCWxpc3QoJGssICR2KSA9IGV4cGxvZGUoJzogJywgJGwsIDIpOwoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRrKV0gPSAkdjsKCQl9CgkKCQlyZXR1cm4gYXJyYXkoICdjb2RlJyA9PiAkY29kZSwgJ2hlYWRlcnMnID0+ICRoZWFkZXJzLCAnYm9keScgPT4gJGJvZHkpOwoJfQoKCgkvKioKCSAqIE1peCB0aGUgZ2l2ZW4gaGVhZGVycyBpbnRvIHRoZSBoZWFkZXJzIHRoYXQgd2VyZSBnaXZlbiB0byBjdXJsCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBjdXJsX29wdGlvbnMKCSAqIEBwYXJhbSBhcnJheSBleHRyYV9oZWFkZXJzCgkgKiBAcmV0dXJuIGFycmF5IG5ldyBjdXJsIG9wdGlvbnMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHByZXBhcmVDdXJsT3B0aW9ucyAoICRjdXJsX29wdGlvbnMsICRleHRyYV9oZWFkZXJzICkKCXsKCQkkaHMgPSBhcnJheSgpOwoJCWlmICghZW1wdHkoJGN1cmxfb3B0aW9uc1tDVVJMT1BUX0hUVFBIRUFERVJdKSAmJiBpc19hcnJheSgkY3VybF9vcHRpb25zW0NVUkxPUFRfSFRUUEhFQURFUl0pKQoJCXsKCQkJZm9yZWFjaCAoJGN1cmxfb3B0aW9uc1tDVVJMT1BUX0hUVFBIRUFERVJdIGFzICRoKQoJCQl7CgkJCQlsaXN0KCRvcHQsICR2YWwpID0gZXhwbG9kZSgnOicsICRoLCAyKTsKCQkJCSRvcHQgICAgICA9IHN0cl9yZXBsYWNlKCcgJywgJy0nLCB1Y3dvcmRzKHN0cl9yZXBsYWNlKCctJywgJyAnLCAkb3B0KSkpOwoJCQkJJGhzWyRvcHRdID0gJHZhbDsKCQkJfQoJCX0KCgkJJGN1cmxfb3B0aW9uc1tDVVJMT1BUX0hUVFBIRUFERVJdID0gYXJyYXkoKTsKCQkkaHMgPSBhcnJheV9tZXJnZSgkaHMsICRleHRyYV9oZWFkZXJzKTsJCQoJCWZvcmVhY2ggKCRocyBhcyAkaCA9PiAkdikKCQl7CgkJCSRjdXJsX29wdGlvbnNbQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gIiRoOiAkdiI7CgkJfQoJCXJldHVybiAkY3VybF9vcHRpb25zOwoJfQp9CgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthRequestLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMb2cgT0F1dGggcmVxdWVzdHMKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhSZXF1ZXN0TG9nZ2VyLnBocCA5OCAyMDEwLTAzLTA4IDEyOjQ4OjU5WiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBEZWMgNywgMjAwNyAxMjoyMjo0MyBQTQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKY2xhc3MgT0F1dGhSZXF1ZXN0TG9nZ2VyIAp7CglzdGF0aWMgcHJpdmF0ZSAkbG9nZ2luZwkJCT0gMDsKCXN0YXRpYyBwcml2YXRlICRlbmFibGVfbG9nZ2luZwk9IG51bGw7CglzdGF0aWMgcHJpdmF0ZSAkc3RvcmVfbG9nCQk9IG51bGw7CglzdGF0aWMgcHJpdmF0ZSAkbm90ZSAJCQk9ICcnOwoJc3RhdGljIHByaXZhdGUgJHVzZXJfaWQJCQk9IG51bGw7CglzdGF0aWMgcHJpdmF0ZSAkcmVxdWVzdF9vYmplY3QJPSBudWxsOwoJc3RhdGljIHByaXZhdGUgJHNlbnQJCQk9IG51bGw7CglzdGF0aWMgcHJpdmF0ZSAkcmVjZWl2ZWQJCT0gbnVsbDsKCXN0YXRpYyBwcml2YXRlICRsb2cJCQkJPSBhcnJheSgpOwoJCgkvKioKCSAqIFN0YXJ0IGFueSBsb2dnaW5nLCBjaGVja3MgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGlmIGxvZ2dpbmcgaXMgbmVlZGVkLgoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0ICAkcmVxdWVzdF9vYmplY3QKCSAqLwoJc3RhdGljIGZ1bmN0aW9uIHN0YXJ0ICggJHJlcXVlc3Rfb2JqZWN0ID0gbnVsbCApCgl7CgkJaWYgKGRlZmluZWQoJ09BVVRIX0xPR19SRVFVRVNUJykpCgkJewoJCQlpZiAoaXNfbnVsbChPQXV0aFJlcXVlc3RMb2dnZXI6OiRlbmFibGVfbG9nZ2luZykpCgkJCXsKCQkJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JGVuYWJsZV9sb2dnaW5nID0gdHJ1ZTsKCQkJfQoJCQlpZiAoaXNfbnVsbChPQXV0aFJlcXVlc3RMb2dnZXI6OiRzdG9yZV9sb2cpKQoJCQl7CgkJCQlPQXV0aFJlcXVlc3RMb2dnZXI6OiRzdG9yZV9sb2cgPSB0cnVlOwoJCQl9CgkJfQoKCQlpZiAoT0F1dGhSZXF1ZXN0TG9nZ2VyOjokZW5hYmxlX2xvZ2dpbmcgJiYgIU9BdXRoUmVxdWVzdExvZ2dlcjo6JGxvZ2dpbmcpCgkJewoJCQlPQXV0aFJlcXVlc3RMb2dnZXI6OiRsb2dnaW5nICAgICAgICA9IHRydWU7CgkJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JHJlcXVlc3Rfb2JqZWN0ID0gJHJlcXVlc3Rfb2JqZWN0OwoJCQlvYl9zdGFydCgpOwoKCQkJLy8gTWFrZSBzdXJlIHdlIGZsdXNoIG91ciBsb2cgZW50cnkgd2hlbiB3ZSBzdG9wIHRoZSByZXF1ZXN0IChlZyBvbiBhbiBleGNlcHRpb24pCgkJCXJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uKGFycmF5KCdPQXV0aFJlcXVlc3RMb2dnZXInLCdmbHVzaCcpKTsJCQoJCX0KCX0KCQoKCS8qKgoJICogRm9yY2UgbG9nZ2luZywgbmVlZGVkIGZvciBwZXJmb3JtaW5nIHRlc3QgY29ubmVjdHMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZGVidWdnaW5nIHNldHRpbmcuCgkgKiAKCSAqIEBwYXJhbSBib29sZWFuICBzdG9yZV9sb2cJCShvcHRpb25hbCkgdHJ1ZSB0byBzdG9yZSB0aGUgbG9nIGluIHRoZSBkYgoJICovCglzdGF0aWMgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZyAoICRzdG9yZV9sb2cgPSBudWxsICkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OiRlbmFibGVfbG9nZ2luZyA9IHRydWU7CgkJaWYgKCFpc19udWxsKCRzdG9yZV9sb2cpKQoJCXsKCQkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjokc3RvcmVfbG9nID0gJHN0b3JlX2xvZzsKCQl9Cgl9CQoKCgkvKioKCSAqIExvZ3MgdGhlIHJlcXVlc3QgdG8gdGhlIGRhdGFiYXNlLCBzZW5kcyBhbnkgY2FjaGVkIG91dHB1dC4KCSAqIEFsc28gY2FsbGVkIG9uIHNodXRkb3duLCB0byBtYWtlIHN1cmUgd2UgYWx3YXlzIGxvZyB0aGUgcmVxdWVzdCBiZWluZyBoYW5kbGVkLgoJICovCglzdGF0aWMgZnVuY3Rpb24gZmx1c2ggKCkKCXsKCQlpZiAoT0F1dGhSZXF1ZXN0TG9nZ2VyOjokbG9nZ2luZykKCQl7CgkJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JGxvZ2dpbmcgPSBmYWxzZTsKCgkJCWlmIChpc19udWxsKE9BdXRoUmVxdWVzdExvZ2dlcjo6JHNlbnQpKQoJCQl7CgkJCQkvLyBXaGF0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHVzZXItYWdlbnQ/CgkJCQkkZGF0YSAgPSBvYl9nZXRfY29udGVudHMoKTsKCQkJCWlmIChzdHJsZW4oJGRhdGEpID4gMCkKCQkJCXsKCQkJCQlvYl9lbmRfZmx1c2goKTsKCQkJCX0KCQkJCWVsc2VpZiAob2JfZ2V0X2xldmVsKCkpCgkJCQl7CgkJCQkJb2JfZW5kX2NsZWFuKCk7CgkJCQl9CgkJCQkkaHMgICAgPSBoZWFkZXJzX2xpc3QoKTsKCQkJCSRzZW50ICA9IGltcGxvZGUoIlxuIiwgJGhzKSAuICJcblxuIiAuICRkYXRhOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy8gVGhlIHJlcXVlc3Qgd2Ugc2VudAoJCQkJJHNlbnQgID0gT0F1dGhSZXF1ZXN0TG9nZ2VyOjokc2VudDsKCQkJfQoJCQkKCQkJaWYgKGlzX251bGwoT0F1dGhSZXF1ZXN0TG9nZ2VyOjokcmVjZWl2ZWQpKQoJCQl7CgkJCQkvLyBCdWlsZCB0aGUgcmVxdWVzdCB3ZSByZWNlaXZlZAoJCQkJJGhzMCAgID0gc2VsZjo6Z2V0QWxsSGVhZGVycygpOwoJCQkJJGhzICAgID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRoczAgYXMgJGggPT4gJHYpCgkJCQl7CgkJCQkJJGhzW10gPSAiJGg6ICR2IjsKCQkJCX0KCgkJCQkkZGF0YSAgPSAnJzsKCQkJCSRmaCAgICA9IEBmb3BlbigncGhwOi8vaW5wdXQnLCAncicpOwoJCQkJaWYgKCRmaCkKCQkJCXsKCQkJCQl3aGlsZSAoIWZlb2YoJGZoKSkKCQkJCQl7CgkJCQkJCSRzID0gZnJlYWQoJGZoLCAxMDI0KTsKCQkJCQkJaWYgKGlzX3N0cmluZygkcykpCgkJCQkJCXsKCQkJCQkJCSRkYXRhIC49ICRzOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWZjbG9zZSgkZmgpOwoJCQkJfQoJCQkJJHJlY2VpdmVkID0gaW1wbG9kZSgiXG4iLCAkaHMpIC4gIlxuXG4iIC4gJGRhdGE7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBUaGUgYW5zd2VyIHdlIHJlY2VpdmVkCgkJCQkkcmVjZWl2ZWQgID0gT0F1dGhSZXF1ZXN0TG9nZ2VyOjokcmVjZWl2ZWQ7CgkJCX0KCgkJCS8vIFRoZSByZXF1ZXN0IGJhc2Ugc3RyaW5nCgkJCWlmIChPQXV0aFJlcXVlc3RMb2dnZXI6OiRyZXF1ZXN0X29iamVjdCkKCQkJewoJCQkJJGJhc2Vfc3RyaW5nID0gT0F1dGhSZXF1ZXN0TG9nZ2VyOjokcmVxdWVzdF9vYmplY3QtPnNpZ25hdHVyZUJhc2VTdHJpbmcoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRiYXNlX3N0cmluZyA9ICcnOwoJCQl9CgoJCQkvLyBGaWd1cmUgb3V0IHRvIHdoYXQga2V5cyB3ZSB3YW50IHRvIGxvZyB0aGlzIHJlcXVlc3QKCQkJJGtleXMgPSBhcnJheSgpOwoJCQlpZiAoT0F1dGhSZXF1ZXN0TG9nZ2VyOjokcmVxdWVzdF9vYmplY3QpCgkJCXsKCQkJCSRjb25zdW1lcl9rZXkgPSBPQXV0aFJlcXVlc3RMb2dnZXI6OiRyZXF1ZXN0X29iamVjdC0+Z2V0UGFyYW0oJ29hdXRoX2NvbnN1bWVyX2tleScsIHRydWUpOwoJCQkJJHRva2VuICAgICAgICA9IE9BdXRoUmVxdWVzdExvZ2dlcjo6JHJlcXVlc3Rfb2JqZWN0LT5nZXRQYXJhbSgnb2F1dGhfdG9rZW4nLCAgICAgICAgdHJ1ZSk7CgoJCQkJc3dpdGNoIChnZXRfY2xhc3MoT0F1dGhSZXF1ZXN0TG9nZ2VyOjokcmVxdWVzdF9vYmplY3QpKQoJCQkJewoJCQkJLy8gdG9rZW5zIGFyZSBhY2Nlc3MvcmVxdWVzdCB0b2tlbnMgYnkgYSBjb25zdW1lcgoJCQkJY2FzZSAnT0F1dGhTZXJ2ZXInOgoJCQkJY2FzZSAnT0F1dGhSZXF1ZXN0VmVyaWZpZXInOgoJCQkJCSRrZXlzWydvY3JfY29uc3VtZXJfa2V5J10gPSAkY29uc3VtZXJfa2V5OwoJCQkJCSRrZXlzWydvY3RfdG9rZW4nXSAgICAgICAgPSAkdG9rZW47CgkJCQkJYnJlYWs7CgoJCQkJLy8gdG9rZW5zIGFyZSBhY2Nlc3MvcmVxdWVzdCB0b2tlbnMgdG8gYSBzZXJ2ZXIKCQkJCWNhc2UgJ09BdXRoUmVxdWVzdGVyJzoKCQkJCWNhc2UgJ09BdXRoUmVxdWVzdFNpZ25lcic6CgkJCQkJJGtleXNbJ29zcl9jb25zdW1lcl9rZXknXSA9ICRjb25zdW1lcl9rZXk7CgkJCQkJJGtleXNbJ29zdF90b2tlbiddICAgICAgICA9ICR0b2tlbjsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkKCQkJLy8gTG9nIHRoZSByZXF1ZXN0CgkJCWlmIChPQXV0aFJlcXVlc3RMb2dnZXI6OiRzdG9yZV9sb2cpCgkJCXsKCQkJCSRzdG9yZSA9IE9BdXRoU3RvcmU6Omluc3RhbmNlKCk7CgkJCQkkc3RvcmUtPmFkZExvZygka2V5cywgJHJlY2VpdmVkLCAkc2VudCwgJGJhc2Vfc3RyaW5nLCBPQXV0aFJlcXVlc3RMb2dnZXI6OiRub3RlLCBPQXV0aFJlcXVlc3RMb2dnZXI6OiR1c2VyX2lkKTsKCQkJfQoJCQkKCQkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjokbG9nW10gPSBhcnJheSgKCQkJCQkna2V5cycgICAgCQk9PiAka2V5cywKCQkJCQkncmVjZWl2ZWQnCQk9PiAkcmVjZWl2ZWQsCgkJCQkJJ3NlbnQnCQkJPT4gJHNlbnQsCgkJCQkJJ2Jhc2Vfc3RyaW5nJwk9PiAkYmFzZV9zdHJpbmcsCgkJCQkJJ25vdGUnCQkJPT4gT0F1dGhSZXF1ZXN0TG9nZ2VyOjokbm90ZQoJCQkJCSk7CgkJfQoJfQoKCgkvKioKCSAqIEFkZCBhIG5vdGUsIHVzZWQgYnkgdGhlIE9BdXRoRXhjZXB0aW9uMiB0byBsb2cgYWxsIGV4Y2VwdGlvbnMuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgbm90ZQoJICovCglzdGF0aWMgZnVuY3Rpb24gYWRkTm90ZSAoICRub3RlICkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OiRub3RlIC49ICRub3RlIC4gIlxuXG4iOwoJfQoKCS8qKgoJICogU2V0IHRoZSBPQXV0aCByZXF1ZXN0IG9iamVjdCBiZWluZyB1c2VkCgkgKiAKCSAqIEBwYXJhbSBPQXV0aFJlcXVlc3QgcmVxdWVzdF9vYmplY3QKCSAqLwoJc3RhdGljIGZ1bmN0aW9uIHNldFJlcXVlc3RPYmplY3QgKCAkcmVxdWVzdF9vYmplY3QgKQoJewoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JHJlcXVlc3Rfb2JqZWN0ID0gJHJlcXVlc3Rfb2JqZWN0OwoJfQoKCgkvKioKCSAqIFNldCB0aGUgcmVsZXZhbnQgdXNlciAoZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgdXNlcikKCSAqIAoJICogQHBhcmFtIGludCB1c2VyX2lkCgkgKi8KCXN0YXRpYyBmdW5jdGlvbiBzZXRVc2VyICggJHVzZXJfaWQgKQoJewoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JHVzZXJfaWQgPSAkdXNlcl9pZDsKCX0KCQoJCgkvKioKCSAqIFNldCB0aGUgcmVxdWVzdCB3ZSBzZW50CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcmVxdWVzdAoJICovCglzdGF0aWMgZnVuY3Rpb24gc2V0U2VudCAoICRyZXF1ZXN0ICkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OiRzZW50ID0gJHJlcXVlc3Q7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHJlcGx5IHdlIHJlY2VpdmVkCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcmVxdWVzdAoJICovCglzdGF0aWMgZnVuY3Rpb24gc2V0UmVjZWl2ZWQgKCAkcmVwbHkgKQoJewoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6JHJlY2VpdmVkID0gJHJlcGx5OwoJfQoJCgkKCS8qKgoJICogR2V0IHRoZSB0aGUgbG9nIHRpbGwgbm93CgkgKiAKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJc3RhdGljIGZ1bmN0aW9uIGdldExvZyAoKQoJewoJCXJldHVybiBPQXV0aFJlcXVlc3RMb2dnZXI6OiRsb2c7Cgl9CgoKCS8qKgoJICogaGVscGVyIHRvIHRyeSB0byBzb3J0IG91dCBoZWFkZXJzIGZvciBwZW9wbGUgd2hvIGFyZW4ndCBydW5uaW5nIGFwYWNoZSwKCSAqIG9yIHBlb3BsZSB3aG8gYXJlIHJ1bm5pbmcgUEhQIGFzIEZhc3RDR0kuCgkgKgoJICogQHJldHVybiBhcnJheSBvZiByZXF1ZXN0IGhlYWRlcnMgYXMgYXNzb2NpYXRpdmUgYXJyYXkuCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsSGVhZGVycygpIHsKCQkkcmV0YXJyID0gYXJyYXkoKTsKCQkkaGVhZGVycyA9IGFycmF5KCk7CgkJCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX3JlcXVlc3RfaGVhZGVycycpKSB7CgkJCSRoZWFkZXJzID0gYXBhY2hlX3JlcXVlc3RfaGVhZGVycygpOwoJCQlrc29ydCgkaGVhZGVycyk7CgkJCXJldHVybiAkaGVhZGVyczsKCQl9IGVsc2UgewoJCQkkaGVhZGVycyA9IGFycmF5X21lcmdlKCRfRU5WLCAkX1NFUlZFUik7CgkJCQoJCQlmb3JlYWNoICgkaGVhZGVycyBhcyAka2V5ID0+ICR2YWwpIHsKCQkJCS8vd2UgbmVlZCB0aGlzIGhlYWRlcgoJCQkJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRrZXkpLCAnY29udGVudC10eXBlJykgIT09IEZBTFNFKQoJCQkJCWNvbnRpbnVlOwoJCQkJaWYgKHN0cnRvdXBwZXIoc3Vic3RyKCRrZXksIDAsIDUpKSAhPSAiSFRUUF8iKQoJCQkJCXVuc2V0KCRoZWFkZXJzWyRrZXldKTsKCQkJfQoJCX0KCQkKCQkvL05vcm1hbGl6ZSB0aGlzIGFycmF5IHRvIENhc2VkLUxpa2UtVGhpcyBzdHJ1Y3R1cmUuCgkJZm9yZWFjaCAoJGhlYWRlcnMgQVMgJGtleSA9PiAkdmFsdWUpIHsKCQkJJGtleSA9IHByZWdfcmVwbGFjZSgnL15IVFRQXy9pJywgJycsICRrZXkpOwoJCQkka2V5ID0gc3RyX3JlcGxhY2UoCgkJCQkJIiAiLAoJCQkJCSItIiwKCQkJCQl1Y3dvcmRzKHN0cnRvbG93ZXIoc3RyX3JlcGxhY2UoYXJyYXkoIi0iLCAiXyIpLCAiICIsICRrZXkpKSkKCQkJCSk7CgkJCSRyZXRhcnJbJGtleV0gPSAkdmFsdWU7CgkJfQoJCWtzb3J0KCRyZXRhcnIpOwoJCQoJCXJldHVybiAkcmV0YXJyOwoJfQp9CgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthRequestSigner.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTaWduIHJlcXVlc3RzIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSByZXF1ZXN0LgogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFJlcXVlc3RTaWduZXIucGhwIDE3NCAyMDEwLTExLTI0IDE1OjE1OjQxWiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMTYsIDIwMDcgNDowMjo0OSBQTQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZS5waHAnOwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoUmVxdWVzdC5waHAnOwoKCmNsYXNzIE9BdXRoUmVxdWVzdFNpZ25lciBleHRlbmRzIE9BdXRoUmVxdWVzdAp7Cglwcm90ZWN0ZWQgJHJlcXVlc3Q7Cglwcm90ZWN0ZWQgJHN0b3JlOwoJcHJvdGVjdGVkICR1c3JfaWQgPSAwOwoJcHJpdmF0ZSAgICRzaWduZWQgPSBmYWxzZTsKCgkKCS8qKgoJICogQ29uc3RydWN0IHRoZSByZXF1ZXN0IHRvIGJlIHNpZ25lZC4gIFBhcnNlcyBvciBhcHBlbmRzIHRoZSBwYXJhbWV0ZXJzIGluIHRoZSBwYXJhbXMgdXJsLgoJICogV2hlbiB5b3Ugc3VwcGx5IGFuIHBhcmFtcyBhcnJheSwgdGhlbiB0aGUgcGFyYW1zIHNob3VsZCBub3QgYmUgdXJsZW5jb2RlZC4KCSAqIFdoZW4geW91IHN1cHBseSBhIHN0cmluZywgdGhlbiBpdCBpcyBhc3N1bWVkIGl0IGlzIG9mIHRoZSB0eXBlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHJlcXVlc3QJdXJsCgkgKiBAcGFyYW0gc3RyaW5nIG1ldGhvZAkJUFVULCBHRVQsIFBPU1QgZXRjLgoJICogQHBhcmFtIG1peGVkIHBhcmFtcyAJCXN0cmluZyAoZm9yIHVybGVuY29kZWQgZGF0YSwgb3IgYXJyYXkgd2l0aCBuYW1lL3ZhbHVlIHBhaXJzKQoJICogQHBhcmFtIHN0cmluZyBib2R5CQlvcHRpb25hbCBib2R5IGZvciBQVVQgYW5kL29yIFBPU1QgcmVxdWVzdHMKCSAqLwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkcmVxdWVzdCwgJG1ldGhvZCA9IG51bGwsICRwYXJhbXMgPSBudWxsLCAkYm9keSA9IG51bGwgKQoJewoJCSR0aGlzLT5zdG9yZSA9IE9BdXRoU3RvcmU6Omluc3RhbmNlKCk7CgkJCgkJaWYgKGlzX3N0cmluZygkcGFyYW1zKSkKCQl7CgkJCXBhcmVudDo6X19jb25zdHJ1Y3QoJHJlcXVlc3QsICRtZXRob2QsICRwYXJhbXMpOwoJCX0KCQllbHNlCgkJewoJCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRyZXF1ZXN0LCAkbWV0aG9kKTsKCQkJaWYgKGlzX2FycmF5KCRwYXJhbXMpKQoJCQl7CgkJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRuYW1lID0+ICR2YWx1ZSkKCQkJCXsKCQkJCQkkdGhpcy0+c2V0UGFyYW0oJG5hbWUsICR2YWx1ZSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJLy8gV2l0aCBwdXQvIHBvc3Qgd2UgbWlnaHQgaGF2ZSBhIGJvZHkgKG5vdCBmb3IgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHJlcXVlc3RzKQoJCWlmIChzdHJjYXNlY21wKCRtZXRob2QsICdQVVQnKSA9PSAwIHx8IHN0cmNhc2VjbXAoJG1ldGhvZCwgJ1BPU1QnKSA9PSAwKQoJCXsKCQkJJHRoaXMtPnNldEJvZHkoJGJvZHkpOwoJCX0KCX0KCgoJLyoqCgkgKiBSZXNldCB0aGUgJ3NpZ25lZCcgZmxhZywgc28gdGhhdCBhbnkgY2hhbmdlcyBpbiB0aGUgcGFyYW1ldGVycyBmb3JjZSBhIHJlY2FsY3VsYXRpb24KCSAqIG9mIHRoZSBzaWduYXR1cmUuCgkgKi8KCWZ1bmN0aW9uIHNldFVuc2lnbmVkICgpCgl7CgkJJHRoaXMtPnNpZ25lZCA9IGZhbHNlOwoJfQoKCgkvKioKCSAqIFNpZ24gb3VyIG1lc3NhZ2UgaW4gdGhlIHdheSB0aGUgc2VydmVyIHVuZGVyc3RhbmRzLgoJICogU2V0IHRoZSBuZWVkZWQgb2F1dGhfeHh4eCBwYXJhbWV0ZXJzLgoJICogCgkgKiBAcGFyYW0gaW50IHVzcl9pZAkJKG9wdGlvbmFsKSB1c2VyIHRoYXQgd2FudHMgdG8gc2lnbiB0aGlzIHJlcXVlc3QKCSAqIEBwYXJhbSBhcnJheSBzZWNyZXRzCQlzZWNyZXRzIHVzZWQgZm9yIHNpZ25pbmcsIHdoZW4gZW1wdHkgdGhlbiBzZWNyZXRzIHdpbGwgYmUgZmV0Y2hlZCBmcm9tIHRoZSB0b2tlbiByZWdpc3RyeQoJICogQHBhcmFtIHN0cmluZyBuYW1lCQluYW1lIG9mIHRoZSB0b2tlbiB0byBiZSB1c2VkIGZvciBzaWduaW5nCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHRoZXJlIGlzIG5vIG9hdXRoIHJlbGF0aW9uIHdpdGggdGhlIHNlcnZlcgoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiB3ZSBkb24ndCBzdXBwb3J0IHRoZSBzaWduaW5nIG1ldGhvZHMgb2YgdGhlIHNlcnZlcgoJICovCQoJZnVuY3Rpb24gc2lnbiAoICR1c3JfaWQgPSAwLCAkc2VjcmV0cyA9IG51bGwsICRuYW1lID0gJycsICR0b2tlbl90eXBlID0gbnVsbCkKCXsKCQkkdXJsID0gJHRoaXMtPmdldFJlcXVlc3RVcmwoKTsKCQlpZiAoZW1wdHkoJHNlY3JldHMpKQoJCXsKCQkJLy8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW5zIGZvciB0aGUgc2l0ZSAob24gYW4gdXNlciBieSB1c2VyIGJhc2lzKQoJCQkkc2VjcmV0cyA9ICR0aGlzLT5zdG9yZS0+Z2V0U2VjcmV0c0ZvclNpZ25hdHVyZSgkdXJsLCAkdXNyX2lkLCAkbmFtZSk7CgkJfQoJCWlmIChlbXB0eSgkc2VjcmV0cykpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBPQXV0aCByZWxhdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgZm9yIGF0ICInLiR1cmwuJyInKTsKCQl9CgoJCSRzaWduYXR1cmVfbWV0aG9kID0gJHRoaXMtPnNlbGVjdFNpZ25hdHVyZU1ldGhvZCgkc2VjcmV0c1snc2lnbmF0dXJlX21ldGhvZHMnXSk7CgoJCSR0b2tlbgkJICA9IGlzc2V0KCRzZWNyZXRzWyd0b2tlbiddKSAgICAgICAgPyAkc2VjcmV0c1sndG9rZW4nXSAgICAgICAgOiAnJzsKCQkkdG9rZW5fc2VjcmV0ID0gaXNzZXQoJHNlY3JldHNbJ3Rva2VuX3NlY3JldCddKSA/ICRzZWNyZXRzWyd0b2tlbl9zZWNyZXQnXSA6ICcnOwoKCQlpZiAoISR0b2tlbikgewoJCQkkdG9rZW4gPSAkdGhpcy0+Z2V0UGFyYW0oJ29hdXRoX3Rva2VuJyk7CgkJfQoKCQkkdGhpcy0+c2V0UGFyYW0oJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnLCRzaWduYXR1cmVfbWV0aG9kKTsKCQkkdGhpcy0+c2V0UGFyYW0oJ29hdXRoX3NpZ25hdHVyZScsCQkgJycpOwoJCSR0aGlzLT5zZXRQYXJhbSgnb2F1dGhfbm9uY2UnLCAJCQkgIWVtcHR5KCRzZWNyZXRzWydub25jZSddKSAgICAgPyAkc2VjcmV0c1snbm9uY2UnXSAgICAgOiB1bmlxaWQoJycpKTsKCQkkdGhpcy0+c2V0UGFyYW0oJ29hdXRoX3RpbWVzdGFtcCcsIAkJICFlbXB0eSgkc2VjcmV0c1sndGltZXN0YW1wJ10pID8gJHNlY3JldHNbJ3RpbWVzdGFtcCddIDogdGltZSgpKTsKCQlpZiAoJHRva2VuX3R5cGUgIT0gJ3JlcXVlc3RUb2tlbicpCgkJCSR0aGlzLT5zZXRQYXJhbSgnb2F1dGhfdG9rZW4nLCAJCSAkdG9rZW4pOwoJCSR0aGlzLT5zZXRQYXJhbSgnb2F1dGhfY29uc3VtZXJfa2V5JywJICRzZWNyZXRzWydjb25zdW1lcl9rZXknXSk7CgkJJHRoaXMtPnNldFBhcmFtKCdvYXV0aF92ZXJzaW9uJywJCSAnMS4wJyk7CgkJCgkJJGJvZHkgPSAkdGhpcy0+Z2V0Qm9keSgpOwoJCWlmICghaXNfbnVsbCgkYm9keSkpCgkJewoJCQkvLyBXZSBhbHNvIG5lZWQgdG8gc2lnbiB0aGUgYm9keSwgdXNlIHRoZSBkZWZhdWx0IHNpZ25hdHVyZSBtZXRob2QKCQkJJGJvZHlfc2lnbmF0dXJlID0gJHRoaXMtPmNhbGN1bGF0ZURhdGFTaWduYXR1cmUoJGJvZHksICRzZWNyZXRzWydjb25zdW1lcl9zZWNyZXQnXSwgJHRva2VuX3NlY3JldCwgJHNpZ25hdHVyZV9tZXRob2QpOwoJCQkkdGhpcy0+c2V0UGFyYW0oJ3hvYXV0aF9ib2R5X3NpZ25hdHVyZScsICRib2R5X3NpZ25hdHVyZSwgdHJ1ZSk7CgkJfQoJCQoJCSRzaWduYXR1cmUgPSAkdGhpcy0+Y2FsY3VsYXRlU2lnbmF0dXJlKCRzZWNyZXRzWydjb25zdW1lcl9zZWNyZXQnXSwgJHRva2VuX3NlY3JldCwgJHRva2VuX3R5cGUpOwoJCSR0aGlzLT5zZXRQYXJhbSgnb2F1dGhfc2lnbmF0dXJlJywJJHNpZ25hdHVyZSwgdHJ1ZSk7CgkJLy8gJHRoaXMtPnNldFBhcmFtKCdvYXV0aF9zaWduYXR1cmUnLAkJIHVybGRlY29kZSgkc2lnbmF0dXJlKSwgdHJ1ZSk7CgkJCgkJJHRoaXMtPnNpZ25lZCA9IHRydWU7CgkJJHRoaXMtPnVzcl9pZCA9ICR1c3JfaWQ7Cgl9CgoKCS8qKgoJICogQnVpbGRzIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBmb3IgdGhlIHJlcXVlc3QuCgkgKiBBZGRzIGFsbCBvYXV0aF8gYW5kIHhvYXV0aF8gcGFyYW1ldGVycyB0byB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuCgkgKiAKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCWZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25IZWFkZXIgKCkKCXsKCQlpZiAoISR0aGlzLT5zaWduZWQpCgkJewoJCQkkdGhpcy0+c2lnbigkdGhpcy0+dXNyX2lkKTsKCQl9CgkJJGggICA9IGFycmF5KCk7CgkJJGhbXSA9ICdBdXRob3JpemF0aW9uOiBPQXV0aCByZWFsbT0iIic7CgkJZm9yZWFjaCAoJHRoaXMtPnBhcmFtIGFzICRuYW1lID0+ICR2YWx1ZSkKCQl7CgkJCWlmIChzdHJuY21wKCRuYW1lLCAnb2F1dGhfJywgNikgPT0gMCB8fCBzdHJuY21wKCRuYW1lLCAneG9hdXRoXycsIDcpID09IDApCiAgICAgICAgICAJewoJCQkJJGhbXSA9ICRuYW1lLic9IicuJHZhbHVlLiciJzsKCQkJfQoJCX0KCQkkaHMgPSBpbXBsb2RlKCcsICcsICRoKTsKCQlyZXR1cm4gJGhzOwoJfQoKCgkvKioKCSAqIEJ1aWxkcyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcmFtZXRlciBzdHJpbmcuICBDYW4gYmUgYXBwZW5kZWQgYXMKCSAqIHRoZSBxdWVyeSBwYXJ0IHRvIGEgR0VUIG9yIGluc2lkZSB0aGUgcmVxdWVzdCBib2R5IGZvciBhIFBPU1QuCgkgKiAKCSAqIEBwYXJhbSBib29sZWFuIG9hdXRoX2FzX2hlYWRlcgkJKG9wdGlvbmFsKSBzZXQgdG8gZmFsc2UgdG8gaW5jbHVkZSBvYXV0aCBwYXJhbWV0ZXJzCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCQoJZnVuY3Rpb24gZ2V0UXVlcnlTdHJpbmcgKCAkb2F1dGhfYXNfaGVhZGVyID0gdHJ1ZSApCgl7CgkJJHBhcm1zID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkdGhpcy0+cGFyYW0gYXMgJG5hbWUgPT4gJHZhbHVlKQoJCXsKCQkJaWYgKAkhJG9hdXRoX2FzX2hlYWRlciAKCQkJCXx8CShzdHJuY21wKCRuYW1lLCAnb2F1dGhfJywgNikgIT0gMCAmJiBzdHJuY21wKCRuYW1lLCAneG9hdXRoXycsIDcpICE9IDApKQoJCQl7CgkJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkJCXsKCQkJCQlmb3JlYWNoICgkdmFsdWUgYXMgJHYpCgkJCQkJewoJCQkJCQkkcGFybXNbXSA9ICRuYW1lLic9Jy4kdjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHBhcm1zW10gPSAkbmFtZS4nPScuJHZhbHVlOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBpbXBsb2RlKCcmJywgJHBhcm1zKTsKCX0KCn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthRequestVerifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBWZXJpZnkgdGhlIGN1cnJlbnQgcmVxdWVzdC4gIENoZWNrcyBpZiBzaWduZWQgYW5kIGlmIHRoZSBzaWduYXR1cmUgaXMgY29ycmVjdC4KICogV2hlbiBjb3JyZWN0IHRoZW4gYWxzbyBmaWd1cmVzIG91dCBvbiBiZWhhbGYgb2Ygd2hpY2ggdXNlciB0aGlzIHJlcXVlc3QgaXMgYmVpbmcgbWFkZS4KICogIAogKiBAdmVyc2lvbiAkSWQ6IE9BdXRoUmVxdWVzdFZlcmlmaWVyLnBocCAxNTUgMjAxMC0wOS0xMCAxODozODozM1ogYnJ1bm9iZ0Bjb3JvbGxhcml1bS5jb20gJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiBAZGF0ZSAgTm92IDE2LCAyMDA3IDQ6MzU6MDMgUE0KICogCiAqIAogKiBUaGUgTUlUIExpY2Vuc2UKICogCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE1lZGlhbWF0aWMgTGFiCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICogCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKiAKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZS5waHAnOwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoUmVxdWVzdC5waHAnOwoKCmNsYXNzIE9BdXRoUmVxdWVzdFZlcmlmaWVyIGV4dGVuZHMgT0F1dGhSZXF1ZXN0CnsKCXByaXZhdGUgJHJlcXVlc3Q7Cglwcml2YXRlICRzdG9yZTsKCXByaXZhdGUgJGFjY2VwdGVkX3NpZ25hdHVyZXMgPSBudWxsOwoJCgkvKioKCSAqIENvbnN0cnVjdCB0aGUgcmVxdWVzdCB0byBiZSB2ZXJpZmllZAoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHJlcXVlc3QKCSAqIEBwYXJhbSBzdHJpbmcgbWV0aG9kCgkgKiBAcGFyYW0gYXJyYXkgcGFyYW1zIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMKCSAqLwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkdXJpID0gbnVsbCwgJG1ldGhvZCA9IG51bGwsICRwYXJhbXMgPSBudWxsICkKCXsKIAkJaWYgKCRwYXJhbXMpIHsKIAkJCSRlbmNvZGVkUGFyYW1zID0gYXJyYXkoKTsKIAkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKIAkJCQlpZiAocHJlZ19tYXRjaCgiL15vYXV0aF8vIiwgJGtleSkpIHsgIAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJJGVuY29kZWRQYXJhbXNbcmF3dXJsZW5jb2RlKCRrZXkpXSA9IHJhd3VybGVuY29kZSgkdmFsdWUpOwogCQkJfQogCQkJJHRoaXMtPnBhcmFtID0gYXJyYXlfbWVyZ2UoJHRoaXMtPnBhcmFtLCAkZW5jb2RlZFBhcmFtcyk7CiAJCX0KIAoJCSR0aGlzLT5zdG9yZSA9IE9BdXRoU3RvcmU6Omluc3RhbmNlKCk7CgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkdXJpLCAkbWV0aG9kKTsKCQkKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnN0YXJ0KCR0aGlzKTsKCX0KCQoJCgkvKioKCSAqIFNlZSBpZiB0aGUgY3VycmVudCByZXF1ZXN0IGlzIHNpZ25lZCB3aXRoIE9BdXRoCgkgKiAKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RJc1NpZ25lZCAoKQoJewoJCWlmIChpc3NldCgkX1JFUVVFU1RbJ29hdXRoX3NpZ25hdHVyZSddKSkKCQl7CgkJCSRzaWduZWQgPSB0cnVlOwoJCX0KCQllbHNlCgkJewoJCQkkaHMgPSBPQXV0aFJlcXVlc3RMb2dnZXI6OmdldEFsbEhlYWRlcnMoKTsKCQkJaWYgKGlzc2V0KCRoc1snQXV0aG9yaXphdGlvbiddKSAmJiBzdHJwb3MoJGhzWydBdXRob3JpemF0aW9uJ10sICdvYXV0aF9zaWduYXR1cmUnKSAhPT0gZmFsc2UpCgkJCXsKCQkJCSRzaWduZWQgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHNpZ25lZCA9IGZhbHNlOwoJCQl9CgkJfQoJCXJldHVybiAkc2lnbmVkOwoJfQoKCgkvKioKCSAqIFZlcmlmeSB0aGUgcmVxdWVzdCBpZiBpdCBzZWVtZWQgdG8gYmUgc2lnbmVkLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3R5cGUgdGhlIGtpbmQgb2YgdG9rZW4gbmVlZGVkLCBkZWZhdWx0cyB0byAnYWNjZXNzJwoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgZGlkIG5vdCB2ZXJpZnkKCSAqIEByZXR1cm4gYm9vbGVhbgl0cnVlIHdoZW4gc2lnbmVkLCBmYWxzZSB3aGVuIG5vdCBzaWduZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZlcmlmeUlmU2lnbmVkICggJHRva2VuX3R5cGUgPSAnYWNjZXNzJyApCgl7CgkJaWYgKCR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfY29uc3VtZXJfa2V5JykpCgkJewoJCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnN0YXJ0KCR0aGlzKTsKCQkJJHRoaXMtPnZlcmlmeSgkdG9rZW5fdHlwZSk7CgkJCSRzaWduZWQgPSB0cnVlOwoJCQlPQXV0aFJlcXVlc3RMb2dnZXI6OmZsdXNoKCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRzaWduZWQgPSBmYWxzZTsKCQl9CgkJcmV0dXJuICRzaWduZWQ7Cgl9CgoKCgkvKioKCSAqIFZlcmlmeSB0aGUgcmVxdWVzdAoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3R5cGUgdGhlIGtpbmQgb2YgdG9rZW4gbmVlZGVkLCBkZWZhdWx0cyB0byAnYWNjZXNzJyAoZmFsc2UsICdhY2Nlc3MnLCAncmVxdWVzdCcpCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB0aHJvd24gd2hlbiB0aGUgcmVxdWVzdCBkaWQgbm90IHZlcmlmeQoJICogQHJldHVybiBpbnQgdXNlcl9pZCBhc3NvY2lhdGVkIHdpdGggdG9rZW4gKGZhbHNlIHdoZW4gbm8gdXNlciBhc3NvY2lhdGVkKQoJICovCglwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5ICggJHRva2VuX3R5cGUgPSAnYWNjZXNzJyApIAoJewoJCSRyZXR2YWwgPSAkdGhpcy0+dmVyaWZ5RXh0ZW5kZWQoJHRva2VuX3R5cGUpOwoJCXJldHVybiAkcmV0dmFsWyd1c2VyX2lkJ107Cgl9CgkKCQoJLyoqCgkgKiBWZXJpZnkgdGhlIHJlcXVlc3QKCSAqIAoJICogQHBhcmFtIHN0cmluZyB0b2tlbl90eXBlIHRoZSBraW5kIG9mIHRva2VuIG5lZWRlZCwgZGVmYXVsdHMgdG8gJ2FjY2VzcycgKGZhbHNlLCAnYWNjZXNzJywgJ3JlcXVlc3QnKQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgZGlkIG5vdCB2ZXJpZnkKCSAqIEByZXR1cm4gYXJyYXkgKCd1c2VyX2lkJyA9PiBhc3NvY2lhdGVkIHdpdGggdG9rZW4gKGZhbHNlIHdoZW4gbm8gdXNlciBhc3NvY2lhdGVkKSwKCSAqICAnY29uc3VtZXJfa2V5JyA9PiB0aGUgYXNzb2NpYXRlZCBjb25zdW1lcl9rZXkpCgkgKiAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZlcmlmeUV4dGVuZGVkICggJHRva2VuX3R5cGUgPSAnYWNjZXNzJyApCgl7CgkJJGNvbnN1bWVyX2tleSA9ICR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfY29uc3VtZXJfa2V5Jyk7CgkJJHRva2VuICAgICAgICA9ICR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfdG9rZW4nKTsKCQkkdXNlcl9pZCAgICAgID0gZmFsc2U7CgkJJHNlY3JldHMgICAgICA9IGFycmF5KCk7CgoJCWlmICgkY29uc3VtZXJfa2V5ICYmICgkdG9rZW5fdHlwZSA9PT0gZmFsc2UgfHwgJHRva2VuKSkKCQl7CgkJCSRzZWNyZXRzID0gJHRoaXMtPnN0b3JlLT5nZXRTZWNyZXRzRm9yVmVyaWZ5KAkkdGhpcy0+dXJsZGVjb2RlKCRjb25zdW1lcl9rZXkpLCAKCQkJCQkJCQkJCQkJCQkJJHRoaXMtPnVybGRlY29kZSgkdG9rZW4pLCAKCQkJCQkJCQkJCQkJCQkJJHRva2VuX3R5cGUpOwoKCQkJJHRoaXMtPnN0b3JlLT5jaGVja1NlcnZlck5vbmNlKAkkdGhpcy0+dXJsZGVjb2RlKCRjb25zdW1lcl9rZXkpLAoJCQkJCQkJCQkJCSR0aGlzLT51cmxkZWNvZGUoJHRva2VuKSwKCQkJCQkJCQkJCQkkdGhpcy0+Z2V0UGFyYW0oJ29hdXRoX3RpbWVzdGFtcCcsIHRydWUpLAoJCQkJCQkJCQkJCSR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfbm9uY2UnLCB0cnVlKSk7CgoJCQkkb2F1dGhfc2lnID0gJHRoaXMtPmdldFBhcmFtKCdvYXV0aF9zaWduYXR1cmUnKTsKCQkJaWYgKGVtcHR5KCRvYXV0aF9zaWcpKQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdWZXJpZmljYXRpb24gb2Ygc2lnbmF0dXJlIGZhaWxlZCAobm8gb2F1dGhfc2lnbmF0dXJlIGluIHJlcXVlc3QpLicpOwoJCQl9IAoJCQkKCQkJdHJ5CgkJCXsKCQkJCSR0aGlzLT52ZXJpZnlTaWduYXR1cmUoJHNlY3JldHNbJ2NvbnN1bWVyX3NlY3JldCddLCAkc2VjcmV0c1sndG9rZW5fc2VjcmV0J10sICR0b2tlbl90eXBlKTsKCQkJfQoJCQljYXRjaCAoT0F1dGhFeGNlcHRpb24yICRlKQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdWZXJpZmljYXRpb24gb2Ygc2lnbmF0dXJlIGZhaWxlZCAoc2lnbmF0dXJlIGJhc2Ugc3RyaW5nIHdhcyAiJy4kdGhpcy0+c2lnbmF0dXJlQmFzZVN0cmluZygpLiciKS4nIAoJCQkJCS4gIiB3aXRoICAiIC4gcHJpbnRfcihhcnJheSgkc2VjcmV0c1snY29uc3VtZXJfc2VjcmV0J10sICRzZWNyZXRzWyd0b2tlbl9zZWNyZXQnXSwgJHRva2VuX3R5cGUpLCB0cnVlKSk7CgkJCX0KCQkJCgkJCS8vIENoZWNrIHRoZSBvcHRpb25hbCBib2R5IHNpZ25hdHVyZQoJCQlpZiAoJHRoaXMtPmdldFBhcmFtKCd4b2F1dGhfYm9keV9zaWduYXR1cmUnKSkKCQkJewoJCQkJJG1ldGhvZCA9ICR0aGlzLT5nZXRQYXJhbSgneG9hdXRoX2JvZHlfc2lnbmF0dXJlX21ldGhvZCcpOwoJCQkJaWYgKGVtcHR5KCRtZXRob2QpKQoJCQkJewoJCQkJCSRtZXRob2QgPSAkdGhpcy0+Z2V0UGFyYW0oJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnKTsKCQkJCX0KCgkJCQl0cnkKCQkJCXsKCQkJCQkkdGhpcy0+dmVyaWZ5RGF0YVNpZ25hdHVyZSgkdGhpcy0+Z2V0Qm9keSgpLCAkc2VjcmV0c1snY29uc3VtZXJfc2VjcmV0J10sICRzZWNyZXRzWyd0b2tlbl9zZWNyZXQnXSwgJG1ldGhvZCwgJHRoaXMtPmdldFBhcmFtKCd4b2F1dGhfYm9keV9zaWduYXR1cmUnKSk7CgkJCQl9CgkJCQljYXRjaCAoT0F1dGhFeGNlcHRpb24yICRlKQoJCQkJewoJCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1ZlcmlmaWNhdGlvbiBvZiBib2R5IHNpZ25hdHVyZSBmYWlsZWQuJyk7CgkJCQl9CgkJCX0KCQkJCgkJCS8vIEFsbCBvayAtIGZldGNoIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QKCQkJaWYgKGlzc2V0KCRzZWNyZXRzWyd1c2VyX2lkJ10pKQoJCQl7CgkJCQkkdXNlcl9pZCA9ICRzZWNyZXRzWyd1c2VyX2lkJ107CgkJCX0KCQkJCgkJCS8vIENoZWNrIGlmIHRoZSBjb25zdW1lciB3YW50cyB1cyB0byByZXNldCB0aGUgdHRsIG9mIHRoaXMgdG9rZW4KCQkJJHR0bCA9ICR0aGlzLT5nZXRQYXJhbSgneG9hdXRoX3Rva2VuX3R0bCcsIHRydWUpOwoJCQlpZiAoaXNfbnVtZXJpYygkdHRsKSkKCQkJewoJCQkJJHRoaXMtPnN0b3JlLT5zZXRDb25zdW1lckFjY2Vzc1Rva2VuVHRsKCR0aGlzLT51cmxkZWNvZGUoJHRva2VuKSwgJHR0bCk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQ2FuXCd0IHZlcmlmeSByZXF1ZXN0LCBtaXNzaW5nIG9hdXRoX2NvbnN1bWVyX2tleSBvciBvYXV0aF90b2tlbicpOwoJCX0KCQlyZXR1cm4gYXJyYXkoJ3VzZXJfaWQnID0+ICR1c2VyX2lkLCAnY29uc3VtZXJfa2V5JyA9PiAkY29uc3VtZXJfa2V5LCAnb3NyX2lkJyA9PiAkc2VjcmV0c1snb3NyX2lkJ10pOyAKCX0KCgoJCgkvKioKCSAqIFZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHRoZSByZXF1ZXN0LCB1c2luZyB0aGUgbWV0aG9kIGluIG9hdXRoX3NpZ25hdHVyZV9tZXRob2QuCgkgKiBUaGUgc2lnbmF0dXJlIGlzIHJldHVybmVkIGVuY29kZWQgaW4gdGhlIGZvcm0gYXMgdXNlZCBpbiB0aGUgdXJsLiAgU28gdGhlIGJhc2U2NCBhbmQKCSAqIHVybGVuY29kaW5nIGhhcyBiZWVuIGRvbmUuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gdGhlIHNpZ25hdHVyZSBtZXRob2QgaXMgdW5rbm93biAKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm90IGFsbCBwYXJ0cyBhdmFpbGFibGUKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUgKCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0LCAkdG9rZW5fdHlwZSA9ICdhY2Nlc3MnICkKCXsKCQkkcmVxdWlyZWQgPSBhcnJheSgKCQkJCQkJJ29hdXRoX2NvbnN1bWVyX2tleScsCgkJCQkJCSdvYXV0aF9zaWduYXR1cmVfbWV0aG9kJywKCQkJCQkJJ29hdXRoX3RpbWVzdGFtcCcsCgkJCQkJCSdvYXV0aF9ub25jZScsCgkJCQkJCSdvYXV0aF9zaWduYXR1cmUnCgkJCQkJKTsKCgkJaWYgKCR0b2tlbl90eXBlICE9PSBmYWxzZSkKCQl7CgkJCSRyZXF1aXJlZFtdID0gJ29hdXRoX3Rva2VuJzsKCQl9CgoJCWZvcmVhY2ggKCRyZXF1aXJlZCBhcyAkcmVxKQoJCXsKCQkJaWYgKCFpc3NldCgkdGhpcy0+cGFyYW1bJHJlcV0pKQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDYW5cJ3QgdmVyaWZ5IHJlcXVlc3Qgc2lnbmF0dXJlLCBtaXNzaW5nIHBhcmFtZXRlciAiJy4kcmVxLiciJyk7CgkJCX0KCQl9CgoJCSR0aGlzLT5jaGVja3MoKTsKCgkJJGJhc2UgPSAkdGhpcy0+c2lnbmF0dXJlQmFzZVN0cmluZygpOwoJCSR0aGlzLT52ZXJpZnlEYXRhU2lnbmF0dXJlKCRiYXNlLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0LCAkdGhpcy0+cGFyYW1bJ29hdXRoX3NpZ25hdHVyZV9tZXRob2QnXSwgJHRoaXMtPnBhcmFtWydvYXV0aF9zaWduYXR1cmUnXSk7Cgl9CgoKCgkvKioKCSAqIFZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIGEgc3RyaW5nLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIAlkYXRhCgkgKiBAcGFyYW0gc3RyaW5nCWNvbnN1bWVyX3NlY3JldAoJICogQHBhcmFtIHN0cmluZwl0b2tlbl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgCXNpZ25hdHVyZV9tZXRob2QKCSAqIEBwYXJhbSBzdHJpbmcgCXNpZ25hdHVyZQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gdGhlIHNpZ25hdHVyZSBtZXRob2QgaXMgdW5rbm93biAKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlEYXRhU2lnbmF0dXJlICggJGRhdGEsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICRzaWduYXR1cmVfbWV0aG9kLCAkc2lnbmF0dXJlICkKCXsKCQlpZiAoaXNfbnVsbCgkZGF0YSkpCgkJewoJCQkkZGF0YSA9ICcnOwoJCX0KCgkJJHNpZyA9ICR0aGlzLT5nZXRTaWduYXR1cmVNZXRob2QoJHNpZ25hdHVyZV9tZXRob2QpOwoJCWlmICghJHNpZy0+dmVyaWZ5KCR0aGlzLCAkZGF0YSwgJGNvbnN1bWVyX3NlY3JldCwgJHRva2VuX3NlY3JldCwgJHNpZ25hdHVyZSkpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCAoJy4kc2lnbmF0dXJlX21ldGhvZC4nKScpOwoJCX0KCX0KCgkvKioKCSAqIAoJICogQHBhcmFtIGFycmF5ICRhY2NlcHRlZCBUaGUgYXJyYXkgb2YgYWNjZXB0ZWQgc2lnbmF0dXJlIG1ldGhvZHMsIG9yIGlmIG51bGwgaXMgcGFzc2VkIAoJICogYWxsIHN1cHBvcnRlZCBtZXRob2RzIGFyZSBhY2NlcHRlZCBhbmQgdGhlcmUgaXMgbm8gZmlsdGVyaW5nLgoJICogCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRBY2NlcHRlZFNpZ25hdHVyZU1ldGhvZHMoJGFjY2VwdGVkID0gbnVsbCkgewoJCWlmIChpc19hcnJheSgkYWNjZXB0ZWQpKQoJCQkkdGhpcy0+YWNjZXB0ZWRfc2lnbmF0dXJlcyA9ICRhY2NlcHRlZDsKCQllbHNlIGlmICgkYWNjZXB0ZWQgPT0gbnVsbCkKCQkJJHRoaXMtPmFjY2VwdGVkX3NpZ25hdHVyZXMgPSBudWxsOwoJfQp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthServer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTZXJ2ZXIgbGF5ZXIgb3ZlciB0aGUgT0F1dGhSZXF1ZXN0IGhhbmRsZXIKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTZXJ2ZXIucGhwIDE1NCAyMDEwLTA4LTMxIDE4OjA0OjQxWiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMjcsIDIwMDcgMTI6MzY6MzggUE0KICogCiAqIAogKiBUaGUgTUlUIExpY2Vuc2UKICogCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE1lZGlhbWF0aWMgTGFiCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICogCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKiAKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KCnJlcXVpcmVfb25jZSAnT0F1dGhSZXF1ZXN0VmVyaWZpZXIucGhwJzsKcmVxdWlyZV9vbmNlICdPQXV0aFNlc3Npb24ucGhwJzsKCmNsYXNzIE9BdXRoU2VydmVyIGV4dGVuZHMgT0F1dGhSZXF1ZXN0VmVyaWZpZXIKewoJcHJvdGVjdGVkICRzZXNzaW9uOwoJCglwcm90ZWN0ZWQgJGFsbG93ZWRfdXJpX3NjaGVtZXMgPSBhcnJheSgKCQknaHR0cCcsCgkJJ2h0dHBzJwoJKTsKCglwcm90ZWN0ZWQgJGRpc2FsbG93ZWRfdXJpX3NjaGVtZXMgPSBhcnJheSgKCQknZmlsZScsCgkJJ2NhbGx0bycsCgkJJ21haWx0bycKCSk7CgoJLyoqCgkgKiBDb25zdHJ1Y3QgdGhlIHJlcXVlc3QgdG8gYmUgdmVyaWZpZWQKCSAqIAoJICogQHBhcmFtIHN0cmluZyByZXF1ZXN0CgkgKiBAcGFyYW0gc3RyaW5nIG1ldGhvZAoJICogQHBhcmFtIGFycmF5IHBhcmFtcyBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzCgkgKiBAcGFyYW0gc3RyaW5nIHN0b3JlIFRoZSBzZXNzaW9uIHN0b3JhZ2UgY2xhc3MuCgkgKiBAcGFyYW0gYXJyYXkgc3RvcmVfb3B0aW9ucyBUaGUgc2Vzc2lvbiBzdG9yYWdlIGNsYXNzIHBhcmFtZXRlcnMuCgkgKiBAcGFyYW0gYXJyYXkgb3B0aW9ucyBFeHRyYSBvcHRpb25zOgoJICogICAtIGFsbG93ZWRfdXJpX3NjaGVtZXM6IGxpc3Qgb2YgYWxsb3dlZCB1cmkgc2NoZW1lcy4KCSAqICAgLSBkaXNhbGxvd2VkX3VyaV9zY2hlbWVzOiBsaXN0IG9mIHVuYWxsb3dlZCB1cmkgc2NoZW1lcy4KCSAqIAoJICogZS5nLiBBbGxvdyBvbmx5IGh0dHAgYW5kIGh0dHBzCgkgKiAkb3B0aW9ucyA9IGFycmF5KAoJICogICAgICdhbGxvd2VkX3VyaV9zY2hlbWVzJyA9PiBhcnJheSgnaHR0cCcsICdodHRwcycpLAoJICogICAgICdkaXNhbGxvd2VkX3VyaV9zY2hlbWVzJyA9PiBhcnJheSgpCgkgKiApOwoJICogCgkgKiBlLmcuIERpc2FsbG93IGNhbGx0bywgbWFpbHRvIGFuZCBmaWxlLCBhbGxvdyBldmVyeXRoaW5nIGVsc2UKCSAqICRvcHRpb25zID0gYXJyYXkoCgkgKiAgICAgJ2FsbG93ZWRfdXJpX3NjaGVtZXMnID0+IGFycmF5KCksCgkgKiAgICAgJ2Rpc2FsbG93ZWRfdXJpX3NjaGVtZXMnID0+IGFycmF5KCdjYWxsdG8nLCAnbWFpbHRvJywgJ2ZpbGUnKQoJICogKTsKCSAqIAoJICogZS5nLiBBbGxvdyBldmVyeXRoaW5nCgkgKiAkb3B0aW9ucyA9IGFycmF5KAoJICogICAgICdhbGxvd2VkX3VyaV9zY2hlbWVzJyA9PiBhcnJheSgpLAoJICogICAgICdkaXNhbGxvd2VkX3VyaV9zY2hlbWVzJyA9PiBhcnJheSgpCgkgKiApOyAKCSAqICAKCSAqLwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkdXJpID0gbnVsbCwgJG1ldGhvZCA9IG51bGwsICRwYXJhbXMgPSBudWxsLCAkc3RvcmUgPSAnU0VTU0lPTicsIAoJCQkkc3RvcmVfb3B0aW9ucyA9IGFycmF5KCksICRvcHRpb25zID0gYXJyYXkoKSApCgl7CiAJCXBhcmVudDo6X19jb25zdHJ1Y3QoJHVyaSwgJG1ldGhvZCwgJHBhcmFtcyk7CiAJCSR0aGlzLT5zZXNzaW9uID0gT0F1dGhTZXNzaW9uOjppbnN0YW5jZSgkc3RvcmUsICRzdG9yZV9vcHRpb25zKTsKIAkJCgkgCWlmIChhcnJheV9rZXlfZXhpc3RzKCdhbGxvd2VkX3VyaV9zY2hlbWVzJywgJG9wdGlvbnMpICYmIGlzX2FycmF5KCRvcHRpb25zWydhbGxvd2VkX3VyaV9zY2hlbWVzJ10pKSB7CgkgCQkkdGhpcy0+YWxsb3dlZF91cmlfc2NoZW1lcyA9ICRvcHRpb25zWydhbGxvd2VkX3VyaV9zY2hlbWVzJ107CgkgCX0KCSAJaWYgKGFycmF5X2tleV9leGlzdHMoJ2Rpc2FsbG93ZWRfdXJpX3NjaGVtZXMnLCAkb3B0aW9ucykgJiYgaXNfYXJyYXkoJG9wdGlvbnNbJ2Rpc2FsbG93ZWRfdXJpX3NjaGVtZXMnXSkpIHsKCSAJCSR0aGlzLT5kaXNhbGxvd2VkX3VyaV9zY2hlbWVzID0gJG9wdGlvbnNbJ2Rpc2FsbG93ZWRfdXJpX3NjaGVtZXMnXTsKCSAJfQoJfQoJCgkvKioKCSAqIEhhbmRsZSB0aGUgcmVxdWVzdF90b2tlbiByZXF1ZXN0LgoJICogUmV0dXJucyB0aGUgbmV3IHJlcXVlc3QgdG9rZW4gYW5kIHJlcXVlc3QgdG9rZW4gc2VjcmV0LgoJICogCgkgKiBUT0RPOiBhZGQgY29ycmVjdCByZXN1bHQgY29kZSB0byBleGNlcHRpb24KCSAqIAoJICogQHJldHVybiBzdHJpbmcgCXJldHVybmVkIHJlcXVlc3QgdG9rZW4sIGZhbHNlIG9uIGFuIGVycm9yCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZXF1ZXN0VG9rZW4gKCkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnN0YXJ0KCR0aGlzKTsKCQl0cnkKCQl7CgkJCSR0aGlzLT52ZXJpZnkoZmFsc2UpOwoJCQkKCQkJJG9wdGlvbnMgPSBhcnJheSgpOwoJCQkkdHRsICAgICA9ICR0aGlzLT5nZXRQYXJhbSgneG9hdXRoX3Rva2VuX3R0bCcsIGZhbHNlKTsKCQkJaWYgKCR0dGwpCgkJCXsKCQkJCSRvcHRpb25zWyd0b2tlbl90dGwnXSA9ICR0dGw7CgkJCX0KCiAJCQkvLyAxLjBhIENvbXBhdGliaWxpdHkgOiBhc3NvY2lhdGUgY2FsbGJhY2sgdXJsIHRvIHRoZSByZXF1ZXN0IHRva2VuCiAJCQkkY2JVcmwgICA9ICR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfY2FsbGJhY2snLCB0cnVlKTsKIAkJCWlmICgkY2JVcmwpIHsKIAkJCQkkb3B0aW9uc1snb2F1dGhfY2FsbGJhY2snXSA9ICRjYlVybDsKIAkJCX0KCQkJCgkJCS8vIENyZWF0ZSBhIHJlcXVlc3QgdG9rZW4KCQkJJHN0b3JlICA9IE9BdXRoU3RvcmU6Omluc3RhbmNlKCk7CgkJCSR0b2tlbiAgPSAkc3RvcmUtPmFkZENvbnN1bWVyUmVxdWVzdFRva2VuKCR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfY29uc3VtZXJfa2V5JywgdHJ1ZSksICRvcHRpb25zKTsKCQkJJHJlc3VsdCA9ICdvYXV0aF9jYWxsYmFja19jb25maXJtZWQ9MSZvYXV0aF90b2tlbj0nLiR0aGlzLT51cmxlbmNvZGUoJHRva2VuWyd0b2tlbiddKQoJCQkJCS4nJm9hdXRoX3Rva2VuX3NlY3JldD0nLiR0aGlzLT51cmxlbmNvZGUoJHRva2VuWyd0b2tlbl9zZWNyZXQnXSk7CgoJCQlpZiAoIWVtcHR5KCR0b2tlblsndG9rZW5fdHRsJ10pKQoJCQl7CgkJCQkkcmVzdWx0IC49ICcmeG9hdXRoX3Rva2VuX3R0bD0nLiR0aGlzLT51cmxlbmNvZGUoJHRva2VuWyd0b2tlbl90dGwnXSk7CgkJCX0KCgkJCSRyZXF1ZXN0X3Rva2VuID0gJHRva2VuWyd0b2tlbiddOwoJCQkKCQkJaGVhZGVyKCdIVFRQLzEuMSAyMDAgT0snKTsKCQkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJHJlc3VsdCkpOwoJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CgoJCQllY2hvICRyZXN1bHQ7CgkJfQoJCWNhdGNoIChPQXV0aEV4Y2VwdGlvbjIgJGUpCgkJewoJCQkkcmVxdWVzdF90b2tlbiA9IGZhbHNlOwoKCQkJaGVhZGVyKCdIVFRQLzEuMSA0MDEgVW5hdXRob3JpemVkJyk7CgkJCWhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CgoJCQllY2hvICJPQXV0aCBWZXJpZmljYXRpb24gRmFpbGVkOiAiIC4gJGUtPmdldE1lc3NhZ2UoKTsKCQl9CgoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6Zmx1c2goKTsKCQlyZXR1cm4gJHJlcXVlc3RfdG9rZW47Cgl9CgkKCQoJLyoqCgkgKiBWZXJpZnkgdGhlIHN0YXJ0IG9mIGFuIGF1dGhvcml6YXRpb24gcmVxdWVzdC4gIFZlcmlmaWVzIGlmIHRoZSByZXF1ZXN0IHRva2VuIGlzIHZhbGlkLgoJICogTmV4dCBzdGVwIGlzIHRoZSBtZXRob2QgYXV0aG9yaXplRmluaXNoKCkKCSAqIAoJICogTm90YSBiZW5lOiB0aGlzIHN0b3JlcyB0aGUgY3VycmVudCB0b2tlbiwgY29uc3VtZXIga2V5IGFuZCBjYWxsYmFjayBpbiB0aGUgX1NFU1NJT04KCSAqIAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgdGhyb3duIHdoZW4gbm90IGEgdmFsaWQgcmVxdWVzdAoJICogQHJldHVybiBhcnJheSB0b2tlbiBkZXNjcmlwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gYXV0aG9yaXplVmVyaWZ5ICgpCgl7CgkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjpzdGFydCgkdGhpcyk7CgoJCSRzdG9yZSA9IE9BdXRoU3RvcmU6Omluc3RhbmNlKCk7CgkJJHRva2VuID0gJHRoaXMtPmdldFBhcmFtKCdvYXV0aF90b2tlbicsIHRydWUpOwoJCSRycyAgICA9ICRzdG9yZS0+Z2V0Q29uc3VtZXJSZXF1ZXN0VG9rZW4oJHRva2VuKTsKCQlpZiAoZW1wdHkoJHJzKSkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1Vua25vd24gcmVxdWVzdCB0b2tlbiAiJy4kdG9rZW4uJyInKTsKCQl9CgoJCS8vIFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNhbGxiYWNrCgkJJHZlcmlmeV9vYXV0aF90b2tlbiA9ICR0aGlzLT5zZXNzaW9uLT5nZXQoJ3ZlcmlmeV9vYXV0aF90b2tlbicpOwkJCgkJaWYgKAllbXB0eSgkdmVyaWZ5X29hdXRoX3Rva2VuKQoJCQl8fAlzdHJjbXAoJHZlcmlmeV9vYXV0aF90b2tlbiwgJHJzWyd0b2tlbiddKSkKCQl7CgkJCSR0aGlzLT5zZXNzaW9uLT5zZXQoJ3ZlcmlmeV9vYXV0aF90b2tlbicsICRyc1sndG9rZW4nXSk7CgkJCSR0aGlzLT5zZXNzaW9uLT5zZXQoJ3ZlcmlmeV9vYXV0aF9jb25zdW1lcl9rZXknLCAkcnNbJ2NvbnN1bWVyX2tleSddKTsKCQkJJGNiID0gJHRoaXMtPmdldFBhcmFtKCdvYXV0aF9jYWxsYmFjaycsIHRydWUpOyAKCQkJaWYgKCRjYikKCQkJCSR0aGlzLT5zZXNzaW9uLT5zZXQoJ3ZlcmlmeV9vYXV0aF9jYWxsYmFjaycsICRjYik7CgkJCWVsc2UKCQkJCSR0aGlzLT5zZXNzaW9uLT5zZXQoJ3ZlcmlmeV9vYXV0aF9jYWxsYmFjaycsICRyc1snY2FsbGJhY2tfdXJsJ10pOwoJCX0KCQlPQXV0aFJlcXVlc3RMb2dnZXI6OmZsdXNoKCk7CgkJcmV0dXJuICRyczsKCX0KCQoJCgkvKioKCSAqIE92ZXJydWxlIHRoaXMgbWV0aG9kIHdoZW4geW91IHdhbnQgdG8gZGlzcGxheSBhIG5pY2UgcGFnZSB3aGVuCgkgKiB0aGUgYXV0aG9yaXphdGlvbiBpcyBmaW5pc2hlZC4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qga25vdyBpZiB0aGUgYXV0aG9yaXphdGlvbiB3YXMKCSAqIHN1Y2Nlc2Z1bGwsIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSB0b2tlbiBpbiB0aGUgZGF0YWJhc2UuCgkgKiAKCSAqIEBwYXJhbSBib29sZWFuIGF1dGhvcml6ZWQJaWYgdGhlIGN1cnJlbnQgdG9rZW4gKG9hdXRoX3Rva2VuIHBhcmFtKSBpcyBhdXRob3JpemVkIG9yIG5vdAoJICogQHBhcmFtIGludCB1c2VyX2lkCQkJdXNlciBmb3Igd2hpY2ggdGhlIHRva2VuIHdhcyBhdXRob3JpemVkIChvciBkZW5pZWQpCgkgKiBAcmV0dXJuIHN0cmluZyB2ZXJpZmllciAgRm9yIDEuMGEgQ29tcGF0aWJpbGl0eQoJICovCglwdWJsaWMgZnVuY3Rpb24gYXV0aG9yaXplRmluaXNoICggJGF1dGhvcml6ZWQsICR1c2VyX2lkICkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnN0YXJ0KCR0aGlzKTsKCgkJJHRva2VuID0gJHRoaXMtPmdldFBhcmFtKCdvYXV0aF90b2tlbicsIHRydWUpOwoJCSR2ZXJpZmllciA9IG51bGw7CgkJaWYgKCR0aGlzLT5zZXNzaW9uLT5nZXQoJ3ZlcmlmeV9vYXV0aF90b2tlbicpID09ICR0b2tlbikKCQl7CgkJCS8vIEZsYWcgdGhlIHRva2VuIGFzIGF1dGhvcml6ZWQsIG9yIHJlbW92ZSB0aGUgdG9rZW4gd2hlbiBub3QgYXV0aG9yaXplZAoJCQkkc3RvcmUgPSBPQXV0aFN0b3JlOjppbnN0YW5jZSgpOwoKCQkJLy8gRmV0Y2ggdGhlIHJlZmVycmVyIGhvc3QgZnJvbSB0aGUgb2F1dGggY2FsbGJhY2sgcGFyYW1ldGVyCgkJCSRyZWZlcnJlcl9ob3N0ICA9ICcnOwoJCQkkb2F1dGhfY2FsbGJhY2sgPSBmYWxzZTsKCQkJJHZlcmlmeV9vYXV0aF9jYWxsYmFjayA9ICR0aGlzLT5zZXNzaW9uLT5nZXQoJ3ZlcmlmeV9vYXV0aF9jYWxsYmFjaycpOwoJCQlpZiAoIWVtcHR5KCR2ZXJpZnlfb2F1dGhfY2FsbGJhY2spICYmICR2ZXJpZnlfb2F1dGhfY2FsbGJhY2sgIT0gJ29vYicpIC8vIE9VVCBPRiBCQU5ECgkJCXsKCQkJCSRvYXV0aF9jYWxsYmFjayA9ICR0aGlzLT5zZXNzaW9uLT5nZXQoJ3ZlcmlmeV9vYXV0aF9jYWxsYmFjaycpOwoJCQkJJHBzID0gcGFyc2VfdXJsKCRvYXV0aF9jYWxsYmFjayk7CgkJCQlpZiAoaXNzZXQoJHBzWydob3N0J10pKQoJCQkJewoJCQkJCSRyZWZlcnJlcl9ob3N0ID0gJHBzWydob3N0J107CgkJCQl9CgkJCX0KCQkJCgkJCWlmICgkYXV0aG9yaXplZCkKCQkJewoJCQkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjphZGROb3RlKCdBdXRob3JpemVkIHRva2VuICInLiR0b2tlbi4nIiBmb3IgdXNlciAnLiR1c2VyX2lkLicgd2l0aCByZWZlcnJlciAiJy4kcmVmZXJyZXJfaG9zdC4nIicpOwogCQkJCS8vIDEuMGEgQ29tcGF0aWJpbGl0eSA6IGNyZWF0ZSBhIHZlcmlmaWVyIGNvZGUKCQkJCSR2ZXJpZmllciA9ICRzdG9yZS0+YXV0aG9yaXplQ29uc3VtZXJSZXF1ZXN0VG9rZW4oJHRva2VuLCAkdXNlcl9pZCwgJHJlZmVycmVyX2hvc3QpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJT0F1dGhSZXF1ZXN0TG9nZ2VyOjphZGROb3RlKCdBdXRob3JpemF0aW9uIHJlamVjdGVkIGZvciB0b2tlbiAiJy4kdG9rZW4uJyIgZm9yIHVzZXIgJy4kdXNlcl9pZC4iXG5Ub2tlbiBoYXMgYmVlbiBkZWxldGVkIik7CgkJCQkkc3RvcmUtPmRlbGV0ZUNvbnN1bWVyUmVxdWVzdFRva2VuKCR0b2tlbik7CgkJCX0KCQkJCgkJCWlmICghZW1wdHkoJG9hdXRoX2NhbGxiYWNrKSkKCQkJewogCQkJCSRwYXJhbXMgPSBhcnJheSgnb2F1dGhfdG9rZW4nID0+IHJhd3VybGVuY29kZSgkdG9rZW4pKTsKIAkJCQkvLyAxLjBhIENvbXBhdGliaWxpdHkgOiBpZiB2ZXJpZmllciBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCwgYWRkIGl0IHRvIHRoZSBVUkwKIAkJCQlpZiAoJHZlcmlmaWVyKSB7CiAJCQkJCSRwYXJhbXNbJ29hdXRoX3ZlcmlmaWVyJ10gPSAkdmVyaWZpZXI7CiAJCQkJfQogCQkJCQoJCQkJJHVyaSA9IHByZWdfcmVwbGFjZSgnL1xzLycsICclMjAnLCAkb2F1dGhfY2FsbGJhY2spOwoJCQkJaWYgKCFlbXB0eSgkdGhpcy0+YWxsb3dlZF91cmlfc2NoZW1lcykpIAoJCQkJewoJCQkJCWlmICghaW5fYXJyYXkoc3Vic3RyKCR1cmksIDAsIHN0cnBvcygkdXJpLCAnOi8vJykpLCAkdGhpcy0+YWxsb3dlZF91cmlfc2NoZW1lcykpIAoJCQkJCXsKCQkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignSWxsZWdhbCBwcm90b2NvbCBpbiByZWRpcmVjdCB1cmkgJy4kdXJpKTsKCQkJCQl9CgkJCQl9IAoJCQkJZWxzZSBpZiAoIWVtcHR5KCR0aGlzLT5kaXNhbGxvd2VkX3VyaV9zY2hlbWVzKSkgCgkJCQl7CgkJCQkJaWYgKGluX2FycmF5KHN1YnN0cigkdXJpLCAwLCBzdHJwb3MoJHVyaSwgJzovLycpKSwgJHRoaXMtPmRpc2FsbG93ZWRfdXJpX3NjaGVtZXMpKQoJCQkJCXsKCQkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignSWxsZWdhbCBwcm90b2NvbCBpbiByZWRpcmVjdCB1cmkgJy4kdXJpKTsKCQkJCQl9CgkJCQl9CgogCQkJCSR0aGlzLT5yZWRpcmVjdCgkb2F1dGhfY2FsbGJhY2ssICRwYXJhbXMpOwoJCQl9CgkJfQoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6Zmx1c2goKTsKCQlyZXR1cm4gJHZlcmlmaWVyOwoJfQoJCgkKCS8qKgoJICogRXhjaGFuZ2UgYSByZXF1ZXN0IHRva2VuIGZvciBhbiBhY2Nlc3MgdG9rZW4uCgkgKiBUaGUgZXhjaGFuZ2UgaXMgb25seSBzdWNjZXNmdWwgaWZmIHRoZSByZXF1ZXN0IHRva2VuIGhhcyBiZWVuIGF1dGhvcml6ZWQuCgkgKiAKCSAqIE5ldmVyIHJldHVybnMsIGNhbGxzIGV4aXQoKSB3aGVuIHRva2VuIGlzIGV4Y2hhbmdlZCBvciB3aGVuIGVycm9yIGlzIHJldHVybmVkLgoJICovCglwdWJsaWMgZnVuY3Rpb24gYWNjZXNzVG9rZW4gKCkKCXsKCQlPQXV0aFJlcXVlc3RMb2dnZXI6OnN0YXJ0KCR0aGlzKTsKCgkJdHJ5CgkJewoJCQkkdGhpcy0+dmVyaWZ5KCdyZXF1ZXN0Jyk7CgoJCQkkb3B0aW9ucyA9IGFycmF5KCk7CgkJCSR0dGwgICAgID0gJHRoaXMtPmdldFBhcmFtKCd4b2F1dGhfdG9rZW5fdHRsJywgZmFsc2UpOwoJCQlpZiAoJHR0bCkKCQkJewoJCQkJJG9wdGlvbnNbJ3Rva2VuX3R0bCddID0gJHR0bDsKCQkJfQoKCQkJJHZlcmlmaWVyID0gJHRoaXMtPmdldFBhcmFtKCdvYXV0aF92ZXJpZmllcicsIGZhbHNlKTsKIAkJCWlmICgkdmVyaWZpZXIpIHsKIAkJCQkkb3B0aW9uc1sndmVyaWZpZXInXSA9ICR2ZXJpZmllcjsKIAkJCX0KCQkJCgkJCSRzdG9yZSAgPSBPQXV0aFN0b3JlOjppbnN0YW5jZSgpOwoJCQkkdG9rZW4gID0gJHN0b3JlLT5leGNoYW5nZUNvbnN1bWVyUmVxdWVzdEZvckFjY2Vzc1Rva2VuKCR0aGlzLT5nZXRQYXJhbSgnb2F1dGhfdG9rZW4nLCB0cnVlKSwgJG9wdGlvbnMpOwoJCQkkcmVzdWx0ID0gJ29hdXRoX3Rva2VuPScuJHRoaXMtPnVybGVuY29kZSgkdG9rZW5bJ3Rva2VuJ10pCgkJCQkJLicmb2F1dGhfdG9rZW5fc2VjcmV0PScuJHRoaXMtPnVybGVuY29kZSgkdG9rZW5bJ3Rva2VuX3NlY3JldCddKTsKCQkJCQkKCQkJaWYgKCFlbXB0eSgkdG9rZW5bJ3Rva2VuX3R0bCddKSkKCQkJewoJCQkJJHJlc3VsdCAuPSAnJnhvYXV0aF90b2tlbl90dGw9Jy4kdGhpcy0+dXJsZW5jb2RlKCR0b2tlblsndG9rZW5fdHRsJ10pOwoJCQl9CgkJCQkJCgkJCWhlYWRlcignSFRUUC8xLjEgMjAwIE9LJyk7CgkJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuc3RybGVuKCRyZXN1bHQpKTsKCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwoKCQkJZWNobyAkcmVzdWx0OwoJCX0KCQljYXRjaCAoT0F1dGhFeGNlcHRpb24yICRlKQoJCXsKCQkJaGVhZGVyKCdIVFRQLzEuMSA0MDEgQWNjZXNzIERlbmllZCcpOwoJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwoKCQkJZWNobyAiT0F1dGggVmVyaWZpY2F0aW9uIEZhaWxlZDogIiAuICRlLT5nZXRNZXNzYWdlKCk7CgkJfQoJCQoJCU9BdXRoUmVxdWVzdExvZ2dlcjo6Zmx1c2goKTsKCQlleGl0KCk7Cgl9CQp9CgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthSession.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0byBzZWxlY3QgdGhlIHN0b3JlIHlvdSB3YW50IHRvIHVzZQogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFNlc3Npb24ucGhwIDY3IDIwMTAtMDEtMTIgMTg6NDI6MDRaIGJydW5vYmdAY29yb2xsYXJpdW0uY29tICQKICogQGF1dGhvciBicnVub2JnQGNvcm9sbGFyaXVtLmNvbQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogQ29weXJpZ2h0IChjKSAyMDEwIENvcm9sbGFyaXVtIFRlY2hub2xvZ2llcwogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoRXhjZXB0aW9uMi5waHAnOwoKY2xhc3MgT0F1dGhTZXNzaW9uCnsKCXN0YXRpYyBwcml2YXRlICRpbnN0YW5jZSA9IGZhbHNlOwoKCS8qKgoJICogUmVxdWVzdCBhbiBpbnN0YW5jZSBvZiB0aGUgT0F1dGhTZXNzaW9uCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5zdGFuY2UgKCAkc3RvcmUgPSAnU0VTU0lPTicsICRvcHRpb25zID0gYXJyYXkoKSApCgl7CgkgICAgaWYgKCFPQXV0aFNlc3Npb246OiRpbnN0YW5jZSkKCSAgICB7CgkJCS8vIFNlbGVjdCB0aGUgc3RvcmUgeW91IHdhbnQgdG8gdXNlCgkJCWlmIChzdHJwb3MoJHN0b3JlLCAnLycpID09PSBmYWxzZSkKCQkJewoJCQkJJGNsYXNzID0gJ09BdXRoU2Vzc2lvbicuJHN0b3JlOwoJCQkJJGZpbGUgID0gZGlybmFtZShfX0ZJTEVfXykgLiAnL3Nlc3Npb24vJy4kY2xhc3MuJy5waHAnOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGZpbGUgID0gJHN0b3JlOwoJCQkJJHN0b3JlID0gYmFzZW5hbWUoJGZpbGUsICcucGhwJyk7CgkJCQkkY2xhc3MgPSAkc3RvcmU7CgkJCX0KCgkJCWlmIChpc19maWxlKCRmaWxlKSkKCQkJewoJCQkJcmVxdWlyZV9vbmNlICRmaWxlOwoJCQkJCgkJCQlpZiAoY2xhc3NfZXhpc3RzKCRjbGFzcykpCgkJCQl7CgkJCQkJT0F1dGhTZXNzaW9uOjokaW5zdGFuY2UgPSBuZXcgJGNsYXNzKCRvcHRpb25zKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDb3VsZCBub3QgZmluZCBjbGFzcyAnLiRjbGFzcy4nIGluIGZpbGUgJy4kZmlsZSk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBPQXV0aFNlc3Npb24gZm9yICcuJHN0b3JlLicgKGZpbGUgJy4kZmlsZS4nKScpOwoJCQl9CgkgICAgfQoJICAgIHJldHVybiBPQXV0aFNlc3Npb246OiRpbnN0YW5jZTsJCgl9Cn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/OAuthStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0byBzZWxlY3QgdGhlIHN0b3JlIHlvdSB3YW50IHRvIHVzZQogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFN0b3JlLnBocCA2NyAyMDEwLTAxLTEyIDE4OjQyOjA0WiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMTYsIDIwMDcgNDowMzozMCBQTQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9PQXV0aEV4Y2VwdGlvbjIucGhwJzsKCmNsYXNzIE9BdXRoU3RvcmUKewoJc3RhdGljIHByaXZhdGUgJGluc3RhbmNlID0gZmFsc2U7CgoJLyoqCgkgKiBSZXF1ZXN0IGFuIGluc3RhbmNlIG9mIHRoZSBPQXV0aFN0b3JlCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5zdGFuY2UgKCAkc3RvcmUgPSAnTXlTUUwnLCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJICAgIGlmICghT0F1dGhTdG9yZTo6JGluc3RhbmNlKQoJICAgIHsKCQkJLy8gU2VsZWN0IHRoZSBzdG9yZSB5b3Ugd2FudCB0byB1c2UKCQkJaWYgKHN0cnBvcygkc3RvcmUsICcvJykgPT09IGZhbHNlKQoJCQl7CgkJCQkkY2xhc3MgPSAnT0F1dGhTdG9yZScuJHN0b3JlOwoJCQkJJGZpbGUgID0gZGlybmFtZShfX0ZJTEVfXykgLiAnL3N0b3JlLycuJGNsYXNzLicucGhwJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRmaWxlICA9ICRzdG9yZTsKCQkJCSRzdG9yZSA9IGJhc2VuYW1lKCRmaWxlLCAnLnBocCcpOwoJCQkJJGNsYXNzID0gJHN0b3JlOwoJCQl9CgoJCQlpZiAoaXNfZmlsZSgkZmlsZSkpCgkJCXsKCQkJCXJlcXVpcmVfb25jZSAkZmlsZTsKCQkJCQoJCQkJaWYgKGNsYXNzX2V4aXN0cygkY2xhc3MpKQoJCQkJewoJCQkJCU9BdXRoU3RvcmU6OiRpbnN0YW5jZSA9IG5ldyAkY2xhc3MoJG9wdGlvbnMpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBmaW5kIGNsYXNzICcuJGNsYXNzLicgaW4gZmlsZSAnLiRmaWxlKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIE9BdXRoU3RvcmUgZm9yICcuJHN0b3JlLicgKGZpbGUgJy4kZmlsZS4nKScpOwoJCQl9CgkgICAgfQoJICAgIHJldHVybiBPQXV0aFN0b3JlOjokaW5zdGFuY2U7CQoJfQp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/session/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/session/OAuthSessionAbstract.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBPQXV0aFN0b3JlIGltcGxlbWVudGF0aW9ucwogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIEJydW5vIEJhcmJlcmkgR25lY2NvIDxicnVub2JnQGNvcm9sbGFyaXVtLmNvbT4KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDEwIENvcm9sbGFyaXVtIFRlY2hub2xvZ2llcwogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgovKioKICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHN0b3JlIFNlc3Npb24gaW5mb3JtYXRpb24gb24gdGhlIHNlcnZlci4gTW9zdCAKICogcGVvcGxlIHdpbGwgdXNlIHRoZSAkX1NFU1NJT04gYmFzZWQgaW1wbGVtZW50YXRpb24sIGJ1dCB5b3UgbWF5IHByZWZlciAKICogYSBTUUwsIE1lbWNhY2hlIG9yIG90aGVyIGltcGxlbWVudGF0aW9uLgogKgogKi8KYWJzdHJhY3QgY2xhc3MgT0F1dGhTZXNzaW9uQWJzdHJhY3QKewoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldCAoICRrZXkgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzZXQgKCAka2V5LCAkZGF0YSApOwp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/session/OAuthSessionSESSION.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBPQXV0aFN0b3JlIGltcGxlbWVudGF0aW9ucwogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIEJydW5vIEJhcmJlcmkgR25lY2NvIDxicnVub2JnQGNvcm9sbGFyaXVtLmNvbT4KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDEwIENvcm9sbGFyaXVtIFRlY2hub2xvZ2llcwogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoU2Vzc2lvbkFic3RyYWN0LmNsYXNzLnBocCc7CgpjbGFzcyBPQXV0aFNlc3Npb25TRVNTSU9OIGV4dGVuZHMgT0F1dGhTZXNzaW9uQWJzdHJhY3QKewoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJfQoKCS8qKgoJICogR2V0cyBhIHZhcmlhYmxlIHZhbHVlCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgJGtleQoJICogQHJldHVybiBUaGUgdmFsdWUgb3IgbnVsbCBpZiBub3Qgc2V0LgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0ICggJGtleSApIAoJewoJCXJldHVybiBAJF9TRVNTSU9OWyRrZXldOwoJfQoJCgkvKioKCSAqIFNldHMgYSB2YXJpYWJsZSB2YWx1ZQoJICogCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleQoJICogQHBhcmFtIGFueSAkZGF0YSBUaGUgZGF0YSAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldCAoICRrZXksICRkYXRhICkgCgl7CgkJJF9TRVNTSU9OWyRrZXldID0gJGRhdGE7Cgl9Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/OAuthSignatureMethod.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBJbnRlcmZhY2UgZm9yIE9BdXRoIHNpZ25hdHVyZSBtZXRob2RzCiAqIAogKiBAdmVyc2lvbiAkSWQkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBTZXAgOCwgMjAwOCAxMjowNDozNSBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgphYnN0cmFjdCBjbGFzcyBPQXV0aFNpZ25hdHVyZU1ldGhvZAp7CgkvKioKCSAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHNpZ25hdHVyZQoJICogCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOwoJCgkvKioKCSAqIFJldHVybiB0aGUgc2lnbmF0dXJlIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdAoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0IHJlcXVlc3QKCSAqIEBwYXJhbSBzdHJpbmcgYmFzZV9zdHJpbmcKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldAoJICogQHJldHVybiBzdHJpbmcgIAoJICovCglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc2lnbmF0dXJlICggJHJlcXVlc3QsICRiYXNlX3N0cmluZywgJGNvbnN1bWVyX3NlY3JldCwgJHRva2VuX3NlY3JldCApOwoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc2lnbmF0dXJlIGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUgY2FsY3VsYXRlZCBmb3IgdGhlIHJlcXVlc3QuCgkgKiAKCSAqIEBwYXJhbSBPQXV0aFJlcXVlc3QgcmVxdWVzdAoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZwlkYXRhIHRvIGJlIHNpZ25lZCwgdXN1YWxseSB0aGUgYmFzZSBzdHJpbmcsIGNhbiBiZSBhIHJlcXVlc3QgYm9keQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHNpZ25hdHVyZQkJZnJvbSB0aGUgcmVxdWVzdCwgc3RpbGwgdXJsZW5jb2RlZAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHZlcmlmeSAoICRyZXF1ZXN0LCAkYmFzZV9zdHJpbmcsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICRzaWduYXR1cmUgKTsKfQoKCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aCBzaWduYXR1cmUgaW1wbGVtZW50YXRpb24gdXNpbmcgSE1BQy1TSEExCiAqIAogKiBAdmVyc2lvbiAkSWQkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBTZXAgOCwgMjAwOCAxMjoyMToxOSBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pLicvT0F1dGhTaWduYXR1cmVNZXRob2QuY2xhc3MucGhwJzsKCgpjbGFzcyBPQXV0aFNpZ25hdHVyZU1ldGhvZF9ITUFDX1NIQTEgZXh0ZW5kcyBPQXV0aFNpZ25hdHVyZU1ldGhvZAp7CglwdWJsaWMgZnVuY3Rpb24gbmFtZSAoKQoJewoJCXJldHVybiAnSE1BQy1TSEExJzsKCX0KCgoJLyoqCgkgKiBDYWxjdWxhdGUgdGhlIHNpZ25hdHVyZSB1c2luZyBITUFDLVNIQTEKCSAqIFRoaXMgZnVuY3Rpb24gaXMgY29weXJpZ2h0IEFuZHkgU21pdGgsIDIwMDcuCgkgKiAKCSAqIEBwYXJhbSBPQXV0aFJlcXVlc3QgcmVxdWVzdAoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZwoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CgkgKiBAcmV0dXJuIHN0cmluZyAgCgkgKi8KCWZ1bmN0aW9uIHNpZ25hdHVyZSAoICRyZXF1ZXN0LCAkYmFzZV9zdHJpbmcsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQgKQoJewoJCSRrZXkgPSAkcmVxdWVzdC0+dXJsZW5jb2RlKCRjb25zdW1lcl9zZWNyZXQpLicmJy4kcmVxdWVzdC0+dXJsZW5jb2RlKCR0b2tlbl9zZWNyZXQpOwoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2hhc2hfaG1hYycpKQoJCXsKCQkJJHNpZ25hdHVyZSA9IGJhc2U2NF9lbmNvZGUoaGFzaF9obWFjKCJzaGExIiwgJGJhc2Vfc3RyaW5nLCAka2V5LCB0cnVlKSk7CgkJfQoJCWVsc2UKCQl7CgkJICAgICRibG9ja3NpemUJPSA2NDsKCQkgICAgJGhhc2hmdW5jCT0gJ3NoYTEnOwoJCSAgICBpZiAoc3RybGVuKCRrZXkpID4gJGJsb2Nrc2l6ZSkKCQkgICAgewoJCSAgICAgICAgJGtleSA9IHBhY2soJ0gqJywgJGhhc2hmdW5jKCRrZXkpKTsKCQkgICAgfQoJCSAgICAka2V5CT0gc3RyX3BhZCgka2V5LCRibG9ja3NpemUsY2hyKDB4MDApKTsKCQkgICAgJGlwYWQJPSBzdHJfcmVwZWF0KGNocigweDM2KSwkYmxvY2tzaXplKTsKCQkgICAgJG9wYWQJPSBzdHJfcmVwZWF0KGNocigweDVjKSwkYmxvY2tzaXplKTsKCQkgICAgJGhtYWMgCT0gcGFjaygKCQkgICAgICAgICAgICAgICAgJ0gqJywkaGFzaGZ1bmMoCgkJICAgICAgICAgICAgICAgICAgICAoJGtleV4kb3BhZCkucGFjaygKCQkgICAgICAgICAgICAgICAgICAgICAgICAnSConLCRoYXNoZnVuYygKCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRrZXleJGlwYWQpLiRiYXNlX3N0cmluZwoJCSAgICAgICAgICAgICAgICAgICAgICAgICkKCQkgICAgICAgICAgICAgICAgICAgICkKCQkgICAgICAgICAgICAgICAgKQoJCSAgICAgICAgICAgICk7CgkJCSRzaWduYXR1cmUgPSBiYXNlNjRfZW5jb2RlKCRobWFjKTsKCQl9CgkJcmV0dXJuICRyZXF1ZXN0LT51cmxlbmNvZGUoJHNpZ25hdHVyZSk7Cgl9CgoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc2lnbmF0dXJlIGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUgY2FsY3VsYXRlZCBmb3IgdGhlIHJlcXVlc3QuCgkgKiAKCSAqIEBwYXJhbSBPQXV0aFJlcXVlc3QgcmVxdWVzdAoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZwlkYXRhIHRvIGJlIHNpZ25lZCwgdXN1YWxseSB0aGUgYmFzZSBzdHJpbmcsIGNhbiBiZSBhIHJlcXVlc3QgYm9keQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHNpZ25hdHVyZQkJZnJvbSB0aGUgcmVxdWVzdCwgc3RpbGwgdXJsZW5jb2RlZAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZlcmlmeSAoICRyZXF1ZXN0LCAkYmFzZV9zdHJpbmcsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICRzaWduYXR1cmUgKQoJewoJCSRhID0gJHJlcXVlc3QtPnVybGRlY29kZSgkc2lnbmF0dXJlKTsKCQkkYiA9ICRyZXF1ZXN0LT51cmxkZWNvZGUoJHRoaXMtPnNpZ25hdHVyZSgkcmVxdWVzdCwgJGJhc2Vfc3RyaW5nLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0KSk7CgoJCS8vIFdlIGhhdmUgdG8gY29tcGFyZSB0aGUgZGVjb2RlZCB2YWx1ZXMKCQkkdmFsQSAgPSBiYXNlNjRfZGVjb2RlKCRhKTsKCQkkdmFsQiAgPSBiYXNlNjRfZGVjb2RlKCRiKTsKCgkJLy8gQ3J1ZGUgYmluYXJ5IGNvbXBhcmlzb24KCQlyZXR1cm4gcmF3dXJsZW5jb2RlKCR2YWxBKSA9PSByYXd1cmxlbmNvZGUoJHZhbEIpOwoJfQp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/OAuthSignatureMethod_MD5.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aCBzaWduYXR1cmUgaW1wbGVtZW50YXRpb24gdXNpbmcgTUQ1CiAqIAogKiBAdmVyc2lvbiAkSWQkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBTZXAgOCwgMjAwOCAxMjowOTo0MyBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy9PQXV0aFNpZ25hdHVyZU1ldGhvZC5jbGFzcy5waHAnOwoKCmNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX01ENSBleHRlbmRzIE9BdXRoU2lnbmF0dXJlTWV0aG9kCnsKCXB1YmxpYyBmdW5jdGlvbiBuYW1lICgpCgl7CgkJcmV0dXJuICdNRDUnOwoJfQoKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIHVzaW5nIE1ENQoJICogQmluYXJ5IG1kNSBkaWdlc3QsIGFzIGRpc3RpbmN0IGZyb20gUEhQJ3MgYnVpbHQtaW4gaGV4ZGlnZXN0LgoJICogVGhpcyBmdW5jdGlvbiBpcyBjb3B5cmlnaHQgQW5keSBTbWl0aCwgMjAwNy4KCSAqIAoJICogQHBhcmFtIE9BdXRoUmVxdWVzdCByZXF1ZXN0CgkgKiBAcGFyYW0gc3RyaW5nIGJhc2Vfc3RyaW5nCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX3NlY3JldAoJICogQHBhcmFtIHN0cmluZyB0b2tlbl9zZWNyZXQKCSAqIEByZXR1cm4gc3RyaW5nICAKCSAqLwoJZnVuY3Rpb24gc2lnbmF0dXJlICggJHJlcXVlc3QsICRiYXNlX3N0cmluZywgJGNvbnN1bWVyX3NlY3JldCwgJHRva2VuX3NlY3JldCApCgl7CgkJJHMgIC49ICcmJy4kcmVxdWVzdC0+dXJsZW5jb2RlKCRjb25zdW1lcl9zZWNyZXQpLicmJy4kcmVxdWVzdC0+dXJsZW5jb2RlKCR0b2tlbl9zZWNyZXQpOwoJCSRtZDUgPSBtZDUoJGJhc2Vfc3RyaW5nKTsKCQkkYmluID0gJyc7CgkJCgkJZm9yICgkaSA9IDA7ICRpIDwgc3RybGVuKCRtZDUpOyAkaSArPSAyKQoJCXsKCQkgICAgJGJpbiAuPSBjaHIoaGV4ZGVjKCRtZDV7JGkrMX0pICsgaGV4ZGVjKCRtZDV7JGl9KSAqIDE2KTsKCQl9CgkJcmV0dXJuICRyZXF1ZXN0LT51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkYmluKSk7Cgl9CgoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc2lnbmF0dXJlIGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUgY2FsY3VsYXRlZCBmb3IgdGhlIHJlcXVlc3QuCgkgKiAKCSAqIEBwYXJhbSBPQXV0aFJlcXVlc3QgcmVxdWVzdAoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZwlkYXRhIHRvIGJlIHNpZ25lZCwgdXN1YWxseSB0aGUgYmFzZSBzdHJpbmcsIGNhbiBiZSBhIHJlcXVlc3QgYm9keQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHNpZ25hdHVyZQkJZnJvbSB0aGUgcmVxdWVzdCwgc3RpbGwgdXJsZW5jb2RlZAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZlcmlmeSAoICRyZXF1ZXN0LCAkYmFzZV9zdHJpbmcsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQsICRzaWduYXR1cmUgKQoJewoJCSRhID0gJHJlcXVlc3QtPnVybGRlY29kZSgkc2lnbmF0dXJlKTsKCQkkYiA9ICRyZXF1ZXN0LT51cmxkZWNvZGUoJHRoaXMtPnNpZ25hdHVyZSgkcmVxdWVzdCwgJGJhc2Vfc3RyaW5nLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0KSk7CgoJCS8vIFdlIGhhdmUgdG8gY29tcGFyZSB0aGUgZGVjb2RlZCB2YWx1ZXMKCQkkdmFsQSAgPSBiYXNlNjRfZGVjb2RlKCRhKTsKCQkkdmFsQiAgPSBiYXNlNjRfZGVjb2RlKCRiKTsKCgkJLy8gQ3J1ZGUgYmluYXJ5IGNvbXBhcmlzb24KCQlyZXR1cm4gcmF3dXJsZW5jb2RlKCR2YWxBKSA9PSByYXd1cmxlbmNvZGUoJHZhbEIpOwoJfQp9CgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aCBzaWduYXR1cmUgaW1wbGVtZW50YXRpb24gdXNpbmcgUExBSU5URVhUCiAqIAogKiBAdmVyc2lvbiAkSWQkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBTZXAgOCwgMjAwOCAxMjowOTo0MyBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy9PQXV0aFNpZ25hdHVyZU1ldGhvZC5jbGFzcy5waHAnOwoKCmNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1BMQUlOVEVYVCBleHRlbmRzIE9BdXRoU2lnbmF0dXJlTWV0aG9kCnsKCXB1YmxpYyBmdW5jdGlvbiBuYW1lICgpCgl7CgkJcmV0dXJuICdQTEFJTlRFWFQnOwoJfQoKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIHVzaW5nIFBMQUlOVEVYVAoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0IHJlcXVlc3QKCSAqIEBwYXJhbSBzdHJpbmcgYmFzZV9zdHJpbmcKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldAoJICogQHJldHVybiBzdHJpbmcgIAoJICovCglmdW5jdGlvbiBzaWduYXR1cmUgKCAkcmVxdWVzdCwgJGJhc2Vfc3RyaW5nLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0ICkKCXsKCQlyZXR1cm4gJHJlcXVlc3QtPnVybGVuY29kZSgkcmVxdWVzdC0+dXJsZW5jb2RlKCRjb25zdW1lcl9zZWNyZXQpLicmJy4kcmVxdWVzdC0+dXJsZW5jb2RlKCR0b2tlbl9zZWNyZXQpKTsKCX0KCgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdCBzaWduYXR1cmUgY29ycmVzcG9uZHMgdG8gdGhlIG9uZSBjYWxjdWxhdGVkIGZvciB0aGUgcmVxdWVzdC4KCSAqIAoJICogQHBhcmFtIE9BdXRoUmVxdWVzdCByZXF1ZXN0CgkgKiBAcGFyYW0gc3RyaW5nIGJhc2Vfc3RyaW5nCWRhdGEgdG8gYmUgc2lnbmVkLCB1c3VhbGx5IHRoZSBiYXNlIHN0cmluZywgY2FuIGJlIGEgcmVxdWVzdCBib2R5CgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX3NlY3JldAoJICogQHBhcmFtIHN0cmluZyB0b2tlbl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgc2lnbmF0dXJlCQlmcm9tIHRoZSByZXF1ZXN0LCBzdGlsbCB1cmxlbmNvZGVkCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5ICggJHJlcXVlc3QsICRiYXNlX3N0cmluZywgJGNvbnN1bWVyX3NlY3JldCwgJHRva2VuX3NlY3JldCwgJHNpZ25hdHVyZSApCgl7CgkJJGEgPSAkcmVxdWVzdC0+dXJsZGVjb2RlKCRzaWduYXR1cmUpOwoJCSRiID0gJHJlcXVlc3QtPnVybGRlY29kZSgkdGhpcy0+c2lnbmF0dXJlKCRyZXF1ZXN0LCAkYmFzZV9zdHJpbmcsICRjb25zdW1lcl9zZWNyZXQsICR0b2tlbl9zZWNyZXQpKTsKCgkJcmV0dXJuICRyZXF1ZXN0LT51cmxkZWNvZGUoJGEpID09ICRyZXF1ZXN0LT51cmxkZWNvZGUoJGIpOwoJfQp9CgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aCBzaWduYXR1cmUgaW1wbGVtZW50YXRpb24gdXNpbmcgUExBSU5URVhUCiAqIAogKiBAdmVyc2lvbiAkSWQkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBTZXAgOCwgMjAwOCAxMjowMDoxNCBQTQogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pLicvT0F1dGhTaWduYXR1cmVNZXRob2QuY2xhc3MucGhwJzsKCmNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1JTQV9TSEExIGV4dGVuZHMgT0F1dGhTaWduYXR1cmVNZXRob2QKewoJcHVibGljIGZ1bmN0aW9uIG5hbWUoKSAKCXsKCQlyZXR1cm4gJ1JTQS1TSEExJzsKCX0KCQoKCS8qKgoJICogRmV0Y2ggdGhlIHB1YmxpYyBDRVJUIGtleSBmb3IgdGhlIHNpZ25hdHVyZQoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0IHJlcXVlc3QKCSAqIEByZXR1cm4gc3RyaW5nIHB1YmxpYyBrZXkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoX3B1YmxpY19jZXJ0ICggJHJlcXVlc3QgKQoJewoJCS8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGlkZWFzIGFyZToKCQkvLyAoMSkgZG8gYSBsb29rdXAgaW4gYSB0YWJsZSBvZiB0cnVzdGVkIGNlcnRzIGtleWVkIG9mZiBvZiBjb25zdW1lcgoJCS8vICgyKSBmZXRjaCB2aWEgaHR0cCB1c2luZyBhIHVybCBwcm92aWRlZCBieSB0aGUgcmVxdWVzdGVyCgkJLy8gKDMpIHNvbWUgc29ydCBvZiBzcGVjaWZpYyBkaXNjb3ZlcnkgY29kZSBiYXNlZCBvbiByZXF1ZXN0CgkJLy8KCQkvLyBlaXRoZXIgd2F5IHNob3VsZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNlcnRpZmljYXRlCgkJdGhyb3cgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFNpZ25hdHVyZU1ldGhvZF9SU0FfU0hBMTo6ZmV0Y2hfcHVibGljX2NlcnQgbm90IGltcGxlbWVudGVkIik7Cgl9CgkKCQoJLyoqCgkgKiBGZXRjaCB0aGUgcHJpdmF0ZSBDRVJUIGtleSBmb3IgdGhlIHNpZ25hdHVyZQoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0IHJlcXVlc3QKCSAqIEByZXR1cm4gc3RyaW5nIHByaXZhdGUga2V5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBmZXRjaF9wcml2YXRlX2NlcnQgKCAkcmVxdWVzdCApCgl7CgkJLy8gbm90IGltcGxlbWVudGVkIHlldCwgaWRlYXMgYXJlOgoJCS8vICgxKSBkbyBhIGxvb2t1cCBpbiBhIHRhYmxlIG9mIHRydXN0ZWQgY2VydHMga2V5ZWQgb2ZmIG9mIGNvbnN1bWVyCgkJLy8KCQkvLyBlaXRoZXIgd2F5IHNob3VsZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNlcnRpZmljYXRlCgkJdGhyb3cgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFNpZ25hdHVyZU1ldGhvZF9SU0FfU0hBMTo6ZmV0Y2hfcHJpdmF0ZV9jZXJ0IG5vdCBpbXBsZW1lbnRlZCIpOwoJfQoKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlIHVzaW5nIFJTQS1TSEExCgkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNvcHlyaWdodCBBbmR5IFNtaXRoLCAyMDA4LgoJICogCgkgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0IHJlcXVlc3QKCSAqIEBwYXJhbSBzdHJpbmcgYmFzZV9zdHJpbmcKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfc2VjcmV0CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldAoJICogQHJldHVybiBzdHJpbmcgIAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2lnbmF0dXJlICggJHJlcXVlc3QsICRiYXNlX3N0cmluZywgJGNvbnN1bWVyX3NlY3JldCwgJHRva2VuX3NlY3JldCApCgl7CgkJLy8gRmV0Y2ggdGhlIHByaXZhdGUga2V5IGNlcnQgYmFzZWQgb24gdGhlIHJlcXVlc3QKCQkkY2VydCA9ICR0aGlzLT5mZXRjaF9wcml2YXRlX2NlcnQoJHJlcXVlc3QpOwoJCQoJCS8vIFB1bGwgdGhlIHByaXZhdGUga2V5IElEIGZyb20gdGhlIGNlcnRpZmljYXRlCgkJJHByaXZhdGVrZXlpZCA9IG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkoJGNlcnQpOwoJCQoJCS8vIFNpZ24gdXNpbmcgdGhlIGtleQoJCSRzaWcgPSBmYWxzZTsKCQkkb2sgID0gb3BlbnNzbF9zaWduKCRiYXNlX3N0cmluZywgJHNpZywgJHByaXZhdGVrZXlpZCk7ICAgCgkJCgkJLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCgkJb3BlbnNzbF9mcmVlX2tleSgkcHJpdmF0ZWtleWlkKTsKCQkgIAoJCXJldHVybiAkcmVxdWVzdC0+dXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoJHNpZykpOwoJfQoJCgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdCBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBjYWxjdWxhdGVkIGZvciB0aGUgcmVxdWVzdC4KCSAqIAoJICogQHBhcmFtIE9BdXRoUmVxdWVzdCByZXF1ZXN0CgkgKiBAcGFyYW0gc3RyaW5nIGJhc2Vfc3RyaW5nCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX3NlY3JldAoJICogQHBhcmFtIHN0cmluZyB0b2tlbl9zZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcgc2lnbmF0dXJlCgkgKiBAcmV0dXJuIHN0cmluZyAgCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkgKCAkcmVxdWVzdCwgJGJhc2Vfc3RyaW5nLCAkY29uc3VtZXJfc2VjcmV0LCAkdG9rZW5fc2VjcmV0LCAkc2lnbmF0dXJlICkKCXsKCQkkZGVjb2RlZF9zaWcgPSBiYXNlNjRfZGVjb2RlKCRyZXF1ZXN0LT51cmxkZWNvZGUoJHNpZ25hdHVyZSkpOwoJCSAgCgkJLy8gRmV0Y2ggdGhlIHB1YmxpYyBrZXkgY2VydCBiYXNlZCBvbiB0aGUgcmVxdWVzdAoJCSRjZXJ0ID0gJHRoaXMtPmZldGNoX3B1YmxpY19jZXJ0KCRyZXF1ZXN0KTsKCQkKCQkvLyBQdWxsIHRoZSBwdWJsaWMga2V5IElEIGZyb20gdGhlIGNlcnRpZmljYXRlCgkJJHB1YmxpY2tleWlkID0gb3BlbnNzbF9nZXRfcHVibGlja2V5KCRjZXJ0KTsKCQkKCQkvLyBDaGVjayB0aGUgY29tcHV0ZWQgc2lnbmF0dXJlIGFnYWluc3QgdGhlIG9uZSBwYXNzZWQgaW4gdGhlIHF1ZXJ5CgkJJG9rID0gb3BlbnNzbF92ZXJpZnkoJGJhc2Vfc3RyaW5nLCAkZGVjb2RlZF9zaWcsICRwdWJsaWNrZXlpZCk7ICAgCgkJCgkJLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCgkJb3BlbnNzbF9mcmVlX2tleSgkcHVibGlja2V5aWQpOwoJCXJldHVybiAkb2sgPT0gMTsKCX0KCn0KCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStore2Leg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aFN0b3JlIGltcGxlbWVudGF0aW9uIGZvciAyIGxlZ2dlZCBPQXV0aC4gVGhpcyAnc3RvcmUnIGp1c3Qgc2F2ZXMgdGhlIAogKiBjb25zdW1lcl90b2tlbiBhbmQgY29uc3VtZXJfc2VjcmV0LgogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIEJlbiBIZXNrZXRoIDxiZW4uaGVza2V0aEBjb21wYXNzZW5naW5lLmNvbT4KICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9PQXV0aFN0b3JlQWJzdHJhY3QuY2xhc3MucGhwJzsKCmNsYXNzIE9BdXRoU3RvcmUyTGVnIGV4dGVuZHMgT0F1dGhTdG9yZUFic3RyYWN0CnsKCXByb3RlY3RlZCAkY29uc3VtZXJfa2V5OwoJcHJvdGVjdGVkICRjb25zdW1lcl9zZWNyZXQ7Cglwcm90ZWN0ZWQgJHNpZ25hdHVyZV9tZXRob2QgPSBhcnJheSgnSE1BQy1TSEExJyk7Cglwcm90ZWN0ZWQgJHRva2VuX3R5cGUgPSBmYWxzZTsKCQoJLyoKCSAqIFRha2VzIHR3byBvcHRpb25zOiBjb25zdW1lcl9rZXkgYW5kIGNvbnN1bWVyX3NlY3JldAoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoICRvcHRpb25zID0gYXJyYXkoKSApCgl7CgkJaWYoaXNzZXQoJG9wdGlvbnNbJ2NvbnN1bWVyX2tleSddKSAmJiBpc3NldCgkb3B0aW9uc1snY29uc3VtZXJfc2VjcmV0J10pKQoJCXsKCQkJJHRoaXMtPmNvbnN1bWVyX2tleSA9ICRvcHRpb25zWydjb25zdW1lcl9rZXknXTsKCQkJJHRoaXMtPmNvbnN1bWVyX3NlY3JldCA9ICRvcHRpb25zWydjb25zdW1lcl9zZWNyZXQnXTsKCQl9CgkJZWxzZQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgbmVlZHMgY29uc3VtZXJfdG9rZW4gYW5kIGNvbnN1bWVyX3NlY3JldCIpOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjcmV0c0ZvclZlcmlmeSAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R5cGUgPSAnYWNjZXNzJyApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldFNlY3JldHNGb3JTaWduYXR1cmUgKCAkdXJpLCAkdXNlcl9pZCApIAoJewoJCXJldHVybiBhcnJheSgKCQkJJ2NvbnN1bWVyX2tleScgPT4gJHRoaXMtPmNvbnN1bWVyX2tleSwKCQkJJ2NvbnN1bWVyX3NlY3JldCcgPT4gJHRoaXMtPmNvbnN1bWVyX3NlY3JldCwKCQkJJ3NpZ25hdHVyZV9tZXRob2RzJyA9PiAkdGhpcy0+c2lnbmF0dXJlX21ldGhvZCwKCQkJJ3Rva2VuJyA9PiAkdGhpcy0+dG9rZW5fdHlwZQoJCSk7CQoJfQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuU2VjcmV0cyAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R5cGUsICR1c2VyX2lkLCAkbmFtZSA9ICcnICkgCXsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGFkZFNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuX3R5cGUsICR0b2tlbiwgJHRva2VuX3NlY3JldCwgJHVzZXJfaWQsICRvcHRpb25zID0gYXJyYXkoKSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVTZXJ2ZXIgKCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlciggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJGb3JVcmkgKCAkdXJpLCAkdXNlcl9pZCApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJUb2tlbnMgKCAkdXNlcl9pZCApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGNvdW50U2VydmVyVG9rZW5zICggJGNvbnN1bWVyX2tleSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZVNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIHNldFNlcnZlclRva2VuVHRsICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdG9rZW5fdHRsICkKCXsKCQkvL1RoaXMgbWV0aG9kIGp1c3QgbmVlZHMgdG8gZXhpc3QuIEl0IGRvZXNuJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyEKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJzICggJHEgPSAnJywgJHVzZXJfaWQgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVTZXJ2ZXIgKCAkc2VydmVyLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVDb25zdW1lciAoICRjb25zdW1lciwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uc3VtZXIgKCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyU3RhdGljICgpIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiBhZGRDb25zdW1lclJlcXVlc3RUb2tlbiAoICRjb25zdW1lcl9rZXksICRvcHRpb25zID0gYXJyYXkoKSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyUmVxdWVzdFRva2VuICggJHRva2VuICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4gKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICRyZWZlcnJlcl9ob3N0ID0gJycgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBjb3VudENvbnN1bWVyQWNjZXNzVG9rZW5zICggJGNvbnN1bWVyX2tleSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGV4Y2hhbmdlQ29uc3VtZXJSZXF1ZXN0Rm9yQWNjZXNzVG9rZW4gKCAkdG9rZW4sICRvcHRpb25zID0gYXJyYXkoKSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyQWNjZXNzVG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJBY2Nlc3NUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBzZXRDb25zdW1lckFjY2Vzc1Rva2VuVHRsICggJHRva2VuLCAkdHRsICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgkKCXB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJzICggJHVzZXJfaWQgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJBcHBsaWNhdGlvbnMoICRiZWdpbiA9IDAsICR0b3RhbCA9IDI1ICkgIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lclRva2VucyAoICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgoJcHVibGljIGZ1bmN0aW9uIGNoZWNrU2VydmVyTm9uY2UgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICRub25jZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkTG9nICggJGtleXMsICRyZWNlaXZlZCwgJHNlbnQsICRiYXNlX3N0cmluZywgJG5vdGVzLCAkdXNlcl9pZCA9IG51bGwgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmUyTGVnIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBsaXN0TG9nICggJG9wdGlvbnMsICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlMkxlZyBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgkKCXB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsICgpIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZTJMZWcgZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQkJCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreAbstract.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBPQXV0aFN0b3JlIGltcGxlbWVudGF0aW9ucwogKiAKICogQHZlcnNpb24gJElkJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgphYnN0cmFjdCBjbGFzcyBPQXV0aFN0b3JlQWJzdHJhY3QKewoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFNlY3JldHNGb3JWZXJpZnkgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlID0gJ2FjY2VzcycgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTZWNyZXRzRm9yU2lnbmF0dXJlICggJHVyaSwgJHVzZXJfaWQgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJUb2tlblNlY3JldHMgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlLCAkdXNlcl9pZCwgJG5hbWUgPSAnJyApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGFkZFNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuX3R5cGUsICR0b2tlbiwgJHRva2VuX3NlY3JldCwgJHVzZXJfaWQsICRvcHRpb25zID0gYXJyYXkoKSApOwoKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBkZWxldGVTZXJ2ZXIgKCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlciggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJGb3JVcmkgKCAkdXJpLCAkdXNlcl9pZCApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJUb2tlbnMgKCAkdXNlcl9pZCApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNvdW50U2VydmVyVG9rZW5zICggJGNvbnN1bWVyX2tleSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZVNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJzICggJHEgPSAnJywgJHVzZXJfaWQgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVTZXJ2ZXIgKCAkc2VydmVyLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApOwoKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVDb25zdW1lciAoICRjb25zdW1lciwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICk7CglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uc3VtZXIgKCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyU3RhdGljICgpOwoKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBhZGRDb25zdW1lclJlcXVlc3RUb2tlbiAoICRjb25zdW1lcl9rZXksICRvcHRpb25zID0gYXJyYXkoKSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyUmVxdWVzdFRva2VuICggJHRva2VuICk7CglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4gKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICRyZWZlcnJlcl9ob3N0ID0gJycgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBjb3VudENvbnN1bWVyQWNjZXNzVG9rZW5zICggJGNvbnN1bWVyX2tleSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGV4Y2hhbmdlQ29uc3VtZXJSZXF1ZXN0Rm9yQWNjZXNzVG9rZW4gKCAkdG9rZW4sICRvcHRpb25zID0gYXJyYXkoKSApOwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyQWNjZXNzVG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkICk7CglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJBY2Nlc3NUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzZXRDb25zdW1lckFjY2Vzc1Rva2VuVHRsICggJHRva2VuLCAkdHRsICk7CgkKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJzICggJHVzZXJfaWQgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJBcHBsaWNhdGlvbnMoICRiZWdpbiA9IDAsICR0b3RhbCA9IDI1ICk7IAoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lclRva2VucyAoICR1c2VyX2lkICk7CgoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNoZWNrU2VydmVyTm9uY2UgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICRub25jZSApOwoJCglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gYWRkTG9nICggJGtleXMsICRyZWNlaXZlZCwgJHNlbnQsICRiYXNlX3N0cmluZywgJG5vdGVzLCAkdXNlcl9pZCA9IG51bGwgKTsKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBsaXN0TG9nICggJG9wdGlvbnMsICR1c2VyX2lkICk7CgkKCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsICgpOwkKCQoJLyoqCgkgKiBGZXRjaCB0aGUgY3VycmVudCBzdGF0aWMgY29uc3VtZXIga2V5IGZvciB0aGlzIHNpdGUsIGNyZWF0ZSBpdCB3aGVuIGl0IHdhcyBub3QgZm91bmQuCgkgKiBUaGUgY29uc3VtZXIgc2VjcmV0IGZvciB0aGUgY29uc3VtZXIga2V5IGlzIGFsd2F5cyBlbXB0eS4KCSAqIAoJICogQHJldHVybiBzdHJpbmcJY29uc3VtZXIga2V5IAoJICovCgkKCQoJLyogKiogU29tZSBoYW5keSB1dGlsaXR5IGZ1bmN0aW9ucyAqKiAqLwoJCgkvKioKCSAqIEdlbmVyYXRlIGEgdW5pcXVlIGtleQoJICogCgkgKiBAcGFyYW0gYm9vbGVhbiB1bmlxdWUJZm9yY2UgdGhlIGtleSB0byBiZSB1bmlxdWUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZUtleSAoICR1bmlxdWUgPSBmYWxzZSApCgl7CgkJJGtleSA9IG1kNSh1bmlxaWQocmFuZCgpLCB0cnVlKSk7CgkJaWYgKCR1bmlxdWUpCgkJewoJCQlsaXN0KCR1c2VjLCRzZWMpID0gZXhwbG9kZSgnICcsbWljcm90aW1lKCkpOwoJCQkka2V5IC49IGRlY2hleCgkdXNlYykuZGVjaGV4KCRzZWMpOwoJCX0KCQlyZXR1cm4gJGtleTsKCX0KCgkvKioKCSAqIENoZWNrIHRvIHNlZSBpZiBhIHN0cmluZyBpcyB2YWxpZCB1dGY4CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgJHMKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gaXNVVEY4ICggJHMgKQoJewoJCXJldHVybiBwcmVnX21hdGNoKCclKD86CgkgICAgICAgW1x4QzItXHhERl1bXHg4MC1ceEJGXSAgICAgICAgICAgICAgIyBub24tb3ZlcmxvbmcgMi1ieXRlCgkgICAgICAgfFx4RTBbXHhBMC1ceEJGXVtceDgwLVx4QkZdICAgICAgICAgIyBleGNsdWRpbmcgb3ZlcmxvbmdzCgkgICAgICAgfFtceEUxLVx4RUNceEVFXHhFRl1bXHg4MC1ceEJGXXsyfSAgIyBzdHJhaWdodCAzLWJ5dGUKCSAgICAgICB8XHhFRFtceDgwLVx4OUZdW1x4ODAtXHhCRl0gICAgICAgICAjIGV4Y2x1ZGluZyBzdXJyb2dhdGVzCgkgICAgICAgfFx4RjBbXHg5MC1ceEJGXVtceDgwLVx4QkZdezJ9ICAgICAgIyBwbGFuZXMgMS0zCgkgICAgICAgfFtceEYxLVx4RjNdW1x4ODAtXHhCRl17M30gICAgICAgICAgIyBwbGFuZXMgNC0xNQoJICAgICAgIHxceEY0W1x4ODAtXHg4Rl1bXHg4MC1ceEJGXXsyfSAgICAgICMgcGxhbmUgMTYKCSAgICAgICApKyV4cycsICRzKTsKCX0KCQoJCgkvKioKCSAqIE1ha2UgYSBzdHJpbmcgdXRmOCwgcmVwbGFjaW5nIGFsbCBub24tdXRmOCBjaGFycyB3aXRoIGEgJy4nCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBtYWtlVVRGOCAoICRzICkKCXsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKQoJCXsKCQkJZG8KCQkJewoJCQkJJG9rICAgPSB0cnVlOwoJCQkJJHRleHQgPSBAaWNvbnYoJ1VURi04JywgJ1VURi04Ly9UUkFOU0xJVCcsICRzKTsKCQkJCWlmIChzdHJsZW4oJHRleHQpICE9IHN0cmxlbigkcykpCgkJCQl7CgkJCQkJLy8gUmVtb3ZlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyLi4uCgkJCQkJJHMgID0gJHRleHQgLiAnLicgLiBzdWJzdHIoJHMsIHN0cmxlbigkdGV4dCkgKyAxKTsKCQkJCQkkb2sgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCQl3aGlsZSAoISRvayk7CgkJfQoJCXJldHVybiAkczsKCX0KCQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreAnyMeta.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogVGhpcyBmaWxlIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbnlNZXRhLgogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFN0b3JlQW55TWV0YS5waHAgNjggMjAxMC0wMS0xMiAxODo1OToyM1ogYnJ1bm9iZ0Bjb3JvbGxhcml1bS5jb20gJAogKiBAYXV0aG9yIE1hcmMgV29ycmVsbCA8bWFyY3dAcG9ib3guY29tPgogKiBAZGF0ZSAgTm92IDE2LCAyMDA3IDQ6MDM6MzAgUE0KICogCiAqIAogKiBUaGUgTUlUIExpY2Vuc2UKICogCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE1lZGlhbWF0aWMgTGFiCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICogCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKiAKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZU15U1FMLnBocCc7CgoKY2xhc3MgT0F1dGhTdG9yZUFueW1ldGEgZXh0ZW5kcyBPQXV0aFN0b3JlTXlTUUwKewoJLyoqCgkgKiBDb25zdHJ1Y3QgdGhlIE9BdXRoU3RvcmVBbnltZXRhCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBvcHRpb25zCgkgKi8KCWZ1bmN0aW9uIF9fY29uc3RydWN0ICggJG9wdGlvbnMgPSBhcnJheSgpICkKCXsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KGFycmF5KCdjb25uJyA9PiBhbnlfZGJfY29ubigpKSk7Cgl9CgoKCS8qKgoJICogQWRkIGFuIGVudHJ5IHRvIHRoZSBsb2cgdGFibGUKCSAqIAoJICogQHBhcmFtIGFycmF5IGtleXMgKG9zcl9jb25zdW1lcl9rZXksIG9zdF90b2tlbiwgb2NyX2NvbnN1bWVyX2tleSwgb2N0X3Rva2VuKQoJICogQHBhcmFtIHN0cmluZyByZWNlaXZlZAoJICogQHBhcmFtIHN0cmluZyBzZW50CgkgKiBAcGFyYW0gc3RyaW5nIGJhc2Vfc3RyaW5nCgkgKiBAcGFyYW0gc3RyaW5nIG5vdGVzCgkgKiBAcGFyYW0gaW50IChvcHRpb25hbCkgdXNlcl9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYWRkTG9nICggJGtleXMsICRyZWNlaXZlZCwgJHNlbnQsICRiYXNlX3N0cmluZywgJG5vdGVzLCAkdXNlcl9pZCA9IG51bGwgKQoJewoJCWlmIChpc19udWxsKCR1c2VyX2lkKSAmJiBpc3NldCgkR0xPQkFMU1snYW55X2F1dGgnXSkpCgkJewoJCQkkdXNlcl9pZCA9ICRHTE9CQUxTWydhbnlfYXV0aCddLT5nZXRVc2VySWQoKTsKCQl9CgkJcGFyZW50OjphZGRMb2coJGtleXMsICRyZWNlaXZlZCwgJHNlbnQsICRiYXNlX3N0cmluZywgJG5vdGVzLCAkdXNlcl9pZCk7Cgl9CgkKCQoJLyoqCgkgKiBHZXQgYSBwYWdlIG9mIGVudHJpZXMgZnJvbSB0aGUgbG9nLiAgUmV0dXJucyB0aGUgbGFzdCAxMDAgcmVjb3JkcwoJICogbWF0Y2hpbmcgdGhlIG9wdGlvbnMgZ2l2ZW4uCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBvcHRpb25zCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQJY3VycmVudCB1c2VyCgkgKiBAcmV0dXJuIGFycmF5IGxvZyByZWNvcmRzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBsaXN0TG9nICggJG9wdGlvbnMsICR1c2VyX2lkICkKCXsKCQkkd2hlcmUgPSBhcnJheSgpOwoJCSRhcmdzICA9IGFycmF5KCk7CgkJaWYgKGVtcHR5KCRvcHRpb25zKSkKCQl7CgkJCSR3aGVyZVtdID0gJ29sZ191c2FfaWRfcmVmID0gJWQnOwoJCQkkYXJnc1tdICA9ICR1c2VyX2lkOwoJCX0KCQllbHNlCgkJewoJCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0aW9uID0+ICR2YWx1ZSkKCQkJewoJCQkJaWYgKHN0cmxlbigkdmFsdWUpID4gMCkKCQkJCXsKCQkJCQlzd2l0Y2ggKCRvcHRpb24pCgkJCQkJewoJCQkJCWNhc2UgJ29zcl9jb25zdW1lcl9rZXknOgoJCQkJCWNhc2UgJ29jcl9jb25zdW1lcl9rZXknOgoJCQkJCWNhc2UgJ29zdF90b2tlbic6CgkJCQkJY2FzZSAnb2N0X3Rva2VuJzoKCQkJCQkJJHdoZXJlW10gPSAnb2xnXycuJG9wdGlvbi4nID0gXCclc1wnJzsKCQkJCQkJJGFyZ3NbXSAgPSAkdmFsdWU7CQoJCQkJCQlicmVhazsJCQkJCgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkkd2hlcmVbXSA9ICcob2xnX3VzYV9pZF9yZWYgSVMgTlVMTCBPUiBvbGdfdXNhX2lkX3JlZiA9ICVkKSc7CgkJCSRhcmdzW10gID0gJHVzZXJfaWQ7CgkJfQoKCQkkcnMgPSBhbnlfZGJfcXVlcnlfYWxsX2Fzc29jKCcKCQkJCQlTRUxFQ1Qgb2xnX2lkLAoJCQkJCQkJb2xnX29zcl9jb25zdW1lcl9rZXkgCUFTIG9zcl9jb25zdW1lcl9rZXksCgkJCQkJCQlvbGdfb3N0X3Rva2VuCQkJQVMgb3N0X3Rva2VuLAoJCQkJCQkJb2xnX29jcl9jb25zdW1lcl9rZXkJQVMgb2NyX2NvbnN1bWVyX2tleSwKCQkJCQkJCW9sZ19vY3RfdG9rZW4JCQlBUyBvY3RfdG9rZW4sCgkJCQkJCQlvbGdfdXNhX2lkX3JlZgkJCUFTIHVzZXJfaWQsCgkJCQkJCQlvbGdfcmVjZWl2ZWQJCQlBUyByZWNlaXZlZCwKCQkJCQkJCW9sZ19zZW50CQkJCUFTIHNlbnQsCgkJCQkJCQlvbGdfYmFzZV9zdHJpbmcJCQlBUyBiYXNlX3N0cmluZywKCQkJCQkJCW9sZ19ub3RlcwkJCQlBUyBub3RlcywKCQkJCQkJCW9sZ190aW1lc3RhbXAJCQlBUyB0aW1lc3RhbXAsCgkJCQkJCQlJTkVUX05UT0Eob2xnX3JlbW90ZV9pcCkgQVMgcmVtb3RlX2lwCgkJCQkJRlJPTSBvYXV0aF9sb2cKCQkJCQlXSEVSRSAnLmltcGxvZGUoJyBBTkQgJywgJHdoZXJlKS4nCgkJCQkJT1JERVIgQlkgb2xnX2lkIERFU0MKCQkJCQlMSU1JVCAwLDEwMCcsICRhcmdzKTsKCgkJcmV0dXJuICRyczsKCX0KCgoKCS8qKgoJICogSW5pdGlhbGlzZSB0aGUgZGF0YWJhc2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluc3RhbGwgKCkKCXsKCQlwYXJlbnQ6Omluc3RhbGwoKTsKCgkJYW55X2RiX3F1ZXJ5KCJBTFRFUiBUQUJMRSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeSBNT0RJRlkgb2NyX3VzYV9pZF9yZWYgaW50KDExKSB1bnNpZ25lZCIpOwoJCWFueV9kYl9xdWVyeSgiQUxURVIgVEFCTEUgb2F1dGhfY29uc3VtZXJfdG9rZW4gICAgTU9ESUZZIG9jdF91c2FfaWRfcmVmIGludCgxMSkgdW5zaWduZWQgbm90IG51bGwiKTsKCQlhbnlfZGJfcXVlcnkoIkFMVEVSIFRBQkxFIG9hdXRoX3NlcnZlcl9yZWdpc3RyeSAgIE1PRElGWSBvc3JfdXNhX2lkX3JlZiBpbnQoMTEpIHVuc2lnbmVkIik7CgkJYW55X2RiX3F1ZXJ5KCJBTFRFUiBUQUJMRSBvYXV0aF9zZXJ2ZXJfdG9rZW4gICAgICBNT0RJRlkgb3N0X3VzYV9pZF9yZWYgaW50KDExKSB1bnNpZ25lZCBub3QgbnVsbCIpOwoJCWFueV9kYl9xdWVyeSgiQUxURVIgVEFCTEUgb2F1dGhfbG9nICAgICAgICAgICAgICAgTU9ESUZZIG9sZ191c2FfaWRfcmVmIGludCgxMSkgdW5zaWduZWQiKTsKCgkJYW55X2RiX2FsdGVyX2FkZF9maygnb2F1dGhfY29uc3VtZXJfcmVnaXN0cnknLCAnb2NyX3VzYV9pZF9yZWYnLCAnYW55X3VzZXJfYXV0aCh1c2FfaWRfcmVmKScsICdvbiB1cGRhdGUgY2FzY2FkZSBvbiBkZWxldGUgc2V0IG51bGwnKTsKCQlhbnlfZGJfYWx0ZXJfYWRkX2ZrKCdvYXV0aF9jb25zdW1lcl90b2tlbicsICAgICdvY3RfdXNhX2lkX3JlZicsICdhbnlfdXNlcl9hdXRoKHVzYV9pZF9yZWYpJywgJ29uIHVwZGF0ZSBjYXNjYWRlIG9uIGRlbGV0ZSBjYXNjYWRlJyk7CgkJYW55X2RiX2FsdGVyX2FkZF9maygnb2F1dGhfc2VydmVyX3JlZ2lzdHJ5JywgICAnb3NyX3VzYV9pZF9yZWYnLCAnYW55X3VzZXJfYXV0aCh1c2FfaWRfcmVmKScsICdvbiB1cGRhdGUgY2FzY2FkZSBvbiBkZWxldGUgc2V0IG51bGwnKTsKCQlhbnlfZGJfYWx0ZXJfYWRkX2ZrKCdvYXV0aF9zZXJ2ZXJfdG9rZW4nLCAgICAgICdvc3RfdXNhX2lkX3JlZicsICdhbnlfdXNlcl9hdXRoKHVzYV9pZF9yZWYpJywgJ29uIHVwZGF0ZSBjYXNjYWRlIG9uIGRlbGV0ZSBjYXNjYWRlJyk7CgkJYW55X2RiX2FsdGVyX2FkZF9maygnb2F1dGhfbG9nJywgICAgICAgICAgICAgICAnb2xnX3VzYV9pZF9yZWYnLCAnYW55X3VzZXJfYXV0aCh1c2FfaWRfcmVmKScsICdvbiB1cGRhdGUgY2FzY2FkZSBvbiBkZWxldGUgY2FzY2FkZScpOwoJfQoKCQoJCgkvKiogU29tZSBzaW1wbGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgdGhlIG15c3FsIGRiICoqLwoKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCBpZ25vcmUgdGhlIHJlc3VsdHMKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5ICggJHNxbCApCgl7CgkJbGlzdCgkc3FsLCAkYXJncykgPSAkdGhpcy0+c3FsX2FyZ3MoZnVuY19nZXRfYXJncygpKTsKCQlhbnlfZGJfcXVlcnkoJHNxbCwgJGFyZ3MpOwoJfQoJCgoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIGlnbm9yZSB0aGUgcmVzdWx0cwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBhcnJheQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfYWxsX2Fzc29jICggJHNxbCApCgl7CgkJbGlzdCgkc3FsLCAkYXJncykgPSAkdGhpcy0+c3FsX2FyZ3MoZnVuY19nZXRfYXJncygpKTsKCQlyZXR1cm4gYW55X2RiX3F1ZXJ5X2FsbF9hc3NvYygkc3FsLCAkYXJncyk7Cgl9CgkKCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9yb3dfYXNzb2MgKCAkc3FsICkKCXsKCQlsaXN0KCRzcWwsICRhcmdzKSA9ICR0aGlzLT5zcWxfYXJncyhmdW5jX2dldF9hcmdzKCkpOwoJCXJldHVybiBhbnlfZGJfcXVlcnlfcm93X2Fzc29jKCRzcWwsICRhcmdzKTsKCX0KCgkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IHJvdwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBhcnJheQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfcm93ICggJHNxbCApCgl7CgkJbGlzdCgkc3FsLCAkYXJncykgPSAkdGhpcy0+c3FsX2FyZ3MoZnVuY19nZXRfYXJncygpKTsKCQlyZXR1cm4gYW55X2RiX3F1ZXJ5X3Jvdygkc3FsLCAkYXJncyk7Cgl9CgkKCQkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9vbmUgKCAkc3FsICkKCXsKCQlsaXN0KCRzcWwsICRhcmdzKSA9ICR0aGlzLT5zcWxfYXJncyhmdW5jX2dldF9hcmdzKCkpOwoJCXJldHVybiBhbnlfZGJfcXVlcnlfb25lKCRzcWwsICRhcmdzKTsKCX0KCQoJCgkvKioKCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgaW4gdGhlIGxhc3QgcXVlcnkKCSAqIAoJICogQHJldHVybiBpbnQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FmZmVjdGVkX3Jvd3MgKCkKCXsKCQlyZXR1cm4gYW55X2RiX2FmZmVjdGVkX3Jvd3MoKTsKCX0KCgoJLyoqCgkgKiBSZXR1cm4gdGhlIGlkIG9mIHRoZSBsYXN0IGluc2VydGVkIHJvdwoJICogCgkgKiBAcmV0dXJuIGludAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfaW5zZXJ0X2lkICgpCgl7CgkJcmV0dXJuIGFueV9kYl9pbnNlcnRfaWQoKTsKCX0KCQoJCglwcml2YXRlIGZ1bmN0aW9uIHNxbF9hcmdzICggJGFyZ3MgKQoJewoJCSRzcWwgPSBhcnJheV9zaGlmdCgkYXJncyk7CgkJaWYgKGNvdW50KCRhcmdzKSA9PSAxICYmIGlzX2FycmF5KCRhcmdzWzBdKSkKCQl7CgkJCSRhcmdzID0gJGFyZ3NbMF07CgkJfQoJCXJldHVybiBhcnJheSgkc3FsLCAkYXJncyk7Cgl9Cgp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreMySQL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogQmFzZWQgb24gTXlTUUwKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTdG9yZU15U1FMLnBocCA4NSAyMDEwLTAyLTE5IDE0OjU2OjQwWiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMTYsIDIwMDcgNDowMzozMCBQTQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZVNRTC5waHAnOwoKCmNsYXNzIE9BdXRoU3RvcmVNeVNRTCBleHRlbmRzIE9BdXRoU3RvcmVTUUwKewoJLyoqCgkgKiBUaGUgTXlTUUwgY29ubmVjdGlvbiAKCSAqLwoJcHJvdGVjdGVkICRjb25uOwoKCS8qKgoJICogSW5pdGlhbGlzZSB0aGUgZGF0YWJhc2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluc3RhbGwgKCkKCXsKCQlyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL215c3FsL2luc3RhbGwucGhwJzsKCX0KCQoJCgkvKiAqKiBTb21lIHNpbXBsZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgbXlzcWwgZGIgKiogKi8KCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgaWdub3JlIHRoZSByZXN1bHRzCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeSAoICRzcWwgKQoJewoJCSRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwoJCWlmICghKCRyZXMgPSBteXNxbF9xdWVyeSgkc3FsLCAkdGhpcy0+Y29ubikpKQoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJaWYgKGlzX3Jlc291cmNlKCRyZXMpKQoJCXsKCQkJbXlzcWxfZnJlZV9yZXN1bHQoJHJlcyk7CgkJfQoJfQoJCgoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIGlnbm9yZSB0aGUgcmVzdWx0cwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBhcnJheQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfYWxsX2Fzc29jICggJHNxbCApCgl7CgkJJHNxbCA9ICR0aGlzLT5zcWxfcHJpbnRmKGZ1bmNfZ2V0X2FyZ3MoKSk7CgkJaWYgKCEoJHJlcyA9IG15c3FsX3F1ZXJ5KCRzcWwsICR0aGlzLT5jb25uKSkpCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCQkkcnMgPSBhcnJheSgpOwoJCXdoaWxlICgkcm93ICA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpKQoJCXsKCQkJJHJzW10gPSAkcm93OwoJCX0KCQlteXNxbF9mcmVlX3Jlc3VsdCgkcmVzKTsKCQlyZXR1cm4gJHJzOwoJfQoJCgkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IHJvdwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBhcnJheQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfcm93X2Fzc29jICggJHNxbCApCgl7CgkJJHNxbCA9ICR0aGlzLT5zcWxfcHJpbnRmKGZ1bmNfZ2V0X2FyZ3MoKSk7CgkJaWYgKCEoJHJlcyA9IG15c3FsX3F1ZXJ5KCRzcWwsICR0aGlzLT5jb25uKSkpCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCQlpZiAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpKQoJCXsKCQkJJHJzID0gJHJvdzsKCQl9CgkJZWxzZQoJCXsKCQkJJHJzID0gZmFsc2U7CgkJfQoJCW15c3FsX2ZyZWVfcmVzdWx0KCRyZXMpOwoJCXJldHVybiAkcnM7Cgl9CgoJCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgcmV0dXJuIHRoZSBmaXJzdCByb3cKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X3JvdyAoICRzcWwgKQoJewoJCSRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwoJCWlmICghKCRyZXMgPSBteXNxbF9xdWVyeSgkc3FsLCAkdGhpcy0+Y29ubikpKQoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJaWYgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzKSkKCQl7CgkJCSRycyA9ICRyb3c7CgkJfQoJCWVsc2UKCQl7CgkJCSRycyA9IGZhbHNlOwoJCX0KCQlteXNxbF9mcmVlX3Jlc3VsdCgkcmVzKTsKCQlyZXR1cm4gJHJzOwoJfQoJCgkJCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgcmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBtaXhlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfb25lICggJHNxbCApCgl7CgkJJHNxbCA9ICR0aGlzLT5zcWxfcHJpbnRmKGZ1bmNfZ2V0X2FyZ3MoKSk7CgkJaWYgKCEoJHJlcyA9IG15c3FsX3F1ZXJ5KCRzcWwsICR0aGlzLT5jb25uKSkpCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCQkkdmFsID0gQG15c3FsX3Jlc3VsdCgkcmVzLCAwLCAwKTsKCQlteXNxbF9mcmVlX3Jlc3VsdCgkcmVzKTsKCQlyZXR1cm4gJHZhbDsKCX0KCQoJCgkvKioKCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgaW4gdGhlIGxhc3QgcXVlcnkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FmZmVjdGVkX3Jvd3MgKCkKCXsKCQlyZXR1cm4gbXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+Y29ubik7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBpZCBvZiB0aGUgbGFzdCBpbnNlcnRlZCByb3cKCSAqIAoJICogQHJldHVybiBpbnQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2luc2VydF9pZCAoKQoJewoJCXJldHVybiBteXNxbF9pbnNlcnRfaWQoJHRoaXMtPmNvbm4pOwoJfQoJCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBzcWxfcHJpbnRmICggJGFyZ3MgKQoJewoJCSRzcWwgID0gYXJyYXlfc2hpZnQoJGFyZ3MpOwoJCWlmIChjb3VudCgkYXJncykgPT0gMSAmJiBpc19hcnJheSgkYXJnc1swXSkpCgkJewoJCQkkYXJncyA9ICRhcmdzWzBdOwoJCX0KCQkkYXJncyA9IGFycmF5X21hcChhcnJheSgkdGhpcywgJ3NxbF9lc2NhcGVfc3RyaW5nJyksICRhcmdzKTsKCQlyZXR1cm4gdnNwcmludGYoJHNxbCwgJGFyZ3MpOwoJfQoJCgkKCXByb3RlY3RlZCBmdW5jdGlvbiBzcWxfZXNjYXBlX3N0cmluZyAoICRzICkKCXsKCQlpZiAoaXNfc3RyaW5nKCRzKSkKCQl7CgkJCXJldHVybiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHMsICR0aGlzLT5jb25uKTsKCQl9CgkJZWxzZSBpZiAoaXNfbnVsbCgkcykpCgkJewoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJZWxzZSBpZiAoaXNfYm9vbCgkcykpCgkJewoJCQlyZXR1cm4gaW50dmFsKCRzKTsKCQl9CgkJZWxzZSBpZiAoaXNfaW50KCRzKSB8fCBpc19mbG9hdCgkcykpCgkJewoJCQlyZXR1cm4gJHM7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoc3RydmFsKCRzKSwgJHRoaXMtPmNvbm4pOwoJCX0KCX0KCQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3FsX2VycmNoZWNrICggJHNxbCApCgl7CgkJaWYgKG15c3FsX2Vycm5vKCR0aGlzLT5jb25uKSkKCQl7CgkJCSRtc2cgPSAgIlNRTCBFcnJvciBpbiBPQXV0aFN0b3JlTXlTUUw6ICIubXlzcWxfZXJyb3IoJHRoaXMtPmNvbm4pLiJcblxuIiAuICRzcWw7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJG1zZyk7CgkJfQoJfQp9CgoKLyogdmk6c2V0IHRzPTQgc3RzPTQgc3c9NCBiaW5hcnkgbm9lb2w6ICovCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreMySQLi.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogQmFzZWQgb24gTXlTUUwKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTdG9yZU15U1FMaS5waHAgNjQgMjAwOS0wOC0xNiAxOTozNzowMFogbWFyY3dAcG9ib3guY29tICQKICogQGF1dGhvciBCcnVubyBCYXJiZXJpIEduZWNjbyA8YnJ1bm9iZ0B1c2Vycy5zZi5uZXQ+IEJhc2VkIG9uIGNvZGUgYnkgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIAogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgovKgogKiBNb2RpZmllZCBmcm9tIE9BdXRoU3RvcmVNeVNRTCB0byBzdXBwb3J0IE15U1FMaQogKi8KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZU15U1FMLnBocCc7CgoKY2xhc3MgT0F1dGhTdG9yZU15U1FMaSBleHRlbmRzIE9BdXRoU3RvcmVNeVNRTAp7CgkKCXB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKCkgewoJCSRzcWwgPSBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKSAuICcvbXlzcWwvbXlzcWwuc3FsJyk7CgkJJHBzICA9IGV4cGxvZGUoJyMtLVNQTElULS0nLCAkc3FsKTsKCQkKCQlmb3JlYWNoICgkcHMgYXMgJHApCgkJewoJCQkkcCA9IHByZWdfcmVwbGFjZSgnL15ccyojLiokL20nLCAnJywgJHApOwoJCQkKCQkJJHRoaXMtPnF1ZXJ5KCRwKTsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkcCk7CgkJfQkJCgl9CgoJLyoqCgkgKiBDb25zdHJ1Y3QgdGhlIE9BdXRoU3RvcmVNeVNRTGkuCgkgKiBJbiB0aGUgb3B0aW9ucyB5b3UgaGF2ZSB0byBzdXBwbHkgZWl0aGVyOgoJICogLSBzZXJ2ZXIsIHVzZXJuYW1lLCBwYXNzd29yZCBhbmQgZGF0YWJhc2UgKGZvciBhIG15c3FsaV9jb25uZWN0KQoJICogLSBjb25uIChmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgdXNlZCkKCSAqIAoJICogQHBhcmFtIGFycmF5IG9wdGlvbnMKCSAqLwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJCWlmIChpc3NldCgkb3B0aW9uc1snY29ubiddKSkKCQl7CgkJCSR0aGlzLT5jb25uID0gJG9wdGlvbnNbJ2Nvbm4nXTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKGlzc2V0KCRvcHRpb25zWydzZXJ2ZXInXSkpCgkJCXsKCQkJCSRzZXJ2ZXIgICA9ICRvcHRpb25zWydzZXJ2ZXInXTsKCQkJCSR1c2VybmFtZSA9ICRvcHRpb25zWyd1c2VybmFtZSddOwoJCQkJCgkJCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Bhc3N3b3JkJ10pKQoJCQkJewoJCQkJCSR0aGlzLT5jb25uID0gKCRHTE9CQUxTWyJfX19teXNxbGlfc3RvbiJdID0gbXlzcWxpX2Nvbm5lY3QoJHNlcnZlciwgICR1c2VybmFtZSwgICRvcHRpb25zWydwYXNzd29yZCddKSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHRoaXMtPmNvbm4gPSAoJEdMT0JBTFNbIl9fX215c3FsaV9zdG9uIl0gPSBteXNxbGlfY29ubmVjdCgkc2VydmVyLCAgJHVzZXJuYW1lKSk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBUcnkgdGhlIGRlZmF1bHQgbXlzcWwgY29ubmVjdAoJCQkJJHRoaXMtPmNvbm4gPSAoJEdMT0JBTFNbIl9fX215c3FsaV9zdG9uIl0gPSBteXNxbGlfY29ubmVjdCgpKTsKCQkJfQoKCQkJaWYgKCR0aGlzLT5jb25uID09PSBmYWxzZSkKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQ291bGQgbm90IGNvbm5lY3QgdG8gTXlTUUwgZGF0YWJhc2U6ICcgLiAoKGlzX29iamVjdCgkR0xPQkFMU1siX19fbXlzcWxpX3N0b24iXSkpID8gbXlzcWxpX2Vycm9yKCRHTE9CQUxTWyJfX19teXNxbGlfc3RvbiJdKSA6ICgoJF9fX215c3FsaV9yZXMgPSBteXNxbGlfY29ubmVjdF9lcnJvcigpKSA/ICRfX19teXNxbGlfcmVzIDogZmFsc2UpKSk7CgkJCX0KCgkJCWlmIChpc3NldCgkb3B0aW9uc1snZGF0YWJhc2UnXSkpCgkJCXsKCQkJCS8qIFRPRE86IHNlY3VyaXR5LiBteXNxbGlfIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGVzY2FwZSBpZGVudGlmaWVyIGZ1bmN0aW9uLgoJCQkJJGVzY2FwZWRkYiA9IG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJG9wdGlvbnNbJ2RhdGFiYXNlJ10pOwoJCQkJaWYgKCEoKGJvb2wpbXlzcWxpX3F1ZXJ5KCAkdGhpcy0+Y29ubiwgIlVTRSBgJGVzY2FwZWRkYmAiICkpKQoJCQkJewoJCQkJCSR0aGlzLT5zcWxfZXJyY2hlY2soKTsKCQkJCX0qLwoJCQl9CgkJCSR0aGlzLT5xdWVyeSgnc2V0IGNoYXJhY3RlciBzZXQgdXRmOCcpOwoJCX0KCX0KCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgaWdub3JlIHRoZSByZXN1bHRzCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeSAoICRzcWwgKQoJewoJCSRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwoJCWlmICghKCRyZXMgPSBteXNxbGlfcXVlcnkoICR0aGlzLT5jb25uLCAkc3FsKSkpCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCQlpZiAoIWlzX2Jvb2woJHJlcykpCgkJewoJCQkoKG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzKSB8fCAoaXNfb2JqZWN0KCRyZXMpICYmIChnZXRfY2xhc3MoJHJlcykgPT0gIm15c3FsaV9yZXN1bHQiKSkpID8gdHJ1ZSA6IGZhbHNlKTsKCQl9Cgl9CgkKCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgaWdub3JlIHRoZSByZXN1bHRzCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9hbGxfYXNzb2MgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQlpZiAoISgkcmVzID0gbXlzcWxpX3F1ZXJ5KCAkdGhpcy0+Y29ubiwgJHNxbCkpKQoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJJHJzID0gYXJyYXkoKTsKCQl3aGlsZSAoJHJvdyAgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlcykpCgkJewoJCQkkcnNbXSA9ICRyb3c7CgkJfQoJCSgobXlzcWxpX2ZyZWVfcmVzdWx0KCRyZXMpIHx8IChpc19vYmplY3QoJHJlcykgJiYgKGdldF9jbGFzcygkcmVzKSA9PSAibXlzcWxpX3Jlc3VsdCIpKSkgPyB0cnVlIDogZmFsc2UpOwoJCXJldHVybiAkcnM7Cgl9CgkKCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9yb3dfYXNzb2MgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQlpZiAoISgkcmVzID0gbXlzcWxpX3F1ZXJ5KCAkdGhpcy0+Y29ubiwgJHNxbCkpKQoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJaWYgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlcykpCgkJewoJCQkkcnMgPSAkcm93OwoJCX0KCQllbHNlCgkJewoJCQkkcnMgPSBmYWxzZTsKCQl9CgkJKChteXNxbGlfZnJlZV9yZXN1bHQoJHJlcykgfHwgKGlzX29iamVjdCgkcmVzKSAmJiAoZ2V0X2NsYXNzKCRyZXMpID09ICJteXNxbGlfcmVzdWx0IikpKSA/IHRydWUgOiBmYWxzZSk7CgkJcmV0dXJuICRyczsKCX0KCgkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IHJvdwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICogQHJldHVybiBhcnJheQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfcm93ICggJHNxbCApCgl7CgkJJHNxbCA9ICR0aGlzLT5zcWxfcHJpbnRmKGZ1bmNfZ2V0X2FyZ3MoKSk7CgkJaWYgKCEoJHJlcyA9IG15c3FsaV9xdWVyeSggJHRoaXMtPmNvbm4sICRzcWwpKSkKCQl7CgkJCSR0aGlzLT5zcWxfZXJyY2hlY2soJHNxbCk7CgkJfQoJCWlmICgkcm93ID0gbXlzcWxpX2ZldGNoX2FycmF5KCRyZXMpKQoJCXsKCQkJJHJzID0gJHJvdzsKCQl9CgkJZWxzZQoJCXsKCQkJJHJzID0gZmFsc2U7CgkJfQoJCSgobXlzcWxpX2ZyZWVfcmVzdWx0KCRyZXMpIHx8IChpc19vYmplY3QoJHJlcykgJiYgKGdldF9jbGFzcygkcmVzKSA9PSAibXlzcWxpX3Jlc3VsdCIpKSkgPyB0cnVlIDogZmFsc2UpOwoJCXJldHVybiAkcnM7Cgl9CgkKCQkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9vbmUgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQlpZiAoISgkcmVzID0gbXlzcWxpX3F1ZXJ5KCAkdGhpcy0+Y29ubiwgJHNxbCkpKQoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJaWYgKCRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlcykpCgkJewoJCQkkdmFsID0gYXJyYXlfcG9wKCRyb3cpOwoJCX0KCQllbHNlCgkJewoJCQkkdmFsID0gZmFsc2U7CgkJfQoJCSgobXlzcWxpX2ZyZWVfcmVzdWx0KCRyZXMpIHx8IChpc19vYmplY3QoJHJlcykgJiYgKGdldF9jbGFzcygkcmVzKSA9PSAibXlzcWxpX3Jlc3VsdCIpKSkgPyB0cnVlIDogZmFsc2UpOwoJCXJldHVybiAkdmFsOwoJfQoJCgkKCS8qKgoJICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBpbiB0aGUgbGFzdCBxdWVyeQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfYWZmZWN0ZWRfcm93cyAoKQoJewoJCXJldHVybiBteXNxbGlfYWZmZWN0ZWRfcm93cygkdGhpcy0+Y29ubik7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBpZCBvZiB0aGUgbGFzdCBpbnNlcnRlZCByb3cKCSAqIAoJICogQHJldHVybiBpbnQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2luc2VydF9pZCAoKQoJewoJCXJldHVybiAoKGlzX251bGwoJF9fX215c3FsaV9yZXMgPSBteXNxbGlfaW5zZXJ0X2lkKCR0aGlzLT5jb25uKSkpID8gZmFsc2UgOiAkX19fbXlzcWxpX3Jlcyk7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9wcmludGYgKCAkYXJncyApCgl7CgkJJHNxbCAgPSBhcnJheV9zaGlmdCgkYXJncyk7CgkJaWYgKGNvdW50KCRhcmdzKSA9PSAxICYmIGlzX2FycmF5KCRhcmdzWzBdKSkKCQl7CgkJCSRhcmdzID0gJGFyZ3NbMF07CgkJfQoJCSRhcmdzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAnc3FsX2VzY2FwZV9zdHJpbmcnKSwgJGFyZ3MpOwoJCXJldHVybiB2c3ByaW50Zigkc3FsLCAkYXJncyk7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9lc2NhcGVfc3RyaW5nICggJHMgKQoJewoJCWlmIChpc19zdHJpbmcoJHMpKQoJCXsKCQkJcmV0dXJuIG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoICR0aGlzLT5jb25uLCAkcyk7CgkJfQoJCWVsc2UgaWYgKGlzX251bGwoJHMpKQoJCXsKCQkJcmV0dXJuIE5VTEw7CgkJfQoJCWVsc2UgaWYgKGlzX2Jvb2woJHMpKQoJCXsKCQkJcmV0dXJuIGludHZhbCgkcyk7CgkJfQoJCWVsc2UgaWYgKGlzX2ludCgkcykgfHwgaXNfZmxvYXQoJHMpKQoJCXsKCQkJcmV0dXJuICRzOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZyggJHRoaXMtPmNvbm4sIHN0cnZhbCgkcykpOwoJCX0KCX0KCQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3FsX2VycmNoZWNrICggJHNxbCApCgl7CgkJaWYgKCgoaXNfb2JqZWN0KCR0aGlzLT5jb25uKSkgPyBteXNxbGlfZXJybm8oJHRoaXMtPmNvbm4pIDogKCgkX19fbXlzcWxpX3JlcyA9IG15c3FsaV9jb25uZWN0X2Vycm5vKCkpID8gJF9fX215c3FsaV9yZXMgOiBmYWxzZSkpKQoJCXsKCQkJJG1zZyA9ICAiU1FMIEVycm9yIGluIE9BdXRoU3RvcmVNeVNRTDogIi4oKGlzX29iamVjdCgkdGhpcy0+Y29ubikpID8gbXlzcWxpX2Vycm9yKCR0aGlzLT5jb25uKSA6ICgoJF9fX215c3FsaV9yZXMgPSBteXNxbGlfY29ubmVjdF9lcnJvcigpKSA/ICRfX19teXNxbGlfcmVzIDogZmFsc2UpKS4iXG5cbiIgLiAkc3FsOwoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCRtc2cpOwoJCX0KCX0KfQoKCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreOracle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBBZGRlZCBieSBWaW5heSBLYW50IFNhaHUuDQogKiBSZXBsYWNlZCBhbGwgdGhlIE15U1FMIHF1ZXJpZXMgd2l0aCBPcmFjbGUgU1BzLiAocmVmOiBPQXV0aFN0b3JlU1FMLnBocCkNCiAqIHZpbmF5a2FudC5zYWh1QGdtYWlsLmNvbQ0KICoNCiAqIFN0b3JhZ2UgY29udGFpbmVyIGZvciB0aGUgb2F1dGggY3JlZGVudGlhbHMsIGJvdGggc2VydmVyIGFuZCBjb25zdW1lciBzaWRlLg0KICogQmFzZWQgb24gT3JhY2xlDQogKg0KICogQGF1dGhvciBWaW5heSBLYW50IFNhaHUgPHZpbmF5a2FudC5zYWh1QGdtYWlsLmNvbT4NCiAqIEBkYXRlICBBdWcgNiwgMjAxMA0KICogDQogKiBUaGUgTUlUIExpY2Vuc2UNCiAqIA0KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0KICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCiAqIA0KICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KICogDQogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQogKiBUSEUgU09GVFdBUkUuDQogKi8NCg0KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9PQXV0aFN0b3JlQWJzdHJhY3QuY2xhc3MucGhwJzsNCg0KYWJzdHJhY3QgY2xhc3MgT0F1dGhTdG9yZU9yYWNsZSBleHRlbmRzIE9BdXRoU3RvcmVBYnN0cmFjdCB7DQogICAgLyoqDQogICAgICogTWF4aW11bSBkZWx0YSBhIHRpbWVzdGFtcCBtYXkgYmUgb2ZmIGZyb20gYSBwcmV2aW91cyB0aW1lc3RhbXAuDQogICAgICogQWxsb3dzIG11bHRpcGxlIGNvbnN1bWVycyB3aXRoIHNvbWUgY2xvY2sgc2tldyB0byB3b3JrIHdpdGggdGhlIHNhbWUgdG9rZW4uDQogICAgICogVW5pdCBpcyBzZWNvbmRzLCBkZWZhdWx0IG1heCBza2V3IGlzIDEwIG1pbnV0ZXMuDQogICAgICovDQogICAgcHJvdGVjdGVkICRtYXhfdGltZXN0YW1wX3NrZXcgPSBNQVhfVElNRVNUQU1QX1NLRVc7DQoNCiAgICAvKioNCiAgICAgKiBEZWZhdWx0IHR0bCBmb3IgcmVxdWVzdCB0b2tlbnMNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgJG1heF9yZXF1ZXN0X3Rva2VuX3R0bCA9IE1BWF9SRVFVRVNUX1RPS0VOX1RJTUU7DQoNCg0KICAgIC8qKg0KICAgICAqIENvbnN0cnVjdCB0aGUgT0F1dGhTdG9yZU15U1FMLg0KICAgICAqIEluIHRoZSBvcHRpb25zIHlvdSBoYXZlIHRvIHN1cHBseSBlaXRoZXI6DQogICAgICogLSBzZXJ2ZXIsIHVzZXJuYW1lLCBwYXNzd29yZCBhbmQgZGF0YWJhc2UgKGZvciBhIG15c3FsX2Nvbm5lY3QpDQogICAgICogLSBjb25uIChmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgdXNlZCkNCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSBvcHRpb25zDQogICAgICovDQogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkb3B0aW9ucyA9IGFycmF5KCkgKSB7DQogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY29ubiddKSkgew0KICAgICAgICAgICAgJHRoaXMtPmNvbm4gPSAkb3B0aW9uc1snY29ubiddOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJHRoaXMtPmNvbm49b2NpX2Nvbm5lY3QoREJVU0VSLERCUEFTU1dPUkQsREJIT1NUKTsNCg0KICAgICAgICAgICAgaWYgKCR0aGlzLT5jb25uID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vICR0aGlzLT5xdWVyeSgnc2V0IGNoYXJhY3RlciBzZXQgdXRmOCcpOw0KICAgICAgICB9DQogICAgfQ0KDQoJLyoqDQoJICogRmluZCBzdG9yZWQgY3JlZGVudGlhbHMgZm9yIHRoZSBjb25zdW1lciBrZXkgYW5kIHRva2VuLiBVc2VkIGJ5IGFuIE9BdXRoIHNlcnZlcg0KCSAqIHdoZW4gdmVyaWZ5aW5nIGFuIE9BdXRoIHJlcXVlc3QuDQoJICogDQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkNCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuDQoJICogQHBhcmFtIHN0cmluZyB0b2tlbl90eXBlCQlmYWxzZSwgJ3JlcXVlc3QnIG9yICdhY2Nlc3MnDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBzZWNyZXRzIHdoZXJlIGZvdW5kDQoJICogQHJldHVybiBhcnJheQlhc3NvYyAoY29uc3VtZXJfc2VjcmV0LCB0b2tlbl9zZWNyZXQsIG9zcl9pZCwgb3N0X2lkLCB1c2VyX2lkKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZWNyZXRzRm9yVmVyaWZ5ICgkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlID0gJ2FjY2VzcycgKSB7DQogICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0dFVF9TRUNSRVRTX0ZPUl9WRVJJRlkoOlBfQ09OU1VNRVJfS0VZLCA6UF9UT0tFTiwgOlBfVE9LRU5fVFlQRSwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fVFlQRScsICR0b2tlbl90eXBlLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCiAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgIG9jaV9mZXRjaF9hbGwoJHBfcm93LCAkZ2V0U2VjcmV0c0ZvclZlcmlmeUxpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KDQogICAgICAgICAgICAkcnMgPSRnZXRTZWNyZXRzRm9yVmVyaWZ5TGlzdDsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkcnMpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciIHRva2VuICInLiR0b2tlbi4nIiBjb21iaW5hdGlvbiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZW5hYmxlZC4nKTsNCiAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgIHJldHVybiAkcnNbMF07DQogICAgICAgIH0NCg0KDQoJLyoqDQoJICogRmluZCB0aGUgc2VydmVyIGRldGFpbHMgZm9yIHNpZ25pbmcgYSByZXF1ZXN0LCBhbHdheXMgbG9va3MgZm9yIGFuIGFjY2VzcyB0b2tlbi4NCgkgKiBUaGUgcmV0dXJuZWQgY3JlZGVudGlhbHMgZGVwZW5kIG9uIHdoaWNoIGxvY2FsIHVzZXIgaXMgbWFraW5nIHRoZSByZXF1ZXN0Lg0KCSAqIA0KCSAqIFRoZSBjb25zdW1lcl9rZXkgbXVzdCBiZWxvbmcgdG8gdGhlIHVzZXIgb3IgYmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpDQoJICogDQoJICogRm9yIHNpZ25pbmcgd2UgbmVlZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoNCgkgKiANCgkgKiBjb25zdW1lcl9rZXkJCQljb25zdW1lciBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2ZXINCgkgKiBjb25zdW1lcl9zZWNyZXQJCWNvbnN1bWVyIHNlY3JldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2ZXINCgkgKiB0b2tlbgkJCQlhY2Nlc3MgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmVyDQoJICogdG9rZW5fc2VjcmV0CQkJc2VjcmV0IGZvciB0aGUgYWNjZXNzIHRva2VuDQoJICogc2lnbmF0dXJlX21ldGhvZHMJc2lnbmluZyBtZXRob2RzIHN1cHBvcnRlZCBieSB0aGUgc2VydmVyIChhcnJheSkNCgkgKiANCgkgKiBAdG9kbyBmaWx0ZXIgb24gdG9rZW4gdHlwZSAod2Ugc2hvdWxkIGtub3cgaG93IGFuZCB3aXRoIHdoYXQgdG8gc2lnbiB0aGlzIHJlcXVlc3QsIGFuZCB0aGVyZSBtaWdodCBiZSBvbGQgYWNjZXNzIHRva2VucykNCgkgKiBAcGFyYW0gc3RyaW5nIHVyaQl1cmkgb2YgdGhlIHNlcnZlcg0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAlpZCBvZiB0aGUgbG9nZ2VkIG9uIHVzZXINCgkgKiBAcGFyYW0gc3RyaW5nIG5hbWUJKG9wdGlvbmFsKSBuYW1lIG9mIHRoZSB0b2tlbiAoY2FzZSBzZW5zaXRpdmUpDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZA0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjcmV0c0ZvclNpZ25hdHVyZSAoICR1cmksICR1c2VyX2lkLCAkbmFtZSA9ICcnICkgew0KICAgICAgICAgICAgLy8gRmluZCBhIGNvbnN1bWVyIGtleSBhbmQgdG9rZW4gZm9yIHRoZSBnaXZlbiB1cmkNCiAgICAgICAgICAgICRwcyAgICAgPSBwYXJzZV91cmwoJHVyaSk7DQogICAgICAgICAgICAkaG9zdCAgID0gaXNzZXQoJHBzWydob3N0J10pID8gJHBzWydob3N0J10gOiAnbG9jYWxob3N0JzsNCiAgICAgICAgICAgICRwYXRoICAgPSBpc3NldCgkcHNbJ3BhdGgnXSkgPyAkcHNbJ3BhdGgnXSA6ICcnOw0KDQogICAgICAgICAgICBpZiAoZW1wdHkoJHBhdGgpIHx8IHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykgew0KICAgICAgICAgICAgICAgICRwYXRoIC49ICcvJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0dFVF9TRUNSRVRTX0ZPUl9TSUdOQVRVUkUoOlBfSE9TVCwgOlBfUEFUSCwgOlBfVVNFUl9JRCwgOlBfTkFNRSwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0hPU1QnLCAkaG9zdCwgMjU1KTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9QQVRIJywgJHBhdGgsIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCAyMCk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfTkFNRScsICRuYW1lLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCiAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgIG9jaV9mZXRjaF9hbGwoJHBfcm93LCAkZ2V0U2VjcmV0c0ZvclNpZ25hdHVyZUxpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KICAgICAgICAgICAgJHNlY3JldHMgID0gJGdldFNlY3JldHNGb3JTaWduYXR1cmVMaXN0WzBdOw0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIFRoZSBvd25lciBvZiB0aGUgY29uc3VtZXJfa2V5IGlzIGVpdGhlciB0aGUgdXNlciBvciBub2JvZHkgKHB1YmxpYyBjb25zdW1lciBrZXkpDQogICAgICAgICAgICAvKiRzZWNyZXRzID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnDQoJCQkJCVNFTEVDVAlvY3JfY29uc3VtZXJfa2V5CQlhcyBjb25zdW1lcl9rZXksDQoJCQkJCQkJb2NyX2NvbnN1bWVyX3NlY3JldAkJYXMgY29uc3VtZXJfc2VjcmV0LA0KCQkJCQkJCW9jdF90b2tlbgkJCQlhcyB0b2tlbiwNCgkJCQkJCQlvY3RfdG9rZW5fc2VjcmV0CQlhcyB0b2tlbl9zZWNyZXQsDQoJCQkJCQkJb2NyX3NpZ25hdHVyZV9tZXRob2RzCWFzIHNpZ25hdHVyZV9tZXRob2RzDQoJCQkJCUZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkNCgkJCQkJCUpPSU4gb2F1dGhfY29uc3VtZXJfdG9rZW4gT04gb2N0X29jcl9pZF9yZWYgPSBvY3JfaWQNCgkJCQkJV0hFUkUgb2NyX3NlcnZlcl91cmlfaG9zdCA9IFwnJXNcJw0KCQkJCQkgIEFORCBvY3Jfc2VydmVyX3VyaV9wYXRoID0gTEVGVChcJyVzXCcsIExFTkdUSChvY3Jfc2VydmVyX3VyaV9wYXRoKSkNCgkJCQkJICBBTkQgKG9jcl91c2FfaWRfcmVmID0gJXMgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkNCgkJCQkJICBBTkQgb2N0X3VzYV9pZF9yZWYJICA9ICVkDQoJCQkJCSAgQU5EIG9jdF90b2tlbl90eXBlICAgICAgPSBcJ2FjY2Vzc1wnDQoJCQkJCSAgQU5EIG9jdF9uYW1lCQkJICA9IFwnJXNcJw0KCQkJCQkgIEFORCBvY3RfdG9rZW5fdHRsICAgICAgID49IE5PVygpDQoJCQkJCU9SREVSIEJZIG9jcl91c2FfaWRfcmVmIERFU0MsIG9jcl9jb25zdW1lcl9zZWNyZXQgREVTQywgTEVOR1RIKG9jcl9zZXJ2ZXJfdXJpX3BhdGgpIERFU0MNCgkJCQkJTElNSVQgMCwxDQoJCQkJCScsICRob3N0LCAkcGF0aCwgJHVzZXJfaWQsICR1c2VyX2lkLCAkbmFtZQ0KCQkJCQkpOw0KICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIGlmIChlbXB0eSgkc2VjcmV0cykpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXIgdG9rZW5zIGF2YWlsYWJsZSBmb3IgJy4kdXJpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRzZWNyZXRzWydzaWduYXR1cmVfbWV0aG9kcyddID0gZXhwbG9kZSgnLCcsICRzZWNyZXRzWydzaWduYXR1cmVfbWV0aG9kcyddKTsNCiAgICAgICAgICAgIHJldHVybiAkc2VjcmV0czsNCiAgICAgICAgfQ0KDQoNCgkvKioNCgkgKiBHZXQgdGhlIHRva2VuIGFuZCB0b2tlbiBzZWNyZXQgd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nCWNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBzdHJpbmcgCXRva2VuDQoJICogQHBhcmFtIHN0cmluZwl0b2tlbl90eXBlDQoJICogQHBhcmFtIGludAkJdXNlcl9pZAkJCXRoZSB1c2VyIG93bmluZyB0aGUgdG9rZW4NCgkgKiBAcGFyYW0gc3RyaW5nCW5hbWUJCQlvcHRpb25hbCBuYW1lIGZvciBhIG5hbWVkIHRva2VuDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZA0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyVG9rZW5TZWNyZXRzICgkY29uc3VtZXJfa2V5LCR0b2tlbiwkdG9rZW5fdHlwZSwkdXNlcl9pZCwkbmFtZSA9ICcnKQ0KCXsNCgkJaWYgKCR0b2tlbl90eXBlICE9ICdyZXF1ZXN0JyAmJiAkdG9rZW5fdHlwZSAhPSAnYWNjZXNzJykNCgkJew0KCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5rb3duIHRva2VuIHR5cGUgIicuJHRva2VuX3R5cGUuJyIsIG11c3QgYmUgZWl0aGVyICJyZXF1ZXN0IiBvciAiYWNjZXNzIicpOw0KCQl9DQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0dFVF9TRVJWRVJfVE9LRU5fU0VDUkVUUyg6UF9DT05TVU1FUl9LRVksIDpQX1RPS0VOLCA6UF9UT0tFTl9UWVBFLCA6UF9VU0VSX0lELCA6UF9ST1dTLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTicsICR0b2tlbiwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fVFlQRScsICR0b2tlbl90eXBlLCAyMCk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTRVJfSUQnLCAkdXNlcl9pZCwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQogICAgICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAgICAgJHBfcm93ID0gb2NpX25ld19jdXJzb3IoJHRoaXMtPmNvbm4pOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KDQogICAgICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCiAgICAgICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgICAgICBvY2lfZmV0Y2hfYWxsKCRwX3JvdywgJGdldFNlcnZlclRva2VuU2VjcmV0c0xpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KICAgICAgICAgICAgICAgICRyPSRnZXRTZXJ2ZXJUb2tlblNlY3JldHNMaXN0WzBdOw0KICAgICAgICAgICAgICAgIC8vDQoJCS8vIFRha2UgdGhlIG1vc3QgcmVjZW50IHRva2VuIG9mIHRoZSBnaXZlbiB0eXBlDQoJCS8qJHIgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcNCgkJCQkJU0VMRUNUCW9jcl9jb25zdW1lcl9rZXkJCWFzIGNvbnN1bWVyX2tleSwNCgkJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0CQlhcyBjb25zdW1lcl9zZWNyZXQsDQoJCQkJCQkJb2N0X3Rva2VuCQkJCWFzIHRva2VuLA0KCQkJCQkJCW9jdF90b2tlbl9zZWNyZXQJCWFzIHRva2VuX3NlY3JldCwNCgkJCQkJCQlvY3RfbmFtZQkJCQlhcyB0b2tlbl9uYW1lLA0KCQkJCQkJCW9jcl9zaWduYXR1cmVfbWV0aG9kcwlhcyBzaWduYXR1cmVfbWV0aG9kcywNCgkJCQkJCQlvY3Jfc2VydmVyX3VyaQkJCWFzIHNlcnZlcl91cmksDQoJCQkJCQkJb2NyX3JlcXVlc3RfdG9rZW5fdXJpCWFzIHJlcXVlc3RfdG9rZW5fdXJpLA0KCQkJCQkJCW9jcl9hdXRob3JpemVfdXJpCQlhcyBhdXRob3JpemVfdXJpLA0KCQkJCQkJCW9jcl9hY2Nlc3NfdG9rZW5fdXJpCWFzIGFjY2Vzc190b2tlbl91cmksDQoJCQkJCQkJSUYob2N0X3Rva2VuX3R0bCA+PSBcJzk5OTktMTItMzFcJywgTlVMTCwgVU5JWF9USU1FU1RBTVAob2N0X3Rva2VuX3R0bCkgLSBVTklYX1RJTUVTVEFNUChOT1coKSkpIGFzIHRva2VuX3R0bA0KCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5DQoJCQkJCQkJSk9JTiBvYXV0aF9jb25zdW1lcl90b2tlbg0KCQkJCQkJCU9OIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkDQoJCQkJCVdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcNCgkJCQkJICBBTkQgb2N0X3Rva2VuX3R5cGUgICA9IFwnJXNcJw0KCQkJCQkgIEFORCBvY3RfdG9rZW4gICAgICAgID0gXCclc1wnDQoJCQkJCSAgQU5EIG9jdF91c2FfaWRfcmVmICAgPSAlZA0KCQkJCQkgIEFORCBvY3RfdG9rZW5fdHRsICAgID49IE5PVygpDQoJCQkJCScsICRjb25zdW1lcl9rZXksICR0b2tlbl90eXBlLCAkdG9rZW4sICR1c2VyX2lkDQoJCQkJCSk7Ki8NCgkJCQkJDQoJCWlmIChlbXB0eSgkcikpDQoJCXsNCgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBmaW5kIGEgIicuJHRva2VuX3R5cGUuJyIgdG9rZW4gZm9yIGNvbnN1bWVyICInLiRjb25zdW1lcl9rZXkuJyIgYW5kIHVzZXIgJy4kdXNlcl9pZCk7DQoJCX0NCgkJaWYgKGlzc2V0KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSAmJiAhZW1wdHkoJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10pKQ0KCQl7DQoJCQkkclsnc2lnbmF0dXJlX21ldGhvZHMnXSA9IGV4cGxvZGUoJywnLCRyWydzaWduYXR1cmVfbWV0aG9kcyddKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRyWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoKTsNCgkJfQ0KCQlyZXR1cm4gJHI7CQkNCgl9DQoNCg0KCS8qKg0KCSAqIEFkZCBhIHJlcXVlc3QgdG9rZW4gd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4NCgkgKiANCgkgKiBAdG9kbyByZW1vdmUgb2xkIHRva2VucyBmb3IgdGhpcyB1c2VyIGFuZCB0aGlzIG9jcl9pZA0KCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CWtleSBvZiB0aGUgc2VydmVyIGluIHRoZSBjb25zdW1lciByZWdpc3RyeQ0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fdHlwZQkJb25lIG9mICdyZXF1ZXN0JyBvciAnYWNjZXNzJw0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4NCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3NlY3JldA0KCSAqIEBwYXJhbSBpbnQgCSB1c2VyX2lkCQkJdGhlIHVzZXIgb3duaW5nIHRoZSB0b2tlbg0KCSAqIEBwYXJhbSBhcnJheSAgb3B0aW9ucwkJCWV4dHJhIG9wdGlvbnMsIG5hbWUgYW5kIHRva2VuX3R0bA0KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gc2VydmVyIGlzIG5vdCBrbm93bg0KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gd2UgcmVjZWl2ZWQgYSBkdXBsaWNhdGUgdG9rZW4NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkU2VydmVyVG9rZW4gKCAkY29uc3VtZXJfa2V5LCAkdG9rZW5fdHlwZSwgJHRva2VuLCAkdG9rZW5fc2VjcmV0LCAkdXNlcl9pZCwgJG9wdGlvbnMgPSBhcnJheSgpICkNCgl7DQoJCWlmICgkdG9rZW5fdHlwZSAhPSAncmVxdWVzdCcgJiYgJHRva2VuX3R5cGUgIT0gJ2FjY2VzcycpDQoJCXsNCgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1Vua25vd24gdG9rZW4gdHlwZSAiJy4kdG9rZW5fdHlwZS4nIiwgbXVzdCBiZSBlaXRoZXIgInJlcXVlc3QiIG9yICJhY2Nlc3MiJyk7DQoJCX0NCg0KCQkvLyBNYXhpbXVtIHRpbWUgdG8gbGl2ZSBmb3IgdGhpcyB0b2tlbg0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpDQoJCXsNCgkJCSR0dGwgPSBpbnR2YWwoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKTsNCgkJfQ0KCQllbHNlIGlmICgkdG9rZW5fdHlwZSA9PSAncmVxdWVzdCcpDQoJCXsNCgkJCSR0dGwgPWludHZhbCgkdGhpcy0+bWF4X3JlcXVlc3RfdG9rZW5fdHRsKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0dGwgPSBOVUxMOw0KCQl9DQoJCQ0KCQkNCgkJDQoJCS8vIE5hbWVkIHRva2VucywgdW5pcXVlIHBlciB1c2VyL2NvbnN1bWVyIGtleQ0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ25hbWUnXSkgJiYgJG9wdGlvbnNbJ25hbWUnXSAhPSAnJykNCgkJew0KCQkJJG5hbWUgPSAkb3B0aW9uc1snbmFtZSddOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJG5hbWUgPSAnJzsNCgkJfQ0KICAgICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgICAgJHNxbCA9ICJCRUdJTiBTUF9BRERfU0VSVkVSX1RPS0VOKDpQX0NPTlNVTUVSX0tFWSwgOlBfVVNFUl9JRCwgOlBfTkFNRSwgOlBfVE9LRU5fVFlQRSwgOlBfVE9LRU4sIDpQX1RPS0VOX1NFQ1JFVCwgOlBfVE9LRU5fSU5URVJWQUxfSU5fU0VDLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTRVJfSUQnLCAkdXNlcl9pZCwgNDApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9OQU1FJywgJG5hbWUsIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1RPS0VOX1RZUEUnLCAkdG9rZW5fdHlwZSwgMjApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTicsICR0b2tlbiwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fU0VDUkVUJywgJHRva2VuX3NlY3JldCwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fSU5URVJWQUxfSU5fU0VDJywgJHR0bCwgNDApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7DQoNCiAgICAgICAgICAgICAgICAvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KICAgICAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCiAgICAgICAgICAgICAgICAvLw0KDQogICAgICAgICAgICAgIA0KCQkNCgkJaWYgKCEkcmVzdWx0KQ0KCQl7DQoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdSZWNlaXZlZCBkdXBsaWNhdGUgdG9rZW4gIicuJHRva2VuLiciIGZvciB0aGUgc2FtZSBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIicpOw0KCQl9DQoJfQ0KDQoNCgkvKioNCgkgKiBEZWxldGUgYSBzZXJ2ZXIga2V5LiAgVGhpcyByZW1vdmVzIGFjY2VzcyB0byB0aGF0IHNpdGUuDQoJICogDQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkNCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQJdXNlciByZWdpc3RlcmluZyB0aGlzIHNlcnZlcg0KCSAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlU2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQ0KCXsNCgkJDQogICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0RFTEVURV9TRVJWRVIoOlBfQ09OU1VNRVJfS0VZLCA6UF9VU0VSX0lELCA6UF9VU0VSX0lTX0FETUlOLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTRVJfSUQnLCAkdXNlcl9pZCwgNDApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lTX0FETUlOJywgJHVzZXJfaXNfYWRtaW4sIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KCX0NCgkNCgkNCgkvKioNCgkgKiBHZXQgYSBzZXJ2ZXIgZnJvbSB0aGUgY29uc3VtZXIgcmVnaXN0cnkgdXNpbmcgdGhlIGNvbnN1bWVyIGtleQ0KCSAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5DQoJICogQHBhcmFtIGludCB1c2VyX2lkDQoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbiAob3B0aW9uYWwpDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBzZXJ2ZXIgaXMgbm90IGZvdW5kDQoJICogQHJldHVybiBhcnJheQ0KCSAqLwkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQ0KCXsNCgkJDQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0dFVF9TRVJWRVIoOlBfQ09OU1VNRVJfS0VZLCA6UF9VU0VSX0lELCA6UF9ST1dTLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lEJywgJHVzZXJfaWQsIDQwKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQogICAgICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAgICAgJHBfcm93ID0gb2NpX25ld19jdXJzb3IoJHRoaXMtPmNvbm4pOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KDQogICAgICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCiAgICAgICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgICAgICBvY2lfZmV0Y2hfYWxsKCRwX3JvdywgJGdldFNlcnZlckxpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KICAgICAgICAgICAgICAgICRyID0gJGdldFNlcnZlckxpc3Q7DQogICAgICAgICAgICAgICAgLy8NCgkJaWYgKGVtcHR5KCRyKSkNCgkJew0KCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc2VydmVyIHdpdGggY29uc3VtZXJfa2V5ICInLiRjb25zdW1lcl9rZXkuJyIgaGFzIGJlZW4gcmVnaXN0ZXJlZCAoZm9yIHRoaXMgdXNlciknKTsNCgkJfQ0KCQkJDQoJCWlmIChpc3NldCgkclsnc2lnbmF0dXJlX21ldGhvZHMnXSkgJiYgIWVtcHR5KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSkNCgkJew0KCQkJJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywkclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkclsnc2lnbmF0dXJlX21ldGhvZHMnXSA9IGFycmF5KCk7DQoJCX0NCgkJcmV0dXJuICRyOw0KCX0NCg0KDQoNCgkvKioNCgkgKiBGaW5kIHRoZSBzZXJ2ZXIgZGV0YWlscyB0aGF0IG1pZ2h0IGJlIHVzZWQgZm9yIGEgcmVxdWVzdA0KCSAqIA0KCSAqIFRoZSBjb25zdW1lcl9rZXkgbXVzdCBiZWxvbmcgdG8gdGhlIHVzZXIgb3IgYmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpDQoJICogDQoJICogQHBhcmFtIHN0cmluZyB1cmkJdXJpIG9mIHRoZSBzZXJ2ZXINCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQJaWQgb2YgdGhlIGxvZ2dlZCBvbiB1c2VyDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZA0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyRm9yVXJpICggJHVyaSwgJHVzZXJfaWQgKQ0KCXsNCgkJLy8gRmluZCBhIGNvbnN1bWVyIGtleSBhbmQgdG9rZW4gZm9yIHRoZSBnaXZlbiB1cmkNCgkJJHBzCT0gcGFyc2VfdXJsKCR1cmkpOw0KCQkkaG9zdAk9IGlzc2V0KCRwc1snaG9zdCddKSA/ICRwc1snaG9zdCddIDogJ2xvY2FsaG9zdCc7DQoJCSRwYXRoCT0gaXNzZXQoJHBzWydwYXRoJ10pID8gJHBzWydwYXRoJ10gOiAnJzsNCgkJDQoJCWlmIChlbXB0eSgkcGF0aCkgfHwgc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKQ0KCQl7DQoJCQkkcGF0aCAuPSAnLyc7DQoJCX0NCg0KCQkNCiAgICAgICAgICAgICAgICAvLw0KICAgICAgICAgICAgICAgICRzcWwgPSAiQkVHSU4gU1BfR0VUX1NFUlZFUl9GT1JfVVJJKDpQX0hPU1QsIDpQX1BBVEgsOlBfVVNFUl9JRCwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBzcWwNCiAgICAgICAgICAgICAgICAkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQogICAgICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9IT1NUJywgJGhvc3QsIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1BBVEgnLCAkcGF0aCwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCA0MCk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgcmVmIGN1cnNvcg0KICAgICAgICAgICAgICAgICRwX3JvdyA9IG9jaV9uZXdfY3Vyc29yKCR0aGlzLT5jb25uKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgICAgICAvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KICAgICAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCg0KICAgICAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHBfcm93LCBPQ0lfREVGQVVMVCk7DQogICAgICAgICAgICAgICAgb2NpX2ZldGNoX2FsbCgkcF9yb3csICRnZXRTZXJ2ZXJGb3JVcmlMaXN0LCBudWxsLCBudWxsLCBPQ0lfRkVUQ0hTVEFURU1FTlRfQllfUk9XKTsNCiAgICAgICAgICAgICAgICAkc2VydmVyID0gJGdldFNlcnZlckZvclVyaUxpc3Q7DQogICAgICAgICAgICAgICAgLy8JCQ0KCQlpZiAoZW1wdHkoJHNlcnZlcikpDQoJCXsNCgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIHNlcnZlciBhdmFpbGFibGUgZm9yICcuJHVyaSk7DQoJCX0NCgkJJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSA9IGV4cGxvZGUoJywnLCAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKTsNCgkJcmV0dXJuICRzZXJ2ZXI7DQoJfQ0KDQoNCgkvKioNCgkgKiBHZXQgYSBsaXN0IG9mIGFsbCBzZXJ2ZXIgdG9rZW4gdGhpcyB1c2VyIGhhcyBhY2Nlc3MgdG8uDQoJICogDQoJICogQHBhcmFtIGludCB1c3JfaWQNCgkgKiBAcmV0dXJuIGFycmF5DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJUb2tlbnMgKCAkdXNlcl9pZCApDQoJew0KCQkNCiAgICAgICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0xJU1RfU0VSVkVSX1RPS0VOUyg6UF9VU0VSX0lELCA6UF9ST1dTLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lEJywgJHVzZXJfaWQsIDQwKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQogICAgICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAgICAgJHBfcm93ID0gb2NpX25ld19jdXJzb3IoJHRoaXMtPmNvbm4pOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KDQogICAgICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCiAgICAgICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgICAgICBvY2lfZmV0Y2hfYWxsKCRwX3JvdywgJGxpc3RTZXJ2ZXJUb2tlbnNMaXN0LCBudWxsLCBudWxsLCBPQ0lfRkVUQ0hTVEFURU1FTlRfQllfUk9XKTsNCiAgICAgICAgICAgICAgICAkdHMgPSAkbGlzdFNlcnZlclRva2Vuc0xpc3Q7DQoJCXJldHVybiAkdHM7DQoJfQ0KDQoNCgkvKioNCgkgKiBDb3VudCBob3cgbWFueSB0b2tlbnMgd2UgaGF2ZSBmb3IgdGhlIGdpdmVuIHNlcnZlcg0KCSAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5DQoJICogQHJldHVybiBpbnQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gY291bnRTZXJ2ZXJUb2tlbnMgKCAkY29uc3VtZXJfa2V5ICkNCgl7DQoJCQ0KICAgICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgICAgJGNvdW50ID0wOw0KICAgICAgICAgICAgICAgICRzcWwgPSAiQkVHSU4gU1BfQ09VTlRfU0VSVklDRV9UT0tFTlMoOlBfQ09OU1VNRVJfS0VZLCA6UF9DT1VOVCwgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBzcWwNCiAgICAgICAgICAgICAgICAkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQogICAgICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT1VOVCcsICRjb3VudCwgNDApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCiAgICAgICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vDQoJCXJldHVybiAkY291bnQ7DQoJfQ0KDQoNCgkvKioNCgkgKiBHZXQgYSBzcGVjaWZpYyBzZXJ2ZXIgdG9rZW4gZm9yIHRoZSBnaXZlbiB1c2VyDQoJICogDQoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkNCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuDQoJICogQHBhcmFtIGludCB1c2VyX2lkDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBzdWNoIHRva2VuIGZvdW5kDQoJICogQHJldHVybiBhcnJheQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHVzZXJfaWQgKQ0KCXsNCgkJDQogICAgICAgICAgICAgICAgJHNxbCA9ICJCRUdJTiBTUF9HRVRfU0VSVkVSX1RPS0VOKDpQX0NPTlNVTUVSX0tFWSwgOlBfVVNFUl9JRCw6UF9UT0tFTiwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBzcWwNCiAgICAgICAgICAgICAgICAkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQogICAgICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lEJywgJHVzZXJfaWQsIDQwKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgcmVmIGN1cnNvcg0KICAgICAgICAgICAgICAgICRwX3JvdyA9IG9jaV9uZXdfY3Vyc29yKCR0aGlzLT5jb25uKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgICAgICAvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KICAgICAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCg0KICAgICAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHBfcm93LCBPQ0lfREVGQVVMVCk7DQogICAgICAgICAgICAgICAgb2NpX2ZldGNoX2FsbCgkcF9yb3csICRnZXRTZXJ2ZXJUb2tlbkxpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KICAgICAgICAgICAgICAgICR0cyA9ICRnZXRTZXJ2ZXJUb2tlbkxpc3Q7DQogICAgICAgICAgICAgICAgLy8NCgkJDQoJCWlmIChlbXB0eSgkdHMpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzdWNoIGNvbnN1bWVyIGtleSAoJy4kY29uc3VtZXJfa2V5LicpIGFuZCB0b2tlbiAoJy4kdG9rZW4uJykgY29tYmluYXRpb24gZm9yIHVzZXIgIicuJHVzZXJfaWQuJyInKTsNCgkJfQ0KCQlyZXR1cm4gJHRzOw0KCX0NCg0KDQoJLyoqDQoJICogRGVsZXRlIGEgdG9rZW4gd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4NCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQNCgkgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZVNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApDQoJew0KCQkNCiAgICAgICAgICAgICAgICAvLw0KICAgICAgICAgICAgICAgICRzcWwgPSAiQkVHSU4gU1BfREVMRVRFX1NFUlZFUl9UT0tFTig6UF9DT05TVU1FUl9LRVksIDpQX1VTRVJfSUQsOlBfVE9LRU4sIDpQX1VTRVJfSVNfQURNSU4sIDpQX1JFU1VMVCk7IEVORDsiOw0KDQogICAgICAgICAgICAgICAgLy8gcGFyc2Ugc3FsDQogICAgICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KICAgICAgICAgICAgICAgIC8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfQ09OU1VNRVJfS0VZJywgJGNvbnN1bWVyX2tleSwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCA0MCk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1RPS0VOJywgJHRva2VuLCAyNTUpOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lTX0FETUlOJywgJHVzZXJfaXNfYWRtaW4sIDQwKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOyAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KICAgICAgICAgICAgICAgIC8vDQoNCiAgICAgICAgfQ0KDQoNCgkvKioNCgkgKiBTZXQgdGhlIHR0bCBvZiBhIHNlcnZlciBhY2Nlc3MgdG9rZW4uICBUaGlzIGlzIGRvbmUgd2hlbiB0aGUNCgkgKiBzZXJ2ZXIgcmVjZWl2ZXMgYSB2YWxpZCByZXF1ZXN0IHdpdGggYSB4b2F1dGhfdG9rZW5fdHRsIHBhcmFtZXRlciBpbiBpdC4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4NCgkgKiBAcGFyYW0gaW50IHRva2VuX3R0bA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRTZXJ2ZXJUb2tlblR0bCAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R0bCApDQoJew0KCQlpZiAoJHRva2VuX3R0bCA8PSAwKQ0KCQl7DQoJCQkvLyBJbW1lZGlhdGUgZGVsZXRlIHdoZW4gdGhlIHRva2VuIGlzIHBhc3QgaXRzIHR0bA0KCQkJJHRoaXMtPmRlbGV0ZVNlcnZlclRva2VuKCRjb25zdW1lcl9rZXksICR0b2tlbiwgMCwgdHJ1ZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBTZXQgbWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4NCgkJCQ0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICJCRUdJTiBTUF9TRVRfU0VSVkVSX1RPS0VOX1RUTCg6UF9UT0tFTl9UVEwsIDpQX0NPTlNVTUVSX0tFWSwgOlBfVE9LRU4sIDpQX1JFU1VMVCk7IEVORDsiOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2Ugc3FsDQogICAgICAgICAgICAgICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fVFRMJywgJHRva2VuX3R0bCwgNDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTicsICR0b2tlbiwgMjU1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOyAgICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHN0bXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICANCgkJfQ0KCX0NCg0KDQoJLyoqDQoJICogR2V0IGEgbGlzdCBvZiBhbGwgY29uc3VtZXJzIGZyb20gdGhlIGNvbnN1bWVyIHJlZ2lzdHJ5Lg0KCSAqIFRoZSBjb25zdW1lciBrZXlzIGJlbG9uZyB0byB0aGUgdXNlciBvciBhcmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpDQoJICogDQoJICogQHBhcmFtIHN0cmluZyBxCXF1ZXJ5IHRlcm0NCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQNCgkgKiBAcmV0dXJuIGFycmF5DQoJICovCQ0KCXB1YmxpYyBmdW5jdGlvbiBsaXN0U2VydmVycyAoICRxID0gJycsICR1c2VyX2lkICkNCgl7DQoJCSRxICAgID0gdHJpbShzdHJfcmVwbGFjZSgnJScsICcnLCAkcSkpOw0KCQkkYXJncyA9IGFycmF5KCk7DQoNCgkJDQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX0xJU1RfU0VSVkVSUyg6UF9RLCA6UF9VU0VSX0lELCA6UF9ST1dTLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1EnLCAkcSwgMjU1KTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCA0MCk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgcmVmIGN1cnNvcg0KICAgICAgICAgICAgICAgICRwX3JvdyA9IG9jaV9uZXdfY3Vyc29yKCR0aGlzLT5jb25uKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgICAgICAvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KICAgICAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCg0KICAgICAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICAgICAgb2NpX2V4ZWN1dGUoJHBfcm93LCBPQ0lfREVGQVVMVCk7DQogICAgICAgICAgICAgICAgb2NpX2ZldGNoX2FsbCgkcF9yb3csICRsaXN0U2VydmVyc0xpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KICAgICAgICAgICAgICAgICRzZXJ2ZXJzID0gJGxpc3RTZXJ2ZXJzTGlzdDsNCiAgICAgICAgICAgICAgICAvLw0KDQoJCXJldHVybiAkc2VydmVyczsNCgl9DQoNCg0KCS8qKg0KCSAqIFJlZ2lzdGVyIG9yIHVwZGF0ZSBhIHNlcnZlciBmb3Igb3VyIHNpdGUgKHdlIHdpbGwgYmUgdGhlIGNvbnN1bWVyKQ0KCSAqIA0KCSAqIChUaGlzIGlzIHRoZSByZWdpc3RyeSBhdCB0aGUgY29uc3VtZXJzLCByZWdpc3RlcmluZyBzZXJ2ZXJzIDstKSApDQoJICogDQoJICogQHBhcmFtIGFycmF5IHNlcnZlcg0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAl1c2VyIHJlZ2lzdGVyaW5nIHRoaXMgc2VydmVyDQoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbg0KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gZmllbGRzIGFyZSBtaXNzaW5nIG9yIG9uIGR1cGxpY2F0ZSBjb25zdW1lcl9rZXkNCgkgKiBAcmV0dXJuIGNvbnN1bWVyX2tleQ0KCSAqLw0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlU2VydmVyICggJHNlcnZlciwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7DQogICAgICAgICAgICBmb3JlYWNoIChhcnJheSgnY29uc3VtZXJfa2V5JywgJ3NlcnZlcl91cmknKSBhcyAkZikgew0KICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkc2VydmVyWyRmXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGZpZWxkICInLiRmLiciIG11c3QgYmUgc2V0IGFuZCBub24gZW1wdHknKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcGFydHMgPSBwYXJzZV91cmwoJHNlcnZlclsnc2VydmVyX3VyaSddKTsNCiAgICAgICAgICAgICRob3N0ICA9IChpc3NldCgkcGFydHNbJ2hvc3QnXSkgPyAkcGFydHNbJ2hvc3QnXSA6ICdsb2NhbGhvc3QnKTsNCiAgICAgICAgICAgICRwYXRoICA9IChpc3NldCgkcGFydHNbJ3BhdGgnXSkgPyAkcGFydHNbJ3BhdGgnXSA6ICcvJyk7DQoNCiAgICAgICAgICAgIGlmIChpc3NldCgkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKSkgew0KICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKSkgew0KICAgICAgICAgICAgICAgICAgICAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddID0gc3RydG91cHBlcihpbXBsb2RlKCcsJywgJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSAnJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHVzZXIgaXMgYW4gYWRtaW4sIHRoZW4gdGhlIHVzZXIgY2FuIHVwZGF0ZSB0aGUgdXNlcl9pZCBvZiB0aGlzIHJlY29yZA0KICAgICAgICAgICAgaWYgKCR1c2VyX2lzX2FkbWluICYmIGFycmF5X2tleV9leGlzdHMoJ3VzZXJfaWQnLCAkc2VydmVyKSkgew0KICAgICAgICAgICAgICAgICRmbGFnPTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZigkZmxhZykgew0KICAgICAgICAgICAgICAgIGlmIChpc19udWxsKCRzZXJ2ZXJbJ3VzZXJfaWQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG9jcl91c2FfaWRfcmVmPSBOVUxMOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJG9jcl91c2FfaWRfcmVmID0gJHNlcnZlclsndXNlcl9pZCddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICRmbGFnPTA7DQogICAgICAgICAgICAgICAgJG9jcl91c2FfaWRfcmVmPSR1c2VyX2lkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy9zcA0KICAgICAgICAgICAgJHNxbCA9ICJCRUdJTiBTUF9VUERBVEVfU0VSVkVSKDpQX0NPTlNVTUVSX0tFWSwgOlBfVVNFUl9JRCwgOlBfT0NSX0lELCA6UF9VU0VSX0lTX0FETUlOLA0KICAgICAgICAgICAgICAgICA6UF9PQ1JfQ09OU1VNRVJfU0VDUkVULCA6UF9PQ1JfU0VSVkVSX1VSSSwgOlBfT0NSX1NFUlZFUl9VUklfSE9TVCwgOlBfT0NSX1NFUlZFUl9VUklfUEFUSCwNCiAgICAgICAgICAgICAgICAgOlBfT0NSX1JFUVVFU1RfVE9LRU5fVVJJLCA6UF9PQ1JfQVVUSE9SSVpFX1VSSSwgOlBfT0NSX0FDQ0VTU19UT0tFTl9VUkksIDpQX09DUl9TSUdOQVRVUkVfTUVUSE9EUywNCiAgICAgICAgICAgICAgICAgOlBfT0NSX1VTQV9JRF9SRUYsIDpQX1VQREFURV9QX09DUl9VU0FfSURfUkVGX0ZMQUcsIDpQX1JFU1VMVCk7IEVORDsiOw0KDQogICAgICAgICAgICAvLyBwYXJzZSBzcWwNCiAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQogICAgICAgICAgICAkc2VydmVyWydyZXF1ZXN0X3Rva2VuX3VyaSddID0gaXNzZXQoJHNlcnZlclsncmVxdWVzdF90b2tlbl91cmknXSkgPyAkc2VydmVyWydyZXF1ZXN0X3Rva2VuX3VyaSddIDogJyc7DQogICAgICAgICAgICAkc2VydmVyWydhdXRob3JpemVfdXJpJ10gPSBpc3NldCgkc2VydmVyWydhdXRob3JpemVfdXJpJ10pICAgICA/ICRzZXJ2ZXJbJ2F1dGhvcml6ZV91cmknXSAgICAgOiAnJzsNCiAgICAgICAgICAgICRzZXJ2ZXJbJ2FjY2Vzc190b2tlbl91cmknXSA9IGlzc2V0KCRzZXJ2ZXJbJ2FjY2Vzc190b2tlbl91cmknXSkgID8gJHNlcnZlclsnYWNjZXNzX3Rva2VuX3VyaSddICA6ICcnOw0KICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRzZXJ2ZXJbJ2NvbnN1bWVyX2tleSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTRVJfSUQnLCAkdXNlcl9pZCwgNDApOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09DUl9JRCcsICRzZXJ2ZXJbJ2lkJ10sIDQwKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lTX0FETUlOJywgJHVzZXJfaXNfYWRtaW4sIDQwKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PQ1JfQ09OU1VNRVJfU0VDUkVUJywgJHNlcnZlclsnY29uc3VtZXJfc2VjcmV0J10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT0NSX1NFUlZFUl9VUkknLCAkc2VydmVyWydzZXJ2ZXJfdXJpJ10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT0NSX1NFUlZFUl9VUklfSE9TVCcsIHN0cnRvbG93ZXIoJGhvc3QpLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09DUl9TRVJWRVJfVVJJX1BBVEgnLCAkcGF0aCwgMjU1KTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PQ1JfUkVRVUVTVF9UT0tFTl9VUkknLCAkc2VydmVyWydyZXF1ZXN0X3Rva2VuX3VyaSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09DUl9BVVRIT1JJWkVfVVJJJywgJHNlcnZlclsnYXV0aG9yaXplX3VyaSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09DUl9BQ0NFU1NfVE9LRU5fVVJJJywgJHNlcnZlclsnYWNjZXNzX3Rva2VuX3VyaSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09DUl9TSUdOQVRVUkVfTUVUSE9EUycsICRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT0NSX1VTQV9JRF9SRUYnLCAkb2NyX3VzYV9pZF9yZWYsIDQwKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VUERBVEVfUF9PQ1JfVVNBX0lEX1JFRl9GTEFHJywgJGZsYWcsIDQwKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCiAgICAgICAgICAgIHJldHVybiAkc2VydmVyWydjb25zdW1lcl9rZXknXTsNCiAgICAgICAgfQ0KDQoJLyoqDQoJICogSW5zZXJ0L3VwZGF0ZSBhIG5ldyBjb25zdW1lciB3aXRoIHRoaXMgc2VydmVyICh3ZSB3aWxsIGJlIHRoZSBzZXJ2ZXIpDQoJICogV2hlbiB0aGlzIGlzIGEgbmV3IGNvbnN1bWVyLCB0aGVuIGFsc28gZ2VuZXJhdGUgdGhlIGNvbnN1bWVyIGtleSBhbmQgc2VjcmV0Lg0KCSAqIE5ldmVyIHVwZGF0ZXMgdGhlIGNvbnN1bWVyIGtleSBhbmQgc2VjcmV0Lg0KCSAqIFdoZW4gdGhlIGlkIGlzIHNldCwgdGhlbiB0aGUga2V5IGFuZCBzZWNyZXQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBlbnRyeQ0KCSAqIGJlaW5nIHVwZGF0ZWQuDQoJICogDQoJICogKFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IGF0IHRoZSBzZXJ2ZXIsIHJlZ2lzdGVyaW5nIGNvbnN1bWVycyA7LSkgKQ0KCSAqIA0KCSAqIEBwYXJhbSBhcnJheSBjb25zdW1lcg0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAl1c2VyIHJlZ2lzdGVyaW5nIHRoaXMgY29uc3VtZXINCgkgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluDQoJICogQHJldHVybiBzdHJpbmcgY29uc3VtZXIga2V5DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUNvbnN1bWVyICggJGNvbnN1bWVyLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsNCiAgICAgICAgICAgICRjb25zdW1lcl9rZXkgPSAkdGhpcy0+Z2VuZXJhdGVLZXkodHJ1ZSk7DQogICAgICAgICAgICAkY29uc3VtZXJfc2VjcmV0ID0gJHRoaXMtPmdlbmVyYXRlS2V5KCk7DQoJCQkNCiAkY29uc3VtZXJbJ2NhbGxiYWNrX3VyaSddID0gaXNzZXQoJGNvbnN1bWVyWydjYWxsYmFja191cmknXSk/ICRjb25zdW1lclsnY2FsbGJhY2tfdXJpJ106ICcnOw0KICAgICAgICAgICAgJGNvbnN1bWVyWydhcHBsaWNhdGlvbl91cmknXSA9IGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fdXJpJ10pPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddOiAnJzsNCiAgICAgICAgICAgICRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSA9IGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXTogJyc7DQogICAgICAgICAgICAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ10gPSBpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ10pPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ106ICcnOw0KICAgICAgICAgICAgJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddID0gaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddKT8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddOiAnJzsNCiAgICAgICAgICAgICRjb25zdW1lclsnYXBwbGljYXRpb25fdHlwZSddID0gaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90eXBlJ10pPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3R5cGUnXTogJyc7DQogICAgICAgICAgICAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSA9IGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fY29tbWVyY2lhbCddKT8kY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXTowOw0KCQkJDQogICAgICAgICAgICAvL3NwDQogICAgICAgICAgICAkc3FsID0gIkJFR0lOIFNQX1VQREFURV9DT05TVU1FUig6UF9PU1JfVVNBX0lEX1JFRiwgOlBfT1NSX0NPTlNVTUVSX0tFWSwgOlBfT1NSX0NPTlNVTUVSX1NFQ1JFVCwgOlBfT1NSX1JFUVVFU1RFUl9OQU1FLCA6UF9PU1JfUkVRVUVTVEVSX0VNQUlMLCA6UF9PU1JfQ0FMTEJBQ0tfVVJJLCA6UF9PU1JfQVBQTElDQVRJT05fVVJJLCA6UF9PU1JfQVBQTElDQVRJT05fVElUTEUgICwgOlBfT1NSX0FQUExJQ0FUSU9OX0RFU0NSLCA6UF9PU1JfQVBQTElDQVRJT05fTk9URVMsIDpQX09TUl9BUFBMSUNBVElPTl9UWVBFLCA6UF9PU1JfQVBQTElDQVRJT05fQ09NTUVSQ0lBTCwgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCgkJCQ0KICAgICAgICAgICANCiAgICAgICAgICAgIC8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PU1JfVVNBX0lEX1JFRicsICR1c2VyX2lkLCA0MCk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1NSX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1NSX0NPTlNVTUVSX1NFQ1JFVCcsICRjb25zdW1lcl9zZWNyZXQsIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1NSX1JFUVVFU1RFUl9OQU1FJywgJGNvbnN1bWVyWydyZXF1ZXN0ZXJfbmFtZSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9SRVFVRVNURVJfRU1BSUwnLCAkY29uc3VtZXJbJ3JlcXVlc3Rlcl9lbWFpbCddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9DQUxMQkFDS19VUkknLCAkY29uc3VtZXJbJ2NhbGxiYWNrX3VyaSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9BUFBMSUNBVElPTl9VUkknLCAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9BUFBMSUNBVElPTl9USVRMRScsICRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSwgMjU1KTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PU1JfQVBQTElDQVRJT05fREVTQ1InLCAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1NSX0FQUExJQ0FUSU9OX05PVEVTJywgJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9BUFBMSUNBVElPTl9UWVBFJywgJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90eXBlJ10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1NSX0FQUExJQ0FUSU9OX0NPTU1FUkNJQUwnLCAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSwgNDApOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCiAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCgkJCWVjaG8gJHJlc3VsdDsNCiAgICAgICAgICAgIHJldHVybiAkY29uc3VtZXJfa2V5Ow0KICAgICAgICB9DQoNCg0KDQoJLyoqDQoJICogRGVsZXRlIGEgY29uc3VtZXIga2V5LiAgVGhpcyByZW1vdmVzIGFjY2VzcyB0byBvdXIgc2l0ZSBmb3IgYWxsIGFwcGxpY2F0aW9ucyB1c2luZyB0aGlzIGtleS4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAl1c2VyIHJlZ2lzdGVyaW5nIHRoaXMgc2VydmVyDQoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkNCgl7DQoJCQ0KICAgICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgICAgJHNxbCA9ICJCRUdJTiBTUF9ERUxFVEVfQ09OU1VNRVIoOlBfQ09OU1VNRVJfS0VZLCA6UF9VU0VSX0lELCA6UF9VU0VSX0lTX0FETUlOLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgICAgICRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCiAgICAgICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTRVJfSUQnLCAkdXNlcl9pZCwgNDApOw0KICAgICAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lTX0FETUlOJywgJHVzZXJfaXNfYWRtaW4sIDQwKTsNCiAgICAgICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOyAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCiAgICAgICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgfQ0KCQ0KCQ0KCQ0KCS8qKg0KCSAqIEZldGNoIGEgY29uc3VtZXIgb2YgdGhpcyBzZXJ2ZXIsIGJ5IGNvbnN1bWVyX2tleS4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZA0KCSAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4gKG9wdGlvbmFsKQ0KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gY29uc3VtZXIgbm90IGZvdW5kDQoJICogQHJldHVybiBhcnJheQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkgew0KICAgICAgICAgICANCiAgICAgICAgICAgICRzcWwgPSAiQkVHSU4gU1BfR0VUX0NPTlNVTUVSKDpQX0NPTlNVTUVSX0tFWSwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQogICAgICAgICAgICAvL0JpbmQgdGhlIHJlZiBjdXJzb3INCiAgICAgICAgICAgICRwX3JvdyA9IG9jaV9uZXdfY3Vyc29yKCR0aGlzLT5jb25uKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KICAgICAgICAgICAgLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCiAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCg0KICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCiAgICAgICAgICAgIG9jaV9leGVjdXRlKCRwX3JvdywgT0NJX0RFRkFVTFQpOw0KICAgICAgICAgICAgb2NpX2ZldGNoX2FsbCgkcF9yb3csICRnZXRDb25zdW1lckxpc3QsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KDQogICAgICAgICAgICAkY29uc3VtZXIgPSAkZ2V0Q29uc3VtZXJMaXN0Ow0KICAgICAgICAgICANCgkJICAgIGlmICghaXNfYXJyYXkoJGNvbnN1bWVyKSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIGNvbnN1bWVyIHdpdGggY29uc3VtZXJfa2V5ICInLiRjb25zdW1lcl9rZXkuJyInKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGMgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnN1bWVyIGFzICRrZXkgPT4gJHZhbHVlKSB7DQogICAgICAgICAgICAgICAgJGNbc3Vic3RyKCRrZXksIDQpXSA9ICR2YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjWyd1c2VyX2lkJ10gPSAkY1sndXNhX2lkX3JlZiddOw0KDQogICAgICAgICAgICBpZiAoISR1c2VyX2lzX2FkbWluICYmICFlbXB0eSgkY1sndXNlcl9pZCddKSAmJiAkY1sndXNlcl9pZCddICE9ICR1c2VyX2lkKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gYWNjZXNzIHRvIHRoZSBjb25zdW1lciBpbmZvcm1hdGlvbiBmb3IgY29uc3VtZXJfa2V5ICInLiRjb25zdW1lcl9rZXkuJyInKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAkYzsNCiAgICAgICAgfQ0KDQoNCgkvKioNCgkgKiBGZXRjaCB0aGUgc3RhdGljIGNvbnN1bWVyIGtleSBmb3IgdGhpcyBwcm92aWRlci4gIFRoZSB1c2VyIGZvciB0aGUgc3RhdGljIGNvbnN1bWVyIA0KCSAqIGtleSBpcyBOVUxMIChubyB1c2VyLCBzaGFyZWQga2V5KS4gIElmIHRoZSBrZXkgZGlkIG5vdCBleGlzdCB0aGVuIHRoZSBrZXkgaXMgY3JlYXRlZC4NCgkgKiANCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lclN0YXRpYyAoKQ0KCXsNCgkJDQoJCSAvLw0KCQkkc3FsID0gIkJFR0lOIFNQX0dFVF9DT05TVU1FUl9TVEFUSUNfU0VMRUNUKDpQX09TUl9DT05TVU1FUl9LRVksIDpQX1JFU1VMVCk7IEVORDsiOw0KDQoJCS8vIHBhcnNlIHNxbA0KCQkkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQoJCS8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX09TUl9DT05TVU1FUl9LRVknLCAkY29uc3VtZXIsIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7ICAgICAgICAgICAgICAgDQoNCgkJLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCgkJb2NpX2V4ZWN1dGUoJHN0bXQpOw0KDQoJCWlmIChlbXB0eSgkY29uc3VtZXIpKQ0KCQl7DQoJCQkkY29uc3VtZXJfa2V5ID0gJ3NjLScuJHRoaXMtPmdlbmVyYXRlS2V5KHRydWUpOw0KCQkJDQoJCQkkc3FsID0gIkJFR0lOIFNQX0NPTlNVTUVSX1NUQVRJQ19TQVZFKDpQX09TUl9DT05TVU1FUl9LRVksIDpQX1JFU1VMVCk7IEVORDsiOw0KDQoJCQkvLyBwYXJzZSBzcWwNCgkJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJCS8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCgkJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PU1JfQ09OU1VNRVJfS0VZJywgJGNvbnN1bWVyX2tleSwgMjU1KTsNCgkJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7ICAgICAgICAgICAgICAgDQoNCgkJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCQlvY2lfZXhlY3V0ZSgkc3RtdCk7DQoJCQkNCgkJCQ0KCQkJLy8gSnVzdCBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgY29uc3VtZXIga2V5IGlzIHRydW5jYXRlZCB0aGF0IHdlIGdldCB0aGUgdHJ1bmNhdGVkIHN0cmluZw0KCQkJJGNvbnN1bWVyID0gJGNvbnN1bWVyX2tleTsNCgkJfQ0KCQlyZXR1cm4gJGNvbnN1bWVyOw0KCX0NCg0KDQoJLyoqDQoJICogQWRkIGFuIHVuYXV0b3JpemVkIHJlcXVlc3QgdG9rZW4gdG8gb3VyIHNlcnZlci4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBhcnJheSBvcHRpb25zCQkoZWcuIHRva2VuX3R0bCkNCgkgKiBAcmV0dXJuIGFycmF5ICh0b2tlbiwgdG9rZW5fc2VjcmV0KQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBhZGRDb25zdW1lclJlcXVlc3RUb2tlbiAoICRjb25zdW1lcl9rZXksICRvcHRpb25zID0gYXJyYXkoKSApDQoJew0KCQkkdG9rZW4gID0gJHRoaXMtPmdlbmVyYXRlS2V5KHRydWUpOw0KCQkkc2VjcmV0ID0gJHRoaXMtPmdlbmVyYXRlS2V5KCk7DQoJCSANCg0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpDQoJCXsNCgkJCSR0dGwgPSBpbnR2YWwoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0dGwgPSAkdGhpcy0+bWF4X3JlcXVlc3RfdG9rZW5fdHRsOw0KCQl9DQoNCgkJaWYgKCFpc3NldCgkb3B0aW9uc1snb2F1dGhfY2FsbGJhY2snXSkpIHsNCgkgCQkvLyAxLjBhIENvbXBhdGliaWxpdHkgOiBzdG9yZSBjYWxsYmFjayB1cmwgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QgdG9rZW4NCgkJCSRvcHRpb25zWydvYXV0aF9jYWxsYmFjayddPSdvb2InOw0KIAkJfQ0KCQkkb3B0aW9uc19vYXV0aF9jYWxsYmFjayA9JG9wdGlvbnNbJ29hdXRoX2NhbGxiYWNrJ107DQoJCSRzcWwgPSAiQkVHSU4gU1BfQUREX0NPTlNVTUVSX1JFUVVFU1RfVE9LRU4oOlBfVE9LRU5fVFRMLCA6UF9DT05TVU1FUl9LRVksIDpQX1RPS0VOLCA6UF9UT0tFTl9TRUNSRVQsIDpQX0NBTExCQUNLX1VSTCwgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCgkJCS8vIHBhcnNlIHNxbA0KCQkkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KIA0KCQkvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTl9UVEwnLCAkdHRsLCAyMCk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTl9TRUNSRVQnLCAkc2VjcmV0LCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfQ0FMTEJBQ0tfVVJMJywgJG9wdGlvbnNfb2F1dGhfY2FsbGJhY2ssIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7DQoNCgkJLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCgkJb2NpX2V4ZWN1dGUoJHN0bXQpOw0KCQkNCg0KCQkkcmV0dXJuQXJyYXk9IGFycmF5KCd0b2tlbic9PiR0b2tlbiwgJ3Rva2VuX3NlY3JldCc9PiRzZWNyZXQsICd0b2tlbl90dGwnPT4kdHRsKTsNCgkJcmV0dXJuICRyZXR1cm5BcnJheTsNCgl9DQoJDQoJDQoJLyoqDQoJICogRmV0Y2ggdGhlIGNvbnN1bWVyIHJlcXVlc3QgdG9rZW4sIGJ5IHJlcXVlc3QgdG9rZW4uDQoJICogDQoJICogQHBhcmFtIHN0cmluZyB0b2tlbg0KCSAqIEByZXR1cm4gYXJyYXkgIHRva2VuIGFuZCBjb25zdW1lciBkZXRhaWxzDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyUmVxdWVzdFRva2VuICggJHRva2VuICkNCgl7DQoJCSANCgkJJHNxbCA9ICJCRUdJTiBTUF9HRVRfQ09OU1VNRVJfUkVRVUVTVF9UT0tFTig6UF9UT0tFTiwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCiAgICAgICAgICAgIC8vIHBhcnNlIHNxbA0KICAgICAgICAgICAgJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KICAgICAgICAgICAgLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1RPS0VOJywgJHRva2VuLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCiAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCgkJCSAgDQogICAgICAgICAgICBvY2lfZmV0Y2hfYWxsKCRwX3JvdywgJHJzLCBudWxsLCBudWxsLCBPQ0lfRkVUQ0hTVEFURU1FTlRfQllfUk9XKTsNCiANCgkJcmV0dXJuICRyc1swXTsNCgl9DQoJDQoNCgkvKioNCgkgKiBEZWxldGUgYSBjb25zdW1lciB0b2tlbi4gIFRoZSB0b2tlbiBtdXN0IGJlIGEgcmVxdWVzdCBvciBhdXRob3JpemVkIHRva2VuLg0KCSAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4gKQ0KCXsNCgkJIA0KCQkkc3FsID0gIkJFR0lOIFNQX0RFTF9DT05TVU1FUl9SRVFVRVNUX1RPS0VOKDpQX1RPS0VOLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KCQkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRVNVTFQnLCAkcmVzdWx0LCAyMCk7DQoNCgkJLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCgkJb2NpX2V4ZWN1dGUoJHN0bXQpOw0KCX0NCgkNCg0KCS8qKg0KCSAqIFVwZ3JhZGUgYSByZXF1ZXN0IHRva2VuIHRvIGJlIGFuIGF1dGhvcml6ZWQgcmVxdWVzdCB0b2tlbi4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuDQoJICogQHBhcmFtIGludAkgdXNlcl9pZCAgdXNlciBhdXRob3JpemluZyB0aGUgdG9rZW4NCgkgKiBAcGFyYW0gc3RyaW5nIHJlZmVycmVyX2hvc3QgdXNlZCB0byBzZXQgdGhlIHJlZmVycmVyIGhvc3QgZm9yIHRoaXMgdG9rZW4sIGZvciB1c2VyIGZlZWRiYWNrDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGF1dGhvcml6ZUNvbnN1bWVyUmVxdWVzdFRva2VuICggJHRva2VuLCAkdXNlcl9pZCwgJHJlZmVycmVyX2hvc3QgPSAnJyApDQoJew0KIAkJLy8gMS4wYSBDb21wYXRpYmlsaXR5IDogY3JlYXRlIGEgdG9rZW4gdmVyaWZpZXINCiAJCSR2ZXJpZmllciA9IHN1YnN0cihtZDUocmFuZCgpKSwwLDEwKTsNCgkJDQoJCSRzcWwgPSAiQkVHSU4gU1BfQVVUSF9DT05TVU1FUl9SRVFfVE9LRU4oOlBfVVNFUl9JRCwgOlBfUkVGRVJSRVJfSE9TVCwgOlBfVkVSSUZJRVIsIDpQX1RPS0VOLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KCQkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVGRVJSRVJfSE9TVCcsICRyZWZlcnJlcl9ob3N0LCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVkVSSUZJRVInLCAkdmVyaWZpZXIsIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTicsICR0b2tlbiwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCg0KCQlyZXR1cm4gJHZlcmlmaWVyOw0KCX0NCg0KDQoJLyoqDQoJICogQ291bnQgdGhlIGNvbnN1bWVyIGFjY2VzcyB0b2tlbnMgZm9yIHRoZSBnaXZlbiBjb25zdW1lci4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQ0KCSAqIEByZXR1cm4gaW50DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNvdW50Q29uc3VtZXJBY2Nlc3NUb2tlbnMgKCAkY29uc3VtZXJfa2V5ICkNCgl7DQoJCS8qJGNvdW50ID0gJHRoaXMtPnF1ZXJ5X29uZSgnDQoJCQkJCVNFTEVDVCBDT1VOVChvc3RfaWQpDQoJCQkJCUZST00gb2F1dGhfc2VydmVyX3Rva2VuDQoJCQkJCQkJSk9JTiBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkNCgkJCQkJCQlPTiBvc3Rfb3NyX2lkX3JlZiA9IG9zcl9pZA0KCQkJCQlXSEVSRSBvc3RfdG9rZW5fdHlwZSAgID0gXCdhY2Nlc3NcJw0KCQkJCQkgIEFORCBvc3JfY29uc3VtZXJfa2V5ID0gXCclc1wnDQoJCQkJCSAgQU5EIG9zdF90b2tlbl90dGwgICAgPj0gTk9XKCkNCgkJCQkJJywgJGNvbnN1bWVyX2tleSk7DQoJCSovDQoJCSRzcWwgPSAiQkVHSU4gU1BfQ09VTlRfQ09OU1VNRVJfQUNDRVNTX1RPS0VOKDpQX0NPTlNVTUVSX0tFWSwgOlBfQ09VTlQsIDpQX1JFU1VMVCk7IEVORDsiOw0KDQoJCQkvLyBwYXJzZSBzcWwNCgkJJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KCQkvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9DT05TVU1FUl9LRVknLCAkY29uc3VtZXJfa2V5LCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfQ09VTlQnLCAkY291bnQsIDIwKTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCg0KCQlyZXR1cm4gJGNvdW50Ow0KCX0NCg0KDQoJLyoqDQoJICogRXhjaGFuZ2UgYW4gYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuIGZvciBuZXcgYWNjZXNzIHRva2VuLg0KCSAqIA0KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4NCgkgKiBAcGFyYW0gYXJyYXkgb3B0aW9ucwkJb3B0aW9ucyBmb3IgdGhlIHRva2VuLCB0b2tlbl90dGwNCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHRva2VuIGNvdWxkIG5vdCBiZSBleGNoYW5nZWQNCgkgKiBAcmV0dXJuIGFycmF5ICh0b2tlbiwgdG9rZW5fc2VjcmV0KQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBleGNoYW5nZUNvbnN1bWVyUmVxdWVzdEZvckFjY2Vzc1Rva2VuICggJHRva2VuLCAkb3B0aW9ucyA9IGFycmF5KCkgKQ0KCXsNCgkJJG5ld190b2tlbiAgPSAkdGhpcy0+Z2VuZXJhdGVLZXkodHJ1ZSk7DQoJCSRuZXdfc2VjcmV0ID0gJHRoaXMtPmdlbmVyYXRlS2V5KCk7DQoJCQ0KCQkkc3FsID0gIkJFR0lOIFNQX0VYQ0hfQ09OU19SRVFfRk9SX0FDQ19UT0tFTig6UF9UT0tFTl9UVEwsIDpQX05FV19UT0tFTiwgOlBfVE9LRU4sIDpQX1RPS0VOX1NFQ1JFVCwgOlBfVkVSSUZJRVIsIDpQX09VVF9UT0tFTl9UVEwsIDpQX1JFU1VMVCk7IEVORDsiOw0KDQoJCQkvLyBwYXJzZSBzcWwNCgkJJHN0bXQgPSBvY2lfcGFyc2UoJHRoaXMtPmNvbm4sICRzcWwpIG9yIGRpZSAoJ0NhbiBub3QgcGFyc2UgcXVlcnknKTsNCg0KCQkvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTl9UVEwnLCAkb3B0aW9uc1sndG9rZW5fdHRsJ10sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ORVdfVE9LRU4nLCAkbmV3X3Rva2VuLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTl9TRUNSRVQnLCAkbmV3X3NlY3JldCwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1ZFUklGSUVSJywgJG9wdGlvbnNbJ3ZlcmlmaWVyJ10sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PVVRfVE9LRU5fVFRMJywgJHR0bCwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCg0KCQkkcmV0ID0gYXJyYXkoJ3Rva2VuJyA9PiAkbmV3X3Rva2VuLCAndG9rZW5fc2VjcmV0JyA9PiAkbmV3X3NlY3JldCk7DQoJCWlmIChpc19udW1lcmljKCR0dGwpKQ0KCQl7DQoJCQkkcmV0Wyd0b2tlbl90dGwnXSA9IGludHZhbCgkdHRsKTsNCgkJfQ0KCQlyZXR1cm4gJHJldDsNCgl9DQoNCg0KCS8qKg0KCSAqIEZldGNoIHRoZSBjb25zdW1lciBhY2Nlc3MgdG9rZW4sIGJ5IGFjY2VzcyB0b2tlbi4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuDQoJICogQHBhcmFtIGludCB1c2VyX2lkDQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiB0b2tlbiBpcyBub3QgZm91bmQNCgkgKiBAcmV0dXJuIGFycmF5ICB0b2tlbiBhbmQgY29uc3VtZXIgZGV0YWlscw0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lckFjY2Vzc1Rva2VuICggJHRva2VuLCAkdXNlcl9pZCApDQoJew0KCQkgDQoJCSRzcWwgPSAiQkVHSU4gU1BfR0VUX0NPTlNVTUVSX0FDQ0VTU19UT0tFTig6UF9VU0VSX0lELCA6UF9UT0tFTiwgOlBfUk9XUyA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgLy8gcGFyc2Ugc3FsDQogICAgICAgICAgICAkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQogICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsJHVzZXJfaWQsIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQogICAgICAgICAgICAvL0JpbmQgdGhlIHJlZiBjdXJzb3INCiAgICAgICAgICAgICRwX3JvdyA9IG9jaV9uZXdfY3Vyc29yKCR0aGlzLT5jb25uKTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KICAgICAgICAgICAgLy9FeGVjdXRlIHRoZSBzdGF0ZW1lbnQNCiAgICAgICAgICAgIG9jaV9leGVjdXRlKCRzdG10KTsNCg0KICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCiAgICAgICAgICAgIG9jaV9leGVjdXRlKCRwX3JvdywgT0NJX0RFRkFVTFQpOw0KICAgICAgICAgICAgb2NpX2ZldGNoX2FsbCgkcF9yb3csICRycywgbnVsbCwgbnVsbCwgT0NJX0ZFVENIU1RBVEVNRU5UX0JZX1JPVyk7DQoJCWlmIChlbXB0eSgkcnMpKQ0KCQl7DQoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXJfdG9rZW4gIicuJHRva2VuLiciIGZvciB1c2VyICInLiR1c2VyX2lkLiciJyk7DQoJCX0NCgkJcmV0dXJuICRyczsNCgl9DQoNCg0KCS8qKg0KCSAqIERlbGV0ZSBhIGNvbnN1bWVyIGFjY2VzcyB0b2tlbi4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuDQoJICogQHBhcmFtIGludCB1c2VyX2lkDQoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lckFjY2Vzc1Rva2VuICggJHRva2VuLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApDQoJew0KCQkvKmlmICgkdXNlcl9pc19hZG1pbikNCgkJew0KCQkJJHRoaXMtPnF1ZXJ5KCcNCgkJCQkJCURFTEVURSBGUk9NIG9hdXRoX3NlcnZlcl90b2tlbg0KCQkJCQkJV0hFUkUgb3N0X3Rva2VuIAkgPSBcJyVzXCcNCgkJCQkJCSAgQU5EIG9zdF90b2tlbl90eXBlID0gXCdhY2Nlc3NcJw0KCQkJCQkJJywgJHRva2VuKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5xdWVyeSgnDQoJCQkJCQlERUxFVEUgRlJPTSBvYXV0aF9zZXJ2ZXJfdG9rZW4NCgkJCQkJCVdIRVJFIG9zdF90b2tlbiAJID0gXCclc1wnDQoJCQkJCQkgIEFORCBvc3RfdG9rZW5fdHlwZSA9IFwnYWNjZXNzXCcNCgkJCQkJCSAgQU5EIG9zdF91c2FfaWRfcmVmID0gJWQNCgkJCQkJCScsICR0b2tlbiwgJHVzZXJfaWQpOw0KCQl9Ki8NCgkJJHNxbCA9ICJCRUdJTiBTUF9ERUxfQ09OU1VNRVJfQUNDRVNTX1RPS0VOKDpQX1VTRVJfSUQsIDpQX1RPS0VOLCA6UF9VU0VSX0lTX0FETUlOLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KCQkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9VU0VSX0lTX0FETUlOJywgJHVzZXJfaXNfYWRtaW4sIDIwKTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCgl9DQoNCg0KCS8qKg0KCSAqIFNldCB0aGUgdHRsIG9mIGEgY29uc3VtZXIgYWNjZXNzIHRva2VuLiAgVGhpcyBpcyBkb25lIHdoZW4gdGhlDQoJICogc2VydmVyIHJlY2VpdmVzIGEgdmFsaWQgcmVxdWVzdCB3aXRoIGEgeG9hdXRoX3Rva2VuX3R0bCBwYXJhbWV0ZXIgaW4gaXQuDQoJICogDQoJICogQHBhcmFtIHN0cmluZyB0b2tlbg0KCSAqIEBwYXJhbSBpbnQgdHRsDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldENvbnN1bWVyQWNjZXNzVG9rZW5UdGwgKCAkdG9rZW4sICR0b2tlbl90dGwgKQ0KCXsNCgkJaWYgKCR0b2tlbl90dGwgPD0gMCkNCgkJew0KCQkJLy8gSW1tZWRpYXRlIGRlbGV0ZSB3aGVuIHRoZSB0b2tlbiBpcyBwYXN0IGl0cyB0dGwNCgkJCSR0aGlzLT5kZWxldGVDb25zdW1lckFjY2Vzc1Rva2VuKCR0b2tlbiwgMCwgdHJ1ZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBTZXQgbWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4NCgkJCSANCgkJCQ0KCQkJJHNxbCA9ICJCRUdJTiBTUF9TRVRfQ09OU1VNRVJfQUNDX1RPS0VOX1RUTCg6UF9UT0tFTiwgOlBfVE9LRU5fVFRMLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KCQkJLy8gcGFyc2Ugc3FsDQoJCQkkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQoJCQkvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQoJCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU4nLCAkdG9rZW4sIDI1NSk7DQoJCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVE9LRU5fVFRMJywgJHRva2VuX3R0bCwgMjApOw0KCQkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCQkvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KCQkJb2NpX2V4ZWN1dGUoJHN0bXQpOw0KCQl9DQoJfQ0KDQoNCgkvKioNCgkgKiBGZXRjaCBhIGxpc3Qgb2YgYWxsIGNvbnN1bWVyIGtleXMsIHNlY3JldHMgZXRjLg0KCSAqIFJldHVybnMgdGhlIHB1YmxpYyAodXNlcl9pZCBpcyBudWxsKSBhbmQgdGhlIGtleXMgb3duZWQgYnkgdGhlIHVzZXINCgkgKiANCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQNCgkgKiBAcmV0dXJuIGFycmF5DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lcnMgKCAkdXNlcl9pZCApDQoJew0KDQoJCSRzcWwgPSAiQkVHSU4gU1BfTElTVF9DT05TVU1FUlMoOlBfVVNFUl9JRCwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCgkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQoJCS8vQmluZCB0aGUgcmVmIGN1cnNvcg0KCQkkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KCQkvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KCQlvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCgkJLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCgkJb2NpX2V4ZWN1dGUoJHBfcm93LCBPQ0lfREVGQVVMVCk7DQoJCW9jaV9mZXRjaF9hbGwoJHBfcm93LCAkcnMsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KDQoJCXJldHVybiAkcnM7DQoJfQ0KDQoJLyoqDQoJICogTGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBhcHBsaWNhdGlvbnMuIERhdGEgcmV0dXJuZWQgaGFzIG5vdCBzZW5zaXRpdmUgDQoJICogaW5mb3JtYXRpb24gYW5kIHRoZXJlZm9yZSBpcyBzdWl0YWJsZSBmb3IgcHVibGljIGRpc3BsYXlpbmcuDQoJICogDQoJICogQHBhcmFtIGludCAkYmVnaW4NCgkgKiBAcGFyYW0gaW50ICR0b3RhbA0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGlzdENvbnN1bWVyQXBwbGljYXRpb25zKCRiZWdpbiA9IDAsICR0b3RhbCA9IDI1KSANCgl7DQoJCS8vIFRPRE8NCgkJcmV0dXJuIGFycmF5KCk7DQoJfQ0KDQoJLyoqDQoJICogRmV0Y2ggYSBsaXN0IG9mIGFsbCBjb25zdW1lciB0b2tlbnMgYWNjZXNzaW5nIHRoZSBhY2NvdW50IG9mIHRoZSBnaXZlbiB1c2VyLg0KCSAqIA0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZA0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGlzdENvbnN1bWVyVG9rZW5zICggJHVzZXJfaWQgKQ0KCXsNCgkgDQoJCSRzcWwgPSAiQkVHSU4gU1BfTElTVF9DT05TVU1FUl9UT0tFTlMoOlBfVVNFUl9JRCwgOlBfUk9XUywgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCgkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNFUl9JRCcsICR1c2VyX2lkLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVTVUxUJywgJHJlc3VsdCwgMjApOw0KDQoJCS8vQmluZCB0aGUgcmVmIGN1cnNvcg0KCQkkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9ST1dTJywgJHBfcm93LCAtMSwgT0NJX0JfQ1VSU09SKTsNCg0KCQkvL0V4ZWN1dGUgdGhlIHN0YXRlbWVudA0KCQlvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCgkJLy8gdHJlYXQgdGhlIHJlZiBjdXJzb3IgYXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UNCgkJb2NpX2V4ZWN1dGUoJHBfcm93LCBPQ0lfREVGQVVMVCk7DQoJCW9jaV9mZXRjaF9hbGwoJHBfcm93LCAkcnMsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KDQoJCXJldHVybiAkcnM7DQoJfQ0KDQoNCgkvKioNCgkgKiBDaGVjayBhbiBub25jZS90aW1lc3RhbXAgY29tYmluYXRpb24uICBDbGVhcnMgYW55IG5vbmNlIGNvbWJpbmF0aW9ucw0KCSAqIHRoYXQgYXJlIG9sZGVyIHRoYW4gdGhlIG9uZSByZWNlaXZlZC4NCgkgKiANCgkgKiBAcGFyYW0gc3RyaW5nCWNvbnN1bWVyX2tleQ0KCSAqIEBwYXJhbSBzdHJpbmcgCXRva2VuDQoJICogQHBhcmFtIGludAkJdGltZXN0YW1wDQoJICogQHBhcmFtIHN0cmluZyAJbm9uY2UNCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMgl0aHJvd24gd2hlbiB0aGUgdGltZXN0YW1wIGlzIG5vdCBpbiBzZXF1ZW5jZSBvciBub25jZSBpcyBub3QgdW5pcXVlDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrU2VydmVyTm9uY2UgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICRub25jZSApDQoJew0KCQkNCgkJICRzcWwgPSAiQkVHSU4gU1BfQ0hFQ0tfU0VSVkVSX05PTkNFKDpQX0NPTlNVTUVSX0tFWSwgOlBfVE9LRU4sIDpQX1RJTUVTVEFNUCwgOlBfTUFYX1RJTUVTVEFNUF9TS0VXLCA6UF9OT05DRSwgOlBfUkVTVUxUKTsgRU5EOyI7DQoNCgkJCS8vIHBhcnNlIHNxbA0KCQkkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQoJCS8vIEJpbmQgSW4gYW5kIE91dCBWYXJpYWJsZXMNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0NPTlNVTUVSX0tFWScsICRjb25zdW1lcl9rZXksIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9UT0tFTicsICR0b2tlbiwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1RJTUVTVEFNUCcsICR0aW1lc3RhbXAsIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9NQVhfVElNRVNUQU1QX1NLRVcnLCAkdGhpcy0+bWF4X3RpbWVzdGFtcF9za2V3LCAyMCk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9OT05DRScsICRub25jZSwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCgkJDQoJfQ0KDQoNCgkvKioNCgkgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGxvZyB0YWJsZQ0KCSAqIA0KCSAqIEBwYXJhbSBhcnJheSBrZXlzIChvc3JfY29uc3VtZXJfa2V5LCBvc3RfdG9rZW4sIG9jcl9jb25zdW1lcl9rZXksIG9jdF90b2tlbikNCgkgKiBAcGFyYW0gc3RyaW5nIHJlY2VpdmVkDQoJICogQHBhcmFtIHN0cmluZyBzZW50DQoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZw0KCSAqIEBwYXJhbSBzdHJpbmcgbm90ZXMNCgkgKiBAcGFyYW0gaW50IChvcHRpb25hbCkgdXNlcl9pZA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBhZGRMb2cgKCAka2V5cywgJHJlY2VpdmVkLCAkc2VudCwgJGJhc2Vfc3RyaW5nLCAkbm90ZXMsICR1c2VyX2lkID0gbnVsbCApDQoJew0KCQkkYXJncyA9IGFycmF5KCk7DQoJCSRwcyAgID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCSRhcmdzW10gPSAkdmFsdWU7DQoJCQkkcHNbXSAgID0gIm9sZ18ka2V5ID0gJyVzJyI7DQoJCX0NCg0KCQlpZiAoIWVtcHR5KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSkNCgkJew0KCQkJJHJlbW90ZV9pcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOw0KCQl9CQ0KCQllbHNlIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFTU9URV9JUCddKSkNCgkJew0KCQkJJHJlbW90ZV9pcCA9ICRfU0VSVkVSWydSRU1PVEVfSVAnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRyZW1vdGVfaXAgPSAnMC4wLjAuMCc7DQoJCX0NCg0KCQkvLyBCdWlsZCB0aGUgU1FMDQoJCSRvbGdfcmVjZWl2ZWQgPSAkdGhpcy0+bWFrZVVURjgoJHJlY2VpdmVkKTsNCgkJJG9sZ19zZW50ID0gJHRoaXMtPm1ha2VVVEY4KCRzZW50KTsNCgkJJG9sZ19iYXNlX3N0cmluZyA9ICRiYXNlX3N0cmluZzsNCgkJJG9sZ19ub3RlcyA9ICR0aGlzLT5tYWtlVVRGOCgkbm90ZXMpOw0KCQkkb2xnX3VzYV9pZF9yZWYgPSAkdXNlcl9pZDsNCgkJJG9sZ19yZW1vdGVfaXAgPSAkcmVtb3RlX2lwOw0KDQoJCSANCg0KCQkkc3FsID0gIkJFR0lOIFNQX0FERF9MT0coOlBfUkVDRUlWRUQsIDpQX1NFTlQsIDpQX0JBU0VfU1RSSU5HLCA6UF9OT1RFUywgOlBfVVNBX0lEX1JFRiwgOlBfUkVNT1RFX0lQLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KCQkJLy8gcGFyc2Ugc3FsDQoJCSRzdG10ID0gb2NpX3BhcnNlKCR0aGlzLT5jb25uLCAkc3FsKSBvciBkaWUgKCdDYW4gbm90IHBhcnNlIHF1ZXJ5Jyk7DQoNCgkJLy8gQmluZCBJbiBhbmQgT3V0IFZhcmlhYmxlcw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUkVDRUlWRUQnLCAkb2xnX3JlY2VpdmVkLCAyNTUpOw0KCQlvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfU0VOVCcsICRvbGdfc2VudCwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX0JBU0VfU1RSSU5HJywgJG9sZ19iYXNlX3N0cmluZywgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX05PVEVTJywgJG9sZ19ub3RlcywgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1VTQV9JRF9SRUYnLCAkb2xnX3VzYV9pZF9yZWYsIDI1NSk7DQoJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9SRU1PVEVfSVAnLCAkb2xnX3JlbW90ZV9pcCwgMjU1KTsNCgkJb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KDQoJCS8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQoJCW9jaV9leGVjdXRlKCRzdG10KTsNCgl9DQoJDQoJDQoJLyoqDQoJICogR2V0IGEgcGFnZSBvZiBlbnRyaWVzIGZyb20gdGhlIGxvZy4gIFJldHVybnMgdGhlIGxhc3QgMTAwIHJlY29yZHMNCgkgKiBtYXRjaGluZyB0aGUgb3B0aW9ucyBnaXZlbi4NCgkgKiANCgkgKiBAcGFyYW0gYXJyYXkgb3B0aW9ucw0KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAljdXJyZW50IHVzZXINCgkgKiBAcmV0dXJuIGFycmF5IGxvZyByZWNvcmRzDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGxpc3RMb2cgKCAkb3B0aW9ucywgJHVzZXJfaWQgKQ0KCXsNCgkJDQoJCSBpZiAoZW1wdHkoJG9wdGlvbnMpKQ0KCQl7DQoJCQkkb3B0aW9uc0ZsYWc9TlVMTDsNCgkJCQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJG9wdGlvbnNGbGFnPTE7DQoJCQkNCgkJfQ0KCQ0KCQkkc3FsID0gIkJFR0lOIFNQX0xJU1RfTE9HKDpQX09QVElPTl9GTEFHLCA6UF9VU0FfSUQsIDpQX09TUl9DT05TVU1FUl9LRVksIDpQX09DUl9DT05TVU1FUl9LRVksIDpQX09TVF9UT0tFTiwgOlBfT0NUX1RPS0VOLCA6UF9ST1dTLCA6UF9SRVNVTFQpOyBFTkQ7IjsNCg0KICAgICAgICAgICAgLy8gcGFyc2Ugc3FsDQogICAgICAgICAgICAkc3RtdCA9IG9jaV9wYXJzZSgkdGhpcy0+Y29ubiwgJHNxbCkgb3IgZGllICgnQ2FuIG5vdCBwYXJzZSBxdWVyeScpOw0KDQogICAgICAgICAgICAvLyBCaW5kIEluIGFuZCBPdXQgVmFyaWFibGVzDQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT1BUSU9OX0ZMQUcnLCAkb3B0aW9uc0ZsYWcsIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfVVNBX0lEJywgJHVzZXJfaWQsIDQwKTsNCgkJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PU1JfQ09OU1VNRVJfS0VZJywgJG9wdGlvbnNbJ29zcl9jb25zdW1lcl9rZXknXSwgMjU1KTsNCiAgICAgICAgICAgIG9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PQ1JfQ09OU1VNRVJfS0VZJywgJG9wdGlvbnNbJ29jcl9jb25zdW1lcl9rZXknXSwgMjU1KTsNCgkJCW9jaV9iaW5kX2J5X25hbWUoJHN0bXQsICc6UF9PU1RfVE9LRU4nLCAkb3B0aW9uc1snb3N0X3Rva2VuJ10sIDI1NSk7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfT0NUX1RPS0VOJywgJG9wdGlvbnNbJ29jdF90b2tlbiddLCAyNTUpOw0KICAgICAgICAgICAgb2NpX2JpbmRfYnlfbmFtZSgkc3RtdCwgJzpQX1JFU1VMVCcsICRyZXN1bHQsIDIwKTsNCg0KICAgICAgICAgICAgLy9CaW5kIHRoZSByZWYgY3Vyc29yDQogICAgICAgICAgICAkcF9yb3cgPSBvY2lfbmV3X2N1cnNvcigkdGhpcy0+Y29ubik7DQogICAgICAgICAgICBvY2lfYmluZF9ieV9uYW1lKCRzdG10LCAnOlBfUk9XUycsICRwX3JvdywgLTEsIE9DSV9CX0NVUlNPUik7DQoNCiAgICAgICAgICAgIC8vRXhlY3V0ZSB0aGUgc3RhdGVtZW50DQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkc3RtdCk7DQoNCiAgICAgICAgICAgIC8vIHRyZWF0IHRoZSByZWYgY3Vyc29yIGFzIGEgc3RhdGVtZW50IHJlc291cmNlDQogICAgICAgICAgICBvY2lfZXhlY3V0ZSgkcF9yb3csIE9DSV9ERUZBVUxUKTsNCiAgICAgICAgICAgIG9jaV9mZXRjaF9hbGwoJHBfcm93LCAkcnMsIG51bGwsIG51bGwsIE9DSV9GRVRDSFNUQVRFTUVOVF9CWV9ST1cpOw0KDQoJCXJldHVybiAkcnM7DQoJfQ0KDQoJLyoqDQoJICogSW5pdGlhbGlzZSB0aGUgZGF0YWJhc2UNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gaW5zdGFsbCAoKQ0KCXsNCgkJcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9vcmFjbGUvaW5zdGFsbC5waHAnOw0KCX0NCn0NCg0KDQovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStorePDO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogQmFzZWQgb24gTXlTUUwKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTdG9yZVBETy5waHAgNjQgMjAwOS0wOC0xNiAxOTozNzowMFogbWFyY3dAcG9ib3guY29tICQKICogQGF1dGhvciBCcnVubyBCYXJiZXJpIEduZWNjbyA8YnJ1bm9iZ0B1c2Vycy5zZi5uZXQ+IEJhc2VkIG9uIGNvZGUgYnkgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIAogKiAKICogVGhlIE1JVCBMaWNlbnNlCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNZWRpYW1hdGljIExhYgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIAogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoU3RvcmVTUUwucGhwJzsKCgpjbGFzcyBPQXV0aFN0b3JlUERPIGV4dGVuZHMgT0F1dGhTdG9yZVNRTAp7Cglwcml2YXRlICRjb25uOyAvLyBQRE8gY29ubmVjdGlvbgoJcHJpdmF0ZSAkbGFzdGFmZmVjdGVkcm93czsKCgkvKioKCSAqIENvbnN0cnVjdCB0aGUgT0F1dGhTdG9yZVBETy4KCSAqIEluIHRoZSBvcHRpb25zIHlvdSBoYXZlIHRvIHN1cHBseSBlaXRoZXI6CgkgKiAtIGRzbiwgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBkYXRhYmFzZSAoZm9yIGEgbmV3IFBETyBjb25uZWN0aW9uKQoJICogLSBjb25uIChmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgdXNlZCkKCSAqIAoJICogQHBhcmFtIGFycmF5IG9wdGlvbnMKCSAqLwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJCWlmIChpc3NldCgkb3B0aW9uc1snY29ubiddKSkKCQl7CgkJCSR0aGlzLT5jb25uID0gJG9wdGlvbnNbJ2Nvbm4nXTsKCQl9CgkJZWxzZSBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RzbiddKSkKCQl7CgkJCXRyeSAKCQkJewoJCQkJJHRoaXMtPmNvbm4gPSBuZXcgUERPKCRvcHRpb25zWydkc24nXSwgJG9wdGlvbnNbJ3VzZXJuYW1lJ10sIEAkb3B0aW9uc1sncGFzc3dvcmQnXSk7CgkJCX0KCQkJY2F0Y2ggKFBET0V4Y2VwdGlvbiAkZSkgCgkJCXsKCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBjb25uZWN0IHRvIFBETyBkYXRhYmFzZTogJyAuICRlLT5nZXRNZXNzYWdlKCkpOwoJCQl9CgoJCQkkdGhpcy0+cXVlcnkoJ3NldCBjaGFyYWN0ZXIgc2V0IHV0ZjgnKTsKCQl9Cgl9CgoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIGlnbm9yZSB0aGUgcmVzdWx0cwoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHNxbAoJICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnkgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQl0cnkKCQl7CgkJCSR0aGlzLT5sYXN0YWZmZWN0ZWRyb3dzID0gJHRoaXMtPmNvbm4tPmV4ZWMoJHNxbCk7CgkJCWlmICgkdGhpcy0+bGFzdGFmZmVjdGVkcm93cyA9PT0gRkFMU0UpIHsKCQkJCSR0aGlzLT5zcWxfZXJyY2hlY2soJHNxbCk7CgkJCX0KCQl9CgkJY2F0Y2ggKFBET0V4Y2VwdGlvbiAkZSkgCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCX0KCQoKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCBpZ25vcmUgdGhlIHJlc3VsdHMKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FsbF9hc3NvYyAoICRzcWwgKQoJewoJCSRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwoJCSRyZXN1bHQgPSBhcnJheSgpOwoKCQl0cnkgCgkJewoJCQkkc3RtdCA9ICR0aGlzLT5jb25uLT5xdWVyeSgkc3FsKTsKCQkJCgkJCSRyZXN1bHQgPSAkc3RtdC0+ZmV0Y2hBbGwoUERPOjpGRVRDSF9BU1NPQyk7CgkJfQoJCWNhdGNoIChQRE9FeGNlcHRpb24gJGUpIAoJCXsKCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9yb3dfYXNzb2MgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQkkcmVzdWx0ID0gJHRoaXMtPnF1ZXJ5X2FsbF9hc3NvYygkc3FsKTsKCQkkdmFsID0gYXJyYXlfcG9wKCRyZXN1bHQpOwoJCXJldHVybiAkdmFsOwoJfQoKCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9yb3cgKCAkc3FsICkKCXsKCQkkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKCQl0cnkgCgkJewoJCQkkYWxsID0gJHRoaXMtPmNvbm4tPnF1ZXJ5KCRzcWwsIFBETzo6RkVUQ0hfTlVNKTsKCQkJJHJvdyA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRhbGwgYXMgJHIpIHsKCQkJCSRyb3cgPSAkcjsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCWNhdGNoIChQRE9FeGNlcHRpb24gJGUpCgkJewoJCQkkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwoJCX0KCQlyZXR1cm4gJHJvdzsKCX0KCQoJCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqIEByZXR1cm4gbWl4ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X29uZSAoICRzcWwgKQoJewoJCSRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOyAKCQkkcm93ID0gJHRoaXMtPnF1ZXJ5X3Jvdygkc3FsKTsgCgkJJHZhbCA9IGFycmF5X3BvcCgkcm93KTsKCQlyZXR1cm4gJHZhbDsKCX0KCQoJCgkvKioKCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgaW4gdGhlIGxhc3QgcXVlcnkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FmZmVjdGVkX3Jvd3MgKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmxhc3RhZmZlY3RlZHJvd3M7Cgl9CgoKCS8qKgoJICogUmV0dXJuIHRoZSBpZCBvZiB0aGUgbGFzdCBpbnNlcnRlZCByb3cKCSAqIAoJICogQHJldHVybiBpbnQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2luc2VydF9pZCAoKQoJewoJCXJldHVybiAkdGhpcy0+Y29ubi0+bGFzdEluc2VydElkKCk7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9wcmludGYgKCAkYXJncyApCgl7CgkJJHNxbCAgPSBhcnJheV9zaGlmdCgkYXJncyk7CgkJaWYgKGNvdW50KCRhcmdzKSA9PSAxICYmIGlzX2FycmF5KCRhcmdzWzBdKSkKCQl7CgkJCSRhcmdzID0gJGFyZ3NbMF07CgkJfQoJCSRhcmdzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAnc3FsX2VzY2FwZV9zdHJpbmcnKSwgJGFyZ3MpOwoJCXJldHVybiB2c3ByaW50Zigkc3FsLCAkYXJncyk7Cgl9CgkKCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9lc2NhcGVfc3RyaW5nICggJHMgKQoJewoJCWlmIChpc19zdHJpbmcoJHMpKQoJCXsKCQkJJHMgPSAkdGhpcy0+Y29ubi0+cXVvdGUoJHMpOwoJCQkvLyBrbHVkZ2UuIFF1b3RlIGFscmVhZHkgYWRkcyBxdW90ZXMsIGFuZCB0aGlzIGNvbmZsaWN0cyB3aXRoIE9BdXRoU3RvcmVTUUwuCgkJCS8vIHNvIHJlbW92ZSB0aGUgcXVvdGVzCgkJCSRsZW4gPSBtYl9zdHJsZW4oJHMpOwoJCQlpZiAoJGxlbiA9PSAwKQoJCQkJcmV0dXJuICRzOwoKCQkJJHN0YXJ0Y3V0ID0gMDsKCQkJd2hpbGUgKGlzc2V0KCRzWyRzdGFydGN1dF0pICYmICRzWyRzdGFydGN1dF0gPT0gJ1wnJykKCQkJCSRzdGFydGN1dCsrOwoKCQkJJGVuZGN1dCA9ICRsZW4tMTsKCQkJd2hpbGUgKGlzc2V0KCRzWyRlbmRjdXRdKSAmJiAkc1skZW5kY3V0XSA9PSAnXCcnKQoJCQkJJGVuZGN1dC0tOwoJCQkJCgkJCSRzID0gbWJfc3Vic3RyKCRzLCAkc3RhcnRjdXQsICRlbmRjdXQtJHN0YXJ0Y3V0KzEpOwoJCQlyZXR1cm4gJHM7CgkJfQoJCWVsc2UgaWYgKGlzX251bGwoJHMpKQoJCXsKCQkJcmV0dXJuIE5VTEw7CgkJfQoJCWVsc2UgaWYgKGlzX2Jvb2woJHMpKQoJCXsKCQkJcmV0dXJuIGludHZhbCgkcyk7CgkJfQoJCWVsc2UgaWYgKGlzX2ludCgkcykgfHwgaXNfZmxvYXQoJHMpKQoJCXsKCQkJcmV0dXJuICRzOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJHRoaXMtPmNvbm4tPnF1b3RlKHN0cnZhbCgkcykpOwoJCX0KCX0KCQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3FsX2VycmNoZWNrICggJHNxbCApCgl7CgkJJG1zZyA9ICAiU1FMIEVycm9yIGluIE9BdXRoU3RvcmVNeVNRTDogIi4gcHJpbnRfcigkdGhpcy0+Y29ubi0+ZXJyb3JJbmZvKCksIHRydWUpIC4iXG5cbiIgLiAkc3FsOwoJCSRiYWNrdHJhY2UgPSBkZWJ1Z19iYWNrdHJhY2UoKTsKCQkkbXNnIC49ICAiXG5cbkF0IGZpbGUgIiAuICRiYWNrdHJhY2VbMV1bJ2ZpbGUnXSAuICIsIGxpbmUgIiAgLiAkYmFja3RyYWNlWzFdWydsaW5lJ107IAoJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJG1zZyk7Cgl9CgkKCS8qKgoJKiBJbml0aWFsaXNlIHRoZSBkYXRhYmFzZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsICgpCgl7CgkJLy8gVE9ETzogdGhpcyBkZXBlbmRzIG9uIG15c3FsIGV4dGVuc2lvbgoJCXJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbXlzcWwvaW5zdGFsbC5waHAnOwoJfQoJCn0KCgovKiB2aTpzZXQgdHM9NCBzdHM9NCBzdz00IGJpbmFyeSBub2VvbDogKi8KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStorePostgreSQL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE9BdXRoU3RvcmVQb3N0Z3JlU1FMLnBocAogKgogKiBQSFAgVmVyc2lvbiA1LjIKICoKICogQGF1dGhvciBFbG1hIFImRCBUZWFtICA8cmR0ZWFtQGVsbWEuZnI+CiAqIEBsaW5rIGh0dHA6Ly9lbG1hLmZyCiAqIAogKiBASWQgMjAxMC0xMC0yMiAxMDowNzoxOCBuZGVsYW5vZSAkCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTdG9yZVBvc3RncmVTUUwucGhwIDE3NSAyMDEwLTExLTI0IDE5OjUyOjI0WiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIAogKiBUaGUgTUlUIExpY2Vuc2UKICogCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE1lZGlhbWF0aWMgTGFiCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICogCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKiAKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKiovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL09BdXRoU3RvcmVBYnN0cmFjdC5jbGFzcy5waHAnOwoKCmNsYXNzIE9BdXRoU3RvcmVQb3N0Z3JlU1FMIGV4dGVuZHMgT0F1dGhTdG9yZUFic3RyYWN0CnsKICAgIC8qKgogICAgICogTWF4aW11bSBkZWx0YSBhIHRpbWVzdGFtcCBtYXkgYmUgb2ZmIGZyb20gYSBwcmV2aW91cyB0aW1lc3RhbXAuCiAgICAgKiBBbGxvd3MgbXVsdGlwbGUgY29uc3VtZXJzIHdpdGggc29tZSBjbG9jayBza2V3IHRvIHdvcmsgd2l0aCB0aGUgc2FtZSB0b2tlbi4KICAgICAqIFVuaXQgaXMgc2Vjb25kcywgZGVmYXVsdCBtYXggc2tldyBpcyAxMCBtaW51dGVzLgogICAgICovCiAgICBwcm90ZWN0ZWQgJG1heF90aW1lc3RhbXBfc2tldyA9IDYwMDsKCiAgICAvKioKICAgICAqIERlZmF1bHQgdHRsIGZvciByZXF1ZXN0IHRva2VucwogICAgICovCiAgICBwcm90ZWN0ZWQgJG1heF9yZXF1ZXN0X3Rva2VuX3R0bCA9IDM2MDA7CgogICAgLyoqCiAgICAgKiBOdW1iZXIgb2YgYWZmZWN0ZWQgcm93c2J5IHRoZSBsYXN0IHF1ZXJpZXMKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhc3RBZmZlY3RlZFJvd3MgPSAwOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgcG9zdGdyZXNxbC9wZ3NxbC5zcWwnKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdCB0aGUgT0F1dGhTdG9yZVBvc3RnclNRTC4KICAgICAqIEluIHRoZSBvcHRpb25zIHlvdSBoYXZlIHRvIHN1cHBseSBlaXRoZXI6CiAgICAgKiAtIHNlcnZlciwgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBkYXRhYmFzZSAoZm9yIGEgcGdfY29ubmVjdCkKICAgICAqIC0gY29ubmVjdGlvblN0cmluZyAoZm9yIGEgcGdfY29ubmVjdCkKICAgICAqIC0gY29ubiAoZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlIHVzZWQpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5IG9wdGlvbnMKICAgICAqLwogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCAkb3B0aW9ucyA9IGFycmF5KCkgKQogICAgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY29ubiddKSkKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5jb25uID0gJG9wdGlvbnNbJ2Nvbm4nXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzZXJ2ZXInXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRob3N0ICAgPSAkb3B0aW9uc1snc2VydmVyJ107CiAgICAgICAgICAgICAgICAkdXNlciA9ICRvcHRpb25zWyd1c2VybmFtZSddOwogICAgICAgICAgICAgICAgJGRibmFtZSA9ICRvcHRpb25zWydkYXRhYmFzZSddOwoKICAgICAgICAgICAgICAgICRjb25uZWN0aW9uU3RyaW5nID0gc3ByaW50ZignaG9zdD0lcyBkYm5hbWU9JXMgdXNlcj0lcycsICRob3N0LCAkZGJuYW1lLCAkdXNlcik7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwYXNzd29yZCddKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkY29ubmVjdGlvblN0cmluZyAuPSAnIHBhc3N3b3JkPScgLiAkb3B0aW9uc1sncGFzc3dvcmQnXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29ubiA9IHBnX2Nvbm5lY3QoJGNvbm5lY3Rpb25TdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2VpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvbm5lY3Rpb25TdHJpbmcnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR0aGlzLT5jb25uID0gcGdfY29ubmVjdCgkb3B0aW9uc1snY29ubmVjdGlvblN0cmluZyddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIGRlZmF1bHQgIHBnIGNvbm5lY3QKICAgICAgICAgICAgICAgICR0aGlzLT5jb25uID0gcGdfY29ubmVjdCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPmNvbm4gPT09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDb3VsZCBub3QgY29ubmVjdCB0byBQb3N0Z3Jlc1NRTCBkYXRhYmFzZScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmluZCBzdG9yZWQgY3JlZGVudGlhbHMgZm9yIHRoZSBjb25zdW1lciBrZXkgYW5kIHRva2VuLiBVc2VkIGJ5IGFuIE9BdXRoIHNlcnZlcgogICAgICogd2hlbiB2ZXJpZnlpbmcgYW4gT0F1dGggcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIHN0cmluZyB0b2tlbgogICAgICogQHBhcmFtIHN0cmluZyB0b2tlbl90eXBlICAgICAgICBmYWxzZSwgJ3JlcXVlc3QnIG9yICdhY2Nlc3MnCiAgICAgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIG5vIHNlY3JldHMgd2hlcmUgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkgICAgYXNzb2MgKGNvbnN1bWVyX3NlY3JldCwgdG9rZW5fc2VjcmV0LCBvc3JfaWQsIG9zdF9pZCwgdXNlcl9pZCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlY3JldHNGb3JWZXJpZnkgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlID0gJ2FjY2VzcycgKQogICAgewogICAgICAgIGlmICgkdG9rZW5fdHlwZSA9PT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAkcnMgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICAgIG9zcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfa2V5ICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2NvbnN1bWVyX3NlY3JldCAgICAgICAgYXMgY29uc3VtZXJfc2VjcmV0CiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zcl9jb25zdW1lcl9rZXkgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3NyX2VuYWJsZWQgICAgICAgID0gXCcxXCcKICAgICAgICAgICAgICAgICAgICAgICAgJywKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnN1bWVyX2tleSk7CgogICAgICAgICAgICBpZiAoJHJzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkcnNbJ3Rva2VuJ10gICAgICAgICA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHJzWyd0b2tlbl9zZWNyZXQnXSAgICA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHJzWyd1c2VyX2lkJ10gICAgICAgID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkcnNbJ29zdF9pZCddICAgICAgICA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRycyA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb3NyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RfdXNhX2lkX3JlZiAgICAgICAgICAgIGFzIHVzZXJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2NvbnN1bWVyX2tleSAgICAgICAgYXMgY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9jb25zdW1lcl9zZWNyZXQgICAgICAgIGFzIGNvbnN1bWVyX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW4gICAgICAgICAgICAgICAgYXMgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3Rva2VuX3NlY3JldCAgICAgICAgYXMgdG9rZW5fc2VjcmV0CiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9JTiBvYXV0aF9zZXJ2ZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBvc3Rfb3NyX2lkX3JlZiA9IG9zcl9pZAogICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBvc3RfdG9rZW5fdHlwZSAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3JfY29uc3VtZXJfa2V5ICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbiAgICAgICAgICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3JfZW5hYmxlZCAgICAgICAgPSBcJzFcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3RfdG9rZW5fdHRsICAgICA+PSBOT1coKQogICAgICAgICAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5fdHlwZSwgJGNvbnN1bWVyX2tleSwgJHRva2VuKTsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkcnMpKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciIHRva2VuICInLiR0b2tlbi4nIiBjb21iaW5hdGlvbiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZW5hYmxlZC4nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyczsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmQgdGhlIHNlcnZlciBkZXRhaWxzIGZvciBzaWduaW5nIGEgcmVxdWVzdCwgYWx3YXlzIGxvb2tzIGZvciBhbiBhY2Nlc3MgdG9rZW4uCiAgICAgKiBUaGUgcmV0dXJuZWQgY3JlZGVudGlhbHMgZGVwZW5kIG9uIHdoaWNoIGxvY2FsIHVzZXIgaXMgbWFraW5nIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIFRoZSBjb25zdW1lcl9rZXkgbXVzdCBiZWxvbmcgdG8gdGhlIHVzZXIgb3IgYmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpCiAgICAgKgogICAgICogRm9yIHNpZ25pbmcgd2UgbmVlZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKICAgICAqCiAgICAgKiBjb25zdW1lcl9rZXkgICAgICAgICAgICBjb25zdW1lciBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJ2ZXIKICAgICAqIGNvbnN1bWVyX3NlY3JldCAgICAgICAgY29uc3VtZXIgc2VjcmV0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZlcgogICAgICogdG9rZW4gICAgICAgICAgICAgICAgYWNjZXNzIHRva2VuIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZlcgogICAgICogdG9rZW5fc2VjcmV0ICAgICAgICAgICAgc2VjcmV0IGZvciB0aGUgYWNjZXNzIHRva2VuCiAgICAgKiBzaWduYXR1cmVfbWV0aG9kcyAgICBzaWduaW5nIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKGFycmF5KQogICAgICoKICAgICAqIEB0b2RvIGZpbHRlciBvbiB0b2tlbiB0eXBlICh3ZSBzaG91bGQga25vdyBob3cgYW5kIHdpdGggd2hhdCB0byBzaWduIHRoaXMgcmVxdWVzdCwgYW5kIHRoZXJlIG1pZ2h0IGJlIG9sZCBhY2Nlc3MgdG9rZW5zKQogICAgICogQHBhcmFtIHN0cmluZyB1cmkgICAgdXJpIG9mIHRoZSBzZXJ2ZXIKICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZCAgICBpZCBvZiB0aGUgbG9nZ2VkIG9uIHVzZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgbmFtZSAgICAob3B0aW9uYWwpIG5hbWUgb2YgdGhlIHRva2VuIChjYXNlIHNlbnNpdGl2ZSkKICAgICAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm8gY3JlZGVudGlhbHMgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlY3JldHNGb3JTaWduYXR1cmUgKCAkdXJpLCAkdXNlcl9pZCwgJG5hbWUgPSAnJyApCiAgICB7CiAgICAgICAgLy8gRmluZCBhIGNvbnN1bWVyIGtleSBhbmQgdG9rZW4gZm9yIHRoZSBnaXZlbiB1cmkKICAgICAgICAkcHMgICAgICAgID0gcGFyc2VfdXJsKCR1cmkpOwogICAgICAgICRob3N0ICAgID0gaXNzZXQoJHBzWydob3N0J10pID8gJHBzWydob3N0J10gOiAnbG9jYWxob3N0JzsKICAgICAgICAkcGF0aCAgICA9IGlzc2V0KCRwc1sncGF0aCddKSA/ICRwc1sncGF0aCddIDogJyc7CgogICAgICAgIGlmIChlbXB0eSgkcGF0aCkgfHwgc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKQogICAgICAgIHsKICAgICAgICAgICAgJHBhdGggLj0gJy8nOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhlIG93bmVyIG9mIHRoZSBjb25zdW1lcl9rZXkgaXMgZWl0aGVyIHRoZSB1c2VyIG9yIG5vYm9keSAocHVibGljIGNvbnN1bWVyIGtleSkKICAgICAgICAkc2VjcmV0cyA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgIFNFTEVDVCAgICBvY3JfY29uc3VtZXJfa2V5ICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfY29uc3VtZXJfc2VjcmV0ICAgICAgICBhcyBjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW4gICAgICAgICAgICAgICAgYXMgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW5fc2VjcmV0ICAgICAgICBhcyB0b2tlbl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2lnbmF0dXJlX21ldGhvZHMgICAgYXMgc2lnbmF0dXJlX21ldGhvZHMKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gb2F1dGhfY29uc3VtZXJfdG9rZW4gT04gb2N0X29jcl9pZF9yZWYgPSBvY3JfaWQKICAgICAgICAgICAgICAgICAgICBXSEVSRSBvY3Jfc2VydmVyX3VyaV9ob3N0ID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2NyX3NlcnZlcl91cmlfcGF0aCA9IFNVQlNUUihcJyVzXCcsIDEsIExFTkdUSChvY3Jfc2VydmVyX3VyaV9wYXRoKSkKICAgICAgICAgICAgICAgICAgICAgIEFORCAob2NyX3VzYV9pZF9yZWYgPSBcJyVzXCcgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdXNhX2lkX3JlZiAgICAgID0gXCclZFwnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuX3R5cGUgICAgICA9IFwnYWNjZXNzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfbmFtZSAgICAgICAgICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHRsICAgICAgID49IE5PVygpCiAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgb2NyX3VzYV9pZF9yZWYgREVTQywgb2NyX2NvbnN1bWVyX3NlY3JldCBERVNDLCBMRU5HVEgob2NyX3NlcnZlcl91cmlfcGF0aCkgREVTQwogICAgICAgICAgICAgICAgICAgIExJTUlUIDEKICAgICAgICAgICAgICAgICAgICAnLCAkaG9zdCwgJHBhdGgsICR1c2VyX2lkLCAkdXNlcl9pZCwgJG5hbWUKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICBpZiAoZW1wdHkoJHNlY3JldHMpKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc2VydmVyIHRva2VucyBhdmFpbGFibGUgZm9yICcuJHVyaSk7CiAgICAgICAgfQogICAgICAgICRzZWNyZXRzWydzaWduYXR1cmVfbWV0aG9kcyddID0gZXhwbG9kZSgnLCcsICRzZWNyZXRzWydzaWduYXR1cmVfbWV0aG9kcyddKTsKICAgICAgICByZXR1cm4gJHNlY3JldHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRva2VuIGFuZCB0b2tlbiBzZWNyZXQgd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgIGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIHN0cmluZyAgICAgdG9rZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgdG9rZW5fdHlwZQogICAgICogQHBhcmFtIGludCAgICAgICAgdXNlcl9pZCAgICAgICAgICAgIHRoZSB1c2VyIG93bmluZyB0aGUgdG9rZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgbmFtZSAgICAgICAgICAgIG9wdGlvbmFsIG5hbWUgZm9yIGEgbmFtZWQgdG9rZW4KICAgICAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm8gY3JlZGVudGlhbHMgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuU2VjcmV0cyAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R5cGUsICR1c2VyX2lkLCAkbmFtZSA9ICcnICkKICAgIHsKICAgICAgICBpZiAoJHRva2VuX3R5cGUgIT0gJ3JlcXVlc3QnICYmICR0b2tlbl90eXBlICE9ICdhY2Nlc3MnKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5rb3duIHRva2VuIHR5cGUgIicuJHRva2VuX3R5cGUuJyIsIG11c3QgYmUgZWl0aGVyICJyZXF1ZXN0IiBvciAiYWNjZXNzIicpOwogICAgICAgIH0KCiAgICAgICAgLy8gVGFrZSB0aGUgbW9zdCByZWNlbnQgdG9rZW4gb2YgdGhlIGdpdmVuIHR5cGUKICAgICAgICAkciA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgIFNFTEVDVCAgICBvY3JfY29uc3VtZXJfa2V5ICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfY29uc3VtZXJfc2VjcmV0ICAgICAgICBhcyBjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW4gICAgICAgICAgICAgICAgYXMgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW5fc2VjcmV0ICAgICAgICBhcyB0b2tlbl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RfbmFtZSAgICAgICAgICAgICAgICBhcyB0b2tlbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NpZ25hdHVyZV9tZXRob2RzICAgIGFzIHNpZ25hdHVyZV9tZXRob2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmkgICAgICAgICAgICBhcyBzZXJ2ZXJfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3JlcXVlc3RfdG9rZW5fdXJpICAgIGFzIHJlcXVlc3RfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2F1dGhvcml6ZV91cmkgICAgICAgIGFzIGF1dGhvcml6ZV91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfYWNjZXNzX3Rva2VuX3VyaSAgICBhcyBhY2Nlc3NfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIG9jdF90b2tlbl90dGwgPj0gXCc5OTk5LTEyLTMxXCcgVEhFTiBOVUxMIEVMU0Ugb2N0X3Rva2VuX3R0bCAtIE5PVygpIEVORCBhcyB0b2tlbl90dGwKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX2NvbnN1bWVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAogICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHlwZSAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuICAgICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9jdF91c2FfaWRfcmVmICAgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHRsICAgID49IE5PVygpCiAgICAgICAgICAgICAgICAgICAgJywgJGNvbnN1bWVyX2tleSwgJHRva2VuX3R5cGUsICR0b2tlbiwgJHVzZXJfaWQKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICBpZiAoZW1wdHkoJHIpKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQ291bGQgbm90IGZpbmQgYSAiJy4kdG9rZW5fdHlwZS4nIiB0b2tlbiBmb3IgY29uc3VtZXIgIicuJGNvbnN1bWVyX2tleS4nIiBhbmQgdXNlciAnLiR1c2VyX2lkKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSAmJiAhZW1wdHkoJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywkclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRyWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKCiAgICAvKioKICAgICAqIEFkZCBhIHJlcXVlc3QgdG9rZW4gd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4KICAgICAqCiAgICAgKiBAdG9kbyByZW1vdmUgb2xkIHRva2VucyBmb3IgdGhpcyB1c2VyIGFuZCB0aGlzIG9jcl9pZAogICAgICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkgICAga2V5IG9mIHRoZSBzZXJ2ZXIgaW4gdGhlIGNvbnN1bWVyIHJlZ2lzdHJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3R5cGUgICAgICAgIG9uZSBvZiAncmVxdWVzdCcgb3IgJ2FjY2VzcycKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CiAgICAgKiBAcGFyYW0gaW50ICAgICAgdXNlcl9pZCAgICAgICAgICAgIHRoZSB1c2VyIG93bmluZyB0aGUgdG9rZW4KICAgICAqIEBwYXJhbSBhcnJheSAgb3B0aW9ucyAgICAgICAgICAgIGV4dHJhIG9wdGlvbnMsIG5hbWUgYW5kIHRva2VuX3R0bAogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBzZXJ2ZXIgaXMgbm90IGtub3duCiAgICAgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHdlIHJlY2VpdmVkIGEgZHVwbGljYXRlIHRva2VuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbl90eXBlLCAkdG9rZW4sICR0b2tlbl9zZWNyZXQsICR1c2VyX2lkLCAkb3B0aW9ucyA9IGFycmF5KCkgKQogICAgewogICAgICAgIGlmICgkdG9rZW5fdHlwZSAhPSAncmVxdWVzdCcgJiYgJHRva2VuX3R5cGUgIT0gJ2FjY2VzcycpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdVbmtub3duIHRva2VuIHR5cGUgIicuJHRva2VuX3R5cGUuJyIsIG11c3QgYmUgZWl0aGVyICJyZXF1ZXN0IiBvciAiYWNjZXNzIicpOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4KICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpCiAgICAgICAgewogICAgICAgICAgICAkdHRsID0gJ05PVygpICsgSU5URVJWQUwgXCcnLmludHZhbCgkb3B0aW9uc1sndG9rZW5fdHRsJ10pLicgU0VDT05EXCcnOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgkdG9rZW5fdHlwZSA9PSAncmVxdWVzdCcpCiAgICAgICAgewogICAgICAgICAgICAkdHRsID0gJ05PVygpICsgSU5URVJWQUwgXCcnLiR0aGlzLT5tYXhfcmVxdWVzdF90b2tlbl90dGwuJyBTRUNPTkRcJyc7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICR0dGwgPSAiJzk5OTktMTItMzEnIjsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2VydmVyX3VyaSddKSkKICAgICAgICB7CiAgICAgICAgICAgICRvY3JfaWQgPSAkdGhpcy0+cXVlcnlfb25lKCcKICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIG9jcl9pZAogICAgICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl91c2FfaWRfcmVmID0gXCclZFwnCiAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3Jfc2VydmVyX3VyaSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJG9wdGlvbnNbJ3NlcnZlcl91cmknXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRvY3JfaWQgPSAkdGhpcy0+cXVlcnlfb25lKCcKICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIG9jcl9pZAogICAgICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl91c2FfaWRfcmVmID0gXCclZFwnCiAgICAgICAgICAgICAgICAgICAgICAgICcsICRjb25zdW1lcl9rZXksICR1c2VyX2lkKTsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkb2NyX2lkKSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIHNlcnZlciBhc3NvY2lhdGVkIHdpdGggY29uc3VtZXJfa2V5ICInLiRjb25zdW1lcl9rZXkuJyInKTsKICAgICAgICB9CgogICAgICAgIC8vIE5hbWVkIHRva2VucywgdW5pcXVlIHBlciB1c2VyL2NvbnN1bWVyIGtleQogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snbmFtZSddKSAmJiAkb3B0aW9uc1snbmFtZSddICE9ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJG5hbWUgPSAkb3B0aW9uc1snbmFtZSddOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkbmFtZSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgLy8gRGVsZXRlIGFueSBvbGQgdG9rZW5zIHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgbmFtZSBmb3IgdGhpcyB1c2VyL3NlcnZlciBjb21iaW5hdGlvbgogICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gb2F1dGhfY29uc3VtZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICBXSEVSRSBvY3Rfb2NyX2lkX3JlZiA9ICVkCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3VzYV9pZF9yZWYgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHlwZTo6dGV4dCA9IExPV0VSKFwnJXNcJyk6OnRleHQKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfbmFtZSAgICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICcsCiAgICAgICAgICAgICAgICAgICAgJG9jcl9pZCwKICAgICAgICAgICAgICAgICAgICAkdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAkdG9rZW5fdHlwZSwKICAgICAgICAgICAgICAgICAgICAkbmFtZSk7CgogICAgICAgIC8vIEluc2VydCB0aGUgbmV3IHRva2VuCiAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgSU5TRVJUIElOVE8KICAgICAgICAgICAgICAgb2F1dGhfY29uc3VtZXJfdG9rZW4oCiAgICAgICAgICAgICAgICAgICBvY3Rfb2NyX2lkX3JlZiwKICAgICAgICAgICAgICAgICAgIG9jdF91c2FfaWRfcmVmLAogICAgICAgICAgICAgICAgICAgb2N0X25hbWUsCiAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW4sCiAgICAgICAgICAgICAgICAgICBvY3RfdG9rZW5fc2VjcmV0LAogICAgICAgICAgICAgICAgICAgb2N0X3Rva2VuX3R5cGUsCiAgICAgICAgICAgICAgICAgICBvY3RfdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgb2N0X3Rva2VuX3R0bAogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgIFZBTFVFUyAoJWQsJWQsXCclc1wnLFwnJXNcJyxcJyVzXCcsXCclc1wnLE5PVygpLCcuJHR0bC4nKScsCiAgICAgICAgICAgICAgICAgICAgJG9jcl9pZCwKICAgICAgICAgICAgICAgICAgICAkdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAkbmFtZSwKICAgICAgICAgICAgICAgICAgICAkdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgJHRva2VuX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAkdG9rZW5fdHlwZSk7CgogICAgICAgIGlmICghJHRoaXMtPnF1ZXJ5X2FmZmVjdGVkX3Jvd3MoKSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1JlY2VpdmVkIGR1cGxpY2F0ZSB0b2tlbiAiJy4kdG9rZW4uJyIgZm9yIHRoZSBzYW1lIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlIGEgc2VydmVyIGtleS4gIFRoaXMgcmVtb3ZlcyBhY2Nlc3MgdG8gdGhhdCBzaXRlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CiAgICAgKiBAcGFyYW0gaW50IHVzZXJfaWQgICAgdXNlciByZWdpc3RlcmluZyB0aGlzIHNlcnZlcgogICAgICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlU2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQogICAgewogICAgICAgIGlmICgkdXNlcl9pc19hZG1pbikKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICBXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgKG9jcl91c2FfaWRfcmVmID0gXCclZFwnIE9SIG9jcl91c2FfaWRfcmVmIElTIE5VTEwpCiAgICAgICAgICAgICAgICAgICAgJywgJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl91c2FfaWRfcmVmICAgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIEdldCBhIHNlcnZlciBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeSB1c2luZyB0aGUgY29uc3VtZXIga2V5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZAogICAgICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbiAob3B0aW9uYWwpCiAgICAgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHNlcnZlciBpcyBub3QgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKICAgIHsKICAgICAgICAkciA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgU0VMRUNUICAgIG9jcl9pZCAgICAgICAgICAgICAgICAgICAgYXMgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jcl91c2FfaWRfcmVmICAgICAgICAgICAgYXMgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX2tleSAgICAgICAgIGFzIGNvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX3NlY3JldCAgICAgYXMgY29uc3VtZXJfc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2lnbmF0dXJlX21ldGhvZHMgICAgYXMgc2lnbmF0dXJlX21ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zZXJ2ZXJfdXJpICAgICAgICAgICAgYXMgc2VydmVyX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3JlcXVlc3RfdG9rZW5fdXJpICAgIGFzIHJlcXVlc3RfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICBvY3JfYXV0aG9yaXplX3VyaSAgICAgICAgYXMgYXV0aG9yaXplX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2FjY2Vzc190b2tlbl91cmkgICAgYXMgYWNjZXNzX3Rva2VuX3VyaQogICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICBBTkQgKG9jcl91c2FfaWRfcmVmID0gXCclZFwnIE9SIG9jcl91c2FfaWRfcmVmIElTIE5VTEwpCiAgICAgICAgICAgICAgICAnLCAgICAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CgogICAgICAgIGlmIChlbXB0eSgkcikpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXIgd2l0aCBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIiBoYXMgYmVlbiByZWdpc3RlcmVkIChmb3IgdGhpcyB1c2VyKScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSAmJiAhZW1wdHkoJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywkclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRyWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKCiAgICAvKioKICAgICAqIEZpbmQgdGhlIHNlcnZlciBkZXRhaWxzIHRoYXQgbWlnaHQgYmUgdXNlZCBmb3IgYSByZXF1ZXN0CiAgICAgKgogICAgICogVGhlIGNvbnN1bWVyX2tleSBtdXN0IGJlbG9uZyB0byB0aGUgdXNlciBvciBiZSBwdWJsaWMgKHVzZXIgaWQgaXMgbnVsbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHVyaSAgICB1cmkgb2YgdGhlIHNlcnZlcgogICAgICogQHBhcmFtIGludCB1c2VyX2lkICAgIGlkIG9mIHRoZSBsb2dnZWQgb24gdXNlcgogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyRm9yVXJpICggJHVyaSwgJHVzZXJfaWQgKQogICAgewogICAgICAgIC8vIEZpbmQgYSBjb25zdW1lciBrZXkgYW5kIHRva2VuIGZvciB0aGUgZ2l2ZW4gdXJpCiAgICAgICAgJHBzICAgICAgICA9IHBhcnNlX3VybCgkdXJpKTsKICAgICAgICAkaG9zdCAgICA9IGlzc2V0KCRwc1snaG9zdCddKSA/ICRwc1snaG9zdCddIDogJ2xvY2FsaG9zdCc7CiAgICAgICAgJHBhdGggICAgPSBpc3NldCgkcHNbJ3BhdGgnXSkgPyAkcHNbJ3BhdGgnXSA6ICcnOwoKICAgICAgICBpZiAoZW1wdHkoJHBhdGgpIHx8IHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykKICAgICAgICB7CiAgICAgICAgICAgICRwYXRoIC49ICcvJzsKICAgICAgICB9CgogICAgICAgIC8vIFRoZSBvd25lciBvZiB0aGUgY29uc3VtZXJfa2V5IGlzIGVpdGhlciB0aGUgdXNlciBvciBub2JvZHkgKHB1YmxpYyBjb25zdW1lciBrZXkpCiAgICAgICAgJHNlcnZlciA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgIFNFTEVDVCAgICBvY3JfaWQgICAgICAgICAgICAgICAgICAgIGFzIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3VzYV9pZF9yZWYgICAgICAgICAgICBhcyB1c2VyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX2tleSAgICAgICAgYXMgY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX3NlY3JldCAgICAgICAgYXMgY29uc3VtZXJfc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NpZ25hdHVyZV9tZXRob2RzICAgIGFzIHNpZ25hdHVyZV9tZXRob2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmkgICAgICAgICAgICBhcyBzZXJ2ZXJfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3JlcXVlc3RfdG9rZW5fdXJpICAgIGFzIHJlcXVlc3RfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2F1dGhvcml6ZV91cmkgICAgICAgIGFzIGF1dGhvcml6ZV91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfYWNjZXNzX3Rva2VuX3VyaSAgICBhcyBhY2Nlc3NfdG9rZW5fdXJpCiAgICAgICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jcl9zZXJ2ZXJfdXJpX2hvc3QgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3Jfc2VydmVyX3VyaV9wYXRoID0gU1VCU1RSKFwnJXNcJywgMSwgTEVOR1RIKG9jcl9zZXJ2ZXJfdXJpX3BhdGgpKQogICAgICAgICAgICAgICAgICAgICAgQU5EIChvY3JfdXNhX2lkX3JlZiA9IFwnJXNcJyBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMKQogICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIG9jcl91c2FfaWRfcmVmIERFU0MsIGNvbnN1bWVyX3NlY3JldCBERVNDLCBMRU5HVEgob2NyX3NlcnZlcl91cmlfcGF0aCkgREVTQwogICAgICAgICAgICAgICAgICAgIExJTUlUIDEKICAgICAgICAgICAgICAgICAgICAnLCAkaG9zdCwgJHBhdGgsICR1c2VyX2lkCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgaWYgKGVtcHR5KCRzZXJ2ZXIpKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc2VydmVyIGF2YWlsYWJsZSBmb3IgJy4kdXJpKTsKICAgICAgICB9CiAgICAgICAgJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSA9IGV4cGxvZGUoJywnLCAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKTsKICAgICAgICByZXR1cm4gJHNlcnZlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGxpc3Qgb2YgYWxsIHNlcnZlciB0b2tlbiB0aGlzIHVzZXIgaGFzIGFjY2VzcyB0by4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IHVzcl9pZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFNlcnZlclRva2VucyAoICR1c2VyX2lkICkKICAgIHsKICAgICAgICAkdHMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb2NyX2NvbnN1bWVyX2tleSAgICAgICAgYXMgY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX3NlY3JldCAgICAgICAgYXMgY29uc3VtZXJfc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0X2lkICAgICAgICAgICAgICAgICAgICBhcyB0b2tlbl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF90b2tlbiAgICAgICAgICAgICAgICBhcyB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF90b2tlbl9zZWNyZXQgICAgICAgIGFzIHRva2VuX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF91c2FfaWRfcmVmICAgICAgICAgICAgYXMgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zaWduYXR1cmVfbWV0aG9kcyAgICBhcyBzaWduYXR1cmVfbWV0aG9kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zZXJ2ZXJfdXJpICAgICAgICAgICAgYXMgc2VydmVyX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zZXJ2ZXJfdXJpX2hvc3QgICAgICAgIGFzIHNlcnZlcl91cmlfaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zZXJ2ZXJfdXJpX3BhdGggICAgICAgIGFzIHNlcnZlcl91cmlfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9yZXF1ZXN0X3Rva2VuX3VyaSAgICBhcyByZXF1ZXN0X3Rva2VuX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9hdXRob3JpemVfdXJpICAgICAgICBhcyBhdXRob3JpemVfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2FjY2Vzc190b2tlbl91cmkgICAgYXMgYWNjZXNzX3Rva2VuX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF90aW1lc3RhbXAgICAgICAgICAgICBhcyB0aW1lc3RhbXAKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX2NvbnN1bWVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAogICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jdF91c2FfaWRfcmVmID0gXCclZFwnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuX3R0bCAgPj0gTk9XKCkKICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBvY3Jfc2VydmVyX3VyaV9ob3N0LCBvY3Jfc2VydmVyX3VyaV9wYXRoCiAgICAgICAgICAgICAgICAgICAgJywgJHVzZXJfaWQpOwogICAgICAgIHJldHVybiAkdHM7CiAgICB9CgogICAgIC8qKgogICAgICogQ291bnQgaG93IG1hbnkgdG9rZW5zIHdlIGhhdmUgZm9yIHRoZSBnaXZlbiBzZXJ2ZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50U2VydmVyVG9rZW5zICggJGNvbnN1bWVyX2tleSApCiAgICB7CiAgICAgICAgJGNvdW50ID0gJHRoaXMtPnF1ZXJ5X29uZSgnCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIENPVU5UKG9jdF9pZCkKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAogICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jdF90b2tlbl90eXBlICAgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9jdF90b2tlbl90dGwgICAgPj0gTk9XKCkKICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5KTsKCiAgICAgICAgcmV0dXJuICRjb3VudDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHNwZWNpZmljIHNlcnZlciB0b2tlbiBmb3IgdGhlIGdpdmVuIHVzZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIHN0cmluZyB0b2tlbgogICAgICogQHBhcmFtIGludCB1c2VyX2lkCiAgICAgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIG5vIHN1Y2ggdG9rZW4gZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCApCiAgICB7CiAgICAgICAgJHRzID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUICAgIG9jcl9jb25zdW1lcl9rZXkgICAgICAgIGFzIGNvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9jb25zdW1lcl9zZWNyZXQgICAgICAgIGFzIGNvbnN1bWVyX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF90b2tlbiAgICAgICAgICAgICAgICBhcyB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF90b2tlbl9zZWNyZXQgICAgICAgIGFzIHRva2VuX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdF91c2FfaWRfcmVmICAgICAgICAgICAgYXMgdXNyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NpZ25hdHVyZV9tZXRob2RzICAgIGFzIHNpZ25hdHVyZV9tZXRob2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmkgICAgICAgICAgICBhcyBzZXJ2ZXJfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmlfaG9zdCAgICAgICAgYXMgc2VydmVyX3VyaV9ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmlfcGF0aCAgICAgICAgYXMgc2VydmVyX3VyaV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3JlcXVlc3RfdG9rZW5fdXJpICAgIGFzIHJlcXVlc3RfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2F1dGhvcml6ZV91cmkgICAgICAgIGFzIGF1dGhvcml6ZV91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfYWNjZXNzX3Rva2VuX3VyaSAgICBhcyBhY2Nlc3NfdG9rZW5fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0X3RpbWVzdGFtcCAgICAgICAgICAgIGFzIHRpbWVzdGFtcAogICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gb2F1dGhfY29uc3VtZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9jdF91c2FfaWRfcmVmICAgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHlwZSAgID0gXCdhY2Nlc3NcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9jdF90b2tlbiAgICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW5fdHRsICAgID49IE5PVygpCiAgICAgICAgICAgICAgICAgICAgJywgJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR0b2tlbik7CgogICAgICAgIGlmIChlbXB0eSgkdHMpKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc3VjaCBjb25zdW1lciBrZXkgKCcuJGNvbnN1bWVyX2tleS4nKSBhbmQgdG9rZW4gKCcuJHRva2VuLicpIGNvbWJpbmF0aW9uIGZvciB1c2VyICInLiR1c2VyX2lkLiciJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdHM7CiAgICB9CgoKICAgIC8qKgogICAgICogRGVsZXRlIGEgdG9rZW4gd2Ugb2J0YWluZWQgZnJvbSBhIHNlcnZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIHN0cmluZyB0b2tlbgogICAgICogQHBhcmFtIGludCB1c2VyX2lkCiAgICAgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQogICAgewogICAgICAgIGlmICgkdXNlcl9pc19hZG1pbikKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBvYXV0aF9jb25zdW1lcl90b2tlbgogICAgICAgICAgICAgICAgICAgIFVTSU5HIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICBXSEVSRQogICAgICAgICAgICAgICAgICAgIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCiAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl9jb25zdW1lcl9rZXkgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuICAgICAgICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICcsICRjb25zdW1lcl9rZXksICR0b2tlbik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBvYXV0aF9jb25zdW1lcl90b2tlbgogICAgICAgICAgICAgICAgICAgIFVTSU5HIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICBXSEVSRQogICAgICAgICAgICAgICAgICAgIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCiAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl9jb25zdW1lcl9rZXkgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3Rva2VuICAgICAgICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICBBTkQgb2N0X3VzYV9pZF9yZWYgICAgPSBcJyVkXCcKICAgICAgICAgICAgICAgICcsICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHVzZXJfaWQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdHRsIG9mIGEgc2VydmVyIGFjY2VzcyB0b2tlbi4gIFRoaXMgaXMgZG9uZSB3aGVuIHRoZQogICAgICogc2VydmVyIHJlY2VpdmVzIGEgdmFsaWQgcmVxdWVzdCB3aXRoIGEgeG9hdXRoX3Rva2VuX3R0bCBwYXJhbWV0ZXIgaW4gaXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEBwYXJhbSBpbnQgdG9rZW5fdHRsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTZXJ2ZXJUb2tlblR0bCAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R0bCApCiAgICB7CiAgICAgICAgaWYgKCR0b2tlbl90dGwgPD0gMCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIEltbWVkaWF0ZSBkZWxldGUgd2hlbiB0aGUgdG9rZW4gaXMgcGFzdCBpdHMgdHRsCiAgICAgICAgICAgICR0aGlzLT5kZWxldGVTZXJ2ZXJUb2tlbigkY29uc3VtZXJfa2V5LCAkdG9rZW4sIDAsIHRydWUpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAvLyBTZXQgbWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4KICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFIG9hdXRoX2NvbnN1bWVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBvc3RfdG9rZW5fdHRsID0gKE5PVygpICsgSU5URVJWQUwgXCclZCBTRUNPTkRcJykKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3Rfb2NyX2lkX3JlZiAgICA9IG9jcl9pZAogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW4gICAgICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgICcsICR0b2tlbl90dGwsICRjb25zdW1lcl9rZXksICR0b2tlbik7CgogICAgICAgICAgICAvLyBTZXQgbWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4KICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBvc3RfdG9rZW5fdHRsID0gKE5PVygpICsgSU5URVJWQUwgXCclZCBTRUNPTkRcJykKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3Rfb2NyX2lkX3JlZiAgICA9IG9jcl9pZAogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvY3RfdG9rZW4gICAgICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAnLCAkdG9rZW5fdHRsLCAkY29uc3VtZXJfa2V5LCAkdG9rZW4pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGxpc3Qgb2YgYWxsIGNvbnN1bWVycyBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeS4KICAgICAqIFRoZSBjb25zdW1lciBrZXlzIGJlbG9uZyB0byB0aGUgdXNlciBvciBhcmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBxICAgIHF1ZXJ5IHRlcm0KICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFNlcnZlcnMgKCAkcSA9ICcnLCAkdXNlcl9pZCApCiAgICB7CiAgICAgICAgJHEgICAgPSB0cmltKHN0cl9yZXBsYWNlKCclJywgJycsICRxKSk7CiAgICAgICAgJGFyZ3MgPSBhcnJheSgpOwoKICAgICAgICBpZiAoIWVtcHR5KCRxKSkKICAgICAgICB7CiAgICAgICAgICAgICR3aGVyZSA9ICcgV0hFUkUgKCAgICBvY3JfY29uc3VtZXJfa2V5IGxpa2UgXCclJSVzJSVcJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1Igb2NyX3NlcnZlcl91cmkgbGlrZSBcJyUlJXMlJVwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUiBvY3Jfc2VydmVyX3VyaV9ob3N0IGxpa2UgXCclJSVzJSVcJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1Igb2NyX3NlcnZlcl91cmlfcGF0aCBsaWtlIFwnJSUlcyUlXCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgKG9jcl91c2FfaWRfcmVmID0gXCclZFwnIE9SIG9jcl91c2FfaWRfcmVmIElTIE5VTEwpCiAgICAgICAgICAgICAgICAgICAgJzsKCiAgICAgICAgICAgICRhcmdzW10gPSAkcTsKICAgICAgICAgICAgJGFyZ3NbXSA9ICRxOwogICAgICAgICAgICAkYXJnc1tdID0gJHE7CiAgICAgICAgICAgICRhcmdzW10gPSAkcTsKICAgICAgICAgICAgJGFyZ3NbXSA9ICR1c2VyX2lkOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkd2hlcmUgID0gJyBXSEVSRSBvY3JfdXNhX2lkX3JlZiA9IFwnJWRcJyBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMJzsKICAgICAgICAgICAgJGFyZ3NbXSA9ICR1c2VyX2lkOwogICAgICAgIH0KCiAgICAgICAgJHNlcnZlcnMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb2NyX2lkICAgICAgICAgICAgICAgICAgICBhcyBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl91c2FfaWRfcmVmICAgICAgICAgICAgYXMgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9jb25zdW1lcl9rZXkgICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfY29uc3VtZXJfc2VjcmV0ICAgICBhcyBjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2lnbmF0dXJlX21ldGhvZHMgICAgYXMgc2lnbmF0dXJlX21ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2VydmVyX3VyaSAgICAgICAgICAgIGFzIHNlcnZlcl91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2VydmVyX3VyaV9ob3N0ICAgICAgICBhcyBzZXJ2ZXJfdXJpX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Jfc2VydmVyX3VyaV9wYXRoICAgICAgICBhcyBzZXJ2ZXJfdXJpX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfcmVxdWVzdF90b2tlbl91cmkgICAgYXMgcmVxdWVzdF90b2tlbl91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3JfYXV0aG9yaXplX3VyaSAgICAgICAgYXMgYXV0aG9yaXplX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9hY2Nlc3NfdG9rZW5fdXJpICAgIGFzIGFjY2Vzc190b2tlbl91cmkKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgJy4kd2hlcmUuJwogICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIG9jcl9zZXJ2ZXJfdXJpX2hvc3QsIG9jcl9zZXJ2ZXJfdXJpX3BhdGgKICAgICAgICAgICAgICAgICAgICAnLCAkYXJncyk7CiAgICAgICAgcmV0dXJuICRzZXJ2ZXJzOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgb3IgdXBkYXRlIGEgc2VydmVyIGZvciBvdXIgc2l0ZSAod2Ugd2lsbCBiZSB0aGUgY29uc3VtZXIpCiAgICAgKgogICAgICogKFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IGF0IHRoZSBjb25zdW1lcnMsIHJlZ2lzdGVyaW5nIHNlcnZlcnMgOy0pICkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgc2VydmVyCiAgICAgKiBAcGFyYW0gaW50IHVzZXJfaWQgICAgdXNlciByZWdpc3RlcmluZyB0aGlzIHNlcnZlcgogICAgICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbgogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBmaWVsZHMgYXJlIG1pc3Npbmcgb3Igb24gZHVwbGljYXRlIGNvbnN1bWVyX2tleQogICAgICogQHJldHVybiBjb25zdW1lcl9rZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZVNlcnZlciAoICRzZXJ2ZXIsICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKICAgIHsKICAgICAgICBmb3JlYWNoIChhcnJheSgnY29uc3VtZXJfa2V5JywgJ3NlcnZlcl91cmknKSBhcyAkZikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkc2VydmVyWyRmXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1RoZSBmaWVsZCAiJy4kZi4nIiBtdXN0IGJlIHNldCBhbmQgbm9uIGVtcHR5Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJHNlcnZlclsnaWQnXSkpCiAgICAgICAgewogICAgICAgICAgICAkZXhpc3RzID0gJHRoaXMtPnF1ZXJ5X29uZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBvY3JfaWQKICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9jcl9pZCA8PiAlZAogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAob2NyX3VzYV9pZF9yZWYgPSBcJyVkXCcgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgJywgJHNlcnZlclsnY29uc3VtZXJfa2V5J10sICRzZXJ2ZXJbJ2lkJ10sICR1c2VyX2lkKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJGV4aXN0cyA9ICR0aGlzLT5xdWVyeV9vbmUoJwogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1Qgb2NyX2lkCiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAob2NyX3VzYV9pZF9yZWYgPSBcJyVkXCcgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgJywgJHNlcnZlclsnY29uc3VtZXJfa2V5J10sICR1c2VyX2lkKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZXhpc3RzKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHNlcnZlciB3aXRoIGtleSAiJy4kc2VydmVyWydjb25zdW1lcl9rZXknXS4nIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQnKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IHBhcnNlX3VybCgkc2VydmVyWydzZXJ2ZXJfdXJpJ10pOwogICAgICAgICRob3N0ICA9IChpc3NldCgkcGFydHNbJ2hvc3QnXSkgPyAkcGFydHNbJ2hvc3QnXSA6ICdsb2NhbGhvc3QnKTsKICAgICAgICAkcGF0aCAgPSAoaXNzZXQoJHBhcnRzWydwYXRoJ10pID8gJHBhcnRzWydwYXRoJ10gOiAnLycpOwoKICAgICAgICBpZiAoaXNzZXQoJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBzdHJ0b3VwcGVyKGltcGxvZGUoJywnLCAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgdGhlbiB0aGUgdXNlciBjYW4gdXBkYXRlIHRoZSB1c2VyX2lkIG9mIHRoaXMgcmVjb3JkCiAgICAgICAgaWYgKCR1c2VyX2lzX2FkbWluICYmIGFycmF5X2tleV9leGlzdHMoJ3VzZXJfaWQnLCAkc2VydmVyKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpc19udWxsKCRzZXJ2ZXJbJ3VzZXJfaWQnXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR1cGRhdGVfdXNlciA9ICAnLCBvY3JfdXNhX2lkX3JlZiA9IE5VTEwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHVwZGF0ZV91c2VyID0gICcsIG9jcl91c2FfaWRfcmVmID0gXCcnLiBpbnR2YWwoJHNlcnZlclsndXNlcl9pZCddKSAuICdcJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHVwZGF0ZV91c2VyID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRzZXJ2ZXJbJ2lkJ10pKQogICAgICAgIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBjYW4gdXBkYXRlIHRoaXMgc2VydmVyIGRlZmluaXRpb24KICAgICAgICAgICAgaWYgKCEkdXNlcl9pc19hZG1pbikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJG9jcl91c2FfaWRfcmVmID0gJHRoaXMtPnF1ZXJ5X29uZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBvY3JfdXNhX2lkX3JlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9jcl9pZCA9ICVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICRzZXJ2ZXJbJ2lkJ10pOwoKICAgICAgICAgICAgICAgIGlmICgkb2NyX3VzYV9pZF9yZWYgIT0gJHVzZXJfaWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHVzZXIgIicuJHVzZXJfaWQuJyIgaXMgbm90IGFsbG93ZWQgdG8gdXBkYXRlIHRoaXMgc2VydmVyJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29uc3VtZXIgcmVnaXN0cmF0aW9uCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgU0VUIG9jcl9jb25zdW1lcl9rZXkgICAgICAgID0gXCclc1wnLAogICAgICAgICAgICAgICAgICAgICAgICBvY3JfY29uc3VtZXJfc2VjcmV0ICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmkgICAgICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmlfaG9zdCAgICAgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zZXJ2ZXJfdXJpX3BhdGggICAgID0gXCclc1wnLAogICAgICAgICAgICAgICAgICAgICAgICBvY3JfdGltZXN0YW1wICAgICAgICAgICA9IE5PVygpLAogICAgICAgICAgICAgICAgICAgICAgICBvY3JfcmVxdWVzdF90b2tlbl91cmkgICAgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9hdXRob3JpemVfdXJpICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICAgICAgb2NyX2FjY2Vzc190b2tlbl91cmkgICAgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgIG9jcl9zaWduYXR1cmVfbWV0aG9kcyAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAnLiR1cGRhdGVfdXNlci4nCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb2NyX2lkID0gJWQKICAgICAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ2NvbnN1bWVyX2tleSddLAogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ2NvbnN1bWVyX3NlY3JldCddLAogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ3NlcnZlcl91cmknXSwKICAgICAgICAgICAgICAgICAgICBzdHJ0b2xvd2VyKCRob3N0KSwKICAgICAgICAgICAgICAgICAgICAkcGF0aCwKICAgICAgICAgICAgICAgICAgICBpc3NldCgkc2VydmVyWydyZXF1ZXN0X3Rva2VuX3VyaSddKSA/ICRzZXJ2ZXJbJ3JlcXVlc3RfdG9rZW5fdXJpJ10gOiAnJywKICAgICAgICAgICAgICAgICAgICBpc3NldCgkc2VydmVyWydhdXRob3JpemVfdXJpJ10pICAgICA/ICRzZXJ2ZXJbJ2F1dGhvcml6ZV91cmknXSAgICAgOiAnJywKICAgICAgICAgICAgICAgICAgICBpc3NldCgkc2VydmVyWydhY2Nlc3NfdG9rZW5fdXJpJ10pICA/ICRzZXJ2ZXJbJ2FjY2Vzc190b2tlbl91cmknXSAgOiAnJywKICAgICAgICAgICAgICAgICAgICAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddLAogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ2lkJ10KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkdXBkYXRlX3VzZXJfZmllbGQgPSAnJzsKICAgICAgICAgICAgJHVwZGF0ZV91c2VyX3ZhbHVlID0gJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkdXBkYXRlX3VzZXIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBQZXIgZGVmYXVsdCB0aGUgdXNlciBvd25pbmcgdGhlIGtleSBpcyB0aGUgdXNlciByZWdpc3RlcmluZyB0aGUga2V5CiAgICAgICAgICAgICAgICAkdXBkYXRlX3VzZXJfZmllbGQgPSAgJywgb2NyX3VzYV9pZF9yZWYnOwogICAgICAgICAgICAgICAgJHVwZGF0ZV91c2VyX3ZhbHVlID0gJywgJyAuIGludHZhbCgkdXNlcl9pZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeSAoCiAgICAgICAgICAgICAgICAgICAgb2NyX2NvbnN1bWVyX2tleSAgICAgLAogICAgICAgICAgICAgICAgICAgIG9jcl9jb25zdW1lcl9zZWNyZXQgICwKICAgICAgICAgICAgICAgICAgICBvY3Jfc2VydmVyX3VyaSAgICAgICAgICwKICAgICAgICAgICAgICAgICAgICBvY3Jfc2VydmVyX3VyaV9ob3N0ICAsCiAgICAgICAgICAgICAgICAgICAgb2NyX3NlcnZlcl91cmlfcGF0aCAgLAogICAgICAgICAgICAgICAgICAgIG9jcl90aW1lc3RhbXAgICAgICAgICwKICAgICAgICAgICAgICAgICAgICBvY3JfcmVxdWVzdF90b2tlbl91cmksCiAgICAgICAgICAgICAgICAgICAgb2NyX2F1dGhvcml6ZV91cmkgICAgICwKICAgICAgICAgICAgICAgICAgICBvY3JfYWNjZXNzX3Rva2VuX3VyaSAsCiAgICAgICAgICAgICAgICAgICAgb2NyX3NpZ25hdHVyZV9tZXRob2RzJyAuICR1cGRhdGVfdXNlcl9maWVsZCAuICcKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIFZBTFVFUyAoXCclc1wnLCBcJyVzXCcsIFwnJXNcJywgXCclc1wnLCBcJyVzXCcsIE5PVygpLCBcJyVzXCcsIFwnJXNcJywgXCclc1wnLCBcJyVzXCcnLiAkdXBkYXRlX3VzZXJfdmFsdWUgLiAnKScsCiAgICAgICAgICAgICAgICAgICAgJHNlcnZlclsnY29uc3VtZXJfa2V5J10sCiAgICAgICAgICAgICAgICAgICAgJHNlcnZlclsnY29uc3VtZXJfc2VjcmV0J10sCiAgICAgICAgICAgICAgICAgICAgJHNlcnZlclsnc2VydmVyX3VyaSddLAogICAgICAgICAgICAgICAgICAgIHN0cnRvbG93ZXIoJGhvc3QpLAogICAgICAgICAgICAgICAgICAgICRwYXRoLAogICAgICAgICAgICAgICAgICAgIGlzc2V0KCRzZXJ2ZXJbJ3JlcXVlc3RfdG9rZW5fdXJpJ10pID8gJHNlcnZlclsncmVxdWVzdF90b2tlbl91cmknXSA6ICcnLAogICAgICAgICAgICAgICAgICAgIGlzc2V0KCRzZXJ2ZXJbJ2F1dGhvcml6ZV91cmknXSkgICAgID8gJHNlcnZlclsnYXV0aG9yaXplX3VyaSddICAgICA6ICcnLAogICAgICAgICAgICAgICAgICAgIGlzc2V0KCRzZXJ2ZXJbJ2FjY2Vzc190b2tlbl91cmknXSkgID8gJHNlcnZlclsnYWNjZXNzX3Rva2VuX3VyaSddICA6ICcnLAogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10KICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgJG9jcl9pZCA9ICR0aGlzLT5xdWVyeV9pbnNlcnRfaWQoJ29hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5JywgJ29jcl9pZCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHNlcnZlclsnY29uc3VtZXJfa2V5J107CiAgICB9CgoKICAgIC8qKgogICAgICogSW5zZXJ0L3VwZGF0ZSBhIG5ldyBjb25zdW1lciB3aXRoIHRoaXMgc2VydmVyICh3ZSB3aWxsIGJlIHRoZSBzZXJ2ZXIpCiAgICAgKiBXaGVuIHRoaXMgaXMgYSBuZXcgY29uc3VtZXIsIHRoZW4gYWxzbyBnZW5lcmF0ZSB0aGUgY29uc3VtZXIga2V5IGFuZCBzZWNyZXQuCiAgICAgKiBOZXZlciB1cGRhdGVzIHRoZSBjb25zdW1lciBrZXkgYW5kIHNlY3JldC4KICAgICAqIFdoZW4gdGhlIGlkIGlzIHNldCwgdGhlbiB0aGUga2V5IGFuZCBzZWNyZXQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBlbnRyeQogICAgICogYmVpbmcgdXBkYXRlZC4KICAgICAqCiAgICAgKiAoVGhpcyBpcyB0aGUgcmVnaXN0cnkgYXQgdGhlIHNlcnZlciwgcmVnaXN0ZXJpbmcgY29uc3VtZXJzIDstKSApCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5IGNvbnN1bWVyCiAgICAgKiBAcGFyYW0gaW50IHVzZXJfaWQgICAgdXNlciByZWdpc3RlcmluZyB0aGlzIGNvbnN1bWVyCiAgICAgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluCiAgICAgKiBAcmV0dXJuIHN0cmluZyBjb25zdW1lciBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUNvbnN1bWVyICggJGNvbnN1bWVyLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApCiAgICB7CiAgICAgICAgaWYgKCEkdXNlcl9pc19hZG1pbikKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5KCdyZXF1ZXN0ZXJfbmFtZScsICdyZXF1ZXN0ZXJfZW1haWwnKSBhcyAkZikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRjb25zdW1lclskZl0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1RoZSBmaWVsZCAiJy4kZi4nIiBtdXN0IGJlIHNldCBhbmQgbm9uIGVtcHR5Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJGNvbnN1bWVyWydpZCddKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkY29uc3VtZXJbJ2NvbnN1bWVyX2tleSddKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGZpZWxkICJjb25zdW1lcl9rZXkiIG11c3QgYmUgc2V0IGFuZCBub24gZW1wdHknKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISR1c2VyX2lzX2FkbWluICYmIGVtcHR5KCRjb25zdW1lclsnY29uc3VtZXJfc2VjcmV0J10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaGUgZmllbGQgImNvbnN1bWVyX3NlY3JldCIgbXVzdCBiZSBzZXQgYW5kIG5vbiBlbXB0eScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGNhbiB1cGRhdGUgdGhpcyBzZXJ2ZXIgZGVmaW5pdGlvbgogICAgICAgICAgICBpZiAoISR1c2VyX2lzX2FkbWluKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3NyX3VzYV9pZF9yZWYgPSAkdGhpcy0+cXVlcnlfb25lKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIG9zcl91c2FfaWRfcmVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zcl9pZCA9ICVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICRjb25zdW1lclsnaWQnXSk7CgogICAgICAgICAgICAgICAgaWYgKCRvc3JfdXNhX2lkX3JlZiAhPSAkdXNlcl9pZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaGUgdXNlciAiJy4kdXNlcl9pZC4nIiBpcyBub3QgYWxsb3dlZCB0byB1cGRhdGUgdGhpcyBjb25zdW1lcicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVXNlciBpcyBhbiBhZG1pbiwgYWxsb3cgYSBrZXkgb3duZXIgdG8gYmUgY2hhbmdlZCBvciBrZXkgdG8gYmUgc2hhcmVkCiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndXNlcl9pZCcsJGNvbnN1bWVyKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbnVsbCgkY29uc3VtZXJbJ3VzZXJfaWQnXSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUIG9zcl91c2FfaWRfcmVmID0gTlVMTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3NyX2lkID0gJWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICRjb25zdW1lclsnaWQnXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUgb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgb3NyX3VzYV9pZF9yZWYgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zcl9pZCA9ICVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJbJ3VzZXJfaWQnXSwgJGNvbnN1bWVyWydpZCddKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICBVUERBVEUgb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICBTRVQgb3NyX3JlcXVlc3Rlcl9uYW1lICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfcmVxdWVzdGVyX2VtYWlsICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfY2FsbGJhY2tfdXJpICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdXJpICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdGl0bGUgICAgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX2Rlc2NyICAgID0gXCclc1wnLAogICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl9ub3RlcyAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdHlwZSAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fY29tbWVyY2lhbCA9IElGKCVkLFwnMVwnLFwnMFwnKSwKICAgICAgICAgICAgICAgICAgICBvc3JfdGltZXN0YW1wICAgICAgICAgICAgPSBOT1coKQogICAgICAgICAgICAgICAgV0hFUkUgb3NyX2lkICAgICAgICAgICAgICA9ICVkCiAgICAgICAgICAgICAgICAgIEFORCBvc3JfY29uc3VtZXJfa2V5ICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgIEFORCBvc3JfY29uc3VtZXJfc2VjcmV0ID0gXCclc1wnCiAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgJGNvbnN1bWVyWydyZXF1ZXN0ZXJfbmFtZSddLAogICAgICAgICAgICAgICAgJGNvbnN1bWVyWydyZXF1ZXN0ZXJfZW1haWwnXSwKICAgICAgICAgICAgICAgIGlzc2V0KCRjb25zdW1lclsnY2FsbGJhY2tfdXJpJ10pICAgICAgICAgPyAkY29uc3VtZXJbJ2NhbGxiYWNrX3VyaSddICAgICAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl91cmknXSkgICAgID8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl91cmknXSAgICAgICAgICAgICAgOiAnJywKICAgICAgICAgICAgICAgIGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSkgICAgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3RpdGxlJ10gICAgICAgICAgOiAnJywKICAgICAgICAgICAgICAgIGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fZGVzY3InXSkgICAgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ10gICAgICAgICAgOiAnJywKICAgICAgICAgICAgICAgIGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fbm90ZXMnXSkgICAgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX25vdGVzJ10gICAgICAgICAgOiAnJywKICAgICAgICAgICAgICAgIGlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fdHlwZSddKSAgICAgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3R5cGUnXSAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9jb21tZXJjaWFsJ10pID8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9jb21tZXJjaWFsJ10gOiAwLAogICAgICAgICAgICAgICAgJGNvbnN1bWVyWydpZCddLAogICAgICAgICAgICAgICAgJGNvbnN1bWVyWydjb25zdW1lcl9rZXknXSwKICAgICAgICAgICAgICAgICRjb25zdW1lclsnY29uc3VtZXJfc2VjcmV0J10KICAgICAgICAgICAgICAgICk7CgoKICAgICAgICAgICAgJGNvbnN1bWVyX2tleSA9ICRjb25zdW1lclsnY29uc3VtZXJfa2V5J107CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRjb25zdW1lcl9rZXkgICAgPSAkdGhpcy0+Z2VuZXJhdGVLZXkodHJ1ZSk7CiAgICAgICAgICAgICRjb25zdW1lcl9zZWNyZXQ9ICR0aGlzLT5nZW5lcmF0ZUtleSgpOwoKICAgICAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgdGhlbiB0aGUgdXNlciBjYW4gYmUgZm9yY2VkIHRvIHNvbWV0aGluZyBlbHNlIHRoYXQgdGhlIHVzZXIKICAgICAgICAgICAgaWYgKCR1c2VyX2lzX2FkbWluICYmIGFycmF5X2tleV9leGlzdHMoJ3VzZXJfaWQnLCRjb25zdW1lcikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpc19udWxsKCRjb25zdW1lclsndXNlcl9pZCddKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSAnTlVMTCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJG93bmVyX2lkID0gaW50dmFsKCRjb25zdW1lclsndXNlcl9pZCddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5vIGFkbWluLCB0YWtlIHRoZSB1c2VyIGlkIGFzIHRoZSBvd25lciBpZC4KICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGludHZhbCgkdXNlcl9pZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkgKAogICAgICAgICAgICAgICAgICAgIG9zcl9lbmFibGVkLAogICAgICAgICAgICAgICAgICAgIG9zcl9zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgb3NyX3VzYV9pZF9yZWYsCiAgICAgICAgICAgICAgICAgICAgb3NyX2NvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfc2VjcmV0LAogICAgICAgICAgICAgICAgICAgIG9zcl9yZXF1ZXN0ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAgICBvc3JfcmVxdWVzdGVyX2VtYWlsLAogICAgICAgICAgICAgICAgICAgIG9zcl9jYWxsYmFja191cmksCiAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX3VyaSwKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX2Rlc2NyLAogICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl9ub3RlcywKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdHlwZSwKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fY29tbWVyY2lhbCwKICAgICAgICAgICAgICAgICAgICBvc3JfdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgIG9zcl9pc3N1ZV9kYXRlCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBWQUxVRVMgKFwnMVwnLCBcJ2FjdGl2ZVwnLCBcJyVzXCcsIFwnJXNcJywgXCclc1wnLCBcJyVzXCcsIFwnJXNcJywgXCclc1wnLCBcJyVzXCcsIFwnJXNcJywgXCclc1wnLCBcJyVzXCcsIFwnJXNcJywgXCclZFwnLCBOT1coKSwgTk9XKCkpCiAgICAgICAgICAgICAgICAnLAogICAgICAgICAgICAgICAgJG93bmVyX2lkLAogICAgICAgICAgICAgICAgJGNvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICRjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAkY29uc3VtZXJbJ3JlcXVlc3Rlcl9uYW1lJ10sCiAgICAgICAgICAgICAgICAkY29uc3VtZXJbJ3JlcXVlc3Rlcl9lbWFpbCddLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydjYWxsYmFja191cmknXSkgICAgICAgICA/ICRjb25zdW1lclsnY2FsbGJhY2tfdXJpJ10gICAgICAgICAgICAgIDogJycsCiAgICAgICAgICAgICAgICBpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddKSAgICAgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddICAgICAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90aXRsZSddKSAgICA/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9kZXNjciddKSAgICA/ICRjb25zdW1lclsnYXBwbGljYXRpb25fZGVzY3InXSAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddKSAgICA/ICRjb25zdW1lclsnYXBwbGljYXRpb25fbm90ZXMnXSAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90eXBlJ10pICAgICA/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdHlwZSddICAgICAgICAgIDogJycsCiAgICAgICAgICAgICAgICBpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSkgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSA6IDAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY29uc3VtZXJfa2V5OwoKICAgIH0KCiAgICAvKioKICAgICAqIERlbGV0ZSBhIGNvbnN1bWVyIGtleS4gIFRoaXMgcmVtb3ZlcyBhY2Nlc3MgdG8gb3VyIHNpdGUgZm9yIGFsbCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhpcyBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZCAgICB1c2VyIHJlZ2lzdGVyaW5nIHRoaXMgc2VydmVyCiAgICAgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKICAgIHsKICAgICAgICBpZiAoJHVzZXJfaXNfYWRtaW4pCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCAob3NyX3VzYV9pZF9yZWYgPSBcJyVkXCcgT1Igb3NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9zcl91c2FfaWRfcmVmICAgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2ggYSBjb25zdW1lciBvZiB0aGlzIHNlcnZlciwgYnkgY29uc3VtZXJfa2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CiAgICAgKiBAcGFyYW0gaW50IHVzZXJfaWQKICAgICAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4gKG9wdGlvbmFsKQogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBjb25zdW1lciBub3QgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQogICAgewogICAgICAgICRjb25zdW1lciA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgICAgKgogICAgICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBvc3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICcsICRjb25zdW1lcl9rZXkpOwoKICAgICAgICBpZiAoIWlzX2FycmF5KCRjb25zdW1lcikpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBjb25zdW1lciB3aXRoIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciJyk7CiAgICAgICAgfQoKICAgICAgICAkYyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGNvbnN1bWVyIGFzICRrZXkgPT4gJHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgJGNbc3Vic3RyKCRrZXksIDQpXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICAgICAgJGNbJ3VzZXJfaWQnXSA9ICRjWyd1c2FfaWRfcmVmJ107CgogICAgICAgIGlmICghJHVzZXJfaXNfYWRtaW4gJiYgIWVtcHR5KCRjWyd1c2VyX2lkJ10pICYmICRjWyd1c2VyX2lkJ10gIT0gJHVzZXJfaWQpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBhY2Nlc3MgdG8gdGhlIGNvbnN1bWVyIGluZm9ybWF0aW9uIGZvciBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGM7CiAgICB9CgoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIHN0YXRpYyBjb25zdW1lciBrZXkgZm9yIHRoaXMgcHJvdmlkZXIuICBUaGUgdXNlciBmb3IgdGhlIHN0YXRpYyBjb25zdW1lcgogICAgICoga2V5IGlzIE5VTEwgKG5vIHVzZXIsIHNoYXJlZCBrZXkpLiAgSWYgdGhlIGtleSBkaWQgbm90IGV4aXN0IHRoZW4gdGhlIGtleSBpcyBjcmVhdGVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lclN0YXRpYyAoKQogICAgewogICAgICAgICRjb25zdW1lciA9ICR0aGlzLT5xdWVyeV9vbmUoJwogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1Qgb3NyX2NvbnN1bWVyX2tleQogICAgICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBvc3JfY29uc3VtZXJfa2V5IExJS0UgXCdzYy0lJVwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zcl91c2FfaWRfcmVmIElTIE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgJyk7CgogICAgICAgIGlmIChlbXB0eSgkY29uc3VtZXIpKQogICAgICAgIHsKICAgICAgICAgICAgJGNvbnN1bWVyX2tleSA9ICdzYy0nLiR0aGlzLT5nZW5lcmF0ZUtleSh0cnVlKTsKICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIG9hdXRoX3NlcnZlcl9yZWdpc3RyeSAoCiAgICAgICAgICAgICAgICAgICAgb3NyX2VuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgb3NyX3N0YXR1cywKICAgICAgICAgICAgICAgICAgICBvc3JfdXNhX2lkX3JlZiwKICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgIG9zcl9jb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgb3NyX3JlcXVlc3Rlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgIG9zcl9yZXF1ZXN0ZXJfZW1haWwsCiAgICAgICAgICAgICAgICAgICAgb3NyX2NhbGxiYWNrX3VyaSwKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdXJpLAogICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl90aXRsZSwKICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX25vdGVzLAogICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl90eXBlLAogICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl9jb21tZXJjaWFsLAogICAgICAgICAgICAgICAgICAgIG9zcl90aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgb3NyX2lzc3VlX2RhdGUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIFZBTFVFUyAoXCcxXCcsXCdhY3RpdmVcJywgTlVMTCwgXCclc1wnLCBcJ1wnLCBcJ1wnLCBcJ1wnLCBcJ1wnLCBcJ1wnLCBcJ1N0YXRpYyBzaGFyZWQgY29uc3VtZXIga2V5XCcsIFwnXCcsIFwnU3RhdGljIHNoYXJlZCBjb25zdW1lciBrZXlcJywgXCdcJywgMCwgTk9XKCksIE5PVygpKQogICAgICAgICAgICAgICAgJywKICAgICAgICAgICAgICAgICRjb25zdW1lcl9rZXkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAvLyBKdXN0IG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBjb25zdW1lciBrZXkgaXMgdHJ1bmNhdGVkIHRoYXQgd2UgZ2V0IHRoZSB0cnVuY2F0ZWQgc3RyaW5nCiAgICAgICAgICAgICRjb25zdW1lciA9ICR0aGlzLT5nZXRDb25zdW1lclN0YXRpYygpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNvbnN1bWVyOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIHVuYXV0b3JpemVkIHJlcXVlc3QgdG9rZW4gdG8gb3VyIHNlcnZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIGFycmF5IG9wdGlvbnMgICAgICAgIChlZy4gdG9rZW5fdHRsKQogICAgICogQHJldHVybiBhcnJheSAodG9rZW4sIHRva2VuX3NlY3JldCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZENvbnN1bWVyUmVxdWVzdFRva2VuICggJGNvbnN1bWVyX2tleSwgJG9wdGlvbnMgPSBhcnJheSgpICkKICAgIHsKICAgICAgICAkdG9rZW4gID0gJHRoaXMtPmdlbmVyYXRlS2V5KHRydWUpOwogICAgICAgICRzZWNyZXQgPSAkdGhpcy0+Z2VuZXJhdGVLZXkoKTsKICAgICAgICAkb3NyX2lkICAgID0gJHRoaXMtPnF1ZXJ5X29uZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBvc3JfaWQKICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3JfZW5hYmxlZCAgICAgID0gXCcxXCcKICAgICAgICAgICAgICAgICAgICAgICAgJywgJGNvbnN1bWVyX2tleSk7CgogICAgICAgIGlmICghJG9zcl9pZCkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIHNlcnZlciB3aXRoIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciIG9yIGNvbnN1bWVyX2tleSBpcyBkaXNhYmxlZCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd0b2tlbl90dGwnXSkgJiYgaXNfbnVtZXJpYygkb3B0aW9uc1sndG9rZW5fdHRsJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJHR0bCA9IGludHZhbCgkb3B0aW9uc1sndG9rZW5fdHRsJ10pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkdHRsID0gJHRoaXMtPm1heF9yZXF1ZXN0X3Rva2VuX3R0bDsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ29hdXRoX2NhbGxiYWNrJ10pKSB7CiAgICAgICAgICAgICAvLyAxLjBhIENvbXBhdGliaWxpdHkgOiBzdG9yZSBjYWxsYmFjayB1cmwgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QgdG9rZW4KICAgICAgICAgICAgJG9wdGlvbnNbJ29hdXRoX2NhbGxiYWNrJ109J29vYic7CiAgICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgSU5TRVJUIElOVE8gb2F1dGhfc2VydmVyX3Rva2VuICgKICAgICAgICAgICAgICAgIG9zdF9vc3JfaWRfcmVmLAogICAgICAgICAgICAgICAgb3N0X3VzYV9pZF9yZWYsCiAgICAgICAgICAgICAgICBvc3RfdG9rZW4sCiAgICAgICAgICAgICAgICBvc3RfdG9rZW5fc2VjcmV0LAogICAgICAgICAgICAgICAgb3N0X3Rva2VuX3R5cGUsCiAgICAgICAgICAgICAgICBvc3RfdG9rZW5fdHRsLAogICAgICAgICAgICAgICAgb3N0X2NhbGxiYWNrX3VybAogICAgICAgICAgICApCiAgICAgICAgICAgIFZBTFVFUyAoJWQsIFwnMVwnLCBcJyVzXCcsIFwnJXNcJywgXCdyZXF1ZXN0XCcsIE5PVygpICsgSU5URVJWQUwgXCclZCBTRUNPTkRcJywgXCclc1wnKScsCiAgICAgICAgICAgICAgICAkb3NyX2lkLCAkdG9rZW4sICRzZWNyZXQsICR0dGwsICRvcHRpb25zWydvYXV0aF9jYWxsYmFjayddKTsKCiAgICAgICAgcmV0dXJuIGFycmF5KCd0b2tlbic9PiR0b2tlbiwgJ3Rva2VuX3NlY3JldCc9PiRzZWNyZXQsICd0b2tlbl90dGwnPT4kdHRsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZldGNoIHRoZSBjb25zdW1lciByZXF1ZXN0IHRva2VuLCBieSByZXF1ZXN0IHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEByZXR1cm4gYXJyYXkgIHRva2VuIGFuZCBjb25zdW1lciBkZXRhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiApCiAgICB7CiAgICAgICAgJHJzID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCiAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb3N0X3Rva2VuICAgICAgICAgICAgYXMgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIG9zdF90b2tlbl9zZWNyZXQgICAgYXMgdG9rZW5fc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfa2V5ICAgIGFzIGNvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2NvbnN1bWVyX3NlY3JldCAgICBhcyBjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zdF90b2tlbl90eXBlICAgICAgICBhcyB0b2tlbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgb3N0X2NhbGxiYWNrX3VybCAgICBhcyBjYWxsYmFja191cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdGl0bGUgYXMgYXBwbGljYXRpb25fdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fZGVzY3IgYXMgYXBwbGljYXRpb25fZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdXJpICAgYXMgYXBwbGljYXRpb25fdXJpCiAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX3NlcnZlcl90b2tlbgogICAgICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICBPTiBvc3Rfb3NyX2lkX3JlZiA9IG9zcl9pZAogICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuX3R5cGUgPSBcJ3JlcXVlc3RcJwogICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90dGwgID49IE5PVygpCiAgICAgICAgICAgICAgICAnLCAkdG9rZW4pOwoKICAgICAgICByZXR1cm4gJHJzOwogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlIGEgY29uc3VtZXIgdG9rZW4uICBUaGUgdG9rZW4gbXVzdCBiZSBhIHJlcXVlc3Qgb3IgYXV0aG9yaXplZCB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHRva2VuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiApCiAgICB7CiAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBvYXV0aF9zZXJ2ZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICBXSEVSRSBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90eXBlID0gXCdyZXF1ZXN0XCcKICAgICAgICAgICAgICAgICAgICAnLCAkdG9rZW4pOwogICAgfQoKICAgIC8qKgogICAgICogVXBncmFkZSBhIHJlcXVlc3QgdG9rZW4gdG8gYmUgYW4gYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEBwYXJhbSBpbnQgICAgIHVzZXJfaWQgIHVzZXIgYXV0aG9yaXppbmcgdGhlIHRva2VuCiAgICAgKiBAcGFyYW0gc3RyaW5nIHJlZmVycmVyX2hvc3QgdXNlZCB0byBzZXQgdGhlIHJlZmVycmVyIGhvc3QgZm9yIHRoaXMgdG9rZW4sIGZvciB1c2VyIGZlZWRiYWNrCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICRyZWZlcnJlcl9ob3N0ID0gJycgKQogICAgewogICAgICAgICAvLyAxLjBhIENvbXBhdGliaWxpdHkgOiBjcmVhdGUgYSB0b2tlbiB2ZXJpZmllcgogICAgICAgICAkdmVyaWZpZXIgPSBzdWJzdHIobWQ1KHJhbmQoKSksMCwxMCk7CgogICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIG9hdXRoX3NlcnZlcl90b2tlbgogICAgICAgICAgICAgICAgICAgIFNFVCBvc3RfYXV0aG9yaXplZCAgICA9IFwnMVwnLAogICAgICAgICAgICAgICAgICAgICAgICBvc3RfdXNhX2lkX3JlZiAgICA9IFwnJWRcJywKICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3RpbWVzdGFtcCAgICAgPSBOT1coKSwKICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3JlZmVycmVyX2hvc3QgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zdF92ZXJpZmllciAgICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3RfdG9rZW5fdHlwZSA9IFwncmVxdWVzdFwnCiAgICAgICAgICAgICAgICAgICAgJywgJHVzZXJfaWQsICRyZWZlcnJlcl9ob3N0LCAkdmVyaWZpZXIsICR0b2tlbik7CiAgICAgICAgcmV0dXJuICR2ZXJpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIENvdW50IHRoZSBjb25zdW1lciBhY2Nlc3MgdG9rZW5zIGZvciB0aGUgZ2l2ZW4gY29uc3VtZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudENvbnN1bWVyQWNjZXNzVG9rZW5zICggJGNvbnN1bWVyX2tleSApCiAgICB7CiAgICAgICAgJGNvdW50ID0gJHRoaXMtPnF1ZXJ5X29uZSgnCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIENPVU5UKG9zdF9pZCkKICAgICAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX3NlcnZlcl90b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9JTiBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuX3R5cGUgICA9IFwnYWNjZXNzXCcKICAgICAgICAgICAgICAgICAgICAgIEFORCBvc3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R0bCAgICA+PSBOT1coKQogICAgICAgICAgICAgICAgICAgICcsICRjb25zdW1lcl9rZXkpOwoKICAgICAgICByZXR1cm4gJGNvdW50OwogICAgfQoKICAgIC8qKgogICAgICogRXhjaGFuZ2UgYW4gYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuIGZvciBuZXcgYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEBwYXJhbSBhcnJheSBvcHRpb25zICAgICAgICBvcHRpb25zIGZvciB0aGUgdG9rZW4sIHRva2VuX3R0bAogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiB0b2tlbiBjb3VsZCBub3QgYmUgZXhjaGFuZ2VkCiAgICAgKiBAcmV0dXJuIGFycmF5ICh0b2tlbiwgdG9rZW5fc2VjcmV0KQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhjaGFuZ2VDb25zdW1lclJlcXVlc3RGb3JBY2Nlc3NUb2tlbiAoICR0b2tlbiwgJG9wdGlvbnMgPSBhcnJheSgpICkKICAgIHsKICAgICAgICAkbmV3X3Rva2VuICA9ICR0aGlzLT5nZW5lcmF0ZUtleSh0cnVlKTsKICAgICAgICAkbmV3X3NlY3JldCA9ICR0aGlzLT5nZW5lcmF0ZUtleSgpOwoKICAgICAgICAvLyBNYXhpbXVtIHRpbWUgdG8gbGl2ZSBmb3IgdGhpcyB0b2tlbgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndG9rZW5fdHRsJ10pICYmIGlzX251bWVyaWMoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSkKICAgICAgICB7CiAgICAgICAgICAgICR0dGxfc3FsID0gJyhOT1coKSArIElOVEVSVkFMIFwnJy5pbnR2YWwoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKS4nIFNFQ09ORFwnKSc7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICR0dGxfc3FsID0gIic5OTk5LTEyLTMxJyI7CiAgICAgICAgfQoKICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJpZmllciddKSkgewogICAgICAgICAgICAgJHZlcmlmaWVyID0gJG9wdGlvbnNbJ3ZlcmlmaWVyJ107CgogICAgICAgICAgICAgLy8gMS4wYSBDb21wYXRpYmlsaXR5IDogY2hlY2sgdG9rZW4gYWdhaW5zdCBvYXV0aF92ZXJpZmllcgogICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURSBvYXV0aF9zZXJ2ZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBvc3RfdG9rZW4gICAgICAgICAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW5fc2VjcmV0ICAgID0gXCclc1wnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdF90b2tlbl90eXBlICAgICAgICA9IFwnYWNjZXNzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3RpbWVzdGFtcCAgICAgICAgPSBOT1coKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW5fdHRsICAgICAgID0gJy4kdHRsX3NxbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ3JlcXVlc3RcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X2F1dGhvcml6ZWQgPSBcJzFcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R0bCAgPj0gTk9XKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF92ZXJpZmllciA9IFwnJXNcJwogICAgICAgICAgICAgICAgICAgICAgICAgJywgJG5ld190b2tlbiwgJG5ld19zZWNyZXQsICR0b2tlbiwgJHZlcmlmaWVyKTsKICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAvLyAxLjAKICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUgb2F1dGhfc2VydmVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgb3N0X3Rva2VuICAgICAgICAgICAgPSBcJyVzXCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3Rva2VuX3NlY3JldCAgICA9IFwnJXNcJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW5fdHlwZSAgICAgICAgPSBcJ2FjY2Vzc1wnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdF90aW1lc3RhbXAgICAgICAgID0gTk9XKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3Rva2VuX3R0bCAgICAgICA9ICcuJHR0bF9zcWwuJwogICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90eXBlID0gXCdyZXF1ZXN0XCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF9hdXRob3JpemVkID0gXCcxXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90dGwgID49IE5PVygpCiAgICAgICAgICAgICAgICAgICAgICAgICAnLCAkbmV3X3Rva2VuLCAkbmV3X3NlY3JldCwgJHRva2VuKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cXVlcnlfYWZmZWN0ZWRfcm93cygpICE9IDEpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDYW5cJ3QgZXhjaGFuZ2UgcmVxdWVzdCB0b2tlbiAiJy4kdG9rZW4uJyIgZm9yIGFjY2VzcyB0b2tlbi4gTm8gc3VjaCB0b2tlbiBvciBub3QgYXV0aG9yaXplZCcpOwogICAgICAgIH0KCiAgICAgICAgJHJldCA9IGFycmF5KCd0b2tlbicgPT4gJG5ld190b2tlbiwgJ3Rva2VuX3NlY3JldCcgPT4gJG5ld19zZWNyZXQpOwogICAgICAgICR0dGwgPSAkdGhpcy0+cXVlcnlfb25lKCcKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgICAgKENBU0UgV0hFTiBvc3RfdG9rZW5fdHRsID49IFwnOTk5OS0xMi0zMVwnIFRIRU4gTlVMTCBFTFNFIG9zdF90b2tlbl90dGwgLSBOT1coKSBFTkQpIGFzIHRva2VuX3R0bAogICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfc2VydmVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuID0gXCclc1wnJywgJG5ld190b2tlbik7CgogICAgICAgIGlmIChpc19udW1lcmljKCR0dGwpKQogICAgICAgIHsKICAgICAgICAgICAgJHJldFsndG9rZW5fdHRsJ10gPSBpbnR2YWwoJHR0bCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGNvbnN1bWVyIGFjY2VzcyB0b2tlbiwgYnkgYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZAogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiB0b2tlbiBpcyBub3QgZm91bmQKICAgICAqIEByZXR1cm4gYXJyYXkgIHRva2VuIGFuZCBjb25zdW1lciBkZXRhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lckFjY2Vzc1Rva2VuICggJHRva2VuLCAkdXNlcl9pZCApCiAgICB7CiAgICAgICAgJHJzID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCiAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb3N0X3Rva2VuICAgICAgICAgICAgICAgIGFzIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW5fc2VjcmV0ICAgICAgICBhcyB0b2tlbl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zdF9yZWZlcnJlcl9ob3N0ICAgICAgICBhcyB0b2tlbl9yZWZlcnJlcl9ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfa2V5ICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9jb25zdW1lcl9zZWNyZXQgICAgICAgIGFzIGNvbnN1bWVyX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX3VyaSAgICAgICAgYXMgYXBwbGljYXRpb25fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdGl0bGUgICAgYXMgYXBwbGljYXRpb25fdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl9kZXNjciAgICBhcyBhcHBsaWNhdGlvbl9kZXNjciwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2NhbGxiYWNrX3VyaSAgICAgICAgYXMgY2FsbGJhY2tfdXJpCiAgICAgICAgICAgICAgICBGUk9NIG9hdXRoX3NlcnZlcl90b2tlbgogICAgICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICAgICBPTiBvc3Rfb3NyX2lkX3JlZiA9IG9zcl9pZAogICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgIEFORCBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICBBTkQgb3N0X3VzYV9pZF9yZWYgPSBcJyVkXCcKICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90dGwgID49IE5PVygpCiAgICAgICAgICAgICAgICAnLCAkdG9rZW4sICR1c2VyX2lkKTsKCiAgICAgICAgaWYgKGVtcHR5KCRycykpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXJfdG9rZW4gIicuJHRva2VuLiciIGZvciB1c2VyICInLiR1c2VyX2lkLiciJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWxldGUgYSBjb25zdW1lciBhY2Nlc3MgdG9rZW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyB0b2tlbgogICAgICogQHBhcmFtIGludCB1c2VyX2lkCiAgICAgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lckFjY2Vzc1Rva2VuICggJHRva2VuLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApCiAgICB7CiAgICAgICAgaWYgKCR1c2VyX2lzX2FkbWluKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCcKICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gb2F1dGhfc2VydmVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zdF90b2tlbiAgICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF90b2tlbl90eXBlID0gXCdhY2Nlc3NcJwogICAgICAgICAgICAgICAgICAgICAgICAnLCAkdG9rZW4pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBvYXV0aF9zZXJ2ZXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zdF91c2FfaWRfcmVmID0gXCclZFwnCiAgICAgICAgICAgICAgICAgICAgICAgICcsICR0b2tlbiwgJHVzZXJfaWQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdHRsIG9mIGEgY29uc3VtZXIgYWNjZXNzIHRva2VuLiAgVGhpcyBpcyBkb25lIHdoZW4gdGhlCiAgICAgKiBzZXJ2ZXIgcmVjZWl2ZXMgYSB2YWxpZCByZXF1ZXN0IHdpdGggYSB4b2F1dGhfdG9rZW5fdHRsIHBhcmFtZXRlciBpbiBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHRva2VuCiAgICAgKiBAcGFyYW0gaW50IHR0bAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29uc3VtZXJBY2Nlc3NUb2tlblR0bCAoICR0b2tlbiwgJHRva2VuX3R0bCApCiAgICB7CiAgICAgICAgaWYgKCR0b2tlbl90dGwgPD0gMCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIEltbWVkaWF0ZSBkZWxldGUgd2hlbiB0aGUgdG9rZW4gaXMgcGFzdCBpdHMgdHRsCiAgICAgICAgICAgICR0aGlzLT5kZWxldGVDb25zdW1lckFjY2Vzc1Rva2VuKCR0b2tlbiwgMCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIC8vIFNldCBtYXhpbXVtIHRpbWUgdG8gbGl2ZSBmb3IgdGhpcyB0b2tlbgogICAgICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUgb2F1dGhfc2VydmVyX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBvc3RfdG9rZW5fdHRsID0gKE5PVygpICsgSU5URVJWQUwgXCclZCBTRUNPTkRcJykKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3N0X3Rva2VuICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgICAgICAgICcsICR0b2tlbl90dGwsICR0b2tlbik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2ggYSBsaXN0IG9mIGFsbCBjb25zdW1lciBrZXlzLCBzZWNyZXRzIGV0Yy4KICAgICAqIFJldHVybnMgdGhlIHB1YmxpYyAodXNlcl9pZCBpcyBudWxsKSBhbmQgdGhlIGtleXMgb3duZWQgYnkgdGhlIHVzZXIKICAgICAqCiAgICAgKiBAcGFyYW0gaW50IHVzZXJfaWQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lcnMgKCAkdXNlcl9pZCApCiAgICB7CiAgICAgICAgJHJzID0gJHRoaXMtPnF1ZXJ5X2FsbF9hc3NvYygnCiAgICAgICAgICAgICAgICBTRUxFQ1QgICAgb3NyX2lkICAgICAgICAgICAgICAgICAgICBhcyBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX3VzYV9pZF9yZWYgICAgICAgICAgICBhcyB1c2VyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfa2V5ICAgICAgICAgYXMgY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfY29uc3VtZXJfc2VjcmV0ICAgICAgICBhcyBjb25zdW1lcl9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9lbmFibGVkICAgICAgICAgICAgICAgIGFzIGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9zdGF0dXMgICAgICAgICAgICAgICAgIGFzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2lzc3VlX2RhdGUgICAgICAgICAgICBhcyBpc3N1ZV9kYXRlLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdXJpICAgICAgICBhcyBhcHBsaWNhdGlvbl91cmksCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl90aXRsZSAgICBhcyBhcHBsaWNhdGlvbl90aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX2Rlc2NyICAgIGFzIGFwcGxpY2F0aW9uX2Rlc2NyLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfcmVxdWVzdGVyX25hbWUgICAgICAgIGFzIHJlcXVlc3Rlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfcmVxdWVzdGVyX2VtYWlsICAgICAgICBhcyByZXF1ZXN0ZXJfZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9jYWxsYmFja191cmkgICAgICAgIGFzIGNhbGxiYWNrX3VyaQogICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgIFdIRVJFIChvc3JfdXNhX2lkX3JlZiA9IFwnJWRcJyBPUiBvc3JfdXNhX2lkX3JlZiBJUyBOVUxMKQogICAgICAgICAgICAgICAgT1JERVIgQlkgb3NyX2FwcGxpY2F0aW9uX3RpdGxlCiAgICAgICAgICAgICAgICAnLCAkdXNlcl9pZCk7CiAgICAgICAgcmV0dXJuICRyczsKICAgIH0KCiAgICAvKioKICAgICAqIExpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgYXBwbGljYXRpb25zLiBEYXRhIHJldHVybmVkIGhhcyBub3Qgc2Vuc2l0aXZlCiAgICAgKiBpbmZvcm1hdGlvbiBhbmQgdGhlcmVmb3JlIGlzIHN1aXRhYmxlIGZvciBwdWJsaWMgZGlzcGxheWluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRiZWdpbgogICAgICogQHBhcmFtIGludCAkdG90YWwKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lckFwcGxpY2F0aW9ucygkYmVnaW4gPSAwLCAkdG90YWwgPSAyNSkKICAgIHsKICAgICAgICAkcnMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKICAgICAgICAgICAgICAgIFNFTEVDVCAgICBvc3JfaWQgICAgICAgICAgICAgICAgICAgIGFzIGlkLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfZW5hYmxlZCAgICAgICAgICAgICAgICBhcyBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICBvc3Jfc3RhdHVzICAgICAgICAgICAgICAgICBhcyBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9pc3N1ZV9kYXRlICAgICAgICAgICAgYXMgaXNzdWVfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX3VyaSAgICAgICAgYXMgYXBwbGljYXRpb25fdXJpLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdGl0bGUgICAgYXMgYXBwbGljYXRpb25fdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl9kZXNjciAgICBhcyBhcHBsaWNhdGlvbl9kZXNjcgogICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgIE9SREVSIEJZIG9zcl9hcHBsaWNhdGlvbl90aXRsZQogICAgICAgICAgICAgICAgJyk7CiAgICAgICAgLy8gVE9ETzogcGFnaW5hdGlvbgogICAgICAgIHJldHVybiAkcnM7CiAgICB9CgoKICAgIC8qKgogICAgICogRmV0Y2ggYSBsaXN0IG9mIGFsbCBjb25zdW1lciB0b2tlbnMgYWNjZXNzaW5nIHRoZSBhY2NvdW50IG9mIHRoZSBnaXZlbiB1c2VyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdENvbnN1bWVyVG9rZW5zICggJHVzZXJfaWQgKQogICAgewogICAgICAgICRycyA9ICR0aGlzLT5xdWVyeV9hbGxfYXNzb2MoJwogICAgICAgICAgICAgICAgU0VMRUNUICAgIG9zcl9jb25zdW1lcl9rZXkgICAgICAgICBhcyBjb25zdW1lcl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9jb25zdW1lcl9zZWNyZXQgICAgICAgIGFzIGNvbnN1bWVyX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2VuYWJsZWQgICAgICAgICAgICAgICAgYXMgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX3N0YXR1cyAgICAgICAgICAgICAgICAgYXMgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICBvc3JfYXBwbGljYXRpb25fdXJpICAgICAgICBhcyBhcHBsaWNhdGlvbl91cmksCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9hcHBsaWNhdGlvbl90aXRsZSAgICBhcyBhcHBsaWNhdGlvbl90aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgb3NyX2FwcGxpY2F0aW9uX2Rlc2NyICAgIGFzIGFwcGxpY2F0aW9uX2Rlc2NyLAogICAgICAgICAgICAgICAgICAgICAgICBvc3RfdGltZXN0YW1wICAgICAgICAgICAgYXMgdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICBvc3RfdG9rZW4gICAgICAgICAgICAgICAgYXMgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIG9zdF90b2tlbl9zZWNyZXQgICAgICAgIGFzIHRva2VuX3NlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgb3N0X3JlZmVycmVyX2hvc3QgICAgICAgIGFzIHRva2VuX3JlZmVycmVyX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIG9zcl9jYWxsYmFja191cmkgICAgICAgIGFzIGNhbGxiYWNrX3VyaQogICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKICAgICAgICAgICAgICAgICAgICBKT0lOIG9hdXRoX3NlcnZlcl90b2tlbgogICAgICAgICAgICAgICAgICAgIE9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCiAgICAgICAgICAgICAgICBXSEVSRSBvc3RfdXNhX2lkX3JlZiA9IFwnJWRcJwogICAgICAgICAgICAgICAgICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCiAgICAgICAgICAgICAgICAgIEFORCBvc3RfdG9rZW5fdHRsICA+PSBOT1coKQogICAgICAgICAgICAgICAgT1JERVIgQlkgb3NyX2FwcGxpY2F0aW9uX3RpdGxlCiAgICAgICAgICAgICAgICAnLCAkdXNlcl9pZCk7CiAgICAgICAgcmV0dXJuICRyczsKICAgIH0KCgogICAgLyoqCiAgICAgKiBDaGVjayBhbiBub25jZS90aW1lc3RhbXAgY29tYmluYXRpb24uICBDbGVhcnMgYW55IG5vbmNlIGNvbWJpbmF0aW9ucwogICAgICogdGhhdCBhcmUgb2xkZXIgdGhhbiB0aGUgb25lIHJlY2VpdmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgY29uc3VtZXJfa2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICB0b2tlbgogICAgICogQHBhcmFtIGludCAgICAgICAgdGltZXN0YW1wCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICBub25jZQogICAgICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgICAgdGhyb3duIHdoZW4gdGhlIHRpbWVzdGFtcCBpcyBub3QgaW4gc2VxdWVuY2Ugb3Igbm9uY2UgaXMgbm90IHVuaXF1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tTZXJ2ZXJOb25jZSAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRpbWVzdGFtcCwgJG5vbmNlICkKICAgIHsKICAgICAgICAkciA9ICR0aGlzLT5xdWVyeV9yb3coJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIE1BWChvc25fdGltZXN0YW1wKSwgTUFYKG9zbl90aW1lc3RhbXApID4gJWQgKyAlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBvYXV0aF9zZXJ2ZXJfbm9uY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIG9zbl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9zbl90b2tlbiAgICAgICAgPSBcJyVzXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICR0aW1lc3RhbXAsICR0aGlzLT5tYXhfdGltZXN0YW1wX3NrZXcsICRjb25zdW1lcl9rZXksICR0b2tlbik7CgogICAgICAgIGlmICghZW1wdHkoJHIpICYmICRyWzFdID09PSAndCcpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaW1lc3RhbXAgaXMgb3V0IG9mIHNlcXVlbmNlLiBSZXF1ZXN0IHJlamVjdGVkLiBHb3QgJy4kdGltZXN0YW1wLicgbGFzdCBtYXggaXMgJy4kclswXS4nIGFsbG93ZWQgc2tldyBpcyAnLiR0aGlzLT5tYXhfdGltZXN0YW1wX3NrZXcpOwogICAgICAgIH0KCiAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgY29tYmluYXRpb24KICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICBJTlNFUlQgSU5UTyBvYXV0aF9zZXJ2ZXJfbm9uY2UgKAogICAgICAgICAgICAgICAgb3NuX2NvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgIG9zbl90b2tlbiwKICAgICAgICAgICAgICAgIG9zbl90aW1lc3RhbXAsCiAgICAgICAgICAgICAgICBvc25fbm9uY2UKICAgICAgICAgICAgKQogICAgICAgICAgICBWQUxVRVMgKFwnJXNcJywgXCclc1wnLCAlZCwgXCclc1wnKScsCiAgICAgICAgICAgICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRpbWVzdGFtcCwgJG5vbmNlKTsKCiAgICAgICAgaWYgKCR0aGlzLT5xdWVyeV9hZmZlY3RlZF9yb3dzKCkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0R1cGxpY2F0ZSB0aW1lc3RhbXAvbm9uY2UgY29tYmluYXRpb24sIHBvc3NpYmxlIHJlcGxheSBhdHRhY2suICBSZXF1ZXN0IHJlamVjdGVkLicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYW4gdXAgYWxsIHRpbWVzdGFtcHMgb2xkZXIgdGhhbiB0aGUgb25lIHdlIGp1c3QgcmVjZWl2ZWQKICAgICAgICAkdGhpcy0+cXVlcnkoJwogICAgICAgICAgICAgICAgREVMRVRFIEZST00gb2F1dGhfc2VydmVyX25vbmNlCiAgICAgICAgICAgICAgICBXSEVSRSBvc25fY29uc3VtZXJfa2V5ICAgID0gXCclc1wnCiAgICAgICAgICAgICAgICAgIEFORCBvc25fdG9rZW4gICAgICAgICAgICA9IFwnJXNcJwogICAgICAgICAgICAgICAgICBBTkQgb3NuX3RpbWVzdGFtcCAgICAgPCAlZCAtICVkCiAgICAgICAgICAgICAgICAnLCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICR0aGlzLT5tYXhfdGltZXN0YW1wX3NrZXcpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGVudHJ5IHRvIHRoZSBsb2cgdGFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkga2V5cyAob3NyX2NvbnN1bWVyX2tleSwgb3N0X3Rva2VuLCBvY3JfY29uc3VtZXJfa2V5LCBvY3RfdG9rZW4pCiAgICAgKiBAcGFyYW0gc3RyaW5nIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gc3RyaW5nIHNlbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgYmFzZV9zdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgbm90ZXMKICAgICAqIEBwYXJhbSBpbnQgKG9wdGlvbmFsKSB1c2VyX2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRMb2cgKCAka2V5cywgJHJlY2VpdmVkLCAkc2VudCwgJGJhc2Vfc3RyaW5nLCAkbm90ZXMsICR1c2VyX2lkID0gbnVsbCApCiAgICB7CiAgICAgICAgJGFyZ3MgPSBhcnJheSgpOwogICAgICAgICRwcyAgID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAka2V5ID0+ICR2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgICRhcmdzW10gPSAkdmFsdWU7CiAgICAgICAgICAgICRwc1tdICAgPSAib2xnXyRrZXkgPSAnJXMnIjsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pKQogICAgICAgIHsKICAgICAgICAgICAgJHJlbW90ZV9pcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFTU9URV9JUCddKSkKICAgICAgICB7CiAgICAgICAgICAgICRyZW1vdGVfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0lQJ107CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRyZW1vdGVfaXAgPSAnMC4wLjAuMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBCdWlsZCB0aGUgU1FMCiAgICAgICAgJHBzWydvbGdfcmVjZWl2ZWQnXSAgICA9ICInJXMnIjsgICAgICAgICAgICAgICAgICAgICAgICAkYXJnc1tdID0gJHRoaXMtPm1ha2VVVEY4KCRyZWNlaXZlZCk7CiAgICAgICAgJHBzWydvbGdfc2VudCddICAgICAgICA9ICInJXMnIjsgICAgICAgICAgICAgICAgICAgICAgICAkYXJnc1tdID0gJHRoaXMtPm1ha2VVVEY4KCRzZW50KTsKICAgICAgICAkcHNbJ29sZ19iYXNlX3N0cmluZyddID0gIiclcyciOyAgICAgICAgICAgICAgICAgICAgICAgICRhcmdzW10gPSAkYmFzZV9zdHJpbmc7CiAgICAgICAgJHBzWydvbGdfbm90ZXMnXSAgICAgICA9ICInJXMnIjsgICAgICAgICAgICAgICAgICAgICAgICAkYXJnc1tdID0gJHRoaXMtPm1ha2VVVEY4KCRub3Rlcyk7CiAgICAgICAgJHBzWydvbGdfdXNhX2lkX3JlZiddID0gIk5VTExJRignJWQnLCAnMCcpIjsgICAgICAgICAgICAkYXJnc1tdID0gJHVzZXJfaWQ7CiAgICAgICAgJHBzWydvbGdfcmVtb3RlX2lwJ10gID0gIk5VTExJRignJXMnLCcwLjAuMC4wJykiOyAgICAgICAgJGFyZ3NbXSA9ICRyZW1vdGVfaXA7CgogICAgICAgICR0aGlzLT5xdWVyeSgnCiAgICAgICAgICAgIElOU0VSVCBJTlRPIG9hdXRoX2xvZyAoJy5pbXBsb2RlKCcsJywgYXJyYXlfa2V5cygkcHMpKSAuICcpCiAgICAgICAgICAgIFZBTFVFUygnIC4gaW1wbG9kZSgnLCcsICRwcykgLiAnKScsCiAgICAgICAgICAgICRhcmdzCiAgICAgICAgKTsKICAgIH0KCiAgICAgLyoqCiAgICAgKiBHZXQgYSBwYWdlIG9mIGVudHJpZXMgZnJvbSB0aGUgbG9nLiAgUmV0dXJucyB0aGUgbGFzdCAxMDAgcmVjb3JkcwogICAgICogbWF0Y2hpbmcgdGhlIG9wdGlvbnMgZ2l2ZW4uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5IG9wdGlvbnMKICAgICAqIEBwYXJhbSBpbnQgdXNlcl9pZCAgICBjdXJyZW50IHVzZXIKICAgICAqIEByZXR1cm4gYXJyYXkgbG9nIHJlY29yZHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RMb2cgKCAkb3B0aW9ucywgJHVzZXJfaWQgKQogICAgewogICAgICAgICR3aGVyZSA9IGFycmF5KCk7CiAgICAgICAgJGFyZ3MgID0gYXJyYXkoKTsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnMpKQogICAgICAgIHsKICAgICAgICAgICAgJHdoZXJlW10gPSAnb2xnX3VzYV9pZF9yZWYgPSBcJyVkXCcnOwogICAgICAgICAgICAkYXJnc1tdICA9ICR1c2VyX2lkOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0aW9uID0+ICR2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkdmFsdWUpID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCRvcHRpb24pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ29zcl9jb25zdW1lcl9rZXknOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ29jcl9jb25zdW1lcl9rZXknOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ29zdF90b2tlbic6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2N0X3Rva2VuJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHdoZXJlW10gPSAnb2xnXycuJG9wdGlvbi4nID0gXCclc1wnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGFyZ3NbXSAgPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHdoZXJlW10gPSAnKG9sZ191c2FfaWRfcmVmIElTIE5VTEwgT1Igb2xnX3VzYV9pZF9yZWYgPSBcJyVkXCcpJzsKICAgICAgICAgICAgJGFyZ3NbXSAgPSAkdXNlcl9pZDsKICAgICAgICB9CgogICAgICAgICRycyA9ICR0aGlzLT5xdWVyeV9hbGxfYXNzb2MoJwogICAgICAgICAgICAgICAgICAgIFNFTEVDVCBvbGdfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGdfb3NyX2NvbnN1bWVyX2tleSAgICAgQVMgb3NyX2NvbnN1bWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZ19vc3RfdG9rZW4gICAgICAgICAgICBBUyBvc3RfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGdfb2NyX2NvbnN1bWVyX2tleSAgICBBUyBvY3JfY29uc3VtZXJfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xnX29jdF90b2tlbiAgICAgICAgICAgIEFTIG9jdF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZ191c2FfaWRfcmVmICAgICAgICAgICAgQVMgdXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZ19yZWNlaXZlZCAgICAgICAgICAgIEFTIHJlY2VpdmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xnX3NlbnQgICAgICAgICAgICAgICAgQVMgc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZ19iYXNlX3N0cmluZyAgICAgICAgICAgIEFTIGJhc2Vfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xnX25vdGVzICAgICAgICAgICAgICAgIEFTIG5vdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xnX3RpbWVzdGFtcCAgICAgICAgICAgIEFTIHRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZ19yZW1vdGVfaXAgICAgICAgICAgIEFTIHJlbW90ZV9pcAogICAgICAgICAgICAgICAgICAgIEZST00gb2F1dGhfbG9nCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsICR3aGVyZSkuJwogICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIG9sZ19pZCBERVNDCiAgICAgICAgICAgICAgICAgICAgTElNSVQgMCwxMDAnLCAkYXJncyk7CgogICAgICAgIHJldHVybiAkcnM7CiAgICB9CgoKICAgIC8qICoqIFNvbWUgc2ltcGxlIGhlbHBlciBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBwZ3NxbCBkYiAqKiAqLwoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIHF1ZXJ5LCBpZ25vcmUgdGhlIHJlc3VsdHMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHNxbAogICAgICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnkgKCAkc3FsICkKICAgIHsKICAgICAgICAkc3FsID0gJHRoaXMtPnNxbF9wcmludGYoZnVuY19nZXRfYXJncygpKTsKICAgICAgICBpZiAoISgkcmVzID0gcGdfcXVlcnkoJHRoaXMtPmNvbm4sICRzcWwpKSkKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5zcWxfZXJyY2hlY2soJHNxbCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fbGFzdEFmZmVjdGVkUm93cyA9IHBnX2FmZmVjdGVkX3Jvd3MoJHJlcyk7CiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRyZXMpKQogICAgICAgIHsKICAgICAgICAgICAgcGdfZnJlZV9yZXN1bHQoJHJlcyk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBxdWVyeSwgcmV0dXJuIGFsbCByb3dzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBzcWwKICAgICAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FsbF9hc3NvYyAoICRzcWwgKQogICAgewogICAgICAgICRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIGlmICghKCRyZXMgPSBwZ19xdWVyeSgkdGhpcy0+Y29ubiwgJHNxbCkpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKICAgICAgICB9CiAgICAgICAgJHJzID0gYXJyYXkoKTsKICAgICAgICB3aGlsZSAoJHJvdyAgPSBwZ19mZXRjaF9hc3NvYygkcmVzKSkKICAgICAgICB7CiAgICAgICAgICAgICRyc1tdID0gJHJvdzsKICAgICAgICB9CiAgICAgICAgcGdfZnJlZV9yZXN1bHQoJHJlcyk7CiAgICAgICAgcmV0dXJuICRyczsKICAgIH0KCgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBzcWwKICAgICAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X3Jvd19hc3NvYyAoICRzcWwgKQogICAgewogICAgICAgICRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwoKICAgICAgICBpZiAoISgkcmVzID0gcGdfcXVlcnkoJHRoaXMtPmNvbm4sICRzcWwpKSkKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5zcWxfZXJyY2hlY2soJHNxbCk7CiAgICAgICAgfQogICAgICAgIGlmICgkcm93ID0gcGdfZmV0Y2hfYXNzb2MoJHJlcykpCiAgICAgICAgewogICAgICAgICAgICAkcnMgPSAkcm93OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkcnMgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcGdfZnJlZV9yZXN1bHQoJHJlcyk7CiAgICAgICAgcmV0dXJuICRyczsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBxdWVyeSwgcmV0dXJuIHRoZSBmaXJzdCByb3cKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHNxbAogICAgICogQHBhcmFtIHZhcmFyZyBhcmd1bWVudHMgKGZvciBzcHJpbnRmKQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfcm93ICggJHNxbCApCiAgICB7CiAgICAgICAgJHNxbCA9ICR0aGlzLT5zcWxfcHJpbnRmKGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgaWYgKCEoJHJlcyA9IHBnX3F1ZXJ5KCR0aGlzLT5jb25uLCAkc3FsKSkpCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+c3FsX2VycmNoZWNrKCRzcWwpOwogICAgICAgIH0KICAgICAgICBpZiAoJHJvdyA9IHBnX2ZldGNoX2FycmF5KCRyZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJHJzID0gJHJvdzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHJzID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHBnX2ZyZWVfcmVzdWx0KCRyZXMpOwogICAgICAgIHJldHVybiAkcnM7CiAgICB9CgoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBzcWwKICAgICAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X29uZSAoICRzcWwgKQogICAgewogICAgICAgICRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZihmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIGlmICghKCRyZXMgPSBwZ19xdWVyeSgkdGhpcy0+Y29ubiwgJHNxbCkpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnNxbF9lcnJjaGVjaygkc3FsKTsKICAgICAgICB9CiAgICAgICAgJHZhbCA9IHBnX2ZldGNoX3JvdygkcmVzKTsKICAgICAgICBpZiAoJHZhbCAmJiBpc3NldCgkdmFsWzBdKSkgewogICAgICAgICAgICAkdmFsID0gJHZhbFswXTsKICAgICAgICB9CiAgICAgICAgcGdfZnJlZV9yZXN1bHQoJHJlcyk7CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBpbiB0aGUgbGFzdCBxdWVyeQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfYWZmZWN0ZWRfcm93cyAoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RBZmZlY3RlZFJvd3M7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBpZCBvZiB0aGUgbGFzdCBpbnNlcnRlZCByb3cKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcXVlcnlfaW5zZXJ0X2lkICggJHRhYmxlTmFtZSwgJHByaW1hcnlLZXkgPSBudWxsICkKICAgIHsKICAgICAgICAkc2VxdWVuY2VOYW1lID0gJHRhYmxlTmFtZTsKICAgICAgICBpZiAoJHByaW1hcnlLZXkpIHsKICAgICAgICAgICAgJHNlcXVlbmNlTmFtZSAuPSAiXyRwcmltYXJ5S2V5IjsKICAgICAgICB9CiAgICAgICAgJHNlcXVlbmNlTmFtZSAuPSAnX3NlcSc7CgogICAgICAgICRzcWwgPSAiCiAgICAgICAgICAgIFNFTEVDVAogICAgICAgICAgICAgICAgQ1VSUlZBTCgnJXMnKQogICAgICAgICAgICAgICAgIjsKICAgICAgICAkYXJncyA9IGFycmF5KCRzcWwsICRzZXF1ZW5jZU5hbWUpOwogICAgICAgICRzcWwgPSAkdGhpcy0+c3FsX3ByaW50ZigkYXJncyk7CiAgICAgICAgaWYgKCEoJHJlcyA9IHBnX3F1ZXJ5KCR0aGlzLT5jb25uLCAkc3FsKSkpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgICR2YWwgPSBwZ19mZXRjaF9yb3coJHJlcywgMCk7CiAgICAgICAgaWYgKCR2YWwgJiYgaXNzZXQoJHZhbFswXSkpIHsKICAgICAgICAgICAgJHZhbCA9ICR2YWxbMF07CiAgICAgICAgfQoKICAgICAgICBwZ19mcmVlX3Jlc3VsdCgkcmVzKTsKICAgICAgICByZXR1cm4gJHZhbDsKICAgIH0KCgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9wcmludGYgKCAkYXJncyApCiAgICB7CiAgICAgICAgJHNxbCAgPSBhcnJheV9zaGlmdCgkYXJncyk7CiAgICAgICAgaWYgKGNvdW50KCRhcmdzKSA9PSAxICYmIGlzX2FycmF5KCRhcmdzWzBdKSkKICAgICAgICB7CiAgICAgICAgICAgICRhcmdzID0gJGFyZ3NbMF07CiAgICAgICAgfQogICAgICAgICRhcmdzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAnc3FsX2VzY2FwZV9zdHJpbmcnKSwgJGFyZ3MpOwogICAgICAgIHJldHVybiB2c3ByaW50Zigkc3FsLCAkYXJncyk7CiAgICB9CgoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzcWxfZXNjYXBlX3N0cmluZyAoICRzICkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRzKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBwZ19lc2NhcGVfc3RyaW5nKCR0aGlzLT5jb25uLCAkcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzX251bGwoJHMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzX2Jvb2woJHMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGludHZhbCgkcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzX2ludCgkcykgfHwgaXNfZmxvYXQoJHMpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRzOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gcGdfZXNjYXBlX3N0cmluZygkdGhpcy0+Y29ubiwgc3RydmFsKCRzKSk7CiAgICAgICAgfQogICAgfQoKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3FsX2VycmNoZWNrICggJHNxbCApCiAgICB7CiAgICAgICAgICAgICRtc2cgPSAgIlNRTCBFcnJvciBpbiBPQXV0aFN0b3JlUG9zdGdyZVNRTDogIi5wZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uKS4iXG5cbiIgLiAkc3FsOwogICAgICAgICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCRtc2cpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreSession.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPQXV0aFNlc3Npb24gaXMgYSByZWFsbHkgKmRpcnR5KiBzdG9yYWdlLiBJdCdzIHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgbWF5IAogKiBiZSBlbm91Z2ggZm9yIHNvbWUgdmVyeSBzaW1wbGUgYXBwbGljYXRpb25zLCBidXQgaXQncyBub3QgcmVjb21tZW5kZWQgZm9yCiAqIHByb2R1Y3Rpb24gdXNlLgogKiAKICogQHZlcnNpb24gJElkOiBPQXV0aFN0b3JlU2Vzc2lvbi5waHAgMTUzIDIwMTAtMDgtMzAgMjE6MjU6NThaIGJydW5vYmdAY29yb2xsYXJpdW0uY29tICQKICogQGF1dGhvciBCQkcKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9PQXV0aFN0b3JlQWJzdHJhY3QuY2xhc3MucGhwJzsKCmNsYXNzIE9BdXRoU3RvcmVTZXNzaW9uIGV4dGVuZHMgT0F1dGhTdG9yZUFic3RyYWN0CnsKCXByaXZhdGUgJHNlc3Npb247IAoKCS8qCgkgKiBUYWtlcyB0d28gb3B0aW9uczogY29uc3VtZXJfa2V5IGFuZCBjb25zdW1lcl9zZWNyZXQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJCWlmICghc2Vzc2lvbl9pZCgpKSB7CgkJCXNlc3Npb25fc3RhcnQoKTsKCQl9CgkJaWYoaXNzZXQoJG9wdGlvbnNbJ2NvbnN1bWVyX2tleSddKSAmJiBpc3NldCgkb3B0aW9uc1snY29uc3VtZXJfc2VjcmV0J10pKQoJCXsKCQkJJHRoaXMtPnNlc3Npb24gPSAmJF9TRVNTSU9OWydvYXV0aF8nIC4gJG9wdGlvbnNbJ2NvbnN1bWVyX2tleSddXTsKCQkJJHRoaXMtPnNlc3Npb25bJ2NvbnN1bWVyX2tleSddID0gJG9wdGlvbnNbJ2NvbnN1bWVyX2tleSddOwoJCQkkdGhpcy0+c2Vzc2lvblsnY29uc3VtZXJfc2VjcmV0J10gPSAkb3B0aW9uc1snY29uc3VtZXJfc2VjcmV0J107CgkJCSR0aGlzLT5zZXNzaW9uWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoJ0hNQUMtU0hBMScpOwoJCQkkdGhpcy0+c2Vzc2lvblsnc2VydmVyX3VyaSddID0gJG9wdGlvbnNbJ3NlcnZlcl91cmknXTsgCgkJCSR0aGlzLT5zZXNzaW9uWydyZXF1ZXN0X3Rva2VuX3VyaSddID0gJG9wdGlvbnNbJ3JlcXVlc3RfdG9rZW5fdXJpJ107CgkJCSR0aGlzLT5zZXNzaW9uWydhdXRob3JpemVfdXJpJ10gPSAkb3B0aW9uc1snYXV0aG9yaXplX3VyaSddOwoJCQkkdGhpcy0+c2Vzc2lvblsnYWNjZXNzX3Rva2VuX3VyaSddID0gJG9wdGlvbnNbJ2FjY2Vzc190b2tlbl91cmknXTsgCgkJCQoJCX0KCQllbHNlCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBuZWVkcyBjb25zdW1lcl90b2tlbiBhbmQgY29uc3VtZXJfc2VjcmV0Iik7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRTZWNyZXRzRm9yVmVyaWZ5ICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdG9rZW5fdHlwZSA9ICdhY2Nlc3MnICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjcmV0c0ZvclNpZ25hdHVyZSAoICR1cmksICR1c2VyX2lkICkgCgl7CgkJcmV0dXJuICR0aGlzLT5zZXNzaW9uOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJUb2tlblNlY3JldHMgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlLCAkdXNlcl9pZCwgJG5hbWUgPSAnJykgCQoJeyAKCQlpZiAoJGNvbnN1bWVyX2tleSAhPSAkdGhpcy0+c2Vzc2lvblsnY29uc3VtZXJfa2V5J10pIHsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfSAKCQlyZXR1cm4gYXJyYXkoCgkJCSdjb25zdW1lcl9rZXknID0+ICRjb25zdW1lcl9rZXksCgkJCSdjb25zdW1lcl9zZWNyZXQnID0+ICR0aGlzLT5zZXNzaW9uWydjb25zdW1lcl9zZWNyZXQnXSwKCQkJJ3Rva2VuJyA9PiAkdG9rZW4sCgkJCSd0b2tlbl9zZWNyZXQnID0+ICR0aGlzLT5zZXNzaW9uWyd0b2tlbl9zZWNyZXQnXSwKCQkJJ3Rva2VuX25hbWUnID0+ICRuYW1lLAoJCQknc2lnbmF0dXJlX21ldGhvZHMnID0+ICR0aGlzLT5zZXNzaW9uWydzaWduYXR1cmVfbWV0aG9kcyddLAoJCQknc2VydmVyX3VyaScgPT4gJHRoaXMtPnNlc3Npb25bJ3NlcnZlcl91cmknXSwKCQkJJ3JlcXVlc3RfdG9rZW5fdXJpJyA9PiAkdGhpcy0+c2Vzc2lvblsncmVxdWVzdF90b2tlbl91cmknXSwKCQkJJ2F1dGhvcml6ZV91cmknID0+ICR0aGlzLT5zZXNzaW9uWydhdXRob3JpemVfdXJpJ10sCgkJCSdhY2Nlc3NfdG9rZW5fdXJpJyA9PiAkdGhpcy0+c2Vzc2lvblsnYWNjZXNzX3Rva2VuX3VyaSddLAoJCQkndG9rZW5fdHRsJyA9PiAzNjAwLAoJCSk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBhZGRTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbl90eXBlLCAkdG9rZW4sICR0b2tlbl9zZWNyZXQsICR1c2VyX2lkLCAkb3B0aW9ucyA9IGFycmF5KCkgKSAKCXsKCQkkdGhpcy0+c2Vzc2lvblsndG9rZW5fdHlwZSddID0gJHRva2VuX3R5cGU7CgkJJHRoaXMtPnNlc3Npb25bJ3Rva2VuJ10gPSAkdG9rZW47CgkJJHRoaXMtPnNlc3Npb25bJ3Rva2VuX3NlY3JldCddID0gJHRva2VuX3NlY3JldDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlU2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXIoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkgeyAKCQlyZXR1cm4gYXJyYXkoIAoJCQknaWQnID0+IDAsCgkJCSd1c2VyX2lkJyA9PiAkdXNlcl9pZCwKCQkJJ2NvbnN1bWVyX2tleScgPT4gJHRoaXMtPnNlc3Npb25bJ2NvbnN1bWVyX2tleSddLAoJCQknY29uc3VtZXJfc2VjcmV0JyA9PiAkdGhpcy0+c2Vzc2lvblsnY29uc3VtZXJfc2VjcmV0J10sCgkJCSdzaWduYXR1cmVfbWV0aG9kcycgPT4gJHRoaXMtPnNlc3Npb25bJ3NpZ25hdHVyZV9tZXRob2RzJ10sCgkJCSdzZXJ2ZXJfdXJpJyA9PiAkdGhpcy0+c2Vzc2lvblsnc2VydmVyX3VyaSddLAoJCQkncmVxdWVzdF90b2tlbl91cmknID0+ICR0aGlzLT5zZXNzaW9uWydyZXF1ZXN0X3Rva2VuX3VyaSddLAoJCQknYXV0aG9yaXplX3VyaScgPT4gJHRoaXMtPnNlc3Npb25bJ2F1dGhvcml6ZV91cmknXSwKCQkJJ2FjY2Vzc190b2tlbl91cmknID0+ICR0aGlzLT5zZXNzaW9uWydhY2Nlc3NfdG9rZW5fdXJpJ10sCgkJKTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlckZvclVyaSAoICR1cmksICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gbGlzdFNlcnZlclRva2VucyAoICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gY291bnRTZXJ2ZXJUb2tlbnMgKCAkY29uc3VtZXJfa2V5ICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyVG9rZW4gKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlU2VydmVyVG9rZW4gKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkgewoJCS8vIFRPRE8gCgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFNlcnZlclRva2VuVHRsICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdG9rZW5fdHRsICkKCXsKCQkvL1RoaXMgbWV0aG9kIGp1c3QgbmVlZHMgdG8gZXhpc3QuIEl0IGRvZXNuJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyEKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJzICggJHEgPSAnJywgJHVzZXJfaWQgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVTZXJ2ZXIgKCAkc2VydmVyLCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVDb25zdW1lciAoICRjb25zdW1lciwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uc3VtZXIgKCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJHVzZXJfaXNfYWRtaW4gPSBmYWxzZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyU3RhdGljICgpIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoKCXB1YmxpYyBmdW5jdGlvbiBhZGRDb25zdW1lclJlcXVlc3RUb2tlbiAoICRjb25zdW1lcl9rZXksICRvcHRpb25zID0gYXJyYXkoKSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyUmVxdWVzdFRva2VuICggJHRva2VuICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4gKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICRyZWZlcnJlcl9ob3N0ID0gJycgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBjb3VudENvbnN1bWVyQWNjZXNzVG9rZW5zICggJGNvbnN1bWVyX2tleSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGV4Y2hhbmdlQ29uc3VtZXJSZXF1ZXN0Rm9yQWNjZXNzVG9rZW4gKCAkdG9rZW4sICRvcHRpb25zID0gYXJyYXkoKSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyQWNjZXNzVG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJBY2Nlc3NUb2tlbiAoICR0b2tlbiwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBzZXRDb25zdW1lckFjY2Vzc1Rva2VuVHRsICggJHRva2VuLCAkdHRsICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgkKCXB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJzICggJHVzZXJfaWQgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBsaXN0Q29uc3VtZXJBcHBsaWNhdGlvbnMoICRiZWdpbiA9IDAsICR0b3RhbCA9IDI1ICkgIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lclRva2VucyAoICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgoJcHVibGljIGZ1bmN0aW9uIGNoZWNrU2VydmVyTm9uY2UgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICRub25jZSApIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkTG9nICggJGtleXMsICRyZWNlaXZlZCwgJHNlbnQsICRiYXNlX3N0cmluZywgJG5vdGVzLCAkdXNlcl9pZCA9IG51bGwgKSB7IHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoIk9BdXRoU3RvcmVTZXNzaW9uIGRvZXNuJ3Qgc3VwcG9ydCAiIC4gX19NRVRIT0RfXyk7IH0KCXB1YmxpYyBmdW5jdGlvbiBsaXN0TG9nICggJG9wdGlvbnMsICR1c2VyX2lkICkgeyB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCJPQXV0aFN0b3JlU2Vzc2lvbiBkb2Vzbid0IHN1cHBvcnQgIiAuIF9fTUVUSE9EX18pOyB9CgkKCXB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsICgpIHsgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMigiT0F1dGhTdG9yZVNlc3Npb24gZG9lc24ndCBzdXBwb3J0ICIgLiBfX01FVEhPRF9fKTsgfQkJCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/library/store/OAuthStoreSQL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTdG9yYWdlIGNvbnRhaW5lciBmb3IgdGhlIG9hdXRoIGNyZWRlbnRpYWxzLCBib3RoIHNlcnZlciBhbmQgY29uc3VtZXIgc2lkZS4KICogQmFzZWQgb24gTXlTUUwKICogCiAqIEB2ZXJzaW9uICRJZDogT0F1dGhTdG9yZU15U1FMLnBocCA3NiAyMDEwLTAxLTI3IDE5OjUxOjE3WiBicnVub2JnQGNvcm9sbGFyaXVtLmNvbSAkCiAqIEBhdXRob3IgTWFyYyBXb3JyZWxsIDxtYXJjd0Bwb2JveC5jb20+CiAqIEBkYXRlICBOb3YgMTYsIDIwMDcgNDowMzozMCBQTQogKiAKICogCiAqIFRoZSBNSVQgTGljZW5zZQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWVkaWFtYXRpYyBMYWIKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwoKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGhTdG9yZUFic3RyYWN0LmNsYXNzLnBocCc7CgoKYWJzdHJhY3QgY2xhc3MgT0F1dGhTdG9yZVNRTCBleHRlbmRzIE9BdXRoU3RvcmVBYnN0cmFjdAp7CgkvKioKCSAqIE1heGltdW0gZGVsdGEgYSB0aW1lc3RhbXAgbWF5IGJlIG9mZiBmcm9tIGEgcHJldmlvdXMgdGltZXN0YW1wLgoJICogQWxsb3dzIG11bHRpcGxlIGNvbnN1bWVycyB3aXRoIHNvbWUgY2xvY2sgc2tldyB0byB3b3JrIHdpdGggdGhlIHNhbWUgdG9rZW4uCgkgKiBVbml0IGlzIHNlY29uZHMsIGRlZmF1bHQgbWF4IHNrZXcgaXMgMTAgbWludXRlcy4KCSAqLwoJcHJvdGVjdGVkICRtYXhfdGltZXN0YW1wX3NrZXcgPSA2MDA7CgoJLyoqCgkgKiBEZWZhdWx0IHR0bCBmb3IgcmVxdWVzdCB0b2tlbnMKCSAqLwoJcHJvdGVjdGVkICRtYXhfcmVxdWVzdF90b2tlbl90dGwgPSAzNjAwOwoJCgoJLyoqCgkgKiBDb25zdHJ1Y3QgdGhlIE9BdXRoU3RvcmVNeVNRTC4KCSAqIEluIHRoZSBvcHRpb25zIHlvdSBoYXZlIHRvIHN1cHBseSBlaXRoZXI6CgkgKiAtIHNlcnZlciwgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBkYXRhYmFzZSAoZm9yIGEgbXlzcWxfY29ubmVjdCkKCSAqIC0gY29ubiAoZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlIHVzZWQpCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBvcHRpb25zCgkgKi8KCWZ1bmN0aW9uIF9fY29uc3RydWN0ICggJG9wdGlvbnMgPSBhcnJheSgpICkKCXsKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvbm4nXSkpCgkJewoJCQkkdGhpcy0+Y29ubiA9ICRvcHRpb25zWydjb25uJ107CgkJfQoJCWVsc2UKCQl7CgkJCWlmIChpc3NldCgkb3B0aW9uc1snc2VydmVyJ10pKQoJCQl7CgkJCQkkc2VydmVyICAgPSAkb3B0aW9uc1snc2VydmVyJ107CgkJCQkkdXNlcm5hbWUgPSAkb3B0aW9uc1sndXNlcm5hbWUnXTsKCQkJCQoJCQkJaWYgKGlzc2V0KCRvcHRpb25zWydwYXNzd29yZCddKSkKCQkJCXsKCQkJCQkkdGhpcy0+Y29ubiA9IG15c3FsX2Nvbm5lY3QoJHNlcnZlciwgJHVzZXJuYW1lLCAkb3B0aW9uc1sncGFzc3dvcmQnXSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHRoaXMtPmNvbm4gPSBteXNxbF9jb25uZWN0KCRzZXJ2ZXIsICR1c2VybmFtZSk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBUcnkgdGhlIGRlZmF1bHQgbXlzcWwgY29ubmVjdAoJCQkJJHRoaXMtPmNvbm4gPSBteXNxbF9jb25uZWN0KCk7CgkJCX0KCgkJCWlmICgkdGhpcy0+Y29ubiA9PT0gZmFsc2UpCgkJCXsKCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0NvdWxkIG5vdCBjb25uZWN0IHRvIE15U1FMIGRhdGFiYXNlOiAnIC4gbXlzcWxfZXJyb3IoKSk7CgkJCX0KCgkJCWlmIChpc3NldCgkb3B0aW9uc1snZGF0YWJhc2UnXSkpCgkJCXsKCQkJCWlmICghbXlzcWxfc2VsZWN0X2RiKCRvcHRpb25zWydkYXRhYmFzZSddLCAkdGhpcy0+Y29ubikpCgkJCQl7CgkJCQkJJHRoaXMtPnNxbF9lcnJjaGVjaygpOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5xdWVyeSgnc2V0IGNoYXJhY3RlciBzZXQgdXRmOCcpOwoJCX0KCX0KCgoJLyoqCgkgKiBGaW5kIHN0b3JlZCBjcmVkZW50aWFscyBmb3IgdGhlIGNvbnN1bWVyIGtleSBhbmQgdG9rZW4uIFVzZWQgYnkgYW4gT0F1dGggc2VydmVyCgkgKiB3aGVuIHZlcmlmeWluZyBhbiBPQXV0aCByZXF1ZXN0LgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHBhcmFtIHN0cmluZyB0b2tlbgoJICogQHBhcmFtIHN0cmluZyB0b2tlbl90eXBlCQlmYWxzZSwgJ3JlcXVlc3QnIG9yICdhY2Nlc3MnCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIG5vIHNlY3JldHMgd2hlcmUgZm91bmQKCSAqIEByZXR1cm4gYXJyYXkJYXNzb2MgKGNvbnN1bWVyX3NlY3JldCwgdG9rZW5fc2VjcmV0LCBvc3JfaWQsIG9zdF9pZCwgdXNlcl9pZCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFNlY3JldHNGb3JWZXJpZnkgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90eXBlID0gJ2FjY2VzcycgKQoJewoJCWlmICgkdG9rZW5fdHlwZSA9PT0gZmFsc2UpCgkJewoJCQkkcnMgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKCQkJCQkJU0VMRUNUCW9zcl9pZCwgCgkJCQkJCQkJb3NyX2NvbnN1bWVyX2tleQkJYXMgY29uc3VtZXJfa2V5LAoJCQkJCQkJCW9zcl9jb25zdW1lcl9zZWNyZXQJCWFzIGNvbnN1bWVyX3NlY3JldAoJCQkJCQlGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJCQlXSEVSRSBvc3JfY29uc3VtZXJfa2V5CT0gXCclc1wnCgkJCQkJCSAgQU5EIG9zcl9lbmFibGVkCQk9IDEKCQkJCQkJJywgCgkJCQkJCSRjb25zdW1lcl9rZXkpOwoJCQkKCQkJaWYgKCRycykKCQkJewoJCQkJJHJzWyd0b2tlbiddIAkJPSBmYWxzZTsKCQkJCSRyc1sndG9rZW5fc2VjcmV0J10JPSBmYWxzZTsKCQkJCSRyc1sndXNlcl9pZCddCQk9IGZhbHNlOwoJCQkJJHJzWydvc3RfaWQnXQkJPSBmYWxzZTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkcnMgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKCQkJCQkJU0VMRUNUCW9zcl9pZCwgCgkJCQkJCQkJb3N0X2lkLAoJCQkJCQkJCW9zdF91c2FfaWRfcmVmCQkJYXMgdXNlcl9pZCwKCQkJCQkJCQlvc3JfY29uc3VtZXJfa2V5CQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCQkJb3NyX2NvbnN1bWVyX3NlY3JldAkJYXMgY29uc3VtZXJfc2VjcmV0LAoJCQkJCQkJCW9zdF90b2tlbgkJCQlhcyB0b2tlbiwKCQkJCQkJCQlvc3RfdG9rZW5fc2VjcmV0CQlhcyB0b2tlbl9zZWNyZXQKCQkJCQkJRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCQkJCQlKT0lOIG9hdXRoX3NlcnZlcl90b2tlbgoJCQkJCQkJCU9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCgkJCQkJCVdIRVJFIG9zdF90b2tlbl90eXBlCT0gXCclc1wnCgkJCQkJCSAgQU5EIG9zcl9jb25zdW1lcl9rZXkJPSBcJyVzXCcKCQkJCQkJICBBTkQgb3N0X3Rva2VuCQkJPSBcJyVzXCcKCQkJCQkgCSAgQU5EIG9zcl9lbmFibGVkCQk9IDEKCQkJCQkJICBBTkQgb3N0X3Rva2VuX3R0bCAgICAgPj0gTk9XKCkKCQkJCQkJJywKCQkJCQkJJHRva2VuX3R5cGUsICRjb25zdW1lcl9rZXksICR0b2tlbik7CgkJfQoJCQoJCWlmIChlbXB0eSgkcnMpKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciIHRva2VuICInLiR0b2tlbi4nIiBjb21iaW5hdGlvbiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZW5hYmxlZC4nKTsKCQl9CgkJcmV0dXJuICRyczsKCX0KCgoJLyoqCgkgKiBGaW5kIHRoZSBzZXJ2ZXIgZGV0YWlscyBmb3Igc2lnbmluZyBhIHJlcXVlc3QsIGFsd2F5cyBsb29rcyBmb3IgYW4gYWNjZXNzIHRva2VuLgoJICogVGhlIHJldHVybmVkIGNyZWRlbnRpYWxzIGRlcGVuZCBvbiB3aGljaCBsb2NhbCB1c2VyIGlzIG1ha2luZyB0aGUgcmVxdWVzdC4KCSAqIAoJICogVGhlIGNvbnN1bWVyX2tleSBtdXN0IGJlbG9uZyB0byB0aGUgdXNlciBvciBiZSBwdWJsaWMgKHVzZXIgaWQgaXMgbnVsbCkKCSAqIAoJICogRm9yIHNpZ25pbmcgd2UgbmVlZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKCSAqIAoJICogY29uc3VtZXJfa2V5CQkJY29uc3VtZXIga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VydmVyCgkgKiBjb25zdW1lcl9zZWNyZXQJCWNvbnN1bWVyIHNlY3JldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2ZXIKCSAqIHRva2VuCQkJCWFjY2VzcyB0b2tlbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2ZXIKCSAqIHRva2VuX3NlY3JldAkJCXNlY3JldCBmb3IgdGhlIGFjY2VzcyB0b2tlbgoJICogc2lnbmF0dXJlX21ldGhvZHMJc2lnbmluZyBtZXRob2RzIHN1cHBvcnRlZCBieSB0aGUgc2VydmVyIChhcnJheSkKCSAqIAoJICogQHRvZG8gZmlsdGVyIG9uIHRva2VuIHR5cGUgKHdlIHNob3VsZCBrbm93IGhvdyBhbmQgd2l0aCB3aGF0IHRvIHNpZ24gdGhpcyByZXF1ZXN0LCBhbmQgdGhlcmUgbWlnaHQgYmUgb2xkIGFjY2VzcyB0b2tlbnMpCgkgKiBAcGFyYW0gc3RyaW5nIHVyaQl1cmkgb2YgdGhlIHNlcnZlcgoJICogQHBhcmFtIGludCB1c2VyX2lkCWlkIG9mIHRoZSBsb2dnZWQgb24gdXNlcgoJICogQHBhcmFtIHN0cmluZyBuYW1lCShvcHRpb25hbCkgbmFtZSBvZiB0aGUgdG9rZW4gKGNhc2Ugc2Vuc2l0aXZlKQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZAoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjcmV0c0ZvclNpZ25hdHVyZSAoICR1cmksICR1c2VyX2lkLCAkbmFtZSA9ICcnICkKCXsKCQkvLyBGaW5kIGEgY29uc3VtZXIga2V5IGFuZCB0b2tlbiBmb3IgdGhlIGdpdmVuIHVyaQoJCSRwcwkJPSBwYXJzZV91cmwoJHVyaSk7CgkJJGhvc3QJPSBpc3NldCgkcHNbJ2hvc3QnXSkgPyAkcHNbJ2hvc3QnXSA6ICdsb2NhbGhvc3QnOwoJCSRwYXRoCT0gaXNzZXQoJHBzWydwYXRoJ10pID8gJHBzWydwYXRoJ10gOiAnJzsKCQkKCQlpZiAoZW1wdHkoJHBhdGgpIHx8IHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykKCQl7CgkJCSRwYXRoIC49ICcvJzsKCQl9CgoJCS8vIFRoZSBvd25lciBvZiB0aGUgY29uc3VtZXJfa2V5IGlzIGVpdGhlciB0aGUgdXNlciBvciBub2JvZHkgKHB1YmxpYyBjb25zdW1lciBrZXkpCgkJJHNlY3JldHMgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKCQkJCQlTRUxFQ1QJb2NyX2NvbnN1bWVyX2tleQkJYXMgY29uc3VtZXJfa2V5LAoJCQkJCQkJb2NyX2NvbnN1bWVyX3NlY3JldAkJYXMgY29uc3VtZXJfc2VjcmV0LAoJCQkJCQkJb2N0X3Rva2VuCQkJCWFzIHRva2VuLAoJCQkJCQkJb2N0X3Rva2VuX3NlY3JldAkJYXMgdG9rZW5fc2VjcmV0LAoJCQkJCQkJb2NyX3NpZ25hdHVyZV9tZXRob2RzCWFzIHNpZ25hdHVyZV9tZXRob2RzCgkJCQkJRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQoJCQkJCQlKT0lOIG9hdXRoX2NvbnN1bWVyX3Rva2VuIE9OIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCgkJCQkJV0hFUkUgb2NyX3NlcnZlcl91cmlfaG9zdCA9IFwnJXNcJwoJCQkJCSAgQU5EIG9jcl9zZXJ2ZXJfdXJpX3BhdGggPSBMRUZUKFwnJXNcJywgTEVOR1RIKG9jcl9zZXJ2ZXJfdXJpX3BhdGgpKQoJCQkJCSAgQU5EIChvY3JfdXNhX2lkX3JlZiA9IFwnJWRcJyBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMKQoJCQkJCSAgQU5EIG9jdF90b2tlbl90eXBlICAgICAgPSBcJ2FjY2Vzc1wnCgkJCQkJICBBTkQgb2N0X25hbWUJCQkgID0gXCclc1wnCgkJCQkJICBBTkQgb2N0X3Rva2VuX3R0bCAgICAgICA+PSBOT1coKQoJCQkJCU9SREVSIEJZIG9jcl91c2FfaWRfcmVmIERFU0MsIG9jcl9jb25zdW1lcl9zZWNyZXQgREVTQywgTEVOR1RIKG9jcl9zZXJ2ZXJfdXJpX3BhdGgpIERFU0MKCQkJCQlMSU1JVCAwLDEKCQkJCQknLCAkaG9zdCwgJHBhdGgsICR1c2VyX2lkLCAkbmFtZQoJCQkJCSk7CgkJCgkJaWYgKGVtcHR5KCRzZWNyZXRzKSkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIHNlcnZlciB0b2tlbnMgYXZhaWxhYmxlIGZvciAnLiR1cmkpOwoJCX0KCQkkc2VjcmV0c1snc2lnbmF0dXJlX21ldGhvZHMnXSA9IGV4cGxvZGUoJywnLCAkc2VjcmV0c1snc2lnbmF0dXJlX21ldGhvZHMnXSk7CgkJcmV0dXJuICRzZWNyZXRzOwoJfQoKCgkvKioKCSAqIEdldCB0aGUgdG9rZW4gYW5kIHRva2VuIHNlY3JldCB3ZSBvYnRhaW5lZCBmcm9tIGEgc2VydmVyLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nCWNvbnN1bWVyX2tleQoJICogQHBhcmFtIHN0cmluZyAJdG9rZW4KCSAqIEBwYXJhbSBzdHJpbmcJdG9rZW5fdHlwZQoJICogQHBhcmFtIGludAkJdXNlcl9pZAkJCXRoZSB1c2VyIG93bmluZyB0aGUgdG9rZW4KCSAqIEBwYXJhbSBzdHJpbmcJbmFtZQkJCW9wdGlvbmFsIG5hbWUgZm9yIGEgbmFtZWQgdG9rZW4KCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gbm8gY3JlZGVudGlhbHMgZm91bmQKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclRva2VuU2VjcmV0cyAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHRva2VuX3R5cGUsICR1c2VyX2lkLCAkbmFtZSA9ICcnICkKCXsKCQlpZiAoJHRva2VuX3R5cGUgIT0gJ3JlcXVlc3QnICYmICR0b2tlbl90eXBlICE9ICdhY2Nlc3MnKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVW5rb3duIHRva2VuIHR5cGUgIicuJHRva2VuX3R5cGUuJyIsIG11c3QgYmUgZWl0aGVyICJyZXF1ZXN0IiBvciAiYWNjZXNzIicpOwoJCX0KCgkJLy8gVGFrZSB0aGUgbW9zdCByZWNlbnQgdG9rZW4gb2YgdGhlIGdpdmVuIHR5cGUKCQkkciA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwoJCQkJCVNFTEVDVAlvY3JfY29uc3VtZXJfa2V5CQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0CQlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCQlvY3RfdG9rZW4JCQkJYXMgdG9rZW4sCgkJCQkJCQlvY3RfdG9rZW5fc2VjcmV0CQlhcyB0b2tlbl9zZWNyZXQsCgkJCQkJCQlvY3RfbmFtZQkJCQlhcyB0b2tlbl9uYW1lLAoJCQkJCQkJb2NyX3NpZ25hdHVyZV9tZXRob2RzCWFzIHNpZ25hdHVyZV9tZXRob2RzLAoJCQkJCQkJb2NyX3NlcnZlcl91cmkJCQlhcyBzZXJ2ZXJfdXJpLAoJCQkJCQkJb2NyX3JlcXVlc3RfdG9rZW5fdXJpCWFzIHJlcXVlc3RfdG9rZW5fdXJpLAoJCQkJCQkJb2NyX2F1dGhvcml6ZV91cmkJCWFzIGF1dGhvcml6ZV91cmksCgkJCQkJCQlvY3JfYWNjZXNzX3Rva2VuX3VyaQlhcyBhY2Nlc3NfdG9rZW5fdXJpLAoJCQkJCQkJSUYob2N0X3Rva2VuX3R0bCA+PSBcJzk5OTktMTItMzFcJywgTlVMTCwgVU5JWF9USU1FU1RBTVAob2N0X3Rva2VuX3R0bCkgLSBVTklYX1RJTUVTVEFNUChOT1coKSkpIGFzIHRva2VuX3R0bAoJCQkJCUZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQkJCUpPSU4gb2F1dGhfY29uc3VtZXJfdG9rZW4KCQkJCQkJCU9OIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCgkJCQkJV0hFUkUgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCSAgQU5EIG9jdF90b2tlbl90eXBlICAgPSBcJyVzXCcKCQkJCQkgIEFORCBvY3RfdG9rZW4gICAgICAgID0gXCclc1wnCgkJCQkJICBBTkQgb2N0X3VzYV9pZF9yZWYgICA9ICVkCgkJCQkJICBBTkQgb2N0X3Rva2VuX3R0bCAgICA+PSBOT1coKQoJCQkJCScsICRjb25zdW1lcl9rZXksICR0b2tlbl90eXBlLCAkdG9rZW4sICR1c2VyX2lkCgkJCQkJKTsKCQkJCQkKCQlpZiAoZW1wdHkoJHIpKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignQ291bGQgbm90IGZpbmQgYSAiJy4kdG9rZW5fdHlwZS4nIiB0b2tlbiBmb3IgY29uc3VtZXIgIicuJGNvbnN1bWVyX2tleS4nIiBhbmQgdXNlciAnLiR1c2VyX2lkKTsKCQl9CgkJaWYgKGlzc2V0KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSAmJiAhZW1wdHkoJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10pKQoJCXsKCQkJJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywkclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRyWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoKTsKCQl9CgkJcmV0dXJuICRyOwkJCgl9CgoKCS8qKgoJICogQWRkIGEgcmVxdWVzdCB0b2tlbiB3ZSBvYnRhaW5lZCBmcm9tIGEgc2VydmVyLgoJICogCgkgKiBAdG9kbyByZW1vdmUgb2xkIHRva2VucyBmb3IgdGhpcyB1c2VyIGFuZCB0aGlzIG9jcl9pZAoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkJa2V5IG9mIHRoZSBzZXJ2ZXIgaW4gdGhlIGNvbnN1bWVyIHJlZ2lzdHJ5CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuX3R5cGUJCW9uZSBvZiAncmVxdWVzdCcgb3IgJ2FjY2VzcycKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW5fc2VjcmV0CgkgKiBAcGFyYW0gaW50IAkgdXNlcl9pZAkJCXRoZSB1c2VyIG93bmluZyB0aGUgdG9rZW4KCSAqIEBwYXJhbSBhcnJheSAgb3B0aW9ucwkJCWV4dHJhIG9wdGlvbnMsIG5hbWUgYW5kIHRva2VuX3R0bAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBzZXJ2ZXIgaXMgbm90IGtub3duCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHdlIHJlY2VpdmVkIGEgZHVwbGljYXRlIHRva2VuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbl90eXBlLCAkdG9rZW4sICR0b2tlbl9zZWNyZXQsICR1c2VyX2lkLCAkb3B0aW9ucyA9IGFycmF5KCkgKQoJewoJCWlmICgkdG9rZW5fdHlwZSAhPSAncmVxdWVzdCcgJiYgJHRva2VuX3R5cGUgIT0gJ2FjY2VzcycpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdVbmtub3duIHRva2VuIHR5cGUgIicuJHRva2VuX3R5cGUuJyIsIG11c3QgYmUgZWl0aGVyICJyZXF1ZXN0IiBvciAiYWNjZXNzIicpOwoJCX0KCgkJLy8gTWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpCgkJewoJCQkkdHRsID0gJ0RBVEVfQUREKE5PVygpLCBJTlRFUlZBTCAnLmludHZhbCgkb3B0aW9uc1sndG9rZW5fdHRsJ10pLicgU0VDT05EKSc7CgkJfQoJCWVsc2UgaWYgKCR0b2tlbl90eXBlID09ICdyZXF1ZXN0JykKCQl7CgkJCSR0dGwgPSAnREFURV9BREQoTk9XKCksIElOVEVSVkFMICcuJHRoaXMtPm1heF9yZXF1ZXN0X3Rva2VuX3R0bC4nIFNFQ09ORCknOwoJCX0KCQllbHNlCgkJewoJCQkkdHRsID0gIic5OTk5LTEyLTMxJyI7CgkJfQoJCQoJCWlmIChpc3NldCgkb3B0aW9uc1snc2VydmVyX3VyaSddKSkgCgkJewoJCQkkb2NyX2lkID0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJCVNFTEVDVCBvY3JfaWQKCQkJCQkJRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQoJCQkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkJCUFORCBvY3JfdXNhX2lkX3JlZiA9ICVkCgkJCQkJCUFORCBvY3Jfc2VydmVyX3VyaSA9IFwnJXNcJwoJCQkJCQknLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCwgJG9wdGlvbnNbJ3NlcnZlcl91cmknXSk7CgkJfQoJCWVsc2UgCgkJewoJCQkkb2NyX2lkID0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJCVNFTEVDVCBvY3JfaWQKCQkJCQkJRlJPTSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQoJCQkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkJCUFORCBvY3JfdXNhX2lkX3JlZiA9ICVkCgkJCQkJCScsICRjb25zdW1lcl9rZXksICR1c2VyX2lkKTsKCQl9CgkJCQkJCgkJaWYgKGVtcHR5KCRvY3JfaWQpKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc2VydmVyIGFzc29jaWF0ZWQgd2l0aCBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIicpOwoJCX0KCQkKCQkvLyBOYW1lZCB0b2tlbnMsIHVuaXF1ZSBwZXIgdXNlci9jb25zdW1lciBrZXkKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ25hbWUnXSkgJiYgJG9wdGlvbnNbJ25hbWUnXSAhPSAnJykKCQl7CgkJCSRuYW1lID0gJG9wdGlvbnNbJ25hbWUnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJG5hbWUgPSAnJzsKCQl9CgoJCS8vIERlbGV0ZSBhbnkgb2xkIHRva2VucyB3aXRoIHRoZSBzYW1lIHR5cGUgYW5kIG5hbWUgZm9yIHRoaXMgdXNlci9zZXJ2ZXIgY29tYmluYXRpb24KCQkkdGhpcy0+cXVlcnkoJwoJCQkJCURFTEVURSBGUk9NIG9hdXRoX2NvbnN1bWVyX3Rva2VuCgkJCQkJV0hFUkUgb2N0X29jcl9pZF9yZWYgPSAlZAoJCQkJCSAgQU5EIG9jdF91c2FfaWRfcmVmID0gJWQKCQkJCQkgIEFORCBvY3RfdG9rZW5fdHlwZSA9IExPV0VSKFwnJXNcJykKCQkJCQkgIEFORCBvY3RfbmFtZSAgICAgICA9IFwnJXNcJwoJCQkJCScsCgkJCQkJJG9jcl9pZCwKCQkJCQkkdXNlcl9pZCwKCQkJCQkkdG9rZW5fdHlwZSwKCQkJCQkkbmFtZSk7CgoJCS8vIEluc2VydCB0aGUgbmV3IHRva2VuCgkJJHRoaXMtPnF1ZXJ5KCcKCQkJCQlJTlNFUlQgSUdOT1JFIElOVE8gb2F1dGhfY29uc3VtZXJfdG9rZW4KCQkJCQlTRVQgb2N0X29jcl9pZF9yZWYJPSAlZCwKCQkJCQkJb2N0X3VzYV9pZF9yZWYgID0gJWQsCgkJCQkJCW9jdF9uYW1lCQk9IFwnJXNcJywKCQkJCQkJb2N0X3Rva2VuCQk9IFwnJXNcJywKCQkJCQkJb2N0X3Rva2VuX3NlY3JldD0gXCclc1wnLAoJCQkJCQlvY3RfdG9rZW5fdHlwZQk9IExPV0VSKFwnJXNcJyksCgkJCQkJCW9jdF90aW1lc3RhbXAJPSBOT1coKSwKCQkJCQkJb2N0X3Rva2VuX3R0bAk9ICcuJHR0bC4nCgkJCQkJJywKCQkJCQkkb2NyX2lkLAoJCQkJCSR1c2VyX2lkLAoJCQkJCSRuYW1lLAoJCQkJCSR0b2tlbiwKCQkJCQkkdG9rZW5fc2VjcmV0LAoJCQkJCSR0b2tlbl90eXBlKTsKCQkKCQlpZiAoISR0aGlzLT5xdWVyeV9hZmZlY3RlZF9yb3dzKCkpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdSZWNlaXZlZCBkdXBsaWNhdGUgdG9rZW4gIicuJHRva2VuLiciIGZvciB0aGUgc2FtZSBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIicpOwoJCX0KCX0KCgoJLyoqCgkgKiBEZWxldGUgYSBzZXJ2ZXIga2V5LiAgVGhpcyByZW1vdmVzIGFjY2VzcyB0byB0aGF0IHNpdGUuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CgkgKiBAcGFyYW0gaW50IHVzZXJfaWQJdXNlciByZWdpc3RlcmluZyB0aGlzIHNlcnZlcgoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlU2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQoJewoJCWlmICgkdXNlcl9pc19hZG1pbikKCQl7CgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJREVMRVRFIEZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkJICBBTkQgKG9jcl91c2FfaWRfcmVmID0gJWQgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKCQkJCQknLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJREVMRVRFIEZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkJICBBTkQgb2NyX3VzYV9pZF9yZWYgICA9ICVkCgkJCQkJJywgJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQpOwoJCX0KCX0KCQoJCgkvKioKCSAqIEdldCBhIHNlcnZlciBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeSB1c2luZyB0aGUgY29uc3VtZXIga2V5CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CgkgKiBAcGFyYW0gaW50IHVzZXJfaWQKCSAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4gKG9wdGlvbmFsKQoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBzZXJ2ZXIgaXMgbm90IGZvdW5kCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8JCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQoJewoJCSRyID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCgkJCQlTRUxFQ1QJb2NyX2lkCQkJCQlhcyBpZCwKCQkJCQkJb2NyX3VzYV9pZF9yZWYJCQlhcyB1c2VyX2lkLAoJCQkJCQlvY3JfY29uc3VtZXJfa2V5IAkJYXMgY29uc3VtZXJfa2V5LAoJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0IAlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCW9jcl9zaWduYXR1cmVfbWV0aG9kcwlhcyBzaWduYXR1cmVfbWV0aG9kcywKCQkJCQkJb2NyX3NlcnZlcl91cmkJCQlhcyBzZXJ2ZXJfdXJpLAoJCQkJCQlvY3JfcmVxdWVzdF90b2tlbl91cmkJYXMgcmVxdWVzdF90b2tlbl91cmksCgkJCQkJCW9jcl9hdXRob3JpemVfdXJpCQlhcyBhdXRob3JpemVfdXJpLAoJCQkJCQlvY3JfYWNjZXNzX3Rva2VuX3VyaQlhcyBhY2Nlc3NfdG9rZW5fdXJpCgkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkgIEFORCAob2NyX3VzYV9pZF9yZWYgPSAlZCBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMKQoJCQkJJywJJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQpOwoJCQoJCWlmIChlbXB0eSgkcikpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXIgd2l0aCBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIiBoYXMgYmVlbiByZWdpc3RlcmVkIChmb3IgdGhpcyB1c2VyKScpOwoJCX0KCQkJCgkJaWYgKGlzc2V0KCRyWydzaWduYXR1cmVfbWV0aG9kcyddKSAmJiAhZW1wdHkoJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10pKQoJCXsKCQkJJHJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywkclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRyWydzaWduYXR1cmVfbWV0aG9kcyddID0gYXJyYXkoKTsKCQl9CgkJcmV0dXJuICRyOwoJfQoKCgoJLyoqCgkgKiBGaW5kIHRoZSBzZXJ2ZXIgZGV0YWlscyB0aGF0IG1pZ2h0IGJlIHVzZWQgZm9yIGEgcmVxdWVzdAoJICogCgkgKiBUaGUgY29uc3VtZXJfa2V5IG11c3QgYmVsb25nIHRvIHRoZSB1c2VyIG9yIGJlIHB1YmxpYyAodXNlciBpZCBpcyBudWxsKQoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHVyaQl1cmkgb2YgdGhlIHNlcnZlcgoJICogQHBhcmFtIGludCB1c2VyX2lkCWlkIG9mIHRoZSBsb2dnZWQgb24gdXNlcgoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBjcmVkZW50aWFscyBmb3VuZAoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyRm9yVXJpICggJHVyaSwgJHVzZXJfaWQgKQoJewoJCS8vIEZpbmQgYSBjb25zdW1lciBrZXkgYW5kIHRva2VuIGZvciB0aGUgZ2l2ZW4gdXJpCgkJJHBzCQk9IHBhcnNlX3VybCgkdXJpKTsKCQkkaG9zdAk9IGlzc2V0KCRwc1snaG9zdCddKSA/ICRwc1snaG9zdCddIDogJ2xvY2FsaG9zdCc7CgkJJHBhdGgJPSBpc3NldCgkcHNbJ3BhdGgnXSkgPyAkcHNbJ3BhdGgnXSA6ICcnOwoJCQoJCWlmIChlbXB0eSgkcGF0aCkgfHwgc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKQoJCXsKCQkJJHBhdGggLj0gJy8nOwoJCX0KCgkJLy8gVGhlIG93bmVyIG9mIHRoZSBjb25zdW1lcl9rZXkgaXMgZWl0aGVyIHRoZSB1c2VyIG9yIG5vYm9keSAocHVibGljIGNvbnN1bWVyIGtleSkKCQkkc2VydmVyID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCgkJCQkJU0VMRUNUCW9jcl9pZAkJCQkJYXMgaWQsCgkJCQkJCQlvY3JfdXNhX2lkX3JlZgkJCWFzIHVzZXJfaWQsCgkJCQkJCQlvY3JfY29uc3VtZXJfa2V5CQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0CQlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCQlvY3Jfc2lnbmF0dXJlX21ldGhvZHMJYXMgc2lnbmF0dXJlX21ldGhvZHMsCgkJCQkJCQlvY3Jfc2VydmVyX3VyaQkJCWFzIHNlcnZlcl91cmksCgkJCQkJCQlvY3JfcmVxdWVzdF90b2tlbl91cmkJYXMgcmVxdWVzdF90b2tlbl91cmksCgkJCQkJCQlvY3JfYXV0aG9yaXplX3VyaQkJYXMgYXV0aG9yaXplX3VyaSwKCQkJCQkJCW9jcl9hY2Nlc3NfdG9rZW5fdXJpCWFzIGFjY2Vzc190b2tlbl91cmkKCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJV0hFUkUgb2NyX3NlcnZlcl91cmlfaG9zdCA9IFwnJXNcJwoJCQkJCSAgQU5EIG9jcl9zZXJ2ZXJfdXJpX3BhdGggPSBMRUZUKFwnJXNcJywgTEVOR1RIKG9jcl9zZXJ2ZXJfdXJpX3BhdGgpKQoJCQkJCSAgQU5EIChvY3JfdXNhX2lkX3JlZiA9IFwnJWRcJyBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMKQoJCQkJCU9SREVSIEJZIG9jcl91c2FfaWRfcmVmIERFU0MsIGNvbnN1bWVyX3NlY3JldCBERVNDLCBMRU5HVEgob2NyX3NlcnZlcl91cmlfcGF0aCkgREVTQwoJCQkJCUxJTUlUIDAsMQoJCQkJCScsICRob3N0LCAkcGF0aCwgJHVzZXJfaWQKCQkJCQkpOwoJCQoJCWlmIChlbXB0eSgkc2VydmVyKSkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ05vIHNlcnZlciBhdmFpbGFibGUgZm9yICcuJHVyaSk7CgkJfQoJCSRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBleHBsb2RlKCcsJywgJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSk7CgkJcmV0dXJuICRzZXJ2ZXI7Cgl9CgoKCS8qKgoJICogR2V0IGEgbGlzdCBvZiBhbGwgc2VydmVyIHRva2VuIHRoaXMgdXNlciBoYXMgYWNjZXNzIHRvLgoJICogCgkgKiBAcGFyYW0gaW50IHVzcl9pZAoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gbGlzdFNlcnZlclRva2VucyAoICR1c2VyX2lkICkKCXsKCQkkdHMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKCQkJCQlTRUxFQ1QJb2NyX2NvbnN1bWVyX2tleQkJYXMgY29uc3VtZXJfa2V5LAoJCQkJCQkJb2NyX2NvbnN1bWVyX3NlY3JldAkJYXMgY29uc3VtZXJfc2VjcmV0LAoJCQkJCQkJb2N0X2lkCQkJCQlhcyB0b2tlbl9pZCwKCQkJCQkJCW9jdF90b2tlbgkJCQlhcyB0b2tlbiwKCQkJCQkJCW9jdF90b2tlbl9zZWNyZXQJCWFzIHRva2VuX3NlY3JldCwKCQkJCQkJCW9jdF91c2FfaWRfcmVmCQkJYXMgdXNlcl9pZCwKCQkJCQkJCW9jcl9zaWduYXR1cmVfbWV0aG9kcwlhcyBzaWduYXR1cmVfbWV0aG9kcywKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpCQkJYXMgc2VydmVyX3VyaSwKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpX2hvc3QJCWFzIHNlcnZlcl91cmlfaG9zdCwKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpX3BhdGgJCWFzIHNlcnZlcl91cmlfcGF0aCwKCQkJCQkJCW9jcl9yZXF1ZXN0X3Rva2VuX3VyaQlhcyByZXF1ZXN0X3Rva2VuX3VyaSwKCQkJCQkJCW9jcl9hdXRob3JpemVfdXJpCQlhcyBhdXRob3JpemVfdXJpLAoJCQkJCQkJb2NyX2FjY2Vzc190b2tlbl91cmkJYXMgYWNjZXNzX3Rva2VuX3VyaSwKCQkJCQkJCW9jdF90aW1lc3RhbXAJCQlhcyB0aW1lc3RhbXAKCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCQlKT0lOIG9hdXRoX2NvbnN1bWVyX3Rva2VuCgkJCQkJCQlPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAoJCQkJCVdIRVJFIG9jdF91c2FfaWRfcmVmID0gJWQKCQkJCQkgIEFORCBvY3RfdG9rZW5fdHlwZSA9IFwnYWNjZXNzXCcKCQkJCQkgIEFORCBvY3RfdG9rZW5fdHRsICA+PSBOT1coKQoJCQkJCU9SREVSIEJZIG9jcl9zZXJ2ZXJfdXJpX2hvc3QsIG9jcl9zZXJ2ZXJfdXJpX3BhdGgKCQkJCQknLCAkdXNlcl9pZCk7CgkJcmV0dXJuICR0czsKCX0KCgoJLyoqCgkgKiBDb3VudCBob3cgbWFueSB0b2tlbnMgd2UgaGF2ZSBmb3IgdGhlIGdpdmVuIHNlcnZlcgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHJldHVybiBpbnQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvdW50U2VydmVyVG9rZW5zICggJGNvbnN1bWVyX2tleSApCgl7CgkJJGNvdW50ID0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJU0VMRUNUIENPVU5UKG9jdF9pZCkKCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3Rva2VuCgkJCQkJCQlKT0lOIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCQlPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAoJCQkJCVdIRVJFIG9jdF90b2tlbl90eXBlICAgPSBcJ2FjY2Vzc1wnCgkJCQkJICBBTkQgb2NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCSAgQU5EIG9jdF90b2tlbl90dGwgICAgPj0gTk9XKCkKCQkJCQknLCAkY29uc3VtZXJfa2V5KTsKCQkKCQlyZXR1cm4gJGNvdW50OwoJfQoKCgkvKioKCSAqIEdldCBhIHNwZWNpZmljIHNlcnZlciB0b2tlbiBmb3IgdGhlIGdpdmVuIHVzZXIKCSAqIAoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBubyBzdWNoIHRva2VuIGZvdW5kCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHVzZXJfaWQgKQoJewoJCSR0cyA9ICR0aGlzLT5xdWVyeV9yb3dfYXNzb2MoJwoJCQkJCVNFTEVDVAlvY3JfY29uc3VtZXJfa2V5CQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0CQlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCQlvY3RfdG9rZW4JCQkJYXMgdG9rZW4sCgkJCQkJCQlvY3RfdG9rZW5fc2VjcmV0CQlhcyB0b2tlbl9zZWNyZXQsCgkJCQkJCQlvY3RfdXNhX2lkX3JlZgkJCWFzIHVzcl9pZCwKCQkJCQkJCW9jcl9zaWduYXR1cmVfbWV0aG9kcwlhcyBzaWduYXR1cmVfbWV0aG9kcywKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpCQkJYXMgc2VydmVyX3VyaSwKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpX2hvc3QJCWFzIHNlcnZlcl91cmlfaG9zdCwKCQkJCQkJCW9jcl9zZXJ2ZXJfdXJpX3BhdGgJCWFzIHNlcnZlcl91cmlfcGF0aCwKCQkJCQkJCW9jcl9yZXF1ZXN0X3Rva2VuX3VyaQlhcyByZXF1ZXN0X3Rva2VuX3VyaSwKCQkJCQkJCW9jcl9hdXRob3JpemVfdXJpCQlhcyBhdXRob3JpemVfdXJpLAoJCQkJCQkJb2NyX2FjY2Vzc190b2tlbl91cmkJYXMgYWNjZXNzX3Rva2VuX3VyaSwKCQkJCQkJCW9jdF90aW1lc3RhbXAJCQlhcyB0aW1lc3RhbXAKCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCQlKT0lOIG9hdXRoX2NvbnN1bWVyX3Rva2VuCgkJCQkJCQlPTiBvY3Rfb2NyX2lkX3JlZiA9IG9jcl9pZAoJCQkJCVdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKCQkJCQkgIEFORCBvY3RfdXNhX2lkX3JlZiAgID0gJWQKCQkJCQkgIEFORCBvY3RfdG9rZW5fdHlwZSAgID0gXCdhY2Nlc3NcJwoJCQkJCSAgQU5EIG9jdF90b2tlbiAgICAgICAgPSBcJyVzXCcKCQkJCQkgIEFORCBvY3RfdG9rZW5fdHRsICAgID49IE5PVygpCgkJCQkJJywgJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR0b2tlbik7CgkJCgkJaWYgKGVtcHR5KCR0cykpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzdWNoIGNvbnN1bWVyIGtleSAoJy4kY29uc3VtZXJfa2V5LicpIGFuZCB0b2tlbiAoJy4kdG9rZW4uJykgY29tYmluYXRpb24gZm9yIHVzZXIgIicuJHVzZXJfaWQuJyInKTsKCQl9CgkJcmV0dXJuICR0czsKCX0KCgoJLyoqCgkgKiBEZWxldGUgYSB0b2tlbiB3ZSBvYnRhaW5lZCBmcm9tIGEgc2VydmVyLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHBhcmFtIHN0cmluZyB0b2tlbgoJICogQHBhcmFtIGludCB1c2VyX2lkCgkgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVTZXJ2ZXJUb2tlbiAoICRjb25zdW1lcl9rZXksICR0b2tlbiwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQoJewoJCWlmICgkdXNlcl9pc19hZG1pbikKCQl7CgkJCSR0aGlzLT5xdWVyeSgnCgkJCQlERUxFVEUgb2F1dGhfY29uc3VtZXJfdG9rZW4gCgkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3Rva2VuCgkJCQkJCUpPSU4gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQkJT04gb2N0X29jcl9pZF9yZWYgPSBvY3JfaWQKCQkJCVdIRVJFIG9jcl9jb25zdW1lcl9rZXkJPSBcJyVzXCcKCQkJCSAgQU5EIG9jdF90b2tlbgkJCT0gXCclc1wnCgkJCQknLCAkY29uc3VtZXJfa2V5LCAkdG9rZW4pOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJREVMRVRFIG9hdXRoX2NvbnN1bWVyX3Rva2VuIAoJCQkJRlJPTSBvYXV0aF9jb25zdW1lcl90b2tlbgoJCQkJCQlKT0lOIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCU9OIG9jdF9vY3JfaWRfcmVmID0gb2NyX2lkCgkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5CT0gXCclc1wnCgkJCQkgIEFORCBvY3RfdG9rZW4JCQk9IFwnJXNcJwoJCQkJICBBTkQgb2N0X3VzYV9pZF9yZWYJPSAlZAoJCQkJJywgJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdXNlcl9pZCk7CgkJfQoJfQoKCgkvKioKCSAqIFNldCB0aGUgdHRsIG9mIGEgc2VydmVyIGFjY2VzcyB0b2tlbi4gIFRoaXMgaXMgZG9uZSB3aGVuIHRoZQoJICogc2VydmVyIHJlY2VpdmVzIGEgdmFsaWQgcmVxdWVzdCB3aXRoIGEgeG9hdXRoX3Rva2VuX3R0bCBwYXJhbWV0ZXIgaW4gaXQuCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgY29uc3VtZXJfa2V5CgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuCgkgKiBAcGFyYW0gaW50IHRva2VuX3R0bAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0U2VydmVyVG9rZW5UdGwgKCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0b2tlbl90dGwgKQoJewoJCWlmICgkdG9rZW5fdHRsIDw9IDApCgkJewoJCQkvLyBJbW1lZGlhdGUgZGVsZXRlIHdoZW4gdGhlIHRva2VuIGlzIHBhc3QgaXRzIHR0bAoJCQkkdGhpcy0+ZGVsZXRlU2VydmVyVG9rZW4oJGNvbnN1bWVyX2tleSwgJHRva2VuLCAwLCB0cnVlKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gU2V0IG1heGltdW0gdGltZSB0byBsaXZlIGZvciB0aGlzIHRva2VuCgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJCVVQREFURSBvYXV0aF9jb25zdW1lcl90b2tlbiwgb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQkJU0VUIG9zdF90b2tlbl90dGwgPSBEQVRFX0FERChOT1coKSwgSU5URVJWQUwgJWQgU0VDT05EKQoJCQkJCQlXSEVSRSBvY3JfY29uc3VtZXJfa2V5CT0gXCclc1wnCgkJCQkJCSAgQU5EIG9jdF9vY3JfaWRfcmVmICAgID0gb2NyX2lkCgkJCQkJCSAgQU5EIG9jdF90b2tlbiAJICAgID0gXCclc1wnCgkJCQkJCScsICR0b2tlbl90dGwsICRjb25zdW1lcl9rZXksICR0b2tlbik7CgkJfQoJfQoKCgkvKioKCSAqIEdldCBhIGxpc3Qgb2YgYWxsIGNvbnN1bWVycyBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeS4KCSAqIFRoZSBjb25zdW1lciBrZXlzIGJlbG9uZyB0byB0aGUgdXNlciBvciBhcmUgcHVibGljICh1c2VyIGlkIGlzIG51bGwpCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgcQlxdWVyeSB0ZXJtCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwkKCXB1YmxpYyBmdW5jdGlvbiBsaXN0U2VydmVycyAoICRxID0gJycsICR1c2VyX2lkICkKCXsKCQkkcSAgICA9IHRyaW0oc3RyX3JlcGxhY2UoJyUnLCAnJywgJHEpKTsKCQkkYXJncyA9IGFycmF5KCk7CgoJCWlmICghZW1wdHkoJHEpKQoJCXsKCQkJJHdoZXJlID0gJyBXSEVSRSAoCW9jcl9jb25zdW1lcl9rZXkgbGlrZSBcJyUlJXMlJVwnCgkJCQkJCSAgCSBPUiBvY3Jfc2VydmVyX3VyaSBsaWtlIFwnJSUlcyUlXCcKCQkJCQkJICAJIE9SIG9jcl9zZXJ2ZXJfdXJpX2hvc3QgbGlrZSBcJyUlJXMlJVwnCgkJCQkJCSAgCSBPUiBvY3Jfc2VydmVyX3VyaV9wYXRoIGxpa2UgXCclJSVzJSVcJykKCQkJCQkJIEFORCAob2NyX3VzYV9pZF9yZWYgPSAlZCBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMKQoJCQkJCSc7CgkJCQoJCQkkYXJnc1tdID0gJHE7CgkJCSRhcmdzW10gPSAkcTsKCQkJJGFyZ3NbXSA9ICRxOwoJCQkkYXJnc1tdID0gJHE7CgkJCSRhcmdzW10gPSAkdXNlcl9pZDsKCQl9CgkJZWxzZQoJCXsKCQkJJHdoZXJlICA9ICcgV0hFUkUgb2NyX3VzYV9pZF9yZWYgPSAlZCBPUiBvY3JfdXNhX2lkX3JlZiBJUyBOVUxMJzsKCQkJJGFyZ3NbXSA9ICR1c2VyX2lkOwoJCX0KCgkJJHNlcnZlcnMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKCQkJCQlTRUxFQ1QJb2NyX2lkCQkJCQlhcyBpZCwKCQkJCQkJCW9jcl91c2FfaWRfcmVmCQkJYXMgdXNlcl9pZCwKCQkJCQkJCW9jcl9jb25zdW1lcl9rZXkgCQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCQlvY3JfY29uc3VtZXJfc2VjcmV0IAlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCQlvY3Jfc2lnbmF0dXJlX21ldGhvZHMJYXMgc2lnbmF0dXJlX21ldGhvZHMsCgkJCQkJCQlvY3Jfc2VydmVyX3VyaQkJCWFzIHNlcnZlcl91cmksCgkJCQkJCQlvY3Jfc2VydmVyX3VyaV9ob3N0CQlhcyBzZXJ2ZXJfdXJpX2hvc3QsCgkJCQkJCQlvY3Jfc2VydmVyX3VyaV9wYXRoCQlhcyBzZXJ2ZXJfdXJpX3BhdGgsCgkJCQkJCQlvY3JfcmVxdWVzdF90b2tlbl91cmkJYXMgcmVxdWVzdF90b2tlbl91cmksCgkJCQkJCQlvY3JfYXV0aG9yaXplX3VyaQkJYXMgYXV0aG9yaXplX3VyaSwKCQkJCQkJCW9jcl9hY2Nlc3NfdG9rZW5fdXJpCWFzIGFjY2Vzc190b2tlbl91cmkKCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJJy4kd2hlcmUuJwoJCQkJCU9SREVSIEJZIG9jcl9zZXJ2ZXJfdXJpX2hvc3QsIG9jcl9zZXJ2ZXJfdXJpX3BhdGgKCQkJCQknLCAkYXJncyk7CgkJcmV0dXJuICRzZXJ2ZXJzOwoJfQoKCgkvKioKCSAqIFJlZ2lzdGVyIG9yIHVwZGF0ZSBhIHNlcnZlciBmb3Igb3VyIHNpdGUgKHdlIHdpbGwgYmUgdGhlIGNvbnN1bWVyKQoJICogCgkgKiAoVGhpcyBpcyB0aGUgcmVnaXN0cnkgYXQgdGhlIGNvbnN1bWVycywgcmVnaXN0ZXJpbmcgc2VydmVycyA7LSkgKQoJICogCgkgKiBAcGFyYW0gYXJyYXkgc2VydmVyCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQJdXNlciByZWdpc3RlcmluZyB0aGlzIHNlcnZlcgoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbgoJICogQGV4Y2VwdGlvbiBPQXV0aEV4Y2VwdGlvbjIgd2hlbiBmaWVsZHMgYXJlIG1pc3Npbmcgb3Igb24gZHVwbGljYXRlIGNvbnN1bWVyX2tleQoJICogQHJldHVybiBjb25zdW1lcl9rZXkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVwZGF0ZVNlcnZlciAoICRzZXJ2ZXIsICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKCXsKCQlmb3JlYWNoIChhcnJheSgnY29uc3VtZXJfa2V5JywgJ3NlcnZlcl91cmknKSBhcyAkZikKCQl7CgkJCWlmIChlbXB0eSgkc2VydmVyWyRmXSkpCgkJCXsKCQkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ1RoZSBmaWVsZCAiJy4kZi4nIiBtdXN0IGJlIHNldCBhbmQgbm9uIGVtcHR5Jyk7CgkJCX0KCQl9CgkJCgkJaWYgKCFlbXB0eSgkc2VydmVyWydpZCddKSkKCQl7CgkJCSRleGlzdHMgPSAkdGhpcy0+cXVlcnlfb25lKCcKCQkJCQkJU0VMRUNUIG9jcl9pZAoJCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCVdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKCQkJCQkJICBBTkQgb2NyX2lkIDw+ICVkCgkJCQkJCSAgQU5EIChvY3JfdXNhX2lkX3JlZiA9ICVkIE9SIG9jcl91c2FfaWRfcmVmIElTIE5VTEwpCgkJCQkJCScsICRzZXJ2ZXJbJ2NvbnN1bWVyX2tleSddLCAkc2VydmVyWydpZCddLCAkdXNlcl9pZCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRleGlzdHMgPSAkdGhpcy0+cXVlcnlfb25lKCcKCQkJCQkJU0VMRUNUIG9jcl9pZAoJCQkJCQlGUk9NIG9hdXRoX2NvbnN1bWVyX3JlZ2lzdHJ5CgkJCQkJCVdIRVJFIG9jcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKCQkJCQkJICBBTkQgKG9jcl91c2FfaWRfcmVmID0gJWQgT1Igb2NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKCQkJCQkJJywgJHNlcnZlclsnY29uc3VtZXJfa2V5J10sICR1c2VyX2lkKTsKCQl9CgoJCWlmICgkZXhpc3RzKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHNlcnZlciB3aXRoIGtleSAiJy4kc2VydmVyWydjb25zdW1lcl9rZXknXS4nIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQnKTsKCQl9CgoJCSRwYXJ0cyA9IHBhcnNlX3VybCgkc2VydmVyWydzZXJ2ZXJfdXJpJ10pOwoJCSRob3N0ICA9IChpc3NldCgkcGFydHNbJ2hvc3QnXSkgPyAkcGFydHNbJ2hvc3QnXSA6ICdsb2NhbGhvc3QnKTsKCQkkcGF0aCAgPSAoaXNzZXQoJHBhcnRzWydwYXRoJ10pID8gJHBhcnRzWydwYXRoJ10gOiAnLycpOwoKCQlpZiAoaXNzZXQoJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSkpCgkJewoJCQlpZiAoaXNfYXJyYXkoJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXSkpCgkJCXsKCQkJCSRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSBzdHJ0b3VwcGVyKGltcGxvZGUoJywnLCAkc2VydmVyWydzaWduYXR1cmVfbWV0aG9kcyddKSk7CgkJCX0KCQl9CQoJCWVsc2UKCQl7CgkJCSRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10gPSAnJzsKCQl9CgoJCS8vIFdoZW4gdGhlIHVzZXIgaXMgYW4gYWRtaW4sIHRoZW4gdGhlIHVzZXIgY2FuIHVwZGF0ZSB0aGUgdXNlcl9pZCBvZiB0aGlzIHJlY29yZAoJCWlmICgkdXNlcl9pc19hZG1pbiAmJiBhcnJheV9rZXlfZXhpc3RzKCd1c2VyX2lkJywgJHNlcnZlcikpCgkJewoJCQlpZiAoaXNfbnVsbCgkc2VydmVyWyd1c2VyX2lkJ10pKQoJCQl7CgkJCQkkdXBkYXRlX3VzZXIgPSAgJywgb2NyX3VzYV9pZF9yZWYgPSBOVUxMJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR1cGRhdGVfdXNlciA9ICAnLCBvY3JfdXNhX2lkX3JlZiA9ICcuaW50dmFsKCRzZXJ2ZXJbJ3VzZXJfaWQnXSk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHVwZGF0ZV91c2VyID0gJyc7CgkJfQoJCQoJCWlmICghZW1wdHkoJHNlcnZlclsnaWQnXSkpCgkJewoJCQkvLyBDaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGNhbiB1cGRhdGUgdGhpcyBzZXJ2ZXIgZGVmaW5pdGlvbgoJCQlpZiAoISR1c2VyX2lzX2FkbWluKQoJCQl7CgkJCQkkb2NyX3VzYV9pZF9yZWYgPSAkdGhpcy0+cXVlcnlfb25lKCcKCQkJCQkJCQkJU0VMRUNUIG9jcl91c2FfaWRfcmVmCgkJCQkJCQkJCUZST00gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQkJCQkJV0hFUkUgb2NyX2lkID0gJWQKCQkJCQkJCQkJJywgJHNlcnZlclsnaWQnXSk7CgkJCQkKCQkJCWlmICgkb2NyX3VzYV9pZF9yZWYgIT0gJHVzZXJfaWQpCgkJCQl7CgkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHVzZXIgIicuJHVzZXJfaWQuJyIgaXMgbm90IGFsbG93ZWQgdG8gdXBkYXRlIHRoaXMgc2VydmVyJyk7CgkJCQl9CgkJCX0KCQkJCgkJCS8vIFVwZGF0ZSB0aGUgY29uc3VtZXIgcmVnaXN0cmF0aW9uCQoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJCVVQREFURSBvYXV0aF9jb25zdW1lcl9yZWdpc3RyeQoJCQkJCVNFVCBvY3JfY29uc3VtZXJfa2V5ICAgIAk9IFwnJXNcJywKCQkJCQkJb2NyX2NvbnN1bWVyX3NlY3JldCAJPSBcJyVzXCcsCgkJCQkJCW9jcl9zZXJ2ZXJfdXJpCSAgICAJPSBcJyVzXCcsCgkJCQkJCW9jcl9zZXJ2ZXJfdXJpX2hvc3QgCT0gXCclc1wnLAoJCQkJCQlvY3Jfc2VydmVyX3VyaV9wYXRoIAk9IFwnJXNcJywKCQkJCQkJb2NyX3RpbWVzdGFtcCAgICAgICAJPSBOT1coKSwKCQkJCQkJb2NyX3JlcXVlc3RfdG9rZW5fdXJpCT0gXCclc1wnLAoJCQkJCQlvY3JfYXV0aG9yaXplX3VyaQkJPSBcJyVzXCcsCgkJCQkJCW9jcl9hY2Nlc3NfdG9rZW5fdXJpCT0gXCclc1wnLAoJCQkJCQlvY3Jfc2lnbmF0dXJlX21ldGhvZHMJPSBcJyVzXCcKCQkJCQkJJy4kdXBkYXRlX3VzZXIuJwoJCQkJCVdIRVJFIG9jcl9pZCA9ICVkCgkJCQkJJywgCgkJCQkJJHNlcnZlclsnY29uc3VtZXJfa2V5J10sCgkJCQkJJHNlcnZlclsnY29uc3VtZXJfc2VjcmV0J10sCgkJCQkJJHNlcnZlclsnc2VydmVyX3VyaSddLAoJCQkJCXN0cnRvbG93ZXIoJGhvc3QpLAoJCQkJCSRwYXRoLAoJCQkJCWlzc2V0KCRzZXJ2ZXJbJ3JlcXVlc3RfdG9rZW5fdXJpJ10pID8gJHNlcnZlclsncmVxdWVzdF90b2tlbl91cmknXSA6ICcnLAoJCQkJCWlzc2V0KCRzZXJ2ZXJbJ2F1dGhvcml6ZV91cmknXSkgICAgID8gJHNlcnZlclsnYXV0aG9yaXplX3VyaSddICAgICA6ICcnLAoJCQkJCWlzc2V0KCRzZXJ2ZXJbJ2FjY2Vzc190b2tlbl91cmknXSkgID8gJHNlcnZlclsnYWNjZXNzX3Rva2VuX3VyaSddICA6ICcnLAoJCQkJCSRzZXJ2ZXJbJ3NpZ25hdHVyZV9tZXRob2RzJ10sCgkJCQkJJHNlcnZlclsnaWQnXQoJCQkJCSk7CgkJfQoJCWVsc2UKCQl7CgkJCWlmIChlbXB0eSgkdXBkYXRlX3VzZXIpKQoJCQl7CgkJCQkvLyBQZXIgZGVmYXVsdCB0aGUgdXNlciBvd25pbmcgdGhlIGtleSBpcyB0aGUgdXNlciByZWdpc3RlcmluZyB0aGUga2V5CgkJCQkkdXBkYXRlX3VzZXIgPSAgJywgb2NyX3VzYV9pZF9yZWYgPSAnLmludHZhbCgkdXNlcl9pZCk7CgkJCX0KCgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJSU5TRVJUIElOVE8gb2F1dGhfY29uc3VtZXJfcmVnaXN0cnkKCQkJCQlTRVQgb2NyX2NvbnN1bWVyX2tleSAgICAJPSBcJyVzXCcsCgkJCQkJCW9jcl9jb25zdW1lcl9zZWNyZXQgCT0gXCclc1wnLAoJCQkJCQlvY3Jfc2VydmVyX3VyaQkgICAgCT0gXCclc1wnLAoJCQkJCQlvY3Jfc2VydmVyX3VyaV9ob3N0IAk9IFwnJXNcJywKCQkJCQkJb2NyX3NlcnZlcl91cmlfcGF0aCAJPSBcJyVzXCcsCgkJCQkJCW9jcl90aW1lc3RhbXAgICAgICAgCT0gTk9XKCksCgkJCQkJCW9jcl9yZXF1ZXN0X3Rva2VuX3VyaQk9IFwnJXNcJywKCQkJCQkJb2NyX2F1dGhvcml6ZV91cmkJCT0gXCclc1wnLAoJCQkJCQlvY3JfYWNjZXNzX3Rva2VuX3VyaQk9IFwnJXNcJywKCQkJCQkJb2NyX3NpZ25hdHVyZV9tZXRob2RzCT0gXCclc1wnCgkJCQkJCScuJHVwZGF0ZV91c2VyLCAKCQkJCQkkc2VydmVyWydjb25zdW1lcl9rZXknXSwKCQkJCQkkc2VydmVyWydjb25zdW1lcl9zZWNyZXQnXSwKCQkJCQkkc2VydmVyWydzZXJ2ZXJfdXJpJ10sCgkJCQkJc3RydG9sb3dlcigkaG9zdCksCgkJCQkJJHBhdGgsCgkJCQkJaXNzZXQoJHNlcnZlclsncmVxdWVzdF90b2tlbl91cmknXSkgPyAkc2VydmVyWydyZXF1ZXN0X3Rva2VuX3VyaSddIDogJycsCgkJCQkJaXNzZXQoJHNlcnZlclsnYXV0aG9yaXplX3VyaSddKSAgICAgPyAkc2VydmVyWydhdXRob3JpemVfdXJpJ10gICAgIDogJycsCgkJCQkJaXNzZXQoJHNlcnZlclsnYWNjZXNzX3Rva2VuX3VyaSddKSAgPyAkc2VydmVyWydhY2Nlc3NfdG9rZW5fdXJpJ10gIDogJycsCgkJCQkJJHNlcnZlclsnc2lnbmF0dXJlX21ldGhvZHMnXQoJCQkJCSk7CgkJCgkJCSRvY3JfaWQgPSAkdGhpcy0+cXVlcnlfaW5zZXJ0X2lkKCk7CgkJfQoJCXJldHVybiAkc2VydmVyWydjb25zdW1lcl9rZXknXTsKCX0KCgoJLyoqCgkgKiBJbnNlcnQvdXBkYXRlIGEgbmV3IGNvbnN1bWVyIHdpdGggdGhpcyBzZXJ2ZXIgKHdlIHdpbGwgYmUgdGhlIHNlcnZlcikKCSAqIFdoZW4gdGhpcyBpcyBhIG5ldyBjb25zdW1lciwgdGhlbiBhbHNvIGdlbmVyYXRlIHRoZSBjb25zdW1lciBrZXkgYW5kIHNlY3JldC4KCSAqIE5ldmVyIHVwZGF0ZXMgdGhlIGNvbnN1bWVyIGtleSBhbmQgc2VjcmV0LgoJICogV2hlbiB0aGUgaWQgaXMgc2V0LCB0aGVuIHRoZSBrZXkgYW5kIHNlY3JldCBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIGVudHJ5CgkgKiBiZWluZyB1cGRhdGVkLgoJICogCgkgKiAoVGhpcyBpcyB0aGUgcmVnaXN0cnkgYXQgdGhlIHNlcnZlciwgcmVnaXN0ZXJpbmcgY29uc3VtZXJzIDstKSApCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBjb25zdW1lcgoJICogQHBhcmFtIGludCB1c2VyX2lkCXVzZXIgcmVnaXN0ZXJpbmcgdGhpcyBjb25zdW1lcgoJICogQHBhcmFtIGJvb2xlYW4gdXNlcl9pc19hZG1pbgoJICogQHJldHVybiBzdHJpbmcgY29uc3VtZXIga2V5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1cGRhdGVDb25zdW1lciAoICRjb25zdW1lciwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQoJewoJCWlmICghJHVzZXJfaXNfYWRtaW4pCgkJewoJCQlmb3JlYWNoIChhcnJheSgncmVxdWVzdGVyX25hbWUnLCAncmVxdWVzdGVyX2VtYWlsJykgYXMgJGYpCgkJCXsKCQkJCWlmIChlbXB0eSgkY29uc3VtZXJbJGZdKSkKCQkJCXsKCQkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaGUgZmllbGQgIicuJGYuJyIgbXVzdCBiZSBzZXQgYW5kIG5vbiBlbXB0eScpOwoJCQkJfQoJCQl9CgkJfQoJCQoJCWlmICghZW1wdHkoJGNvbnN1bWVyWydpZCddKSkKCQl7CgkJCWlmIChlbXB0eSgkY29uc3VtZXJbJ2NvbnN1bWVyX2tleSddKSkKCQkJewoJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIGZpZWxkICJjb25zdW1lcl9rZXkiIG11c3QgYmUgc2V0IGFuZCBub24gZW1wdHknKTsKCQkJfQoJCQlpZiAoISR1c2VyX2lzX2FkbWluICYmIGVtcHR5KCRjb25zdW1lclsnY29uc3VtZXJfc2VjcmV0J10pKQoJCQl7CgkJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaGUgZmllbGQgImNvbnN1bWVyX3NlY3JldCIgbXVzdCBiZSBzZXQgYW5kIG5vbiBlbXB0eScpOwoJCQl9CgoJCQkvLyBDaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGNhbiB1cGRhdGUgdGhpcyBzZXJ2ZXIgZGVmaW5pdGlvbgoJCQlpZiAoISR1c2VyX2lzX2FkbWluKQoJCQl7CgkJCQkkb3NyX3VzYV9pZF9yZWYgPSAkdGhpcy0+cXVlcnlfb25lKCcKCQkJCQkJCQkJU0VMRUNUIG9zcl91c2FfaWRfcmVmCgkJCQkJCQkJCUZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQkJCQkJCVdIRVJFIG9zcl9pZCA9ICVkCgkJCQkJCQkJCScsICRjb25zdW1lclsnaWQnXSk7CgkJCQkKCQkJCWlmICgkb3NyX3VzYV9pZF9yZWYgIT0gJHVzZXJfaWQpCgkJCQl7CgkJCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignVGhlIHVzZXIgIicuJHVzZXJfaWQuJyIgaXMgbm90IGFsbG93ZWQgdG8gdXBkYXRlIHRoaXMgY29uc3VtZXInKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIFVzZXIgaXMgYW4gYWRtaW4sIGFsbG93IGEga2V5IG93bmVyIHRvIGJlIGNoYW5nZWQgb3Iga2V5IHRvIGJlIHNoYXJlZAoJCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ3VzZXJfaWQnLCRjb25zdW1lcikpCgkJCQl7CgkJCQkJaWYgKGlzX251bGwoJGNvbnN1bWVyWyd1c2VyX2lkJ10pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnF1ZXJ5KCcKCQkJCQkJCVVQREFURSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCQkJCVNFVCBvc3JfdXNhX2lkX3JlZiA9IE5VTEwKCQkJCQkJCVdIRVJFIG9zcl9pZCA9ICVkCgkJCQkJCQknLCAkY29uc3VtZXJbJ2lkJ10pOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGhpcy0+cXVlcnkoJwoJCQkJCQkJVVBEQVRFIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJCQkJU0VUIG9zcl91c2FfaWRfcmVmID0gJWQKCQkJCQkJCVdIRVJFIG9zcl9pZCA9ICVkCgkJCQkJCQknLCAkY29uc3VtZXJbJ3VzZXJfaWQnXSwgJGNvbnN1bWVyWydpZCddKTsJCgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJVVBEQVRFIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJU0VUIG9zcl9yZXF1ZXN0ZXJfbmFtZQkJPSBcJyVzXCcsCgkJCQkJb3NyX3JlcXVlc3Rlcl9lbWFpbAkJPSBcJyVzXCcsCgkJCQkJb3NyX2NhbGxiYWNrX3VyaQkJPSBcJyVzXCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX3VyaQkJPSBcJyVzXCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX3RpdGxlCT0gXCclc1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl9kZXNjcgk9IFwnJXNcJywKCQkJCQlvc3JfYXBwbGljYXRpb25fbm90ZXMJPSBcJyVzXCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX3R5cGUJPSBcJyVzXCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwgPSBJRiglZCwxLDApLAoJCQkJCW9zcl90aW1lc3RhbXAJCQk9IE5PVygpCgkJCQlXSEVSRSBvc3JfaWQgICAgICAgICAgICAgID0gJWQKCQkJCSAgQU5EIG9zcl9jb25zdW1lcl9rZXkgICAgPSBcJyVzXCcKCQkJCSAgQU5EIG9zcl9jb25zdW1lcl9zZWNyZXQgPSBcJyVzXCcKCQkJCScsCgkJCQkkY29uc3VtZXJbJ3JlcXVlc3Rlcl9uYW1lJ10sCgkJCQkkY29uc3VtZXJbJ3JlcXVlc3Rlcl9lbWFpbCddLAoJCQkJaXNzZXQoJGNvbnN1bWVyWydjYWxsYmFja191cmknXSkgCQk/ICRjb25zdW1lclsnY2FsbGJhY2tfdXJpJ10gCQkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddKSAJPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3VyaSddIAkJCSA6ICcnLAoJCQkJaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90aXRsZSddKQk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdGl0bGUnXSAJCSA6ICcnLAoJCQkJaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9kZXNjciddKQk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fZGVzY3InXSAJCSA6ICcnLAoJCQkJaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddKQk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fbm90ZXMnXSAJCSA6ICcnLAoJCQkJaXNzZXQoJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90eXBlJ10pIAk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdHlwZSddIAkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSkgPyAkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2NvbW1lcmNpYWwnXSA6IDAsCgkJCQkkY29uc3VtZXJbJ2lkJ10sCgkJCQkkY29uc3VtZXJbJ2NvbnN1bWVyX2tleSddLAoJCQkJJGNvbnN1bWVyWydjb25zdW1lcl9zZWNyZXQnXQoJCQkJKTsKCQkJCQoKCQkJJGNvbnN1bWVyX2tleSA9ICRjb25zdW1lclsnY29uc3VtZXJfa2V5J107CgkJfQoJCWVsc2UKCQl7CgkJCSRjb25zdW1lcl9rZXkJPSAkdGhpcy0+Z2VuZXJhdGVLZXkodHJ1ZSk7CgkJCSRjb25zdW1lcl9zZWNyZXQ9ICR0aGlzLT5nZW5lcmF0ZUtleSgpOwoKCQkJLy8gV2hlbiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgdGhlbiB0aGUgdXNlciBjYW4gYmUgZm9yY2VkIHRvIHNvbWV0aGluZyBlbHNlIHRoYXQgdGhlIHVzZXIKCQkJaWYgKCR1c2VyX2lzX2FkbWluICYmIGFycmF5X2tleV9leGlzdHMoJ3VzZXJfaWQnLCRjb25zdW1lcikpCgkJCXsKCQkJCWlmIChpc19udWxsKCRjb25zdW1lclsndXNlcl9pZCddKSkKCQkJCXsKCQkJCQkkb3duZXJfaWQgPSAnTlVMTCc7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG93bmVyX2lkID0gaW50dmFsKCRjb25zdW1lclsndXNlcl9pZCddKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIE5vIGFkbWluLCB0YWtlIHRoZSB1c2VyIGlkIGFzIHRoZSBvd25lciBpZC4KCQkJCSRvd25lcl9pZCA9IGludHZhbCgkdXNlcl9pZCk7CgkJCX0KCgkJCSR0aGlzLT5xdWVyeSgnCgkJCQlJTlNFUlQgSU5UTyBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCVNFVCBvc3JfZW5hYmxlZAkJCQk9IDEsCgkJCQkJb3NyX3N0YXR1cwkJCQk9IFwnYWN0aXZlXCcsCgkJCQkJb3NyX3VzYV9pZF9yZWYJCQk9IFwnJXNcJywKCQkJCQlvc3JfY29uc3VtZXJfa2V5CQk9IFwnJXNcJywKCQkJCQlvc3JfY29uc3VtZXJfc2VjcmV0CQk9IFwnJXNcJywKCQkJCQlvc3JfcmVxdWVzdGVyX25hbWUJCT0gXCclc1wnLAoJCQkJCW9zcl9yZXF1ZXN0ZXJfZW1haWwJCT0gXCclc1wnLAoJCQkJCW9zcl9jYWxsYmFja191cmkJCT0gXCclc1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl91cmkJCT0gXCclc1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl90aXRsZQk9IFwnJXNcJywKCQkJCQlvc3JfYXBwbGljYXRpb25fZGVzY3IJPSBcJyVzXCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX25vdGVzCT0gXCclc1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl90eXBlCT0gXCclc1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl9jb21tZXJjaWFsID0gSUYoJWQsMSwwKSwKCQkJCQlvc3JfdGltZXN0YW1wCQkJPSBOT1coKSwKCQkJCQlvc3JfaXNzdWVfZGF0ZQkJCT0gTk9XKCkKCQkJCScsCgkJCQkkb3duZXJfaWQsCgkJCQkkY29uc3VtZXJfa2V5LAoJCQkJJGNvbnN1bWVyX3NlY3JldCwKCQkJCSRjb25zdW1lclsncmVxdWVzdGVyX25hbWUnXSwKCQkJCSRjb25zdW1lclsncmVxdWVzdGVyX2VtYWlsJ10sCgkJCQlpc3NldCgkY29uc3VtZXJbJ2NhbGxiYWNrX3VyaSddKSAJCT8gJGNvbnN1bWVyWydjYWxsYmFja191cmknXSAJCQkgOiAnJywKCQkJCWlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fdXJpJ10pIAk/ICRjb25zdW1lclsnYXBwbGljYXRpb25fdXJpJ10gCQkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3RpdGxlJ10pCT8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90aXRsZSddIAkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX2Rlc2NyJ10pCT8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9kZXNjciddIAkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX25vdGVzJ10pCT8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl9ub3RlcyddIAkJIDogJycsCgkJCQlpc3NldCgkY29uc3VtZXJbJ2FwcGxpY2F0aW9uX3R5cGUnXSkgCT8gJGNvbnN1bWVyWydhcHBsaWNhdGlvbl90eXBlJ10gCQkgOiAnJywKCQkJCWlzc2V0KCRjb25zdW1lclsnYXBwbGljYXRpb25fY29tbWVyY2lhbCddKSA/ICRjb25zdW1lclsnYXBwbGljYXRpb25fY29tbWVyY2lhbCddIDogMAoJCQkJKTsKCQl9CgkJcmV0dXJuICRjb25zdW1lcl9rZXk7CgoJfQoKCgoJLyoqCgkgKiBEZWxldGUgYSBjb25zdW1lciBrZXkuICBUaGlzIHJlbW92ZXMgYWNjZXNzIHRvIG91ciBzaXRlIGZvciBhbGwgYXBwbGljYXRpb25zIHVzaW5nIHRoaXMga2V5LgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHBhcmFtIGludCB1c2VyX2lkCXVzZXIgcmVnaXN0ZXJpbmcgdGhpcyBzZXJ2ZXIKCSAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZUNvbnN1bWVyICggJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQsICR1c2VyX2lzX2FkbWluID0gZmFsc2UgKQoJewoJCWlmICgkdXNlcl9pc19hZG1pbikKCQl7CgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJREVMRVRFIEZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQkJV0hFUkUgb3NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCSAgQU5EIChvc3JfdXNhX2lkX3JlZiA9ICVkIE9SIG9zcl91c2FfaWRfcmVmIElTIE5VTEwpCgkJCQkJJywgJGNvbnN1bWVyX2tleSwgJHVzZXJfaWQpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJCURFTEVURSBGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJCVdIRVJFIG9zcl9jb25zdW1lcl9rZXkgPSBcJyVzXCcKCQkJCQkgIEFORCBvc3JfdXNhX2lkX3JlZiAgID0gJWQKCQkJCQknLCAkY29uc3VtZXJfa2V5LCAkdXNlcl9pZCk7CgkJfQoJfQkKCQoJCgkKCS8qKgoJICogRmV0Y2ggYSBjb25zdW1lciBvZiB0aGlzIHNlcnZlciwgYnkgY29uc3VtZXJfa2V5LgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHBhcmFtIGludCB1c2VyX2lkCgkgKiBAcGFyYW0gYm9vbGVhbiB1c2VyX2lzX2FkbWluIChvcHRpb25hbCkKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gY29uc3VtZXIgbm90IGZvdW5kCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lciAoICRjb25zdW1lcl9rZXksICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKCXsKCQkkY29uc3VtZXIgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKCQkJCQkJU0VMRUNUCSoKCQkJCQkJRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCQkJV0hFUkUgb3NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCQknLCAkY29uc3VtZXJfa2V5KTsKCQkKCQlpZiAoIWlzX2FycmF5KCRjb25zdW1lcikpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBjb25zdW1lciB3aXRoIGNvbnN1bWVyX2tleSAiJy4kY29uc3VtZXJfa2V5LiciJyk7CgkJfQoKCQkkYyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJGNvbnN1bWVyIGFzICRrZXkgPT4gJHZhbHVlKQoJCXsKCQkJJGNbc3Vic3RyKCRrZXksIDQpXSA9ICR2YWx1ZTsKCQl9CgkJJGNbJ3VzZXJfaWQnXSA9ICRjWyd1c2FfaWRfcmVmJ107CgoJCWlmICghJHVzZXJfaXNfYWRtaW4gJiYgIWVtcHR5KCRjWyd1c2VyX2lkJ10pICYmICRjWyd1c2VyX2lkJ10gIT0gJHVzZXJfaWQpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBhY2Nlc3MgdG8gdGhlIGNvbnN1bWVyIGluZm9ybWF0aW9uIGZvciBjb25zdW1lcl9rZXkgIicuJGNvbnN1bWVyX2tleS4nIicpOwoJCX0KCQlyZXR1cm4gJGM7Cgl9CgoKCS8qKgoJICogRmV0Y2ggdGhlIHN0YXRpYyBjb25zdW1lciBrZXkgZm9yIHRoaXMgcHJvdmlkZXIuICBUaGUgdXNlciBmb3IgdGhlIHN0YXRpYyBjb25zdW1lciAKCSAqIGtleSBpcyBOVUxMIChubyB1c2VyLCBzaGFyZWQga2V5KS4gIElmIHRoZSBrZXkgZGlkIG5vdCBleGlzdCB0aGVuIHRoZSBrZXkgaXMgY3JlYXRlZC4KCSAqIAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyU3RhdGljICgpCgl7CgkJJGNvbnN1bWVyID0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJCVNFTEVDVCBvc3JfY29uc3VtZXJfa2V5CgkJCQkJCUZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQkJCVdIRVJFIG9zcl9jb25zdW1lcl9rZXkgTElLRSBcJ3NjLSUlXCcKCQkJCQkJICBBTkQgb3NyX3VzYV9pZF9yZWYgSVMgTlVMTAoJCQkJCQknKTsKCgkJaWYgKGVtcHR5KCRjb25zdW1lcikpCgkJewoJCQkkY29uc3VtZXJfa2V5ID0gJ3NjLScuJHRoaXMtPmdlbmVyYXRlS2V5KHRydWUpOwoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJSU5TRVJUIElOVE8gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQlTRVQgb3NyX2VuYWJsZWQJCQkJPSAxLAoJCQkJCW9zcl9zdGF0dXMJCQkJPSBcJ2FjdGl2ZVwnLAoJCQkJCW9zcl91c2FfaWRfcmVmCQkJPSBOVUxMLAoJCQkJCW9zcl9jb25zdW1lcl9rZXkJCT0gXCclc1wnLAoJCQkJCW9zcl9jb25zdW1lcl9zZWNyZXQJCT0gXCdcJywKCQkJCQlvc3JfcmVxdWVzdGVyX25hbWUJCT0gXCdcJywKCQkJCQlvc3JfcmVxdWVzdGVyX2VtYWlsCQk9IFwnXCcsCgkJCQkJb3NyX2NhbGxiYWNrX3VyaQkJPSBcJ1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl91cmkJCT0gXCdcJywKCQkJCQlvc3JfYXBwbGljYXRpb25fdGl0bGUJPSBcJ1N0YXRpYyBzaGFyZWQgY29uc3VtZXIga2V5XCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX2Rlc2NyCT0gXCdcJywKCQkJCQlvc3JfYXBwbGljYXRpb25fbm90ZXMJPSBcJ1N0YXRpYyBzaGFyZWQgY29uc3VtZXIga2V5XCcsCgkJCQkJb3NyX2FwcGxpY2F0aW9uX3R5cGUJPSBcJ1wnLAoJCQkJCW9zcl9hcHBsaWNhdGlvbl9jb21tZXJjaWFsID0gMCwKCQkJCQlvc3JfdGltZXN0YW1wCQkJPSBOT1coKSwKCQkJCQlvc3JfaXNzdWVfZGF0ZQkJCT0gTk9XKCkKCQkJCScsCgkJCQkkY29uc3VtZXJfa2V5CgkJCQkpOwoJCQkKCQkJLy8gSnVzdCBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgY29uc3VtZXIga2V5IGlzIHRydW5jYXRlZCB0aGF0IHdlIGdldCB0aGUgdHJ1bmNhdGVkIHN0cmluZwoJCQkkY29uc3VtZXIgPSAkdGhpcy0+Z2V0Q29uc3VtZXJTdGF0aWMoKTsKCQl9CgkJcmV0dXJuICRjb25zdW1lcjsKCX0KCgoJLyoqCgkgKiBBZGQgYW4gdW5hdXRvcml6ZWQgcmVxdWVzdCB0b2tlbiB0byBvdXIgc2VydmVyLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIGNvbnN1bWVyX2tleQoJICogQHBhcmFtIGFycmF5IG9wdGlvbnMJCShlZy4gdG9rZW5fdHRsKQoJICogQHJldHVybiBhcnJheSAodG9rZW4sIHRva2VuX3NlY3JldCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZENvbnN1bWVyUmVxdWVzdFRva2VuICggJGNvbnN1bWVyX2tleSwgJG9wdGlvbnMgPSBhcnJheSgpICkKCXsKCQkkdG9rZW4gID0gJHRoaXMtPmdlbmVyYXRlS2V5KHRydWUpOwoJCSRzZWNyZXQgPSAkdGhpcy0+Z2VuZXJhdGVLZXkoKTsKCQkkb3NyX2lkCT0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJCVNFTEVDVCBvc3JfaWQKCQkJCQkJRlJPTSBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCQkJV0hFUkUgb3NyX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCQkgIEFORCBvc3JfZW5hYmxlZCAgICAgID0gMQoJCQkJCQknLCAkY29uc3VtZXJfa2V5KTsKCgkJaWYgKCEkb3NyX2lkKQoJCXsKCQkJdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uMignTm8gc2VydmVyIHdpdGggY29uc3VtZXJfa2V5ICInLiRjb25zdW1lcl9rZXkuJyIgb3IgY29uc3VtZXJfa2V5IGlzIGRpc2FibGVkJyk7CgkJfQoKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpCgkJewoJCQkkdHRsID0gaW50dmFsKCRvcHRpb25zWyd0b2tlbl90dGwnXSk7CgkJfQoJCWVsc2UKCQl7CgkJCSR0dGwgPSAkdGhpcy0+bWF4X3JlcXVlc3RfdG9rZW5fdHRsOwoJCX0KCgkJaWYgKCFpc3NldCgkb3B0aW9uc1snb2F1dGhfY2FsbGJhY2snXSkpIHsKCSAJCS8vIDEuMGEgQ29tcGF0aWJpbGl0eSA6IHN0b3JlIGNhbGxiYWNrIHVybCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCB0b2tlbgoJCQkkb3B0aW9uc1snb2F1dGhfY2FsbGJhY2snXT0nb29iJzsKIAkJfQoJCQoJCSR0aGlzLT5xdWVyeSgnCgkJCQlJTlNFUlQgSU5UTyBvYXV0aF9zZXJ2ZXJfdG9rZW4KCQkJCVNFVCBvc3Rfb3NyX2lkX3JlZgkJPSAlZCwKCQkJCQlvc3RfdXNhX2lkX3JlZgkJPSAxLAoJCQkJCW9zdF90b2tlbgkJCT0gXCclc1wnLAoJCQkJCW9zdF90b2tlbl9zZWNyZXQJPSBcJyVzXCcsCgkJCQkJb3N0X3Rva2VuX3R5cGUJCT0gXCdyZXF1ZXN0XCcsCgkJCQkJb3N0X3Rva2VuX3R0bCAgICAgICA9IERBVEVfQUREKE5PVygpLCBJTlRFUlZBTCAlZCBTRUNPTkQpLAoJCQkJCW9zdF9jYWxsYmFja191cmwgICAgPSBcJyVzXCcKCQkJCU9OIERVUExJQ0FURSBLRVkgVVBEQVRFCgkJCQkJb3N0X29zcl9pZF9yZWYJCT0gVkFMVUVTKG9zdF9vc3JfaWRfcmVmKSwKCQkJCQlvc3RfdXNhX2lkX3JlZgkJPSBWQUxVRVMob3N0X3VzYV9pZF9yZWYpLAoJCQkJCW9zdF90b2tlbgkJCT0gVkFMVUVTKG9zdF90b2tlbiksCgkJCQkJb3N0X3Rva2VuX3NlY3JldAk9IFZBTFVFUyhvc3RfdG9rZW5fc2VjcmV0KSwKCQkJCQlvc3RfdG9rZW5fdHlwZQkJPSBWQUxVRVMob3N0X3Rva2VuX3R5cGUpLAoJCQkJCW9zdF90b2tlbl90dGwgICAgICAgPSBWQUxVRVMob3N0X3Rva2VuX3R0bCksCgkJCQkJb3N0X2NhbGxiYWNrX3VybCAgICA9IFZBTFVFUyhvc3RfY2FsbGJhY2tfdXJsKSwKCQkJCQlvc3RfdGltZXN0YW1wCQk9IE5PVygpCgkJCQknLCAkb3NyX2lkLCAkdG9rZW4sICRzZWNyZXQsICR0dGwsICRvcHRpb25zWydvYXV0aF9jYWxsYmFjayddKTsKCQkKCQlyZXR1cm4gYXJyYXkoJ3Rva2VuJz0+JHRva2VuLCAndG9rZW5fc2VjcmV0Jz0+JHNlY3JldCwgJ3Rva2VuX3R0bCc9PiR0dGwpOwoJfQoJCgkKCS8qKgoJICogRmV0Y2ggdGhlIGNvbnN1bWVyIHJlcXVlc3QgdG9rZW4sIGJ5IHJlcXVlc3QgdG9rZW4uCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgdG9rZW4KCSAqIEByZXR1cm4gYXJyYXkgIHRva2VuIGFuZCBjb25zdW1lciBkZXRhaWxzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lclJlcXVlc3RUb2tlbiAoICR0b2tlbiApCgl7CgkJJHJzID0gJHRoaXMtPnF1ZXJ5X3Jvd19hc3NvYygnCgkJCQlTRUxFQ1QJb3N0X3Rva2VuCQkJYXMgdG9rZW4sCgkJCQkJCW9zdF90b2tlbl9zZWNyZXQJYXMgdG9rZW5fc2VjcmV0LAoJCQkJCQlvc3JfY29uc3VtZXJfa2V5CWFzIGNvbnN1bWVyX2tleSwKCQkJCQkJb3NyX2NvbnN1bWVyX3NlY3JldAlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCW9zdF90b2tlbl90eXBlCQlhcyB0b2tlbl90eXBlLAogCQkJCQkJb3N0X2NhbGxiYWNrX3VybCAgICBhcyBjYWxsYmFja191cmwsCiAJCQkJCQlvc3JfYXBwbGljYXRpb25fdGl0bGUgYXMgYXBwbGljYXRpb25fdGl0bGUsCiAJCQkJCQlvc3JfYXBwbGljYXRpb25fZGVzY3IgYXMgYXBwbGljYXRpb25fZGVzY3IsCiAJCQkJCQlvc3JfYXBwbGljYXRpb25fdXJpICAgYXMgYXBwbGljYXRpb25fdXJpCQkJCQkKCQkJCUZST00gb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJCUpPSU4gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQkJCU9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCgkJCQlXSEVSRSBvc3RfdG9rZW5fdHlwZSA9IFwncmVxdWVzdFwnCgkJCQkgIEFORCBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwoJCQkJICBBTkQgb3N0X3Rva2VuX3R0bCAgPj0gTk9XKCkKCQkJCScsICR0b2tlbik7CgkJCgkJcmV0dXJuICRyczsKCX0KCQoKCS8qKgoJICogRGVsZXRlIGEgY29uc3VtZXIgdG9rZW4uICBUaGUgdG9rZW4gbXVzdCBiZSBhIHJlcXVlc3Qgb3IgYXV0aG9yaXplZCB0b2tlbi4KCSAqIAoJICogQHBhcmFtIHN0cmluZyB0b2tlbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4gKQoJewoJCSR0aGlzLT5xdWVyeSgnCgkJCQkJREVMRVRFIEZST00gb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJV0hFUkUgb3N0X3Rva2VuIAkgPSBcJyVzXCcKCQkJCQkgIEFORCBvc3RfdG9rZW5fdHlwZSA9IFwncmVxdWVzdFwnCgkJCQkJJywgJHRva2VuKTsKCX0KCQoKCS8qKgoJICogVXBncmFkZSBhIHJlcXVlc3QgdG9rZW4gdG8gYmUgYW4gYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuCgkgKiBAcGFyYW0gaW50CSB1c2VyX2lkICB1c2VyIGF1dGhvcml6aW5nIHRoZSB0b2tlbgoJICogQHBhcmFtIHN0cmluZyByZWZlcnJlcl9ob3N0IHVzZWQgdG8gc2V0IHRoZSByZWZlcnJlciBob3N0IGZvciB0aGlzIHRva2VuLCBmb3IgdXNlciBmZWVkYmFjawoJICovCglwdWJsaWMgZnVuY3Rpb24gYXV0aG9yaXplQ29uc3VtZXJSZXF1ZXN0VG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkLCAkcmVmZXJyZXJfaG9zdCA9ICcnICkKCXsKIAkJLy8gMS4wYSBDb21wYXRpYmlsaXR5IDogY3JlYXRlIGEgdG9rZW4gdmVyaWZpZXIKIAkJJHZlcmlmaWVyID0gc3Vic3RyKG1kNShyYW5kKCkpLDAsMTApOwoJCQoJCSR0aGlzLT5xdWVyeSgnCgkJCQkJVVBEQVRFIG9hdXRoX3NlcnZlcl90b2tlbgoJCQkJCVNFVCBvc3RfYXV0aG9yaXplZCAgICA9IDEsCgkJCQkJCW9zdF91c2FfaWRfcmVmICAgID0gJWQsCgkJCQkJCW9zdF90aW1lc3RhbXAgICAgID0gTk9XKCksCgkJCQkJCW9zdF9yZWZlcnJlcl9ob3N0ID0gXCclc1wnLAoJCQkJCQlvc3RfdmVyaWZpZXIgICAgICA9IFwnJXNcJwoJCQkJCVdIRVJFIG9zdF90b2tlbiAgICAgID0gXCclc1wnCgkJCQkJICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ3JlcXVlc3RcJwoJCQkJCScsICR1c2VyX2lkLCAkcmVmZXJyZXJfaG9zdCwgJHZlcmlmaWVyLCAkdG9rZW4pOwoJCXJldHVybiAkdmVyaWZpZXI7Cgl9CgoKCS8qKgoJICogQ291bnQgdGhlIGNvbnN1bWVyIGFjY2VzcyB0b2tlbnMgZm9yIHRoZSBnaXZlbiBjb25zdW1lci4KCSAqIAoJICogQHBhcmFtIHN0cmluZyBjb25zdW1lcl9rZXkKCSAqIEByZXR1cm4gaW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb3VudENvbnN1bWVyQWNjZXNzVG9rZW5zICggJGNvbnN1bWVyX2tleSApCgl7CgkJJGNvdW50ID0gJHRoaXMtPnF1ZXJ5X29uZSgnCgkJCQkJU0VMRUNUIENPVU5UKG9zdF9pZCkKCQkJCQlGUk9NIG9hdXRoX3NlcnZlcl90b2tlbgoJCQkJCQkJSk9JTiBvYXV0aF9zZXJ2ZXJfcmVnaXN0cnkKCQkJCQkJCU9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCgkJCQkJV0hFUkUgb3N0X3Rva2VuX3R5cGUgICA9IFwnYWNjZXNzXCcKCQkJCQkgIEFORCBvc3JfY29uc3VtZXJfa2V5ID0gXCclc1wnCgkJCQkJICBBTkQgb3N0X3Rva2VuX3R0bCAgICA+PSBOT1coKQoJCQkJCScsICRjb25zdW1lcl9rZXkpOwoJCQoJCXJldHVybiAkY291bnQ7Cgl9CgoKCS8qKgoJICogRXhjaGFuZ2UgYW4gYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuIGZvciBuZXcgYWNjZXNzIHRva2VuLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuCgkgKiBAcGFyYW0gYXJyYXkgb3B0aW9ucwkJb3B0aW9ucyBmb3IgdGhlIHRva2VuLCB0b2tlbl90dGwKCSAqIEBleGNlcHRpb24gT0F1dGhFeGNlcHRpb24yIHdoZW4gdG9rZW4gY291bGQgbm90IGJlIGV4Y2hhbmdlZAoJICogQHJldHVybiBhcnJheSAodG9rZW4sIHRva2VuX3NlY3JldCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGV4Y2hhbmdlQ29uc3VtZXJSZXF1ZXN0Rm9yQWNjZXNzVG9rZW4gKCAkdG9rZW4sICRvcHRpb25zID0gYXJyYXkoKSApCgl7CgkJJG5ld190b2tlbiAgPSAkdGhpcy0+Z2VuZXJhdGVLZXkodHJ1ZSk7CgkJJG5ld19zZWNyZXQgPSAkdGhpcy0+Z2VuZXJhdGVLZXkoKTsKCgkJLy8gTWF4aW11bSB0aW1lIHRvIGxpdmUgZm9yIHRoaXMgdG9rZW4KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKSAmJiBpc19udW1lcmljKCRvcHRpb25zWyd0b2tlbl90dGwnXSkpCgkJewoJCQkkdHRsX3NxbCA9ICdEQVRFX0FERChOT1coKSwgSU5URVJWQUwgJy5pbnR2YWwoJG9wdGlvbnNbJ3Rva2VuX3R0bCddKS4nIFNFQ09ORCknOwoJCX0KCQllbHNlCgkJewoJCQkkdHRsX3NxbCA9ICInOTk5OS0xMi0zMSciOwoJCX0KCQkKIAkJaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJpZmllciddKSkgewoJCSAJJHZlcmlmaWVyID0gJG9wdGlvbnNbJ3ZlcmlmaWVyJ107CgoJCSAJLy8gMS4wYSBDb21wYXRpYmlsaXR5IDogY2hlY2sgdG9rZW4gYWdhaW5zdCBvYXV0aF92ZXJpZmllcgoJCSAJJHRoaXMtPnF1ZXJ5KCcKCQkgCQkJCVVQREFURSBvYXV0aF9zZXJ2ZXJfdG9rZW4KCQkgCQkJCVNFVCBvc3RfdG9rZW4JCQk9IFwnJXNcJywKCQkgCQkJCQlvc3RfdG9rZW5fc2VjcmV0CT0gXCclc1wnLAoJCSAJCQkJCW9zdF90b2tlbl90eXBlCQk9IFwnYWNjZXNzXCcsCgkJIAkJCQkJb3N0X3RpbWVzdGFtcAkJPSBOT1coKSwKCQkgCQkJCQlvc3RfdG9rZW5fdHRsICAgICAgID0gJy4kdHRsX3NxbC4nCgkJIAkJCQlXSEVSRSBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwoJCSAJCQkJICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ3JlcXVlc3RcJwoJCSAJCQkJICBBTkQgb3N0X2F1dGhvcml6ZWQgPSAxCgkJIAkJCQkgIEFORCBvc3RfdG9rZW5fdHRsICA+PSBOT1coKQoJCSAJCQkJICBBTkQgb3N0X3ZlcmlmaWVyID0gXCclc1wnCgkJIAkJCQknLCAkbmV3X3Rva2VuLCAkbmV3X3NlY3JldCwgJHRva2VuLCAkdmVyaWZpZXIpOwogCQl9IGVsc2UgewoKCQkgCS8vIDEuMAoJCSAJJHRoaXMtPnF1ZXJ5KCcKCQkgCQkJCVVQREFURSBvYXV0aF9zZXJ2ZXJfdG9rZW4KCQkgCQkJCVNFVCBvc3RfdG9rZW4JCQk9IFwnJXNcJywKCQkgCQkJCQlvc3RfdG9rZW5fc2VjcmV0CT0gXCclc1wnLAoJCSAJCQkJCW9zdF90b2tlbl90eXBlCQk9IFwnYWNjZXNzXCcsCgkJIAkJCQkJb3N0X3RpbWVzdGFtcAkJPSBOT1coKSwKCQkgCQkJCQlvc3RfdG9rZW5fdHRsICAgICAgID0gJy4kdHRsX3NxbC4nCgkJIAkJCQlXSEVSRSBvc3RfdG9rZW4gICAgICA9IFwnJXNcJwoJCSAJCQkJICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ3JlcXVlc3RcJwoJCSAJCQkJICBBTkQgb3N0X2F1dGhvcml6ZWQgPSAxCgkJIAkJCQkgIEFORCBvc3RfdG9rZW5fdHRsICA+PSBOT1coKQoJCSAJCQkJJywgJG5ld190b2tlbiwgJG5ld19zZWNyZXQsICR0b2tlbik7CgkJfQoJCQoJCWlmICgkdGhpcy0+cXVlcnlfYWZmZWN0ZWRfcm93cygpICE9IDEpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdDYW5cJ3QgZXhjaGFuZ2UgcmVxdWVzdCB0b2tlbiAiJy4kdG9rZW4uJyIgZm9yIGFjY2VzcyB0b2tlbi4gTm8gc3VjaCB0b2tlbiBvciBub3QgYXV0aG9yaXplZCcpOwoJCX0KCgkJJHJldCA9IGFycmF5KCd0b2tlbicgPT4gJG5ld190b2tlbiwgJ3Rva2VuX3NlY3JldCcgPT4gJG5ld19zZWNyZXQpOwoJCSR0dGwgPSAkdGhpcy0+cXVlcnlfb25lKCcKCQkJCQlTRUxFQ1QJSUYob3N0X3Rva2VuX3R0bCA+PSBcJzk5OTktMTItMzFcJywgTlVMTCwgVU5JWF9USU1FU1RBTVAob3N0X3Rva2VuX3R0bCkgLSBVTklYX1RJTUVTVEFNUChOT1coKSkpIGFzIHRva2VuX3R0bAoJCQkJCUZST00gb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJV0hFUkUgb3N0X3Rva2VuID0gXCclc1wnJywgJG5ld190b2tlbik7CgoJCWlmIChpc19udW1lcmljKCR0dGwpKQoJCXsKCQkJJHJldFsndG9rZW5fdHRsJ10gPSBpbnR2YWwoJHR0bCk7CgkJfQoJCXJldHVybiAkcmV0OwoJfQoKCgkvKioKCSAqIEZldGNoIHRoZSBjb25zdW1lciBhY2Nlc3MgdG9rZW4sIGJ5IGFjY2VzcyB0b2tlbi4KCSAqIAoJICogQHBhcmFtIHN0cmluZyB0b2tlbgoJICogQHBhcmFtIGludCB1c2VyX2lkCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMiB3aGVuIHRva2VuIGlzIG5vdCBmb3VuZAoJICogQHJldHVybiBhcnJheSAgdG9rZW4gYW5kIGNvbnN1bWVyIGRldGFpbHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyQWNjZXNzVG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkICkKCXsKCQkkcnMgPSAkdGhpcy0+cXVlcnlfcm93X2Fzc29jKCcKCQkJCVNFTEVDVAlvc3RfdG9rZW4JCQkJYXMgdG9rZW4sCgkJCQkJCW9zdF90b2tlbl9zZWNyZXQJCWFzIHRva2VuX3NlY3JldCwKCQkJCQkJb3N0X3JlZmVycmVyX2hvc3QJCWFzIHRva2VuX3JlZmVycmVyX2hvc3QsCgkJCQkJCW9zcl9jb25zdW1lcl9rZXkJCWFzIGNvbnN1bWVyX2tleSwKCQkJCQkJb3NyX2NvbnN1bWVyX3NlY3JldAkJYXMgY29uc3VtZXJfc2VjcmV0LAoJCQkJCQlvc3JfYXBwbGljYXRpb25fdXJpCQlhcyBhcHBsaWNhdGlvbl91cmksCgkJCQkJCW9zcl9hcHBsaWNhdGlvbl90aXRsZQlhcyBhcHBsaWNhdGlvbl90aXRsZSwKCQkJCQkJb3NyX2FwcGxpY2F0aW9uX2Rlc2NyCWFzIGFwcGxpY2F0aW9uX2Rlc2NyLAoJCQkJCQlvc3JfY2FsbGJhY2tfdXJpCQlhcyBjYWxsYmFja191cmkKCQkJCUZST00gb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJCUpPSU4gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQkJCU9OIG9zdF9vc3JfaWRfcmVmID0gb3NyX2lkCgkJCQlXSEVSRSBvc3RfdG9rZW5fdHlwZSA9IFwnYWNjZXNzXCcKCQkJCSAgQU5EIG9zdF90b2tlbiAgICAgID0gXCclc1wnCgkJCQkgIEFORCBvc3RfdXNhX2lkX3JlZiA9ICVkCgkJCQkgIEFORCBvc3RfdG9rZW5fdHRsICA+PSBOT1coKQoJCQkJJywgJHRva2VuLCAkdXNlcl9pZCk7CgkJCgkJaWYgKGVtcHR5KCRycykpCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdObyBzZXJ2ZXJfdG9rZW4gIicuJHRva2VuLiciIGZvciB1c2VyICInLiR1c2VyX2lkLiciJyk7CgkJfQoJCXJldHVybiAkcnM7Cgl9CgoKCS8qKgoJICogRGVsZXRlIGEgY29uc3VtZXIgYWNjZXNzIHRva2VuLgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQKCSAqIEBwYXJhbSBib29sZWFuIHVzZXJfaXNfYWRtaW4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZUNvbnN1bWVyQWNjZXNzVG9rZW4gKCAkdG9rZW4sICR1c2VyX2lkLCAkdXNlcl9pc19hZG1pbiA9IGZhbHNlICkKCXsKCQlpZiAoJHVzZXJfaXNfYWRtaW4pCgkJewoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJCQlERUxFVEUgRlJPTSBvYXV0aF9zZXJ2ZXJfdG9rZW4KCQkJCQkJV0hFUkUgb3N0X3Rva2VuIAkgPSBcJyVzXCcKCQkJCQkJICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCgkJCQkJCScsICR0b2tlbik7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5xdWVyeSgnCgkJCQkJCURFTEVURSBGUk9NIG9hdXRoX3NlcnZlcl90b2tlbgoJCQkJCQlXSEVSRSBvc3RfdG9rZW4gCSA9IFwnJXNcJwoJCQkJCQkgIEFORCBvc3RfdG9rZW5fdHlwZSA9IFwnYWNjZXNzXCcKCQkJCQkJICBBTkQgb3N0X3VzYV9pZF9yZWYgPSAlZAoJCQkJCQknLCAkdG9rZW4sICR1c2VyX2lkKTsKCQl9Cgl9CgoKCS8qKgoJICogU2V0IHRoZSB0dGwgb2YgYSBjb25zdW1lciBhY2Nlc3MgdG9rZW4uICBUaGlzIGlzIGRvbmUgd2hlbiB0aGUKCSAqIHNlcnZlciByZWNlaXZlcyBhIHZhbGlkIHJlcXVlc3Qgd2l0aCBhIHhvYXV0aF90b2tlbl90dGwgcGFyYW1ldGVyIGluIGl0LgoJICogCgkgKiBAcGFyYW0gc3RyaW5nIHRva2VuCgkgKiBAcGFyYW0gaW50IHR0bAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Q29uc3VtZXJBY2Nlc3NUb2tlblR0bCAoICR0b2tlbiwgJHRva2VuX3R0bCApCgl7CgkJaWYgKCR0b2tlbl90dGwgPD0gMCkKCQl7CgkJCS8vIEltbWVkaWF0ZSBkZWxldGUgd2hlbiB0aGUgdG9rZW4gaXMgcGFzdCBpdHMgdHRsCgkJCSR0aGlzLT5kZWxldGVDb25zdW1lckFjY2Vzc1Rva2VuKCR0b2tlbiwgMCwgdHJ1ZSk7CgkJfQoJCWVsc2UKCQl7CgkJCS8vIFNldCBtYXhpbXVtIHRpbWUgdG8gbGl2ZSBmb3IgdGhpcyB0b2tlbgoJCQkkdGhpcy0+cXVlcnkoJwoJCQkJCQlVUERBVEUgb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJCVNFVCBvc3RfdG9rZW5fdHRsID0gREFURV9BREQoTk9XKCksIElOVEVSVkFMICVkIFNFQ09ORCkKCQkJCQkJV0hFUkUgb3N0X3Rva2VuIAkgPSBcJyVzXCcKCQkJCQkJICBBTkQgb3N0X3Rva2VuX3R5cGUgPSBcJ2FjY2Vzc1wnCgkJCQkJCScsICR0b2tlbl90dGwsICR0b2tlbik7CgkJfQoJfQoKCgkvKioKCSAqIEZldGNoIGEgbGlzdCBvZiBhbGwgY29uc3VtZXIga2V5cywgc2VjcmV0cyBldGMuCgkgKiBSZXR1cm5zIHRoZSBwdWJsaWMgKHVzZXJfaWQgaXMgbnVsbCkgYW5kIHRoZSBrZXlzIG93bmVkIGJ5IHRoZSB1c2VyCgkgKiAKCSAqIEBwYXJhbSBpbnQgdXNlcl9pZAoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gbGlzdENvbnN1bWVycyAoICR1c2VyX2lkICkKCXsKCQkkcnMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKCQkJCVNFTEVDVAlvc3JfaWQJCQkJCWFzIGlkLAoJCQkJCQlvc3JfdXNhX2lkX3JlZgkJCWFzIHVzZXJfaWQsCgkJCQkJCW9zcl9jb25zdW1lcl9rZXkgCQlhcyBjb25zdW1lcl9rZXksCgkJCQkJCW9zcl9jb25zdW1lcl9zZWNyZXQJCWFzIGNvbnN1bWVyX3NlY3JldCwKCQkJCQkJb3NyX2VuYWJsZWQJCQkJYXMgZW5hYmxlZCwKCQkJCQkJb3NyX3N0YXR1cyAJCQkJYXMgc3RhdHVzLAoJCQkJCQlvc3JfaXNzdWVfZGF0ZQkJCWFzIGlzc3VlX2RhdGUsCgkJCQkJCW9zcl9hcHBsaWNhdGlvbl91cmkJCWFzIGFwcGxpY2F0aW9uX3VyaSwKCQkJCQkJb3NyX2FwcGxpY2F0aW9uX3RpdGxlCWFzIGFwcGxpY2F0aW9uX3RpdGxlLAoJCQkJCQlvc3JfYXBwbGljYXRpb25fZGVzY3IJYXMgYXBwbGljYXRpb25fZGVzY3IsCgkJCQkJCW9zcl9yZXF1ZXN0ZXJfbmFtZQkJYXMgcmVxdWVzdGVyX25hbWUsCgkJCQkJCW9zcl9yZXF1ZXN0ZXJfZW1haWwJCWFzIHJlcXVlc3Rlcl9lbWFpbCwKCQkJCQkJb3NyX2NhbGxiYWNrX3VyaQkJYXMgY2FsbGJhY2tfdXJpCgkJCQlGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJV0hFUkUgKG9zcl91c2FfaWRfcmVmID0gJWQgT1Igb3NyX3VzYV9pZF9yZWYgSVMgTlVMTCkKCQkJCU9SREVSIEJZIG9zcl9hcHBsaWNhdGlvbl90aXRsZQoJCQkJJywgJHVzZXJfaWQpOwoJCXJldHVybiAkcnM7Cgl9CgoJLyoqCgkgKiBMaXN0IG9mIGFsbCByZWdpc3RlcmVkIGFwcGxpY2F0aW9ucy4gRGF0YSByZXR1cm5lZCBoYXMgbm90IHNlbnNpdGl2ZSAKCSAqIGluZm9ybWF0aW9uIGFuZCB0aGVyZWZvcmUgaXMgc3VpdGFibGUgZm9yIHB1YmxpYyBkaXNwbGF5aW5nLgoJICogCgkgKiBAcGFyYW0gaW50ICRiZWdpbgoJICogQHBhcmFtIGludCAkdG90YWwKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lckFwcGxpY2F0aW9ucygkYmVnaW4gPSAwLCAkdG90YWwgPSAyNSkgCgl7CgkJJHJzID0gJHRoaXMtPnF1ZXJ5X2FsbF9hc3NvYygnCgkJCQlTRUxFQ1QJb3NyX2lkCQkJCQlhcyBpZCwKCQkJCQkJb3NyX2VuYWJsZWQJCQkJYXMgZW5hYmxlZCwKCQkJCQkJb3NyX3N0YXR1cyAJCQkJYXMgc3RhdHVzLAoJCQkJCQlvc3JfaXNzdWVfZGF0ZQkJCWFzIGlzc3VlX2RhdGUsCgkJCQkJCW9zcl9hcHBsaWNhdGlvbl91cmkJCWFzIGFwcGxpY2F0aW9uX3VyaSwKCQkJCQkJb3NyX2FwcGxpY2F0aW9uX3RpdGxlCWFzIGFwcGxpY2F0aW9uX3RpdGxlLAoJCQkJCQlvc3JfYXBwbGljYXRpb25fZGVzY3IJYXMgYXBwbGljYXRpb25fZGVzY3IKCQkJCUZST00gb2F1dGhfc2VydmVyX3JlZ2lzdHJ5CgkJCQlPUkRFUiBCWSBvc3JfYXBwbGljYXRpb25fdGl0bGUKCQkJCScpOwoJCS8vIFRPRE86IHBhZ2luYXRpb24KCQlyZXR1cm4gJHJzOwoJfQoKCS8qKgoJICogRmV0Y2ggYSBsaXN0IG9mIGFsbCBjb25zdW1lciB0b2tlbnMgYWNjZXNzaW5nIHRoZSBhY2NvdW50IG9mIHRoZSBnaXZlbiB1c2VyLgoJICogCgkgKiBAcGFyYW0gaW50IHVzZXJfaWQKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGxpc3RDb25zdW1lclRva2VucyAoICR1c2VyX2lkICkKCXsKCQkkcnMgPSAkdGhpcy0+cXVlcnlfYWxsX2Fzc29jKCcKCQkJCVNFTEVDVAlvc3JfY29uc3VtZXJfa2V5IAkJYXMgY29uc3VtZXJfa2V5LAoJCQkJCQlvc3JfY29uc3VtZXJfc2VjcmV0CQlhcyBjb25zdW1lcl9zZWNyZXQsCgkJCQkJCW9zcl9lbmFibGVkCQkJCWFzIGVuYWJsZWQsCgkJCQkJCW9zcl9zdGF0dXMgCQkJCWFzIHN0YXR1cywKCQkJCQkJb3NyX2FwcGxpY2F0aW9uX3VyaQkJYXMgYXBwbGljYXRpb25fdXJpLAoJCQkJCQlvc3JfYXBwbGljYXRpb25fdGl0bGUJYXMgYXBwbGljYXRpb25fdGl0bGUsCgkJCQkJCW9zcl9hcHBsaWNhdGlvbl9kZXNjcglhcyBhcHBsaWNhdGlvbl9kZXNjciwKCQkJCQkJb3N0X3RpbWVzdGFtcAkJCWFzIHRpbWVzdGFtcCwJCgkJCQkJCW9zdF90b2tlbgkJCQlhcyB0b2tlbiwKCQkJCQkJb3N0X3Rva2VuX3NlY3JldAkJYXMgdG9rZW5fc2VjcmV0LAoJCQkJCQlvc3RfcmVmZXJyZXJfaG9zdAkJYXMgdG9rZW5fcmVmZXJyZXJfaG9zdCwKCQkJCQkJb3NyX2NhbGxiYWNrX3VyaQkJYXMgY2FsbGJhY2tfdXJpCgkJCQlGUk9NIG9hdXRoX3NlcnZlcl9yZWdpc3RyeQoJCQkJCUpPSU4gb2F1dGhfc2VydmVyX3Rva2VuCgkJCQkJT04gb3N0X29zcl9pZF9yZWYgPSBvc3JfaWQKCQkJCVdIRVJFIG9zdF91c2FfaWRfcmVmID0gJWQKCQkJCSAgQU5EIG9zdF90b2tlbl90eXBlID0gXCdhY2Nlc3NcJwoJCQkJICBBTkQgb3N0X3Rva2VuX3R0bCAgPj0gTk9XKCkKCQkJCU9SREVSIEJZIG9zcl9hcHBsaWNhdGlvbl90aXRsZQoJCQkJJywgJHVzZXJfaWQpOwoJCXJldHVybiAkcnM7Cgl9CgoKCS8qKgoJICogQ2hlY2sgYW4gbm9uY2UvdGltZXN0YW1wIGNvbWJpbmF0aW9uLiAgQ2xlYXJzIGFueSBub25jZSBjb21iaW5hdGlvbnMKCSAqIHRoYXQgYXJlIG9sZGVyIHRoYW4gdGhlIG9uZSByZWNlaXZlZC4KCSAqIAoJICogQHBhcmFtIHN0cmluZwljb25zdW1lcl9rZXkKCSAqIEBwYXJhbSBzdHJpbmcgCXRva2VuCgkgKiBAcGFyYW0gaW50CQl0aW1lc3RhbXAKCSAqIEBwYXJhbSBzdHJpbmcgCW5vbmNlCgkgKiBAZXhjZXB0aW9uIE9BdXRoRXhjZXB0aW9uMgl0aHJvd24gd2hlbiB0aGUgdGltZXN0YW1wIGlzIG5vdCBpbiBzZXF1ZW5jZSBvciBub25jZSBpcyBub3QgdW5pcXVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjaGVja1NlcnZlck5vbmNlICggJGNvbnN1bWVyX2tleSwgJHRva2VuLCAkdGltZXN0YW1wLCAkbm9uY2UgKQoJewoJCSRyID0gJHRoaXMtPnF1ZXJ5X3JvdygnCgkJCQkJCQlTRUxFQ1QgTUFYKG9zbl90aW1lc3RhbXApLCBNQVgob3NuX3RpbWVzdGFtcCkgPiAlZCArICVkCgkJCQkJCQlGUk9NIG9hdXRoX3NlcnZlcl9ub25jZQoJCQkJCQkJV0hFUkUgb3NuX2NvbnN1bWVyX2tleSA9IFwnJXNcJwoJCQkJCQkJICBBTkQgb3NuX3Rva2VuICAgICAgICA9IFwnJXNcJwoJCQkJCQkJJywgJHRpbWVzdGFtcCwgJHRoaXMtPm1heF90aW1lc3RhbXBfc2tldywgJGNvbnN1bWVyX2tleSwgJHRva2VuKTsKCgkJaWYgKCFlbXB0eSgkcikgJiYgJHJbMV0pCgkJewoJCQl0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24yKCdUaW1lc3RhbXAgaXMgb3V0IG9mIHNlcXVlbmNlLiBSZXF1ZXN0IHJlamVjdGVkLiBHb3QgJy4kdGltZXN0YW1wLicgbGFzdCBtYXggaXMgJy4kclswXS4nIGFsbG93ZWQgc2tldyBpcyAnLiR0aGlzLT5tYXhfdGltZXN0YW1wX3NrZXcpOwoJCX0KCQkKCQkvLyBJbnNlcnQgdGhlIG5ldyBjb21iaW5hdGlvbgoJCSR0aGlzLT5xdWVyeSgnCgkJCQlJTlNFUlQgSUdOT1JFIElOVE8gb2F1dGhfc2VydmVyX25vbmNlCgkJCQlTRVQgb3NuX2NvbnN1bWVyX2tleQk9IFwnJXNcJywKCQkJCQlvc25fdG9rZW4JCQk9IFwnJXNcJywKCQkJCQlvc25fdGltZXN0YW1wCQk9ICVkLAoJCQkJCW9zbl9ub25jZQkJCT0gXCclc1wnCgkJCQknLCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICRub25jZSk7CgkJCgkJaWYgKCR0aGlzLT5xdWVyeV9hZmZlY3RlZF9yb3dzKCkgPT0gMCkKCQl7CgkJCXRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbjIoJ0R1cGxpY2F0ZSB0aW1lc3RhbXAvbm9uY2UgY29tYmluYXRpb24sIHBvc3NpYmxlIHJlcGxheSBhdHRhY2suICBSZXF1ZXN0IHJlamVjdGVkLicpOwoJCX0KCgkJLy8gQ2xlYW4gdXAgYWxsIHRpbWVzdGFtcHMgb2xkZXIgdGhhbiB0aGUgb25lIHdlIGp1c3QgcmVjZWl2ZWQKCQkkdGhpcy0+cXVlcnkoJwoJCQkJREVMRVRFIEZST00gb2F1dGhfc2VydmVyX25vbmNlCgkJCQlXSEVSRSBvc25fY29uc3VtZXJfa2V5CT0gXCclc1wnCgkJCQkgIEFORCBvc25fdG9rZW4JCQk9IFwnJXNcJwoJCQkJICBBTkQgb3NuX3RpbWVzdGFtcCAgICAgPCAlZCAtICVkCgkJCQknLCAkY29uc3VtZXJfa2V5LCAkdG9rZW4sICR0aW1lc3RhbXAsICR0aGlzLT5tYXhfdGltZXN0YW1wX3NrZXcpOwoJfQoKCgkvKioKCSAqIEFkZCBhbiBlbnRyeSB0byB0aGUgbG9nIHRhYmxlCgkgKiAKCSAqIEBwYXJhbSBhcnJheSBrZXlzIChvc3JfY29uc3VtZXJfa2V5LCBvc3RfdG9rZW4sIG9jcl9jb25zdW1lcl9rZXksIG9jdF90b2tlbikKCSAqIEBwYXJhbSBzdHJpbmcgcmVjZWl2ZWQKCSAqIEBwYXJhbSBzdHJpbmcgc2VudAoJICogQHBhcmFtIHN0cmluZyBiYXNlX3N0cmluZwoJICogQHBhcmFtIHN0cmluZyBub3RlcwoJICogQHBhcmFtIGludCAob3B0aW9uYWwpIHVzZXJfaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZExvZyAoICRrZXlzLCAkcmVjZWl2ZWQsICRzZW50LCAkYmFzZV9zdHJpbmcsICRub3RlcywgJHVzZXJfaWQgPSBudWxsICkKCXsKCQkkYXJncyA9IGFycmF5KCk7CgkJJHBzICAgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkgPT4gJHZhbHVlKQoJCXsKCQkJJGFyZ3NbXSA9ICR2YWx1ZTsKCQkJJHBzW10gICA9ICJvbGdfJGtleSA9ICclcyciOwoJCX0KCgkJaWYgKCFlbXB0eSgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkpCgkJewoJCQkkcmVtb3RlX2lwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CgkJfQkKCQllbHNlIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFTU9URV9JUCddKSkKCQl7CgkJCSRyZW1vdGVfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0lQJ107CgkJfQoJCWVsc2UKCQl7CgkJCSRyZW1vdGVfaXAgPSAnMC4wLjAuMCc7CgkJfQoKCQkvLyBCdWlsZCB0aGUgU1FMCgkJJHBzW10gPSAib2xnX3JlY2VpdmVkICAJPSAnJXMnIjsJCQkJCQkkYXJnc1tdID0gJHRoaXMtPm1ha2VVVEY4KCRyZWNlaXZlZCk7CgkJJHBzW10gPSAib2xnX3NlbnQgICAJPSAnJXMnIjsJCQkJCQkkYXJnc1tdID0gJHRoaXMtPm1ha2VVVEY4KCRzZW50KTsKCQkkcHNbXSA9ICJvbGdfYmFzZV9zdHJpbmc9ICclcyciOwkJCQkJCSRhcmdzW10gPSAkYmFzZV9zdHJpbmc7CgkJJHBzW10gPSAib2xnX25vdGVzICAgCT0gJyVzJyI7CQkJCQkJJGFyZ3NbXSA9ICR0aGlzLT5tYWtlVVRGOCgkbm90ZXMpOwoJCSRwc1tdID0gIm9sZ191c2FfaWRfcmVmID0gTlVMTElGKCVkLDApIjsJCQkJJGFyZ3NbXSA9ICR1c2VyX2lkOwoJCSRwc1tdID0gIm9sZ19yZW1vdGVfaXAgID0gSUZOVUxMKElORVRfQVRPTignJXMnKSwwKSI7CSRhcmdzW10gPSAkcmVtb3RlX2lwOwoKCQkkdGhpcy0+cXVlcnkoJ0lOU0VSVCBJTlRPIG9hdXRoX2xvZyBTRVQgJy5pbXBsb2RlKCcsJywgJHBzKSwgJGFyZ3MpOwoJfQoJCgkKCS8qKgoJICogR2V0IGEgcGFnZSBvZiBlbnRyaWVzIGZyb20gdGhlIGxvZy4gIFJldHVybnMgdGhlIGxhc3QgMTAwIHJlY29yZHMKCSAqIG1hdGNoaW5nIHRoZSBvcHRpb25zIGdpdmVuLgoJICogCgkgKiBAcGFyYW0gYXJyYXkgb3B0aW9ucwoJICogQHBhcmFtIGludCB1c2VyX2lkCWN1cnJlbnQgdXNlcgoJICogQHJldHVybiBhcnJheSBsb2cgcmVjb3JkcwoJICovCglwdWJsaWMgZnVuY3Rpb24gbGlzdExvZyAoICRvcHRpb25zLCAkdXNlcl9pZCApCgl7CgkJJHdoZXJlID0gYXJyYXkoKTsKCQkkYXJncyAgPSBhcnJheSgpOwoJCWlmIChlbXB0eSgkb3B0aW9ucykpCgkJewoJCQkkd2hlcmVbXSA9ICdvbGdfdXNhX2lkX3JlZiA9ICVkJzsKCQkJJGFyZ3NbXSAgPSAkdXNlcl9pZDsKCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkdmFsdWUpCgkJCXsKCQkJCWlmIChzdHJsZW4oJHZhbHVlKSA+IDApCgkJCQl7CgkJCQkJc3dpdGNoICgkb3B0aW9uKQoJCQkJCXsKCQkJCQljYXNlICdvc3JfY29uc3VtZXJfa2V5JzoKCQkJCQljYXNlICdvY3JfY29uc3VtZXJfa2V5JzoKCQkJCQljYXNlICdvc3RfdG9rZW4nOgoJCQkJCWNhc2UgJ29jdF90b2tlbic6CgkJCQkJCSR3aGVyZVtdID0gJ29sZ18nLiRvcHRpb24uJyA9IFwnJXNcJyc7CgkJCQkJCSRhcmdzW10gID0gJHZhbHVlOwkKCQkJCQkJYnJlYWs7CQkJCQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJJHdoZXJlW10gPSAnKG9sZ191c2FfaWRfcmVmIElTIE5VTEwgT1Igb2xnX3VzYV9pZF9yZWYgPSAlZCknOwoJCQkkYXJnc1tdICA9ICR1c2VyX2lkOwoJCX0KCgkJJHJzID0gJHRoaXMtPnF1ZXJ5X2FsbF9hc3NvYygnCgkJCQkJU0VMRUNUIG9sZ19pZCwKCQkJCQkJCW9sZ19vc3JfY29uc3VtZXJfa2V5IAlBUyBvc3JfY29uc3VtZXJfa2V5LAoJCQkJCQkJb2xnX29zdF90b2tlbgkJCUFTIG9zdF90b2tlbiwKCQkJCQkJCW9sZ19vY3JfY29uc3VtZXJfa2V5CUFTIG9jcl9jb25zdW1lcl9rZXksCgkJCQkJCQlvbGdfb2N0X3Rva2VuCQkJQVMgb2N0X3Rva2VuLAoJCQkJCQkJb2xnX3VzYV9pZF9yZWYJCQlBUyB1c2VyX2lkLAoJCQkJCQkJb2xnX3JlY2VpdmVkCQkJQVMgcmVjZWl2ZWQsCgkJCQkJCQlvbGdfc2VudAkJCQlBUyBzZW50LAoJCQkJCQkJb2xnX2Jhc2Vfc3RyaW5nCQkJQVMgYmFzZV9zdHJpbmcsCgkJCQkJCQlvbGdfbm90ZXMJCQkJQVMgbm90ZXMsCgkJCQkJCQlvbGdfdGltZXN0YW1wCQkJQVMgdGltZXN0YW1wLAoJCQkJCQkJSU5FVF9OVE9BKG9sZ19yZW1vdGVfaXApIEFTIHJlbW90ZV9pcAoJCQkJCUZST00gb2F1dGhfbG9nCgkJCQkJV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsICR3aGVyZSkuJwoJCQkJCU9SREVSIEJZIG9sZ19pZCBERVNDCgkJCQkJTElNSVQgMCwxMDAnLCAkYXJncyk7CgoJCXJldHVybiAkcnM7Cgl9CgoJCgkvKiAqKiBTb21lIHNpbXBsZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgbXlzcWwgZGIgKiogKi8KCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgaWdub3JlIHRoZSByZXN1bHRzCgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeSAoICRzcWwgKTsKCQoKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCBpZ25vcmUgdGhlIHJlc3VsdHMKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X2FsbF9hc3NvYyAoICRzcWwgKTsKCQoJCgkvKioKCSAqIFBlcmZvcm0gYSBxdWVyeSwgcmV0dXJuIHRoZSBmaXJzdCByb3cKCSAqIAoJICogQHBhcmFtIHN0cmluZyBzcWwKCSAqIEBwYXJhbSB2YXJhcmcgYXJndW1lbnRzIChmb3Igc3ByaW50ZikKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIHF1ZXJ5X3Jvd19hc3NvYyAoICRzcWwgKTsKCQoJLyoqCgkgKiBQZXJmb3JtIGEgcXVlcnksIHJldHVybiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9yb3cgKCAkc3FsICk7CgkKCQkKCS8qKgoJICogUGVyZm9ybSBhIHF1ZXJ5LCByZXR1cm4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93CgkgKiAKCSAqIEBwYXJhbSBzdHJpbmcgc3FsCgkgKiBAcGFyYW0gdmFyYXJnIGFyZ3VtZW50cyAoZm9yIHNwcmludGYpCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9vbmUgKCAkc3FsICk7CgkKCQoJLyoqCgkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGluIHRoZSBsYXN0IHF1ZXJ5CgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9hZmZlY3RlZF9yb3dzICgpOwoKCgkvKioKCSAqIFJldHVybiB0aGUgaWQgb2YgdGhlIGxhc3QgaW5zZXJ0ZWQgcm93CgkgKiAKCSAqIEByZXR1cm4gaW50CgkgKi8KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeV9pbnNlcnRfaWQgKCk7CgkKCQoJYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9wcmludGYgKCAkYXJncyApOwoJCgkKCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBzcWxfZXNjYXBlX3N0cmluZyAoICRzICk7CgkKCQoJYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIHNxbF9lcnJjaGVjayAoICRzcWwgKTsKfQoKCi8qIHZpOnNldCB0cz00IHN0cz00IHN3PTQgYmluYXJ5IG5vZW9sOiAqLwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBNZWRpYW1hdGljIExhYgpDb3B5cmlnaHQgKGMpIDIwMTAgQ29yb2xsYXJpdW0gVGVjaG5vbG9naWVzCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/oauth-php_1_7_5/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UGxlYXNlIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb2F1dGgtcGhwLyBmb3IgZG9jdW1lbnRhdGlvbiBhbmQgaGVscC4K]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGlzIHRoZSBQSFAgT3BlbklEIGxpYnJhcnkgYnkgSmFuUmFpbiwgSW5jLgogKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyBjb3JlIHV0aWxpdHkgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZQogKiBsaWJyYXJ5LiAgU2VlIENvbnN1bWVyLnBocCBhbmQgU2VydmVyLnBocCBmb3IgdGhlIGNvbnN1bWVyIGFuZAogKiBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zLgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogVGhlIGxpYnJhcnkgdmVyc2lvbiBzdHJpbmcKICovCmRlZmluZSgnQXV0aF9PcGVuSURfVkVSU0lPTicsICcyLjIuMicpOwoKLyoqCiAqIFJlcXVpcmUgdGhlIGZldGNoZXIgY29kZS4KICovCnJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9QbGFpbkhUVFBGZXRjaGVyLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9QYXJhbm9pZEhUVFBGZXRjaGVyLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvQmlnTWF0aC5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1VSSU5vcm0ucGhwIjsKCi8qKgogKiBTdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUgc2VydmVyIHdoZW4gdGhlIG9ubHkgb3B0aW9uIGlzIHRvIHNob3cKICogYW4gZXJyb3IgcGFnZSwgc2luY2Ugd2UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlZGlyZWN0CiAqIGJhY2sgdG8gdGhlIGNvbnN1bWVyLiBUaGUgYXNzb2NpYXRlZCB2YWx1ZSBpcyBhbiBlcnJvciBtZXNzYWdlIHRoYXQKICogc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBhbiBIVE1MIGVycm9yIHBhZ2UuCiAqCiAqIEBzZWUgQXV0aF9PcGVuSURfU2VydmVyCiAqLwpkZWZpbmUoJ0F1dGhfT3BlbklEX0xPQ0FMX0VSUk9SJywgJ2xvY2FsX2Vycm9yJyk7CgovKioKICogU3RhdHVzIGNvZGUgcmV0dXJuZWQgd2hlbiB0aGVyZSBpcyBhbiBlcnJvciB0byByZXR1cm4gaW4ga2V5LXZhbHVlCiAqIGZvcm0gdG8gdGhlIGNvbnN1bWVyLiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gYSA0MDAgQmFkIFJlcXVlc3QKICogcmVzcG9uc2Ugd2l0aCBjb250ZW50LXR5cGUgdGV4dC9wbGFpbiBhbmQgdGhlIHZhbHVlIGFzIHRoZSBib2R5LgogKgogKiBAc2VlIEF1dGhfT3BlbklEX1NlcnZlcgogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9SRU1PVEVfRVJST1InLCAncmVtb3RlX2Vycm9yJyk7CgovKioKICogU3RhdHVzIGNvZGUgcmV0dXJuZWQgd2hlbiB0aGVyZSBpcyBhIGtleS12YWx1ZSBmb3JtIE9LIHJlc3BvbnNlIHRvCiAqIHRoZSBjb25zdW1lci4gVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgaXMgdGhlCiAqIHJlc3BvbnNlLiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gYSAyMDAgT0sgcmVzcG9uc2Ugd2l0aAogKiBjb250ZW50LXR5cGUgdGV4dC9wbGFpbiBhbmQgdGhlIHZhbHVlIGFzIHRoZSBib2R5LgogKgogKiBAc2VlIEF1dGhfT3BlbklEX1NlcnZlcgogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9SRU1PVEVfT0snLCAncmVtb3RlX29rJyk7CgovKioKICogU3RhdHVzIGNvZGUgcmV0dXJuZWQgd2hlbiB0aGVyZSBpcyBhIHJlZGlyZWN0IGJhY2sgdG8gdGhlCiAqIGNvbnN1bWVyLiBUaGUgdmFsdWUgaXMgdGhlIFVSTCB0byByZWRpcmVjdCBiYWNrIHRvLiBUaGUgY2FsbGVyCiAqIHNob3VsZCByZXR1cm4gYSAzMDIgRm91bmQgcmVkaXJlY3Qgd2l0aCBhIExvY2F0aW9uOiBoZWFkZXIKICogY29udGFpbmluZyB0aGUgVVJMLgogKgogKiBAc2VlIEF1dGhfT3BlbklEX1NlcnZlcgogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9SRURJUkVDVCcsICdyZWRpcmVjdCcpOwoKLyoqCiAqIFN0YXR1cyBjb2RlIHJldHVybmVkIHdoZW4gdGhlIGNhbGxlciBuZWVkcyB0byBhdXRoZW50aWNhdGUgdGhlCiAqIHVzZXIuIFRoZSBhc3NvY2lhdGVkIHZhbHVlIGlzIGEge0BsaW5rIEF1dGhfT3BlbklEX1NlcnZlclJlcXVlc3R9CiAqIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRlIHRoZSBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIHVzZXIKICogaGFzIHRha2VuIHNvbWUgYXV0aGVudGljYXRpb24gYWN0aW9uLCB1c2UgdGhlIHJldHJ5KCkgbWV0aG9kIG9mIHRoZQogKiB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyUmVxdWVzdH0gb2JqZWN0IHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0LgogKgogKiBAc2VlIEF1dGhfT3BlbklEX1NlcnZlcgogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9ET19BVVRIJywgJ2RvX2F1dGgnKTsKCi8qKgogKiBTdGF0dXMgY29kZSByZXR1cm5lZCB3aGVuIHRoZXJlIHdlcmUgbm8gT3BlbklEIGFyZ3VtZW50cwogKiBwYXNzZWQuIFRoaXMgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCByZXR1cm4gYSAyMDAgT0sKICogcmVzcG9uc2UgYW5kIGRpc3BsYXkgYW4gSFRNTCBwYWdlIHRoYXQgc2F5cyB0aGF0IHRoaXMgaXMgYW4gT3BlbklECiAqIHNlcnZlciBlbmRwb2ludC4KICoKICogQHNlZSBBdXRoX09wZW5JRF9TZXJ2ZXIKICovCmRlZmluZSgnQXV0aF9PcGVuSURfRE9fQUJPVVQnLCAnZG9fYWJvdXQnKTsKCi8qKgogKiBEZWZpbmVzIGZvciByZWdleGVzIGFuZCBmb3JtYXQgY2hlY2tpbmcuCiAqLwpkZWZpbmUoJ0F1dGhfT3BlbklEX2xldHRlcnMnLAogICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKTsKCmRlZmluZSgnQXV0aF9PcGVuSURfZGlnaXRzJywKICAgICAgICIwMTIzNDU2Nzg5Iik7CgpkZWZpbmUoJ0F1dGhfT3BlbklEX3B1bmN0JywKICAgICAgICIhXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+Iik7CgpBdXRoX09wZW5JRF9pbmNsdWRlX2luaXQoKTsKCi8qKgogKiBUaGUgT3BlbklEIHV0aWxpdHkgZnVuY3Rpb24gY2xhc3MuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYWNjZXNzIHByaXZhdGUKICovCmNsYXNzIEF1dGhfT3BlbklEIHsKCiAgICAvKioKICAgICAqIFJldHVybiB0cnVlIGlmICR0aGluZyBpcyBhbiBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2Ugb2JqZWN0OwogICAgICogZmFsc2UgaWYgbm90LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gaXNGYWlsdXJlKCR0aGluZykKICAgIHsKICAgICAgICByZXR1cm4gaXNfYSgkdGhpbmcsICdBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHF1ZXJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGVudmlyb25tZW50IGJhc2VkIG9uIHRoZQogICAgICogcmVxdWVzdCBtZXRob2QgdXNlZC4gIElmIEdFVCB3YXMgdXNlZCwgdGhpcyBsb29rcyBhdAogICAgICogJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddIGRpcmVjdGx5LiAgSWYgUE9TVCB3YXMgdXNlZCwgdGhpcwogICAgICogZmV0Y2hlcyBkYXRhIGZyb20gdGhlIHNwZWNpYWwgcGhwOi8vaW5wdXQgZmlsZSBzdHJlYW0uCiAgICAgKgogICAgICogUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB0aGUgcXVlcnkgYXJndW1lbnRzLgogICAgICoKICAgICAqIFNraXBzIGludmFsaWQga2V5L3ZhbHVlIHBhaXJzIChpLmUuIGtleXMgd2l0aCBubyAnPXZhbHVlJwogICAgICogcG9ydGlvbikuCiAgICAgKgogICAgICogUmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiBuZWl0aGVyIEdFVCBub3IgUE9TVCB3YXMgdXNlZCwgb3IgaWYKICAgICAqIFBPU1Qgd2FzIHVzZWQgYnV0IHBocDovL2lucHV0IGNhbm5vdCBiZSBvcGVuZWQuCiAgICAgKgogICAgICogU2VlIGJhY2tncm91bmQ6CiAgICAgKiBodHRwOi8vbGlzdHMub3BlbmlkZW5hYmxlZC5jb20vcGlwZXJtYWlsL2Rldi8yMDA3LU1hcmNoLzAwMDM5NS5odG1sCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBnZXRRdWVyeSgkcXVlcnlfc3RyPW51bGwpCiAgICB7CiAgICAgICAgJGRhdGEgPSBhcnJheSgpOwoKICAgICAgICBpZiAoJHF1ZXJ5X3N0ciAhPT0gbnVsbCkgewogICAgICAgICAgICAkZGF0YSA9IEF1dGhfT3BlbklEOjpwYXJhbXNfZnJvbV9zdHJpbmcoJHF1ZXJ5X3N0cik7CiAgICAgICAgfSBlbHNlIGlmICghYXJyYXlfa2V5X2V4aXN0cygnUkVRVUVTVF9NRVRIT0QnLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gWFhYIEhBQ0sgRklYTUUgSE9SUklCTEUuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gUE9TVGluZyB0byBhIFVSTCB3aXRoIHF1ZXJ5IHBhcmFtZXRlcnMgaXMgYWNjZXB0YWJsZSwgYnV0CiAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGEgY2xlYW4gd2F5IHRvIGRpc3Rpbmd1aXNoIHRob3NlIHBhcmFtZXRlcnMKICAgICAgICAgIC8vIHdoZW4gd2UgbmVlZCB0byBkbyB0aGluZ3MgbGlrZSByZXR1cm5fdG8gdmVyaWZpY2F0aW9uCiAgICAgICAgICAvLyB3aGljaCBvbmx5IHdhbnQgdG8gbG9vayBhdCBvbmUga2luZCBvZiBwYXJhbWV0ZXIuICBXZSdyZQogICAgICAgICAgLy8gZ29pbmcgdG8gZW11bGF0ZSB0aGUgYmVoYXZpb3Igb2Ygc29tZSBvdGhlciBlbnZpcm9ubWVudHMKICAgICAgICAgIC8vIGJ5IGRlZmF1bHRpbmcgdG8gR0VUIGFuZCBvdmVyd3JpdGluZyB3aXRoIFBPU1QgaWYgUE9TVAogICAgICAgICAgLy8gZGF0YSBpcyBhdmFpbGFibGUuCiAgICAgICAgICAkZGF0YSA9IEF1dGhfT3BlbklEOjpwYXJhbXNfZnJvbV9zdHJpbmcoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKTsKCiAgICAgICAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnKSB7CiAgICAgICAgICAgICRzdHIgPSBmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKTsKCiAgICAgICAgICAgIGlmICgkc3RyID09PSBmYWxzZSkgewogICAgICAgICAgICAgICRwb3N0ID0gYXJyYXkoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAkcG9zdCA9IEF1dGhfT3BlbklEOjpwYXJhbXNfZnJvbV9zdHJpbmcoJHN0cik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRkYXRhID0gYXJyYXlfbWVyZ2UoJGRhdGEsICRwb3N0KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gcGFyYW1zX2Zyb21fc3RyaW5nKCRzdHIpCiAgICB7CiAgICAgICAgJGNodW5rcyA9IGV4cGxvZGUoIiYiLCAkc3RyKTsKCiAgICAgICAgJGRhdGEgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRjaHVua3MgYXMgJGNodW5rKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoIj0iLCAkY2h1bmssIDIpOwoKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgIT0gMikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QoJGssICR2KSA9ICRwYXJ0czsKICAgICAgICAgICAgJGRhdGFbdXJsZGVjb2RlKCRrKV0gPSB1cmxkZWNvZGUoJHYpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGRpcl9uYW1lIGFzIGEgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0LiBJZiBpdAogICAgICogZXhpc3RzLCBtYWtlIHN1cmUgdGhhdCBpdCBpcywgaW4gZmFjdCwgYSBkaXJlY3RvcnkuICBSZXR1cm5zCiAgICAgKiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkOyBmYWxzZSBpZiBub3QuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVEaXIoJGRpcl9uYW1lKQogICAgewogICAgICAgIGlmIChpc19kaXIoJGRpcl9uYW1lKSB8fCBAbWtkaXIoJGRpcl9uYW1lKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyZW50X2RpciA9IGRpcm5hbWUoJGRpcl9uYW1lKTsKCiAgICAgICAgICAgIC8vIFRlcm1pbmFsIGNhc2U7IHRoZXJlIGlzIG5vIHBhcmVudCBkaXJlY3RvcnkgdG8gY3JlYXRlLgogICAgICAgICAgICBpZiAoJHBhcmVudF9kaXIgPT0gJGRpcl9uYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIChBdXRoX09wZW5JRDo6ZW5zdXJlRGlyKCRwYXJlbnRfZGlyKSAmJiBAbWtkaXIoJGRpcl9uYW1lKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBhIHN0cmluZyBwcmVmaXggdG8gYWxsIHZhbHVlcyBvZiBhbiBhcnJheS4gIFJldHVybnMgYSBuZXcKICAgICAqIGFycmF5IGNvbnRhaW5pbmcgdGhlIHByZWZpeGVkIHZhbHVlcy4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGFkZFByZWZpeCgkdmFsdWVzLCAkcHJlZml4KQogICAgewogICAgICAgICRuZXdfdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICRzKSB7CiAgICAgICAgICAgICRuZXdfdmFsdWVzW10gPSAkcHJlZml4IC4gJHM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbmV3X3ZhbHVlczsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGFycmF5IHZhbHVlcy4gIEdpdmVuIGFuIGFycmF5CiAgICAgKiAkYXJyIGFuZCBhIGtleSAka2V5LCBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZnJvbSB0aGUgYXJyYXkKICAgICAqIG9yIHJldHVybiAkZGVmYXVsdCBpZiB0aGUga2V5IGlzIGFic2VudC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGFycmF5R2V0KCRhcnIsICRrZXksICRmYWxsYmFjayA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCRhcnIpKSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrZXksICRhcnIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGFyclska2V5XTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmFsbGJhY2s7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRDo6YXJyYXlHZXQgKGtleSA9ICIuJGtleS4iKSBleHBlY3RlZCAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyYXkgYXMgZmlyc3QgcGFyYW1ldGVyLCBnb3QgIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dHlwZSgkYXJyKSwgRV9VU0VSX1dBUk5JTkcpOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2VtZW50IGZvciBQSFAncyBicm9rZW4gcGFyc2Vfc3RyLgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gcGFyc2Vfc3RyKCRxdWVyeSkKICAgIHsKICAgICAgICBpZiAoJHF1ZXJ5ID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnJicsICRxdWVyeSk7CgogICAgICAgICRuZXdfcGFydHMgPSBhcnJheSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRwYXJ0cyk7ICRpKyspIHsKICAgICAgICAgICAgJHBhaXIgPSBleHBsb2RlKCc9JywgJHBhcnRzWyRpXSk7CgogICAgICAgICAgICBpZiAoY291bnQoJHBhaXIpICE9IDIpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSAkcGFpcjsKICAgICAgICAgICAgJG5ld19wYXJ0c1t1cmxkZWNvZGUoJGtleSldID0gdXJsZGVjb2RlKCR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld19wYXJ0czsKICAgIH0KCiAgICAvKioKICAgICAqIEltcGxlbWVudHMgdGhlIFBIUCA1ICdodHRwX2J1aWxkX3F1ZXJ5JyBmdW5jdGlvbmFsaXR5LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIEVpdGhlciBhbiBhcnJheSBrZXkvdmFsdWUgcGFpcnMgb3IgYW4gYXJyYXkKICAgICAqIG9mIGFycmF5cywgZWFjaCBvZiB3aGljaCBob2xkaW5nIHR3byB2YWx1ZXM6IGEga2V5IGFuZCBhIHZhbHVlLAogICAgICogc2VxdWVudGlhbGx5LgogICAgICogQHJldHVybiBzdHJpbmcgJHJlc3VsdCBUaGUgcmVzdWx0IG9mIHVybC1lbmNvZGluZyB0aGUga2V5L3ZhbHVlCiAgICAgKiBwYWlycyBmcm9tICRkYXRhIGludG8gYSBVUkwgcXVlcnkgc3RyaW5nCiAgICAgKiAoZS5nLiAidXNlcm5hbWU9Ym9iJmlkPTU2IikuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBodHRwQnVpbGRRdWVyeSgkZGF0YSkKICAgIHsKICAgICAgICAkcGFpcnMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkcGFpcnNbXSA9IHVybGVuY29kZSgkdmFsdWVbMF0pLiI9Ii51cmxlbmNvZGUoJHZhbHVlWzFdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYWlyc1tdID0gdXJsZW5jb2RlKCRrZXkpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaW1wbG9kZSgiJiIsICRwYWlycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiQXBwZW5kcyIgcXVlcnkgYXJndW1lbnRzIG9udG8gYSBVUkwuICBUaGUgVVJMIG1heSBvciBtYXkgbm90CiAgICAgKiBhbHJlYWR5IGhhdmUgYXJndW1lbnRzIChmb2xsb3dpbmcgYSBxdWVzdGlvbiBtYXJrKS4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybCBBIFVSTCwgd2hpY2ggbWF5IG9yIG1heSBub3QgYWxyZWFkeSBoYXZlCiAgICAgKiBhcmd1bWVudHMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgRWl0aGVyIGFuIGFycmF5IGtleS92YWx1ZSBwYWlycyBvciBhbiBhcnJheSBvZgogICAgICogYXJyYXlzLCBlYWNoIG9mIHdoaWNoIGhvbGRpbmcgdHdvIHZhbHVlczogYSBrZXkgYW5kIGEgdmFsdWUsCiAgICAgKiBzZXF1ZW50aWFsbHkuICBJZiAkYXJncyBpcyBhbiBvcmRpbmFyeSBrZXkvdmFsdWUgYXJyYXksIHRoZQogICAgICogcGFyYW1ldGVycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVUkwgaW4gc29ydGVkIGFscGhhYmV0aWNhbCBvcmRlcjsKICAgICAqIGlmICRhcmdzIGlzIGFuIGFycmF5IG9mIGFycmF5cywgdGhlaXIgb3JkZXIgd2lsbCBiZSBwcmVzZXJ2ZWQuCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkdXJsIFRoZSBvcmlnaW5hbCBVUkwgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMgYWRkZWQuCiAgICAgKgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gYXBwZW5kQXJncygkdXJsLCAkYXJncykKICAgIHsKICAgICAgICBpZiAoY291bnQoJGFyZ3MpID09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR1cmw7CiAgICAgICAgfQoKICAgICAgICAvLyBOb24tZW1wdHkgYXJyYXk7IGlmIGl0IGlzIGFuIGFycmF5IG9mIGFycmF5cywgdXNlCiAgICAgICAgLy8gbXVsdGlzb3J0OyBvdGhlcndpc2UgdXNlIHNvcnQuCiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoMCwgJGFyZ3MpICYmCiAgICAgICAgICAgIGlzX2FycmF5KCRhcmdzWzBdKSkgewogICAgICAgICAgICAvLyBEbyBub3RoaW5nIGhlcmUuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCRhcmdzKTsKICAgICAgICAgICAgc29ydCgka2V5cyk7CiAgICAgICAgICAgICRuZXdfYXJncyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgICAgICRuZXdfYXJnc1tdID0gYXJyYXkoJGtleSwgJGFyZ3NbJGtleV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhcmdzID0gJG5ld19hcmdzOwogICAgICAgIH0KCiAgICAgICAgJHNlcCA9ICc/JzsKICAgICAgICBpZiAoc3RycG9zKCR1cmwsICc/JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRzZXAgPSAnJic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVybCAuICRzZXAgLiBBdXRoX09wZW5JRDo6aHR0cEJ1aWxkUXVlcnkoJGFyZ3MpOwogICAgfQoKICAgIC8qKgogICAgICogSW1wbGVtZW50cyBweXRob24ncyB1cmx1bnBhcnNlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIFBIUC4KICAgICAqIEdpdmVuIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50cyBvZiBhIFVSTCwgdGhpcyBmdW5jdGlvbiByZWJ1aWxkcwogICAgICogYW5kIHJldHVybnMgdGhlIFVSTC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtZSBUaGUgc2NoZW1lIChlLmcuICdodHRwJykuICBEZWZhdWx0cyB0byAnaHR0cCcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBob3N0LiAgUmVxdWlyZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwb3J0IFRoZSBwb3J0LgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyYWdtZW50IFRoZSBmcmFnbWVudC4KICAgICAqIEByZXR1cm4gc3RyaW5nICR1cmwgVGhlIFVSTCByZXN1bHRpbmcgZnJvbSBhc3NlbWJsaW5nIHRoZQogICAgICogc3BlY2lmaWVkIGNvbXBvbmVudHMuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiB1cmx1bnBhcnNlKCRzY2hlbWUsICRob3N0LCAkcG9ydCA9IG51bGwsICRwYXRoID0gJy8nLAogICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnkgPSAnJywgJGZyYWdtZW50ID0gJycpCiAgICB7CgogICAgICAgIGlmICghJHNjaGVtZSkgewogICAgICAgICAgICAkc2NoZW1lID0gJ2h0dHAnOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkaG9zdCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRwYXRoKSB7CiAgICAgICAgICAgICRwYXRoID0gJyc7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJHNjaGVtZSAuICI6Ly8iIC4gJGhvc3Q7CgogICAgICAgIGlmICgkcG9ydCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICI6IiAuICRwb3J0OwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCAuPSAkcGF0aDsKCiAgICAgICAgaWYgKCRxdWVyeSkgewogICAgICAgICAgICAkcmVzdWx0IC49ICI/IiAuICRxdWVyeTsKICAgICAgICB9CgogICAgICAgIGlmICgkZnJhZ21lbnQpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAiIyIgLiAkZnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgVVJMLCB0aGlzICJub3JtYWxpemVzIiBpdCBieSBhZGRpbmcgYSB0cmFpbGluZyBzbGFzaAogICAgICogYW5kIC8gb3IgYSBsZWFkaW5nIGh0dHA6Ly8gc2NoZW1lIHdoZXJlIG5lY2Vzc2FyeS4gIFJldHVybnMKICAgICAqIG51bGwgaWYgdGhlIG9yaWdpbmFsIFVSTCBpcyBtYWxmb3JtZWQgYW5kIGNhbm5vdCBiZSBub3JtYWxpemVkLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICAgICAqIEByZXR1cm4gbWl4ZWQgJG5ld191cmwgVGhlIFVSTCBhZnRlciBub3JtYWxpemF0aW9uLCBvciBudWxsIGlmCiAgICAgKiAkdXJsIHdhcyBtYWxmb3JtZWQuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVVcmwoJHVybCkKICAgIHsKICAgICAgICBAJHBhcnNlZCA9IHBhcnNlX3VybCgkdXJsKTsKCiAgICAgICAgaWYgKCEkcGFyc2VkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRwYXJzZWRbJ3NjaGVtZSddKSAmJgogICAgICAgICAgICBpc3NldCgkcGFyc2VkWydob3N0J10pKSB7CiAgICAgICAgICAgICRzY2hlbWUgPSBzdHJ0b2xvd2VyKCRwYXJzZWRbJ3NjaGVtZSddKTsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkc2NoZW1lLCBhcnJheSgnaHR0cCcsICdodHRwcycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdXJsID0gJ2h0dHA6Ly8nIC4gJHVybDsKICAgICAgICB9CgogICAgICAgICRub3JtYWxpemVkID0gQXV0aF9PcGVuSURfdXJpbm9ybSgkdXJsKTsKICAgICAgICBpZiAoJG5vcm1hbGl6ZWQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxpc3QoJGRlZnJhZ2dlZCwgJGZyYWcpID0gQXV0aF9PcGVuSUQ6OnVybGRlZnJhZygkbm9ybWFsaXplZCk7CiAgICAgICAgcmV0dXJuICRkZWZyYWdnZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlbWVudCAod3JhcHBlcikgZm9yIFBIUCdzIGludHZhbCgpIGJlY2F1c2UgaXQncyBicm9rZW4uCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBpbnR2YWwoJHZhbHVlKQogICAgewogICAgICAgICRyZSA9ICIvXlxcZCskLyI7CgogICAgICAgIGlmICghcHJlZ19tYXRjaCgkcmUsICR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGludHZhbCgkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQ291bnQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHN0cmluZyBpbmRlcGVuZGVudGx5IG9mCiAgICAgKiBtdWx0aWJ5dGUgc3VwcG9ydCBjb25kaXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgc3RyaW5nIG9mIGJ5dGVzIHRvIGNvdW50LgogICAgICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBieXRlcyBpbiAkc3RyLgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gYnl0ZXMoJHN0cikKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKGJpbjJoZXgoJHN0cikpIC8gMjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYnl0ZXMgaW4gYSBzdHJpbmcgaW5kZXBlbmRlbnRseSBvZiBtdWx0aWJ5dGUgc3VwcG9ydAogICAgICogY29uZGl0aW9ucy4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIHRvQnl0ZXMoJHN0cikKICAgIHsKICAgICAgICAkaGV4ID0gYmluMmhleCgkc3RyKTsKCiAgICAgICAgaWYgKCEkaGV4KSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICAgIH0KCiAgICAgICAgJGIgPSBhcnJheSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkaGV4KTsgJGkgKz0gMikgewogICAgICAgICAgICAkYltdID0gY2hyKGJhc2VfY29udmVydChzdWJzdHIoJGhleCwgJGksIDIpLCAxNiwgMTApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYjsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gdXJsZGVmcmFnKCR1cmwpCiAgICB7CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgiIyIsICR1cmwsIDIpOwoKICAgICAgICBpZiAoY291bnQoJHBhcnRzKSA9PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkcGFydHNbMF0sICIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHBhcnRzOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyKCRjYWxsYmFjaywgJiRzZXF1ZW5jZSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHNlcXVlbmNlIGFzICRpdGVtKSB7CiAgICAgICAgICAgIGlmIChjYWxsX3VzZXJfZnVuY19hcnJheSgkY2FsbGJhY2ssIGFycmF5KCRpdGVtKSkpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICRpdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlKCYkZGVzdCwgJiRzcmMpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHNyYyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkZGVzdFska10gPSAkdjsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBXcmFwIFBIUCdzIHN0YW5kYXJkIGVycm9yX2xvZyBmdW5jdGlvbmFsaXR5LiAgVXNlIHRoaXMgdG8KICAgICAqIHBlcmZvcm0gYWxsIGxvZ2dpbmcuIEl0IHdpbGwgaW50ZXJwb2xhdGUgYW55IGFkZGl0aW9uYWwKICAgICAqIGFyZ3VtZW50cyBpbnRvIHRoZSBmb3JtYXQgc3RyaW5nIGJlZm9yZSBsb2dnaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdF9zdHJpbmcgVGhlIHNwcmludGYgZm9ybWF0IGZvciB0aGUgbWVzc2FnZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gbG9nKCRmb3JtYXRfc3RyaW5nKQogICAgewogICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICRtZXNzYWdlID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ3NwcmludGYnLCAkYXJncyk7CiAgICAgICAgZXJyb3JfbG9nKCRtZXNzYWdlKTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gYXV0b1N1Ym1pdEhUTUwoJGZvcm0sICR0aXRsZT0iT3BlbklkIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzIikKICAgIHsKICAgICAgICByZXR1cm4oIjxodG1sPiIuCiAgICAgICAgICAgICAgICI8aGVhZD48dGl0bGU+Ii4KICAgICAgICAgICAgICAgJHRpdGxlIC4KICAgICAgICAgICAgICAgIjwvdGl0bGU+PC9oZWFkPiIuCiAgICAgICAgICAgICAgICI8Ym9keSBvbmxvYWQ9J2RvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOyc+Ii4KICAgICAgICAgICAgICAgJGZvcm0gLgogICAgICAgICAgICAgICAiPHNjcmlwdD4iLgogICAgICAgICAgICAgICAidmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZm9ybXNbMF0uZWxlbWVudHM7Ii4KICAgICAgICAgICAgICAgImZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsiLgogICAgICAgICAgICAgICAiICBlbGVtZW50c1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7Ii4KICAgICAgICAgICAgICAgIn0iLgogICAgICAgICAgICAgICAiPC9zY3JpcHQ+Ii4KICAgICAgICAgICAgICAgIjwvYm9keT4iLgogICAgICAgICAgICAgICAiPC9odG1sPiIpOwogICAgfQp9CgovKgogKiBGdW5jdGlvbiB0byBydW4gd2hlbiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCiAqIEFic3RyYWN0ZWQgdG8gYSBmdW5jdGlvbiB0byBtYWtlIGxpZmUgZWFzaWVyCiAqIGZvciBzb21lIFBIUCBvcHRpbWl6ZXJzLgogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfaW5jbHVkZV9pbml0KCkgewogIGlmIChBdXRoX09wZW5JRF9nZXRNYXRoTGliKCkgPT09IG51bGwpIHsKICAgIEF1dGhfT3BlbklEX3NldE5vTWF0aFN1cHBvcnQoKTsKICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Association.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyBjb2RlIGZvciBkZWFsaW5nIHdpdGggYXNzb2NpYXRpb25zIGJldHdlZW4KICogY29uc3VtZXJzIGFuZCBzZXJ2ZXJzLgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogQGFjY2VzcyBwcml2YXRlCiAqLwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0NyeXB0VXRpbC5waHAnOwoKLyoqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9LVkZvcm0ucGhwJzsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvSE1BQy5waHAnOwoKLyoqCiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIGEgc2VydmVyIGFuZCBhCiAqIGNvbnN1bWVyLiAgSW4gZ2VuZXJhbCwgdXNlcnMgb2YgdGhpcyBsaWJyYXJ5IHdpbGwgbmV2ZXIgc2VlCiAqIGluc3RhbmNlcyBvZiB0aGlzIG9iamVjdC4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZiB5b3UgaW1wbGVtZW50IGEKICogY3VzdG9tIHtAbGluayBBdXRoX09wZW5JRF9PcGVuSURTdG9yZX0uCiAqCiAqIElmIHlvdSBkbyBpbXBsZW1lbnQgc3VjaCBhIHN0b3JlLCBpdCB3aWxsIG5lZWQgdG8gc3RvcmUgdGhlIHZhbHVlcwogKiBvZiB0aGUgaGFuZGxlLCBzZWNyZXQsIGlzc3VlZCwgbGlmZXRpbWUsIGFuZCBhc3NvY190eXBlIGluc3RhbmNlCiAqIHZhcmlhYmxlcy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9Bc3NvY2lhdGlvbiB7CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIGEgSE1BQy1TSEExIHNwZWNpZmljIHZhbHVlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJFNJR19MRU5HVEggPSAyMDsKCiAgICAvKioKICAgICAqIFRoZSBvcmRlcmluZyBhbmQgbmFtZSBvZiBrZXlzIGFzIHN0b3JlZCBieSBzZXJpYWxpemUuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHZhciAkYXNzb2Nfa2V5cyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjcmV0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc3N1ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZmV0aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NvY190eXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2YXIgJF9tYWNzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgJ0hNQUMtU0hBMScgPT4gJ0F1dGhfT3BlbklEX0hNQUNTSEExJywKICAgICAgICAgICAgICAgICAgICAgICAnSE1BQy1TSEEyNTYnID0+ICdBdXRoX09wZW5JRF9ITUFDU0hBMjU2JwogICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0ZSBjb25zdHJ1Y3RvciAoZmFjdG9yeSBtZXRob2QpIHVzZWQgYnkgdGhlCiAgICAgKiBPcGVuSUQgY29uc3VtZXIgbGlicmFyeSB0byBjcmVhdGUgYXNzb2NpYXRpb25zLiAgT3BlbklEIHN0b3JlCiAgICAgKiBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkbid0IHVzZSB0aGlzIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRleHBpcmVzX2luIFRoaXMgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoaXMKICAgICAqIGFzc29jaWF0aW9uIGlzIGdvb2QgZm9yLCBtZWFzdXJlZCBpbiBzZWNvbmRzIHNpbmNlIHRoZQogICAgICogYXNzb2NpYXRpb24gd2FzIGlzc3VlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYW5kbGUgVGhpcyBpcyB0aGUgaGFuZGxlIHRoZSBzZXJ2ZXIgZ2F2ZSB0aGlzCiAgICAgKiBhc3NvY2lhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHNlY3JldCBUaGlzIGlzIHRoZSBzaGFyZWQgc2VjcmV0IHRoZSBzZXJ2ZXIKICAgICAqIGdlbmVyYXRlZCBmb3IgdGhpcyBhc3NvY2lhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXNzb2NfdHlwZSBUaGlzIGlzIHRoZSB0eXBlIG9mIGFzc29jaWF0aW9uIHRoaXMKICAgICAqIGluc3RhbmNlIHJlcHJlc2VudHMuICBUaGUgb25seSB2YWxpZCB2YWx1ZXMgb2YgdGhpcyBmaWVsZCBhdAogICAgICogdGhpcyB0aW1lIGlzICdITUFDLVNIQTEnIGFuZCAnSE1BQy1TSEEyNTYnLCBidXQgbmV3IHR5cGVzIG1heQogICAgICogYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLgogICAgICoKICAgICAqIEByZXR1cm4gYXNzb2NpYXRpb24gQW4ge0BsaW5rIEF1dGhfT3BlbklEX0Fzc29jaWF0aW9ufQogICAgICogaW5zdGFuY2UuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBmcm9tRXhwaXJlc0luKCRleHBpcmVzX2luLCAkaGFuZGxlLCAkc2VjcmV0LCAkYXNzb2NfdHlwZSkKICAgIHsKICAgICAgICAkaXNzdWVkID0gdGltZSgpOwogICAgICAgICRsaWZldGltZSA9ICRleHBpcmVzX2luOwogICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQXNzb2NpYXRpb24oJGhhbmRsZSwgJHNlY3JldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3N1ZWQsICRsaWZldGltZSwgJGFzc29jX3R5cGUpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGFuIGFzc29jaWF0aW9uLgogICAgICogVGhlIGxpYnJhcnkgc2hvdWxkIGNyZWF0ZSBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBhc3NvY2lhdGlvbnMsIHNvCiAgICAgKiB0aGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEkuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGFuZGxlIFRoaXMgaXMgdGhlIGhhbmRsZSB0aGUgc2VydmVyIGdhdmUgdGhpcwogICAgICogYXNzb2NpYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VjcmV0IFRoaXMgaXMgdGhlIHNoYXJlZCBzZWNyZXQgdGhlIHNlcnZlcgogICAgICogZ2VuZXJhdGVkIGZvciB0aGlzIGFzc29jaWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRpc3N1ZWQgVGhpcyBpcyB0aGUgdGltZSB0aGlzIGFzc29jaWF0aW9uIHdhcwogICAgICogaXNzdWVkLCBpbiBzZWNvbmRzIHNpbmNlIDAwOjAwIEdNVCwgSmFudWFyeSAxLCAxOTcwLiAgKGllLCBhCiAgICAgKiB1bml4IHRpbWVzdGFtcCkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkbGlmZXRpbWUgVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhpcwogICAgICogYXNzb2NpYXRpb24gaXMgZ29vZCBmb3IsIG1lYXN1cmVkIGluIHNlY29uZHMgc2luY2UgdGhlCiAgICAgKiBhc3NvY2lhdGlvbiB3YXMgaXNzdWVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jX3R5cGUgVGhpcyBpcyB0aGUgdHlwZSBvZiBhc3NvY2lhdGlvbiB0aGlzCiAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRzLiAgVGhlIG9ubHkgdmFsaWQgdmFsdWVzIG9mIHRoaXMgZmllbGQgYXQKICAgICAqIHRoaXMgdGltZSBpcyAnSE1BQy1TSEExJyBhbmQgJ0hNQUMtU0hBMjU2JywgYnV0IG5ldyB0eXBlcyBtYXkKICAgICAqIGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVyZS4KICAgICAqLwogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQXNzb2NpYXRpb24oCiAgICAgICAgJGhhbmRsZSwgJHNlY3JldCwgJGlzc3VlZCwgJGxpZmV0aW1lLCAkYXNzb2NfdHlwZSkKICAgIHsKICAgICAgICBpZiAoIWluX2FycmF5KCRhc3NvY190eXBlLAogICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfZ2V0U3VwcG9ydGVkQXNzb2NpYXRpb25UeXBlcygpLCB0cnVlKSkgewogICAgICAgICAgICAkZm10ID0gJ1Vuc3VwcG9ydGVkIGFzc29jaWF0aW9uIHR5cGUgKCVzKSc7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3Ioc3ByaW50ZigkZm10LCAkYXNzb2NfdHlwZSksIEVfVVNFUl9FUlJPUik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aGFuZGxlID0gJGhhbmRsZTsKICAgICAgICAkdGhpcy0+c2VjcmV0ID0gJHNlY3JldDsKICAgICAgICAkdGhpcy0+aXNzdWVkID0gJGlzc3VlZDsKICAgICAgICAkdGhpcy0+bGlmZXRpbWUgPSAkbGlmZXRpbWU7CiAgICAgICAgJHRoaXMtPmFzc29jX3R5cGUgPSAkYXNzb2NfdHlwZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhpcyBhc3NvY2lhdGlvbiBpcyBzdGlsbAogICAgICogdmFsaWQgZm9yLCBvciAwIGlmIHRoZSBhc3NvY2lhdGlvbiBpcyBubyBsb25nZXIgdmFsaWQuCiAgICAgKgogICAgICogQHJldHVybiBpbnRlZ2VyICRzZWNvbmRzIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGlzIGFzc29jaWF0aW9uCiAgICAgKiBpcyBzdGlsbCB2YWxpZCBmb3IsIG9yIDAgaWYgdGhlIGFzc29jaWF0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RXhwaXJlc0luKCRub3cgPSBudWxsKQogICAgewogICAgICAgIGlmICgkbm93ID09IG51bGwpIHsKICAgICAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBtYXgoMCwgJHRoaXMtPmlzc3VlZCArICR0aGlzLT5saWZldGltZSAtICRub3cpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBjaGVja3MgdG8gc2VlIGlmIHR3byB7QGxpbmsgQXV0aF9PcGVuSURfQXNzb2NpYXRpb259CiAgICAgKiBpbnN0YW5jZXMgcmVwcmVzZW50IHRoZSBzYW1lIGFzc29jaWF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCAkcmVzdWx0IHRydWUgaWYgdGhlIHR3byBpbnN0YW5jZXMgcmVwcmVzZW50IHRoZQogICAgICogc2FtZSBhc3NvY2lhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBmdW5jdGlvbiBlcXVhbCgkb3RoZXIpCiAgICB7CiAgICAgICAgcmV0dXJuICgoZ2V0dHlwZSgkdGhpcykgPT0gZ2V0dHlwZSgkb3RoZXIpKQogICAgICAgICAgICAgICAgJiYgKCR0aGlzLT5oYW5kbGUgPT0gJG90aGVyLT5oYW5kbGUpCiAgICAgICAgICAgICAgICAmJiAoJHRoaXMtPnNlY3JldCA9PSAkb3RoZXItPnNlY3JldCkKICAgICAgICAgICAgICAgICYmICgkdGhpcy0+aXNzdWVkID09ICRvdGhlci0+aXNzdWVkKQogICAgICAgICAgICAgICAgJiYgKCR0aGlzLT5saWZldGltZSA9PSAkb3RoZXItPmxpZmV0aW1lKQogICAgICAgICAgICAgICAgJiYgKCR0aGlzLT5hc3NvY190eXBlID09ICRvdGhlci0+YXNzb2NfdHlwZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhbiBhc3NvY2lhdGlvbiB0byBLViBmb3JtLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRyZXN1bHQgU3RyaW5nIGluIEtWIGZvcm0gc3VpdGFibGUgZm9yCiAgICAgKiBkZXNlcmlhbGl6YXRpb24gYnkgZGVzZXJpYWxpemUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyJywKICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZScgPT4gJHRoaXMtPmhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgJ3NlY3JldCcgPT4gYmFzZTY0X2VuY29kZSgkdGhpcy0+c2VjcmV0KSwKICAgICAgICAgICAgICAgICAgICAgJ2lzc3VlZCcgPT4gc3RydmFsKGludHZhbCgkdGhpcy0+aXNzdWVkKSksCiAgICAgICAgICAgICAgICAgICAgICdsaWZldGltZScgPT4gc3RydmFsKGludHZhbCgkdGhpcy0+bGlmZXRpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgJ2Fzc29jX3R5cGUnID0+ICR0aGlzLT5hc3NvY190eXBlCiAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgIGFzc2VydChhcnJheV9rZXlzKCRkYXRhKSA9PSAkdGhpcy0+YXNzb2Nfa2V5cyk7CgogICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9LVkZvcm06OmZyb21BcnJheSgkZGF0YSwgJHN0cmljdCA9IHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYW4gYXNzb2NpYXRpb24gYXMgc3RvcmVkIGJ5IHNlcmlhbGl6ZSgpLiAgVGhpcyBpcyB0aGUKICAgICAqIGludmVyc2Ugb2Ygc2VyaWFsaXplLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jX3MgQXNzb2NpYXRpb24gYXMgc2VyaWFsaXplZCBieSBzZXJpYWxpemUoKQogICAgICogQHJldHVybiBBdXRoX09wZW5JRF9Bc3NvY2lhdGlvbiAkcmVzdWx0IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGRlc2VyaWFsaXplKCRjbGFzc19uYW1lLCAkYXNzb2NfcykKICAgIHsKICAgICAgICAkcGFpcnMgPSBBdXRoX09wZW5JRF9LVkZvcm06OnRvQXJyYXkoJGFzc29jX3MsICRzdHJpY3QgPSB0cnVlKTsKICAgICAgICAka2V5cyA9IGFycmF5KCk7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBhaXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGtleXNbXSA9ICRrZXk7CiAgICAgICAgICAgICR2YWx1ZXNbXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgICRjbGFzc192YXJzID0gZ2V0X2NsYXNzX3ZhcnMoJGNsYXNzX25hbWUpOwogICAgICAgICRjbGFzc19hc3NvY19rZXlzID0gJGNsYXNzX3ZhcnNbJ2Fzc29jX2tleXMnXTsKCiAgICAgICAgc29ydCgka2V5cyk7CiAgICAgICAgc29ydCgkY2xhc3NfYXNzb2Nfa2V5cyk7CgogICAgICAgIGlmICgka2V5cyAhPSAkY2xhc3NfYXNzb2Nfa2V5cykgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCdVbmV4cGVjdGVkIGtleSB2YWx1ZXM6ICcgLiB2YXJfZXhwb3J0KCRrZXlzLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHZlcnNpb24gPSAkcGFpcnNbJ3ZlcnNpb24nXTsKICAgICAgICAkaGFuZGxlID0gJHBhaXJzWydoYW5kbGUnXTsKICAgICAgICAkc2VjcmV0ID0gJHBhaXJzWydzZWNyZXQnXTsKICAgICAgICAkaXNzdWVkID0gJHBhaXJzWydpc3N1ZWQnXTsKICAgICAgICAkbGlmZXRpbWUgPSAkcGFpcnNbJ2xpZmV0aW1lJ107CiAgICAgICAgJGFzc29jX3R5cGUgPSAkcGFpcnNbJ2Fzc29jX3R5cGUnXTsKCiAgICAgICAgaWYgKCR2ZXJzaW9uICE9ICcyJykgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCdVbmtub3duIHZlcnNpb246ICcgLiAkdmVyc2lvbiwgRV9VU0VSX1dBUk5JTkcpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRpc3N1ZWQgPSBpbnR2YWwoJGlzc3VlZCk7CiAgICAgICAgJGxpZmV0aW1lID0gaW50dmFsKCRsaWZldGltZSk7CiAgICAgICAgJHNlY3JldCA9IGJhc2U2NF9kZWNvZGUoJHNlY3JldCk7CgogICAgICAgIHJldHVybiBuZXcgJGNsYXNzX25hbWUoCiAgICAgICAgICAgICRoYW5kbGUsICRzZWNyZXQsICRpc3N1ZWQsICRsaWZldGltZSwgJGFzc29jX3R5cGUpOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBzaWduYXR1cmUgZm9yIGEgc2VxdWVuY2Ugb2YgKGtleSwgdmFsdWUpIHBhaXJzCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhaXJzIFRoZSBwYWlycyB0byBzaWduLCBpbiBvcmRlci4gIFRoaXMgaXMgYW4KICAgICAqIGFycmF5IG9mIHR3by10dXBsZXMuCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkc2lnbmF0dXJlIFRoZSBiaW5hcnkgc2lnbmF0dXJlIG9mIHRoaXMgc2VxdWVuY2UKICAgICAqIG9mIHBhaXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNpZ24oJHBhaXJzKQogICAgewogICAgICAgICRrdiA9IEF1dGhfT3BlbklEX0tWRm9ybTo6ZnJvbUFycmF5KCRwYWlycyk7CgogICAgICAgIC8qIEludmFsaWQgYXNzb2NpYXRpb24gdHlwZXMgc2hvdWxkIGJlIGNhdWdodCBhdCBjb25zdHJ1Y3RvciAqLwogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT5fbWFjc1skdGhpcy0+YXNzb2NfdHlwZV07CgogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheSgkY2FsbGJhY2ssIGFycmF5KCR0aGlzLT5zZWNyZXQsICRrdikpOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBzaWduYXR1cmUgZm9yIHNvbWUgZmllbGRzIGluIGEgZGljdGlvbmFyeQogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIGFycmF5ICRmaWVsZHMgVGhlIGZpZWxkcyB0byBzaWduLCBpbiBvcmRlcjsgdGhpcyBpcyBhbgogICAgICogYXJyYXkgb2Ygc3RyaW5ncy4KICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YSBEaWN0aW9uYXJ5IG9mIHZhbHVlcyB0byBzaWduIChhbiBhcnJheSBvZgogICAgICogc3RyaW5nID0+IHN0cmluZyBwYWlycykuCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUsIGJhc2U2NCBlbmNvZGVkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNpZ25NZXNzYWdlKCRtZXNzYWdlKQogICAgewogICAgICAgIGlmICgkbWVzc2FnZS0+aGFzS2V5KEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZycpIHx8CiAgICAgICAgICAgICRtZXNzYWdlLT5oYXNLZXkoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnc2lnbmVkJykpIHsKICAgICAgICAgICAgLy8gQWxyZWFkeSBoYXMgYSBzaWcKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkZXh0YW50X2hhbmRsZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzb2NfaGFuZGxlJyk7CgogICAgICAgIGlmICgkZXh0YW50X2hhbmRsZSAmJiAoJGV4dGFudF9oYW5kbGUgIT0gJHRoaXMtPmhhbmRsZSkpIHsKICAgICAgICAgICAgLy8gcmFpc2UgVmFsdWVFcnJvcigiTWVzc2FnZSBoYXMgYSBkaWZmZXJlbnQgYXNzb2NpYXRpb24gaGFuZGxlIikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmVkX21lc3NhZ2UgPSAkbWVzc2FnZTsKICAgICAgICAkc2lnbmVkX21lc3NhZ2UtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdhc3NvY19oYW5kbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGUpOwoKICAgICAgICAkbWVzc2FnZV9rZXlzID0gYXJyYXlfa2V5cygkc2lnbmVkX21lc3NhZ2UtPnRvUG9zdEFyZ3MoKSk7CiAgICAgICAgJHNpZ25lZF9saXN0ID0gYXJyYXkoKTsKICAgICAgICAkc2lnbmVkX3ByZWZpeCA9ICdvcGVuaWQuJzsKCiAgICAgICAgZm9yZWFjaCAoJG1lc3NhZ2Vfa2V5cyBhcyAkaykgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrLCAkc2lnbmVkX3ByZWZpeCkgPT09IDApIHsKICAgICAgICAgICAgICAgICRzaWduZWRfbGlzdFtdID0gc3Vic3RyKCRrLCBzdHJsZW4oJHNpZ25lZF9wcmVmaXgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNpZ25lZF9saXN0W10gPSAnc2lnbmVkJzsKICAgICAgICBzb3J0KCRzaWduZWRfbGlzdCk7CgogICAgICAgICRzaWduZWRfbWVzc2FnZS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZ25lZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbG9kZSgnLCcsICRzaWduZWRfbGlzdCkpOwogICAgICAgICRzaWcgPSAkdGhpcy0+Z2V0TWVzc2FnZVNpZ25hdHVyZSgkc2lnbmVkX21lc3NhZ2UpOwogICAgICAgICRzaWduZWRfbWVzc2FnZS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZycsICRzaWcpOwogICAgICAgIHJldHVybiAkc2lnbmVkX21lc3NhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHtAbGluayBBdXRoX09wZW5JRF9NZXNzYWdlfSwgcmV0dXJuIHRoZSBrZXkvdmFsdWUgcGFpcnMKICAgICAqIHRvIGJlIHNpZ25lZCBhY2NvcmRpbmcgdG8gdGhlIHNpZ25lZCBsaXN0IGluIHRoZSBtZXNzYWdlLiAgSWYKICAgICAqIHRoZSBtZXNzYWdlIGxhY2tzIGEgc2lnbmVkIGxpc3QsIHJldHVybiBudWxsLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfbWFrZVBhaXJzKCRtZXNzYWdlKQogICAgewogICAgICAgICRzaWduZWQgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZ25lZCcpOwogICAgICAgIGlmICghJHNpZ25lZCB8fCBBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRzaWduZWQpKSB7CiAgICAgICAgICAgIC8vIHJhaXNlIFZhbHVlRXJyb3IoJ01lc3NhZ2UgaGFzIG5vIHNpZ25lZCBsaXN0OiAlcycgJSAobWVzc2FnZSwpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRzaWduZWRfbGlzdCA9IGV4cGxvZGUoJywnLCAkc2lnbmVkKTsKICAgICAgICAkcGFpcnMgPSBhcnJheSgpOwogICAgICAgICRkYXRhID0gJG1lc3NhZ2UtPnRvUG9zdEFyZ3MoKTsKICAgICAgICBmb3JlYWNoICgkc2lnbmVkX2xpc3QgYXMgJGZpZWxkKSB7CiAgICAgICAgICAgICRwYWlyc1tdID0gYXJyYXkoJGZpZWxkLCBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5pZC4nIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGQsICcnKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcGFpcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiB7QGxpbmsgQXV0aF9PcGVuSURfTWVzc2FnZX0sIHJldHVybiB0aGUgc2lnbmF0dXJlIGZvcgogICAgICogdGhlIHNpZ25lZCBsaXN0IGluIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBnZXRNZXNzYWdlU2lnbmF0dXJlKCRtZXNzYWdlKQogICAgewogICAgICAgICRwYWlycyA9ICR0aGlzLT5fbWFrZVBhaXJzKCRtZXNzYWdlKTsKICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkdGhpcy0+c2lnbigkcGFpcnMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmZpcm0gdGhhdCB0aGUgc2lnbmF0dXJlIG9mIHRoZXNlIGZpZWxkcyBtYXRjaGVzIHRoZQogICAgICogc2lnbmF0dXJlIGNvbnRhaW5lZCBpbiB0aGUgZGF0YS4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gY2hlY2tNZXNzYWdlU2lnbmF0dXJlKCRtZXNzYWdlKQogICAgewogICAgICAgICRzaWcgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2lnJyk7CgogICAgICAgIGlmICghJHNpZyB8fCBBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRzaWcpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRjYWxjdWxhdGVkX3NpZyA9ICR0aGlzLT5nZXRNZXNzYWdlU2lnbmF0dXJlKCRtZXNzYWdlKTsKICAgICAgICByZXR1cm4gJGNhbGN1bGF0ZWRfc2lnID09ICRzaWc7CiAgICB9Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldFNlY3JldFNpemUoJGFzc29jX3R5cGUpCnsKICAgIGlmICgkYXNzb2NfdHlwZSA9PSAnSE1BQy1TSEExJykgewogICAgICAgIHJldHVybiAyMDsKICAgIH0gZWxzZSBpZiAoJGFzc29jX3R5cGUgPT0gJ0hNQUMtU0hBMjU2JykgewogICAgICAgIHJldHVybiAzMjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldEFsbEFzc29jaWF0aW9uVHlwZXMoKQp7CiAgICByZXR1cm4gYXJyYXkoJ0hNQUMtU0hBMScsICdITUFDLVNIQTI1NicpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRTdXBwb3J0ZWRBc3NvY2lhdGlvblR5cGVzKCkKewogICAgJGEgPSBhcnJheSgnSE1BQy1TSEExJyk7CgogICAgaWYgKEF1dGhfT3BlbklEX0hNQUNTSEEyNTZfU1VQUE9SVEVEKSB7CiAgICAgICAgJGFbXSA9ICdITUFDLVNIQTI1Nic7CiAgICB9CgogICAgcmV0dXJuICRhOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRTZXNzaW9uVHlwZXMoJGFzc29jX3R5cGUpCnsKICAgICRhc3NvY190b19zZXNzaW9uID0gYXJyYXkoCiAgICAgICAnSE1BQy1TSEExJyA9PiBhcnJheSgnREgtU0hBMScsICduby1lbmNyeXB0aW9uJykpOwoKICAgIGlmIChBdXRoX09wZW5JRF9ITUFDU0hBMjU2X1NVUFBPUlRFRCkgewogICAgICAgICRhc3NvY190b19zZXNzaW9uWydITUFDLVNIQTI1NiddID0KICAgICAgICAgICAgYXJyYXkoJ0RILVNIQTI1NicsICduby1lbmNyeXB0aW9uJyk7CiAgICB9CgogICAgcmV0dXJuIEF1dGhfT3BlbklEOjphcnJheUdldCgkYXNzb2NfdG9fc2Vzc2lvbiwgJGFzc29jX3R5cGUsIGFycmF5KCkpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9jaGVja1Nlc3Npb25UeXBlKCRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKQp7CiAgICBpZiAoIWluX2FycmF5KCRzZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX2dldFNlc3Npb25UeXBlcygkYXNzb2NfdHlwZSkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXREZWZhdWx0QXNzb2NpYXRpb25PcmRlcigpCnsKICAgICRvcmRlciA9IGFycmF5KCk7CgogICAgaWYgKCFBdXRoX09wZW5JRF9ub01hdGhTdXBwb3J0KCkpIHsKICAgICAgICAkb3JkZXJbXSA9IGFycmF5KCdITUFDLVNIQTEnLCAnREgtU0hBMScpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSURfSE1BQ1NIQTI1Nl9TVVBQT1JURUQpIHsKICAgICAgICAgICAgJG9yZGVyW10gPSBhcnJheSgnSE1BQy1TSEEyNTYnLCAnREgtU0hBMjU2Jyk7CiAgICAgICAgfQogICAgfQoKICAgICRvcmRlcltdID0gYXJyYXkoJ0hNQUMtU0hBMScsICduby1lbmNyeXB0aW9uJyk7CgogICAgaWYgKEF1dGhfT3BlbklEX0hNQUNTSEEyNTZfU1VQUE9SVEVEKSB7CiAgICAgICAgJG9yZGVyW10gPSBhcnJheSgnSE1BQy1TSEEyNTYnLCAnbm8tZW5jcnlwdGlvbicpOwogICAgfQoKICAgIHJldHVybiAkb3JkZXI7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldE9ubHlFbmNyeXB0ZWRPcmRlcigpCnsKICAgICRyZXN1bHQgPSBhcnJheSgpOwoKICAgIGZvcmVhY2ggKEF1dGhfT3BlbklEX2dldERlZmF1bHRBc3NvY2lhdGlvbk9yZGVyKCkgYXMgJHBhaXIpIHsKICAgICAgICBsaXN0KCRhc3NvYywgJHNlc3Npb24pID0gJHBhaXI7CgogICAgICAgIGlmICgkc2Vzc2lvbiAhPSAnbm8tZW5jcnlwdGlvbicpIHsKICAgICAgICAgICAgaWYgKEF1dGhfT3BlbklEX0hNQUNTSEEyNTZfU1VQUE9SVEVEICYmCiAgICAgICAgICAgICAgICAoJGFzc29jID09ICdITUFDLVNIQTI1NicpKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSAkcGFpcjsKICAgICAgICAgICAgfSBlbHNlIGlmICgkYXNzb2MgIT0gJ0hNQUMtU0hBMjU2JykgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHBhaXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldERlZmF1bHROZWdvdGlhdG9yKCkKewogICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXNzaW9uTmVnb3RpYXRvcigKICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9nZXREZWZhdWx0QXNzb2NpYXRpb25PcmRlcigpKTsKfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfZ2V0RW5jcnlwdGVkTmVnb3RpYXRvcigpCnsKICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2Vzc2lvbk5lZ290aWF0b3IoCiAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfZ2V0T25seUVuY3J5cHRlZE9yZGVyKCkpOwp9CgovKioKICogQSBzZXNzaW9uIG5lZ290aWF0b3IgY29udHJvbHMgdGhlIGFsbG93ZWQgYW5kIHByZWZlcnJlZCBhc3NvY2lhdGlvbgogKiB0eXBlcyBhbmQgYXNzb2NpYXRpb24gc2Vzc2lvbiB0eXBlcy4gQm90aCB0aGUge0BsaW5rCiAqIEF1dGhfT3BlbklEX0NvbnN1bWVyfSBhbmQge0BsaW5rIEF1dGhfT3BlbklEX1NlcnZlcn0gdXNlCiAqIG5lZ290aWF0b3JzIHdoZW4gY3JlYXRpbmcgYXNzb2NpYXRpb25zLgogKgogKiBZb3UgY2FuIGNyZWF0ZSBhbmQgdXNlIG5lZ290aWF0b3JzIGlmIHlvdToKCiAqIC0gRG8gbm90IHdhbnQgdG8gZG8gRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlIGJlY2F1c2UgeW91IHVzZQogKiB0cmFuc3BvcnQtbGF5ZXIgZW5jcnlwdGlvbiAoZS5nLiBTU0wpCiAqCiAqIC0gV2FudCB0byB1c2Ugb25seSBTSEEtMjU2IGFzc29jaWF0aW9ucwogKgogKiAtIERvIG5vdCB3YW50IHRvIHN1cHBvcnQgcGxhaW4tdGV4dCBhc3NvY2lhdGlvbnMgb3ZlciBhIG5vbi1zZWN1cmUKICogY2hhbm5lbAogKgogKiBJdCBpcyB1cCB0byB5b3UgdG8gc2V0IGEgcG9saWN5IGZvciB3aGF0IGtpbmRzIG9mIGFzc29jaWF0aW9ucyB0bwogKiBhY2NlcHQuIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IHdpbGwgbWFrZSBhbnkga2luZCBvZiBhc3NvY2lhdGlvbgogKiB0aGF0IGlzIGFsbG93ZWQgaW4gdGhlIE9wZW5JRCAyLjAgc3BlY2lmaWNhdGlvbi4KICoKICogVXNlIG9mIG5lZ290aWF0b3JzIGluIHRoZSBsaWJyYXJ5CiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKgogKiBXaGVuIGEgY29uc3VtZXIgbWFrZXMgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCwgaXQgY2FsbHMge0BsaW5rCiAqIGdldEFsbG93ZWRUeXBlfSB0byBnZXQgdGhlIHByZWZlcnJlZCBhc3NvY2lhdGlvbiB0eXBlIGFuZAogKiBhc3NvY2lhdGlvbiBzZXNzaW9uIHR5cGUuCiAqCiAqIFRoZSBzZXJ2ZXIgZ2V0cyBhIHJlcXVlc3QgZm9yIGEgcGFydGljdWxhciBhc3NvY2lhdGlvbi9zZXNzaW9uIHR5cGUKICogYW5kIGNhbGxzIHtAbGluayBpc0FsbG93ZWR9IHRvIGRldGVybWluZSBpZiBpdCBzaG91bGQgY3JlYXRlIGFuCiAqIGFzc29jaWF0aW9uLiBJZiBpdCBpcyBzdXBwb3J0ZWQsIG5lZ290aWF0aW9uIGlzIGNvbXBsZXRlLiBJZiBpdCBpcwogKiBub3QsIHRoZSBzZXJ2ZXIgY2FsbHMge0BsaW5rIGdldEFsbG93ZWRUeXBlfSB0byBnZXQgYW4gYWxsb3dlZAogKiBhc3NvY2lhdGlvbiB0eXBlIHRvIHJldHVybiB0byB0aGUgY29uc3VtZXIuCiAqCiAqIElmIHRoZSBjb25zdW1lciBnZXRzIGFuIGVycm9yIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGUKICogcmVxdWVzdGVkIGFzc29jaWF0aW9uL3Nlc3Npb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIKICogdGhhdCBjb250YWlucyBhbiBhc3NvY2F0aW9uL3Nlc3Npb24gdHlwZSB0byB0cnksIGl0IGNhbGxzIHtAbGluawogKiBpc0FsbG93ZWR9IHRvIGRldGVybWluZSBpZiBpdCBzaG91bGQgdHJ5IGFnYWluIHdpdGggdGhlIGdpdmVuCiAqIGNvbWJpbmF0aW9uIG9mIGFzc29jaWF0aW9uL3Nlc3Npb24gdHlwZS4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9TZXNzaW9uTmVnb3RpYXRvciB7CiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TZXNzaW9uTmVnb3RpYXRvcigkYWxsb3dlZF90eXBlcykKICAgIHsKICAgICAgICAkdGhpcy0+YWxsb3dlZF90eXBlcyA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPnNldEFsbG93ZWRUeXBlcygkYWxsb3dlZF90eXBlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFsbG93ZWQgYXNzb2NpYXRpb24gdHlwZXMsIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBlYWNoCiAgICAgKiBjb21iaW5hdGlvbiBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0QWxsb3dlZFR5cGVzKCRhbGxvd2VkX3R5cGVzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRhbGxvd2VkX3R5cGVzIGFzICRwYWlyKSB7CiAgICAgICAgICAgIGxpc3QoJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUpID0gJHBhaXI7CiAgICAgICAgICAgIGlmICghQXV0aF9PcGVuSURfY2hlY2tTZXNzaW9uVHlwZSgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFsbG93ZWRfdHlwZXMgPSAkYWxsb3dlZF90eXBlczsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBhc3NvY2lhdGlvbiB0eXBlIGFuZCBzZXNzaW9uIHR5cGUgdG8gdGhlIGFsbG93ZWQgdHlwZXMKICAgICAqIGxpc3QuIFRoZSBhc3NvY2F0aW9uL3Nlc3Npb24gcGFpcnMgYXJlIHRyaWVkIGluIHRoZSBvcmRlciB0aGF0CiAgICAgKiB0aGV5IGFyZSBhZGRlZC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gYWRkQWxsb3dlZFR5cGUoJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUgPSBudWxsKQogICAgewogICAgICAgIGlmICgkdGhpcy0+YWxsb3dlZF90eXBlcyA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dlZF90eXBlcyA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlc3Npb25fdHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICAkYXZhaWxhYmxlID0gQXV0aF9PcGVuSURfZ2V0U2Vzc2lvblR5cGVzKCRhc3NvY190eXBlKTsKCiAgICAgICAgICAgIGlmICghJGF2YWlsYWJsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkYXZhaWxhYmxlIGFzICRzZXNzaW9uX3R5cGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hZGRBbGxvd2VkVHlwZSgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoQXV0aF9PcGVuSURfY2hlY2tTZXNzaW9uVHlwZSgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hbGxvd2VkX3R5cGVzW10gPSBhcnJheSgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIElzIHRoaXMgY29tYmluYXRpb24gb2YgYXNzb2NpYXRpb24gdHlwZSBhbmQgc2Vzc2lvbiB0eXBlIGFsbG93ZWQ/CiAgICBmdW5jdGlvbiBpc0FsbG93ZWQoJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUpCiAgICB7CiAgICAgICAgJGFzc29jX2dvb2QgPSBpbl9hcnJheShhcnJheSgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWxsb3dlZF90eXBlcyk7CgogICAgICAgICRtYXRjaGVzID0gaW5fYXJyYXkoJHNlc3Npb25fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX2dldFNlc3Npb25UeXBlcygkYXNzb2NfdHlwZSkpOwoKICAgICAgICByZXR1cm4gKCRhc3NvY19nb29kICYmICRtYXRjaGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHBhaXIgb2YgYXNzb2NhdGlvbiB0eXBlIGFuZCBzZXNzaW9uIHR5cGUgdGhhdCBhcmUKICAgICAqIHN1cHBvcnRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QWxsb3dlZFR5cGUoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmFsbG93ZWRfdHlwZXMpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KG51bGwsIG51bGwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5hbGxvd2VkX3R5cGVzWzBdOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/AX.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBJbXBsZW1lbnRzIHRoZSBPcGVuSUQgYXR0cmlidXRlIGV4Y2hhbmdlIHNwZWNpZmljYXRpb24sIHZlcnNpb24gMS4wCiAqIGFzIG9mIHN2biByZXZpc2lvbiAzNzAgZnJvbSBvcGVuaWQubmV0IHN2bi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwoKLyoqCiAqIFJlcXVpcmUgdXRpbGl0eSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZSBjb25zdW1lci4KICovCnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvRXh0ZW5zaW9uLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvTWVzc2FnZS5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1RydXN0Um9vdC5waHAiOwoKZGVmaW5lKCdBdXRoX09wZW5JRF9BWF9OU19VUkknLAogICAgICAgJ2h0dHA6Ly9vcGVuaWQubmV0L3Nydi9heC8xLjAnKTsKCi8vIFVzZSB0aGlzIGFzIHRoZSAnY291bnQnIHZhbHVlIGZvciBhbiBhdHRyaWJ1dGUgaW4gYSBGZXRjaFJlcXVlc3QgdG8KLy8gYXNrIGZvciBhcyBtYW55IHZhbHVlcyBhcyB0aGUgT1AgY2FuIHByb3ZpZGUuCmRlZmluZSgnQXV0aF9PcGVuSURfQVhfVU5MSU1JVEVEX1ZBTFVFUycsICd1bmxpbWl0ZWQnKTsKCi8vIE1pbmltdW0gc3VwcG9ydGVkIGFsaWFzIGxlbmd0aCBpbiBjaGFyYWN0ZXJzLiAgSGVyZSBmb3IKLy8gY29tcGxldGVuZXNzLgpkZWZpbmUoJ0F1dGhfT3BlbklEX0FYX01JTklNVU1fU1VQUE9SVEVEX0FMSUFTX0xFTkdUSCcsIDMyKTsKCi8qKgogKiBBWCB1dGlsaXR5IGNsYXNzLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0FYIHsKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR0aGluZyBBbnkgb2JqZWN0IHdoaWNoIG1heSBiZSBhbgogICAgICogQXV0aF9PcGVuSURfQVhfRXJyb3Igb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmICR0aGluZyBpcyBhbiBBdXRoX09wZW5JRF9BWF9FcnJvcjsgZmFsc2UKICAgICAqIGlmIG5vdC4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGlzRXJyb3IoJHRoaW5nKQogICAgewogICAgICAgIHJldHVybiBpc19hKCR0aGluZywgJ0F1dGhfT3BlbklEX0FYX0Vycm9yJyk7CiAgICB9Cn0KCi8qKgogKiBDaGVjayBhbiBhbGlhcyBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzOyByYWlzZSBBWEVycm9yIGlmIGFueSBhcmUKICogZm91bmQuICBSZXR1cm4gTm9uZSBpZiB0aGUgYWxpYXMgaXMgdmFsaWQuCiAqLwpmdW5jdGlvbiBBdXRoX09wZW5JRF9BWF9jaGVja0FsaWFzKCRhbGlhcykKewogIGlmIChzdHJwb3MoJGFsaWFzLCAnLCcpICE9PSBmYWxzZSkgewogICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAiQWxpYXMgJXMgbXVzdCBub3QgY29udGFpbiBjb21tYSIsICRhbGlhcykpOwogIH0KICBpZiAoc3RycG9zKCRhbGlhcywgJy4nKSAhPT0gZmFsc2UpIHsKICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcihzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgIkFsaWFzICVzIG11c3Qgbm90IGNvbnRhaW4gcGVyaW9kIiwgJGFsaWFzKSk7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKLyoqCiAqIFJlc3VsdHMgZnJvbSBkYXRhIHRoYXQgZG9lcyBub3QgbWVldCB0aGUgYXR0cmlidXRlIGV4Y2hhbmdlIDEuMAogKiBzcGVjaWZpY2F0aW9uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfQVhfRXJyb3IgewogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQVhfRXJyb3IoJG1lc3NhZ2U9bnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+bWVzc2FnZSA9ICRtZXNzYWdlOwogICAgfQp9CgovKioKICogQWJzdHJhY3QgY2xhc3MgY29udGFpbmluZyBjb21tb24gY29kZSBmb3IgYXR0cmlidXRlIGV4Y2hhbmdlCiAqIG1lc3NhZ2VzLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0FYX01lc3NhZ2UgZXh0ZW5kcyBBdXRoX09wZW5JRF9FeHRlbnNpb24gewogICAgLyoqCiAgICAgKiBuc19hbGlhczogVGhlIHByZWZlcnJlZCBuYW1lc3BhY2UgYWxpYXMgZm9yIGF0dHJpYnV0ZSBleGNoYW5nZQogICAgICogbWVzc2FnZXMKICAgICAqLwogICAgdmFyICRuc19hbGlhcyA9ICdheCc7CgogICAgLyoqCiAgICAgKiBtb2RlOiBUaGUgdHlwZSBvZiB0aGlzIGF0dHJpYnV0ZSBleGNoYW5nZSBtZXNzYWdlLiBUaGlzIG11c3QgYmUKICAgICAqIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3Nlcy4KICAgICAqLwogICAgdmFyICRtb2RlID0gbnVsbDsKCiAgICB2YXIgJG5zX3VyaSA9IEF1dGhfT3BlbklEX0FYX05TX1VSSTsKCiAgICAvKioKICAgICAqIFJldHVybiBBdXRoX09wZW5JRF9BWF9FcnJvciBpZiB0aGUgbW9kZSBpbiB0aGUgYXR0cmlidXRlCiAgICAgKiBleGNoYW5nZSBhcmd1bWVudHMgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZCBmb3IgdGhpcwogICAgICogY2xhc3M7IHRydWUgb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfY2hlY2tNb2RlKCRheF9hcmdzKQogICAgewogICAgICAgICRtb2RlID0gQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRheF9hcmdzLCAnbW9kZScpOwogICAgICAgIGlmICgkbW9kZSAhPSAkdGhpcy0+bW9kZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIG1vZGUgJyVzJzsgZ290ICclcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bW9kZSwgJG1vZGUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgc2V0IG9mIGF0dHJpYnV0ZSBleGNoYW5nZSBhcmd1bWVudHMgY29udGFpbmluZyB0aGUKICAgICAqIGJhc2ljIGluZm9ybWF0aW9uIHRoYXQgbXVzdCBiZSBpbiBldmVyeSBhdHRyaWJ1dGUgZXhjaGFuZ2UKICAgICAqIG1lc3NhZ2UuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9uZXdBcmdzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoJ21vZGUnID0+ICR0aGlzLT5tb2RlKTsKICAgIH0KfQoKLyoqCiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgYXR0cmlidXRlIGluIGFuIGF0dHJpYnV0ZSBleGNoYW5nZQogKiByZXF1ZXN0LiBUaGlzIHNob3VsZCBiZSBhZGRlZCB0byBhbiBBWFJlcXVlc3Qgb2JqZWN0IGluIG9yZGVyIHRvCiAqIHJlcXVlc3QgdGhlIGF0dHJpYnV0ZS4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9BWF9BdHRySW5mbyB7CiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhbiBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gb2JqZWN0LiAgRG8gbm90IGNhbGwgdGhpcwogICAgICogZGlyZWN0bHk7IGNhbGwgbWFrZSguLi4pIGluc3RlYWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZV91cmkgVGhlIHR5cGUgVVJJIGZvciB0aGlzIGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBUaGUgbnVtYmVyIG9mIHZhbHVlcyBvZiB0aGlzIHR5cGUgdG8gcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVxdWlyZWQgV2hldGhlciB0aGUgYXR0cmlidXRlIHdpbGwgYmUgbWFya2VkIGFzCiAgICAgKiByZXF1aXJlZCBpbiB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBUaGUgbmFtZSB0aGF0IHNob3VsZCBiZSBnaXZlbiB0byB0aGlzCiAgICAgKiBhdHRyaWJ1dGUgaW4gdGhlIHJlcXVlc3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0FYX0F0dHJJbmZvKCR0eXBlX3VyaSwgJGNvdW50LCAkcmVxdWlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxpYXMpCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogcmVxdWlyZWQ6IFdoZXRoZXIgdGhlIGF0dHJpYnV0ZSB3aWxsIGJlIG1hcmtlZCBhcyByZXF1aXJlZAogICAgICAgICAqIHdoZW4gcHJlc2VudGVkIHRvIHRoZSBzdWJqZWN0IG9mIHRoZSBhdHRyaWJ1dGUgZXhjaGFuZ2UKICAgICAgICAgKiByZXF1ZXN0LgogICAgICAgICAqLwogICAgICAgICR0aGlzLT5yZXF1aXJlZCA9ICRyZXF1aXJlZDsKCiAgICAgICAgLyoqCiAgICAgICAgICogY291bnQ6IEhvdyBtYW55IHZhbHVlcyBvZiB0aGlzIHR5cGUgdG8gcmVxdWVzdCBmcm9tIHRoZQogICAgICAgICAqIHN1YmplY3QuIERlZmF1bHRzIHRvIG9uZS4KICAgICAgICAgKi8KICAgICAgICAkdGhpcy0+Y291bnQgPSAkY291bnQ7CgogICAgICAgIC8qKgogICAgICAgICAqIHR5cGVfdXJpOiBUaGUgaWRlbnRpZmllciB0aGF0IGRldGVybWluZXMgd2hhdCB0aGUgYXR0cmlidXRlCiAgICAgICAgICogcmVwcmVzZW50cyBhbmQgaG93IGl0IGlzIHNlcmlhbGl6ZWQuIEZvciBleGFtcGxlLCBvbmUgdHlwZQogICAgICAgICAqIFVSSSByZXByZXNlbnRpbmcgZGF0ZXMgY291bGQgcmVwcmVzZW50IGEgVW5peCB0aW1lc3RhbXAgaW4KICAgICAgICAgKiBiYXNlIDEwIGFuZCBhbm90aGVyIGNvdWxkIHJlcHJlc2VudCBhIGh1bWFuLXJlYWRhYmxlCiAgICAgICAgICogc3RyaW5nLgogICAgICAgICAqLwogICAgICAgICR0aGlzLT50eXBlX3VyaSA9ICR0eXBlX3VyaTsKCiAgICAgICAgLyoqCiAgICAgICAgICogYWxpYXM6IFRoZSBuYW1lIHRoYXQgc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMgYXR0cmlidXRlIGluCiAgICAgICAgICogdGhlIHJlcXVlc3QuIElmIGl0IGlzIG5vdCBzdXBwbGllZCwgYSBnZW5lcmljIG5hbWUgd2lsbCBiZQogICAgICAgICAqIGFzc2lnbmVkLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gY2FsbCBhIFVuaXggdGltZXN0YW1wCiAgICAgICAgICogdmFsdWUgJ3RzdGFtcCcsIHNldCBpdHMgYWxpYXMgdG8gdGhhdCB2YWx1ZS4gSWYgdHdvCiAgICAgICAgICogYXR0cmlidXRlcyBpbiB0aGUgc2FtZSBtZXNzYWdlIHJlcXVlc3QgdG8gdXNlIHRoZSBzYW1lCiAgICAgICAgICogYWxpYXMsIHRoZSByZXF1ZXN0IHdpbGwgZmFpbCB0byBiZSBnZW5lcmF0ZWQuCiAgICAgICAgICovCiAgICAgICAgJHRoaXMtPmFsaWFzID0gJGFsaWFzOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGFuIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBvYmplY3QuICBGb3IgcGFyYW1ldGVyCiAgICAgKiBkZXRhaWxzLCBzZWUgdGhlIGNvbnN0cnVjdG9yLgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gbWFrZSgkdHlwZV91cmksICRjb3VudD0xLCAkcmVxdWlyZWQ9ZmFsc2UsCiAgICAgICAgICAgICAgICAgICRhbGlhcz1udWxsKQogICAgewogICAgICAgIGlmICgkYWxpYXMgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IEF1dGhfT3BlbklEX0FYX2NoZWNrQWxpYXMoJGFsaWFzKTsKCiAgICAgICAgICAgIGlmIChBdXRoX09wZW5JRF9BWDo6aXNFcnJvcigkcmVzdWx0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfQXR0ckluZm8oJHR5cGVfdXJpLCAkY291bnQsICRyZXF1aXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGlhcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGVuIHByb2Nlc3NpbmcgYSByZXF1ZXN0IGZvciB0aGlzIGF0dHJpYnV0ZSwgdGhlIE9QIHNob3VsZAogICAgICogY2FsbCB0aGlzIG1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbGwgYXZhaWxhYmxlIGF0dHJpYnV0ZQogICAgICogdmFsdWVzIHdlcmUgcmVxdWVzdGVkLiAgSWYgc2VsZi5jb3VudCA9PSBVTkxJTUlURURfVkFMVUVTLCB0aGlzCiAgICAgKiByZXR1cm5zIFRydWUuICBPdGhlcndpc2UgdGhpcyByZXR1cm5zIEZhbHNlLCBpbiB3aGljaCBjYXNlCiAgICAgKiBzZWxmLmNvdW50IGlzIGFuIGludGVnZXIuCiAgICAqLwogICAgZnVuY3Rpb24gd2FudHNVbmxpbWl0ZWRWYWx1ZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y291bnQgPT09IEF1dGhfT3BlbklEX0FYX1VOTElNSVRFRF9WQUxVRVM7CiAgICB9Cn0KCi8qKgogKiBHaXZlbiBhIG5hbWVzcGFjZSBtYXBwaW5nIGFuZCBhIHN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkCiAqIGxpc3Qgb2YgbmFtZXNwYWNlIGFsaWFzZXMsIHJldHVybiBhIGxpc3Qgb2YgdHlwZSBVUklzIHRoYXQKICogY29ycmVzcG9uZCB0byB0aG9zZSBhbGlhc2VzLgogKgogKiBAcGFyYW0gJG5hbWVzcGFjZV9tYXAgVGhlIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgVVJJIHRvIGFsaWFzCiAqIEBwYXJhbSAkYWxpYXNfbGlzdF9zIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWEtc2VwYXJhdGVkCiAqIGxpc3Qgb2YgYWxpYXNlcy4gTWF5IGFsc28gYmUgTm9uZSBmb3IgY29udmVuaWVuY2UuCiAqCiAqIEByZXR1cm4gJHNlcSBUaGUgbGlzdCBvZiBuYW1lc3BhY2UgVVJJcyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQogKiBzdXBwbGllZCBsaXN0IG9mIGFsaWFzZXMuIElmIHRoZSBzdHJpbmcgd2FzIHplcm8tbGVuZ3RoIG9yIE5vbmUsIGFuCiAqIGVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC4KICoKICogcmV0dXJuIG51bGwgSWYgYW4gYWxpYXMgaXMgcHJlc2VudCBpbiB0aGUgbGlzdCBvZiBhbGlhc2VzIGJ1dAogKiBpcyBub3QgcHJlc2VudCBpbiB0aGUgbmFtZXNwYWNlIG1hcC4KICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX0FYX3RvVHlwZVVSSXMoJG5hbWVzcGFjZV9tYXAsICRhbGlhc19saXN0X3MpCnsKICAgICR1cmlzID0gYXJyYXkoKTsKCiAgICBpZiAoJGFsaWFzX2xpc3RfcykgewogICAgICAgIGZvcmVhY2ggKGV4cGxvZGUoJywnLCAkYWxpYXNfbGlzdF9zKSBhcyAkYWxpYXMpIHsKICAgICAgICAgICAgJHR5cGVfdXJpID0gJG5hbWVzcGFjZV9tYXAtPmdldE5hbWVzcGFjZVVSSSgkYWxpYXMpOwogICAgICAgICAgICBpZiAoJHR5cGVfdXJpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyByYWlzZSBLZXlFcnJvcigKICAgICAgICAgICAgICAgIC8vICdObyB0eXBlIGlzIGRlZmluZWQgZm9yIGF0dHJpYnV0ZSBuYW1lICVyJyAlIChhbGlhcywpKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgc3ByaW50ZignTm8gdHlwZSBpcyBkZWZpbmVkIGZvciBhdHRyaWJ1dGUgbmFtZSAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsaWFzKQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHVyaXNbXSA9ICR0eXBlX3VyaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHVyaXM7Cn0KCi8qKgogKiBBbiBhdHRyaWJ1dGUgZXhjaGFuZ2UgJ2ZldGNoX3JlcXVlc3QnIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBzZW50CiAqIGJ5IGEgcmVseWluZyBwYXJ0eSB3aGVuIGl0IHdpc2hlcyB0byBvYnRhaW4gYXR0cmlidXRlcyBhYm91dCB0aGUKICogc3ViamVjdCBvZiBhbiBPcGVuSUQgYXV0aGVudGljYXRpb24gcmVxdWVzdC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9BWF9GZXRjaFJlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9BWF9NZXNzYWdlIHsKCiAgICB2YXIgJG1vZGUgPSAnZmV0Y2hfcmVxdWVzdCc7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQVhfRmV0Y2hSZXF1ZXN0KCR1cGRhdGVfdXJsPW51bGwpCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogcmVxdWVzdGVkX2F0dHJpYnV0ZXM6IFRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBiZWVuCiAgICAgICAgICogcmVxdWVzdGVkIHRodXMgZmFyLCBpbmRleGVkIGJ5IHRoZSB0eXBlIFVSSS4KICAgICAgICAgKi8KICAgICAgICAkdGhpcy0+cmVxdWVzdGVkX2F0dHJpYnV0ZXMgPSBhcnJheSgpOwoKICAgICAgICAvKioKICAgICAgICAgKiB1cGRhdGVfdXJsOiBBIFVSTCB0aGF0IHdpbGwgYWNjZXB0IHJlc3BvbnNlcyBmb3IgdGhpcwogICAgICAgICAqIGF0dHJpYnV0ZSBleGNoYW5nZSByZXF1ZXN0LCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIHRoZSB1c2VyCiAgICAgICAgICogd2hvIG1hZGUgdGhpcyByZXF1ZXN0LgogICAgICAgICovCiAgICAgICAgJHRoaXMtPnVwZGF0ZV91cmwgPSAkdXBkYXRlX3VybDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhpcyBhdHRyaWJ1dGUgZXhjaGFuZ2UgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXR0cmlidXRlOiBUaGUgYXR0cmlidXRlIHRoYXQgaXMgYmVpbmcgcmVxdWVzdGVkCiAgICAgKiBAcmV0dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugd2hlbiB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZSBpcwogICAgICogYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgZmV0Y2ggcmVxdWVzdC4KICAgICAqLwogICAgZnVuY3Rpb24gYWRkKCRhdHRyaWJ1dGUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb250YWlucygkYXR0cmlidXRlLT50eXBlX3VyaSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICBzcHJpbnRmKCJUaGUgYXR0cmlidXRlICVzIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICRhdHRyaWJ1dGUtPnR5cGVfdXJpKSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVxdWVzdGVkX2F0dHJpYnV0ZXNbJGF0dHJpYnV0ZS0+dHlwZV91cmldID0gJGF0dHJpYnV0ZTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNlcmlhbGl6ZWQgZm9ybSBvZiB0aGlzIGF0dHJpYnV0ZSBmZXRjaCByZXF1ZXN0LgogICAgICoKICAgICAqIEByZXR1cm5zIEF1dGhfT3BlbklEX0FYX0ZldGNoUmVxdWVzdCBUaGUgZmV0Y2ggcmVxdWVzdCBtZXNzYWdlIHBhcmFtZXRlcnMKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQXJncygpCiAgICB7CiAgICAgICAgJGFsaWFzZXMgPSBuZXcgQXV0aF9PcGVuSURfTmFtZXNwYWNlTWFwKCk7CgogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCk7CiAgICAgICAgJGlmX2F2YWlsYWJsZSA9IGFycmF5KCk7CgogICAgICAgICRheF9hcmdzID0gJHRoaXMtPl9uZXdBcmdzKCk7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yZXF1ZXN0ZWRfYXR0cmlidXRlcyBhcyAkdHlwZV91cmkgPT4gJGF0dHJpYnV0ZSkgewogICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+YWxpYXMgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRhbGlhcyA9ICRhbGlhc2VzLT5hZGQoJHR5cGVfdXJpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRhbGlhcyA9ICRhbGlhc2VzLT5hZGRBbGlhcygkdHlwZV91cmksICRhdHRyaWJ1dGUtPmFsaWFzKTsKCiAgICAgICAgICAgICAgICBpZiAoJGFsaWFzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoIkNvdWxkIG5vdCBhZGQgYWxpYXMgJXMgZm9yIFVSSSAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhdHRyaWJ1dGUtPmFsaWFzLCAkdHlwZV91cmkKICAgICAgICAgICAgICAgICAgICAgICkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+cmVxdWlyZWQpIHsKICAgICAgICAgICAgICAgICRyZXF1aXJlZFtdID0gJGFsaWFzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGlmX2F2YWlsYWJsZVtdID0gJGFsaWFzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+Y291bnQgIT0gMSkgewogICAgICAgICAgICAgICAgJGF4X2FyZ3NbJ2NvdW50LicgLiAkYWxpYXNdID0gc3RydmFsKCRhdHRyaWJ1dGUtPmNvdW50KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGF4X2FyZ3NbJ3R5cGUuJyAuICRhbGlhc10gPSAkdHlwZV91cmk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlcXVpcmVkKSB7CiAgICAgICAgICAgICRheF9hcmdzWydyZXF1aXJlZCddID0gaW1wbG9kZSgnLCcsICRyZXF1aXJlZCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGlmX2F2YWlsYWJsZSkgewogICAgICAgICAgICAkYXhfYXJnc1snaWZfYXZhaWxhYmxlJ10gPSBpbXBsb2RlKCcsJywgJGlmX2F2YWlsYWJsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGF4X2FyZ3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHR5cGUgVVJJcyBmb3IgYWxsIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGFzCiAgICAgKiByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEEgbGlzdCBvZiB0aGUgdHlwZSBVUklzIGZvciBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBiZWVuCiAgICAgKiBtYXJrZWQgYXMgcmVxdWlyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFJlcXVpcmVkQXR0cnMoKQogICAgewogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnJlcXVlc3RlZF9hdHRyaWJ1dGVzIGFzICR0eXBlX3VyaSA9PiAkYXR0cmlidXRlKSB7CiAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5yZXF1aXJlZCkgewogICAgICAgICAgICAgICAgJHJlcXVpcmVkW10gPSAkdHlwZV91cmk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVxdWlyZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGEgRmV0Y2hSZXF1ZXN0IGZyb20gYW4gT3BlbklEIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gcmVxdWVzdDogVGhlIE9wZW5JRCByZXF1ZXN0IGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZQogICAgICogZmV0Y2ggcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm5zIG1peGVkIEFuIEF1dGhfT3BlbklEX0FYX0Vycm9yIG9yIHRoZQogICAgICogQXV0aF9PcGVuSURfQVhfRmV0Y2hSZXF1ZXN0IGV4dHJhY3RlZCBmcm9tIHRoZSByZXF1ZXN0IG1lc3NhZ2UgaWYKICAgICAqIHN1Y2Nlc3NmdWwKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21PcGVuSURSZXF1ZXN0KCRyZXF1ZXN0KQogICAgewogICAgICAgICRtID0gJHJlcXVlc3QtPm1lc3NhZ2U7CiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9BWF9GZXRjaFJlcXVlc3QoKTsKICAgICAgICAkYXhfYXJncyA9ICRtLT5nZXRBcmdzKCRvYmotPm5zX3VyaSk7CgogICAgICAgICRyZXN1bHQgPSAkb2JqLT5wYXJzZUV4dGVuc2lvbkFyZ3MoJGF4X2FyZ3MpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSURfQVg6OmlzRXJyb3IoJHJlc3VsdCkpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9iai0+dXBkYXRlX3VybCkgewogICAgICAgICAgICAvLyBVcGRhdGUgVVJMIG11c3QgbWF0Y2ggdGhlIG9wZW5pZC5yZWFsbSBvZiB0aGUKICAgICAgICAgICAgLy8gdW5kZXJseWluZyBPcGVuSUQgMiBtZXNzYWdlLgogICAgICAgICAgICAkcmVhbG0gPSAkbS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3JlYWxtJywKICAgICAgICAgICAgICAgICAgICAgICAgJG0tPmdldEFyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5fdG8nKSk7CgogICAgICAgICAgICBpZiAoISRyZWFsbSkgewogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgc3ByaW50ZigiQ2Fubm90IHZhbGlkYXRlIHVwZGF0ZV91cmwgJXMgIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFnYWluc3QgYWJzZW50IHJlYWxtIiwgJG9iai0+dXBkYXRlX3VybCkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFBdXRoX09wZW5JRF9UcnVzdFJvb3Q6Om1hdGNoKCRyZWFsbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT51cGRhdGVfdXJsKSkgewogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgc3ByaW50ZigiVXBkYXRlIFVSTCAlcyBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHJlYWxtICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT51cGRhdGVfdXJsLCAkcmVhbG0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhdHRyaWJ1dGUgZXhjaGFuZ2UgYXJndW1lbnRzLCBwb3B1bGF0ZSB0aGlzIEZldGNoUmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuICRyZXN1bHQgQXV0aF9PcGVuSURfQVhfRXJyb3IgaWYgdGhlIGRhdGEgdG8gYmUgcGFyc2VkCiAgICAgKiBkb2VzIG5vdCBmb2xsb3cgdGhlIGF0dHJpYnV0ZSBleGNoYW5nZSBzcGVjaWZpY2F0aW9uLiBBdCBsZWFzdAogICAgICogd2hlbiAnaWZfYXZhaWxhYmxlJyBvciAncmVxdWlyZWQnIGlzIG5vdCBzcGVjaWZpZWQgZm9yIGEKICAgICAqIHBhcnRpY3VsYXIgYXR0cmlidXRlIHR5cGUuICBSZXR1cm5zIHRydWUgb3RoZXJ3aXNlLgogICAgKi8KICAgIGZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uQXJncygkYXhfYXJncykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9jaGVja01vZGUoJGF4X2FyZ3MpOwogICAgICAgIGlmIChBdXRoX09wZW5JRF9BWDo6aXNFcnJvcigkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgICRhbGlhc2VzID0gbmV3IEF1dGhfT3BlbklEX05hbWVzcGFjZU1hcCgpOwoKICAgICAgICBmb3JlYWNoICgkYXhfYXJncyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrZXksICd0eXBlLicpID09PSAwKSB7CiAgICAgICAgICAgICAgICAkYWxpYXMgPSBzdWJzdHIoJGtleSwgNSk7CiAgICAgICAgICAgICAgICAkdHlwZV91cmkgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgJGFsaWFzID0gJGFsaWFzZXMtPmFkZEFsaWFzKCR0eXBlX3VyaSwgJGFsaWFzKTsKCiAgICAgICAgICAgICAgICBpZiAoJGFsaWFzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoIkNvdWxkIG5vdCBhZGQgYWxpYXMgJXMgZm9yIFVSSSAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGlhcywgJHR5cGVfdXJpKQogICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY291bnRfcyA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkYXhfYXJncywgJ2NvdW50LicgLiAkYWxpYXMpOwogICAgICAgICAgICAgICAgaWYgKCRjb3VudF9zKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvdW50ID0gQXV0aF9PcGVuSUQ6OmludHZhbCgkY291bnRfcyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCgkY291bnQgPT09IGZhbHNlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoJGNvdW50X3MgPT09IEF1dGhfT3BlbklEX0FYX1VOTElNSVRFRF9WQUxVRVMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudCA9ICRjb3VudF9zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvdW50ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGNvdW50ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGZvciAlcywgZ290ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdW50LicgLiAkYWxpYXMsICRjb3VudF9zKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGF0dHJpbmZvID0gQXV0aF9PcGVuSURfQVhfQXR0ckluZm86Om1ha2UoJHR5cGVfdXJpLCAkY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgJGFsaWFzKTsKCiAgICAgICAgICAgICAgICBpZiAoQXV0aF9PcGVuSURfQVg6OmlzRXJyb3IoJGF0dHJpbmZvKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkYXR0cmluZm87CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRoaXMtPmFkZCgkYXR0cmluZm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVxdWlyZWQgPSBBdXRoX09wZW5JRF9BWF90b1R5cGVVUklzKCRhbGlhc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRheF9hcmdzLCAncmVxdWlyZWQnKSk7CgogICAgICAgIGZvcmVhY2ggKCRyZXF1aXJlZCBhcyAkdHlwZV91cmkpIHsKICAgICAgICAgICAgJGF0dHJpYiA9ICR0aGlzLT5yZXF1ZXN0ZWRfYXR0cmlidXRlc1skdHlwZV91cmldOwogICAgICAgICAgICAkYXR0cmliLT5yZXF1aXJlZCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAkaWZfYXZhaWxhYmxlID0gQXV0aF9PcGVuSURfQVhfdG9UeXBlVVJJcygkYWxpYXNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGF4X2FyZ3MsICdpZl9hdmFpbGFibGUnKSk7CgogICAgICAgICRhbGxfdHlwZV91cmlzID0gYXJyYXlfbWVyZ2UoJHJlcXVpcmVkLCAkaWZfYXZhaWxhYmxlKTsKCiAgICAgICAgZm9yZWFjaCAoJGFsaWFzZXMtPml0ZXJOYW1lc3BhY2VVUklzKCkgYXMgJHR5cGVfdXJpKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJHR5cGVfdXJpLCAkYWxsX3R5cGVfdXJpcykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgICAgIHNwcmludGYoJ1R5cGUgVVJJICVzIHdhcyBpbiB0aGUgcmVxdWVzdCBidXQgbm90ICcgLgogICAgICAgICAgICAgICAgICAgICAgICAgICdwcmVzZW50IGluICJyZXF1aXJlZCIgb3IgImlmX2F2YWlsYWJsZSInLAogICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3VyaSkpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnVwZGF0ZV91cmwgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGF4X2FyZ3MsICd1cGRhdGVfdXJsJyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogSXRlcmF0ZSBvdmVyIHRoZSBBdHRySW5mbyBvYmplY3RzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzCiAgICAgKiBmZXRjaF9yZXF1ZXN0LgogICAgICovCiAgICBmdW5jdGlvbiBpdGVyQXR0cnMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV92YWx1ZXMoJHRoaXMtPnJlcXVlc3RlZF9hdHRyaWJ1dGVzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpdGVyVHlwZXMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlzKCR0aGlzLT5yZXF1ZXN0ZWRfYXR0cmlidXRlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyB0aGUgZ2l2ZW4gdHlwZSBVUkkgcHJlc2VudCBpbiB0aGlzIGZldGNoX3JlcXVlc3Q/CiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvbnRhaW5zKCR0eXBlX3VyaSkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoJHR5cGVfdXJpLCAkdGhpcy0+aXRlclR5cGVzKCkpOwogICAgfQp9CgovKioKICogQW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgbWVzc2FnZSB0aGF0IGhhcyBhdHRyaWJ1dGUga2V5cwogKiBhbmQgdmFsdWVzLiBJdCBjb250YWlucyB0aGUgY29tbW9uIGNvZGUgYmV0d2VlbiBmZXRjaF9yZXNwb25zZSBhbmQKICogc3RvcmVfcmVxdWVzdC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9BWF9LZXlWYWx1ZU1lc3NhZ2UgZXh0ZW5kcyBBdXRoX09wZW5JRF9BWF9NZXNzYWdlIHsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9BWF9LZXlWYWx1ZU1lc3NhZ2UoKQogICAgewogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIHNpbmdsZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGF0dHJpYnV0ZSB0eXBlIHRvIHRoZQogICAgICogbWVzc2FnZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhpcyB0eXBlLAogICAgICogdGhpcyB2YWx1ZSB3aWxsIGJlIHNlbnQgaW4gYWRkaXRpb24gdG8gdGhlIHZhbHVlcyBhbHJlYWR5CiAgICAgKiBzcGVjaWZpZWQuCiAgICAgKgogICAgICogQHBhcmFtIHR5cGVfdXJpOiBUaGUgVVJJIGZvciB0aGUgYXR0cmlidXRlCiAgICAgKiBAcGFyYW0gdmFsdWU6IFRoZSB2YWx1ZSB0byBhZGQgdG8gdGhlIHJlc3BvbnNlIHRvIHRoZSByZWx5aW5nCiAgICAgKiBwYXJ0eSBmb3IgdGhpcyBhdHRyaWJ1dGUKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBmdW5jdGlvbiBhZGRWYWx1ZSgkdHlwZV91cmksICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJHR5cGVfdXJpLCAkdGhpcy0+ZGF0YSkpIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJHR5cGVfdXJpXSA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzID0mICR0aGlzLT5kYXRhWyR0eXBlX3VyaV07CiAgICAgICAgJHZhbHVlc1tdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBhdHRyaWJ1dGUgdHlwZS4gVGhpcyByZXBsYWNlcyBhbnkKICAgICAqIHZhbHVlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNldCBmb3IgdGhpcyBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHBhcmFtIHR5cGVfdXJpOiBUaGUgVVJJIGZvciB0aGUgYXR0cmlidXRlCiAgICAgKiBAcGFyYW0gdmFsdWVzOiBBIGxpc3Qgb2YgdmFsdWVzIHRvIHNlbmQgZm9yIHRoaXMgYXR0cmlidXRlLgogICAgICovCiAgICBmdW5jdGlvbiBzZXRWYWx1ZXMoJHR5cGVfdXJpLCAmJHZhbHVlcykKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVskdHlwZV91cmldID0mICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGV4dGVuc2lvbiBhcmd1bWVudHMgZm9yIHRoZSBrZXkvdmFsdWUgcGFpcnMgY29udGFpbmVkCiAgICAgKiBpbiB0aGlzIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIGFsaWFzZXM6IEFuIGFsaWFzIG1hcHBpbmcuIFNldCB0byBOb25lIGlmIHlvdSBkb24ndCBjYXJlCiAgICAgKiBhYm91dCB0aGUgYWxpYXNlcyBmb3IgdGhpcyByZXF1ZXN0LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZ2V0RXh0ZW5zaW9uS1ZBcmdzKCRhbGlhc2VzKQogICAgewogICAgICAgIGlmICgkYWxpYXNlcyA9PT0gbnVsbCkgewogICAgICAgICAgICAkYWxpYXNlcyA9IG5ldyBBdXRoX09wZW5JRF9OYW1lc3BhY2VNYXAoKTsKICAgICAgICB9CgogICAgICAgICRheF9hcmdzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJHR5cGVfdXJpID0+ICR2YWx1ZXMpIHsKICAgICAgICAgICAgJGFsaWFzID0gJGFsaWFzZXMtPmFkZCgkdHlwZV91cmkpOwoKICAgICAgICAgICAgJGF4X2FyZ3NbJ3R5cGUuJyAuICRhbGlhc10gPSAkdHlwZV91cmk7CiAgICAgICAgICAgICRheF9hcmdzWydjb3VudC4nIC4gJGFsaWFzXSA9IHN0cnZhbChjb3VudCgkdmFsdWVzKSk7CgogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICRpID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICRrZXkgPSBzcHJpbnRmKCd2YWx1ZS4lcy4lZCcsICRhbGlhcywgJGkgKyAxKTsKICAgICAgICAgICAgICAkYXhfYXJnc1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRheF9hcmdzOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYXR0cmlidXRlIGV4Y2hhbmdlIGtleS92YWx1ZSBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXhfYXJnczogVGhlIGF0dHJpYnV0ZSBleGNoYW5nZSBmZXRjaF9yZXNwb25zZQogICAgICogYXJndW1lbnRzLCB3aXRoIG5hbWVzcGFjaW5nIHJlbW92ZWQuCiAgICAgKgogICAgICogQHJldHVybiBBdXRoX09wZW5JRF9BWF9FcnJvciBvciB0cnVlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uQXJncygkYXhfYXJncykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9jaGVja01vZGUoJGF4X2FyZ3MpOwogICAgICAgIGlmIChBdXRoX09wZW5JRF9BWDo6aXNFcnJvcigkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgICRhbGlhc2VzID0gbmV3IEF1dGhfT3BlbklEX05hbWVzcGFjZU1hcCgpOwoKICAgICAgICBmb3JlYWNoICgkYXhfYXJncyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrZXksICd0eXBlLicpID09PSAwKSB7CiAgICAgICAgICAgICAgICAkdHlwZV91cmkgPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAkYWxpYXMgPSBzdWJzdHIoJGtleSwgNSk7CgogICAgICAgICAgICAgICAgJHJlc3VsdCA9IEF1dGhfT3BlbklEX0FYX2NoZWNrQWxpYXMoJGFsaWFzKTsKCiAgICAgICAgICAgICAgICBpZiAoQXV0aF9PcGVuSURfQVg6OmlzRXJyb3IoJHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkYWxpYXMgPSAkYWxpYXNlcy0+YWRkQWxpYXMoJHR5cGVfdXJpLCAkYWxpYXMpOwoKICAgICAgICAgICAgICAgIGlmICgkYWxpYXMgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigiQ291bGQgbm90IGFkZCBhbGlhcyAlcyBmb3IgVVJJICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsaWFzLCAkdHlwZV91cmkpCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkYWxpYXNlcy0+aXRlcml0ZW1zKCkgYXMgJHBhaXIpIHsKICAgICAgICAgICAgbGlzdCgkdHlwZV91cmksICRhbGlhcykgPSAkcGFpcjsKCiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjb3VudC4nIC4gJGFsaWFzLCAkYXhfYXJncykgJiYgKCRheF9hcmdzWydjb3VudC4nIC4gJGFsaWFzXSAhPT0gQXV0aF9PcGVuSURfQVhfVU5MSU1JVEVEX1ZBTFVFUykpIHsKCiAgICAgICAgICAgICAgICAkY291bnRfa2V5ID0gJ2NvdW50LicgLiAkYWxpYXM7CiAgICAgICAgICAgICAgICAkY291bnRfcyA9ICRheF9hcmdzWyRjb3VudF9rZXldOwoKICAgICAgICAgICAgICAgICRjb3VudCA9IEF1dGhfT3BlbklEOjppbnR2YWwoJGNvdW50X3MpOwoKICAgICAgICAgICAgICAgIGlmICgkY291bnQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgZm9yICVzLCBnb3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY291bnQuICVzJyAuICRhbGlhcywgJGNvdW50X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX0FYX1VOTElNSVRFRF9WQUxVRVMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgJGNvdW50ICsgMTsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICR2YWx1ZV9rZXkgPSBzcHJpbnRmKCd2YWx1ZS4lcy4lZCcsICRhbGlhcywgJGkpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJHZhbHVlX2tleSwgJGF4X2FyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyB2YWx1ZSBmb3VuZCBmb3Iga2V5ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVfa2V5KSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAkYXhfYXJnc1skdmFsdWVfa2V5XTsKICAgICAgICAgICAgICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAka2V5ID0gJ3ZhbHVlLicgLiAkYWxpYXM7CgogICAgICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRheF9hcmdzKSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKAogICAgICAgICAgICAgICAgICAgIHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gdmFsdWUgZm91bmQgZm9yIGtleSAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAka2V5KSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHZhbHVlID0gJGF4X2FyZ3NbJ3ZhbHVlLicgLiAkYWxpYXNdOwoKICAgICAgICAgICAgICAgIGlmICgkdmFsdWUgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlcyA9IGFycmF5KCR2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5kYXRhWyR0eXBlX3VyaV0gPSAkdmFsdWVzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzaW5nbGUgdmFsdWUgZm9yIGFuIGF0dHJpYnV0ZS4gSWYgbm8gdmFsdWUgd2FzIHNlbnQgZm9yCiAgICAgKiB0aGlzIGF0dHJpYnV0ZSwgdXNlIHRoZSBzdXBwbGllZCBkZWZhdWx0LiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4KICAgICAqIG9uZSB2YWx1ZSBmb3IgdGhpcyBhdHRyaWJ1dGUsIHRoaXMgbWV0aG9kIHdpbGwgZmFpbC4KICAgICAqCiAgICAgKiBAcGFyYW0gdHlwZV91cmk6IFRoZSBVUkkgZm9yIHRoZSBhdHRyaWJ1dGUKICAgICAqIEBwYXJhbSBkZWZhdWx0OiBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdAogICAgICogc2VudCBpbiB0aGUgZmV0Y2hfcmVzcG9uc2UuCiAgICAgKgogICAgICogQHJldHVybiAkdmFsdWUgQXV0aF9PcGVuSURfQVhfRXJyb3Igb24gZmFpbHVyZSBvciB0aGUgdmFsdWUgb2YKICAgICAqIHRoZSBhdHRyaWJ1dGUgaW4gdGhlIGZldGNoX3Jlc3BvbnNlIG1lc3NhZ2UsIG9yIHRoZSBkZWZhdWx0CiAgICAgKiBzdXBwbGllZAogICAgICovCiAgICBmdW5jdGlvbiBnZXRTaW5nbGUoJHR5cGVfdXJpLCAkZGVmYXVsdD1udWxsKQogICAgewogICAgICAgICR2YWx1ZXMgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJHRoaXMtPmRhdGEsICR0eXBlX3VyaSk7CiAgICAgICAgaWYgKCEkdmFsdWVzKSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9IGVsc2UgaWYgKGNvdW50KCR2YWx1ZXMpID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZXNbMF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcigKICAgICAgICAgICAgICBzcHJpbnRmKCdNb3JlIHRoYW4gb25lIHZhbHVlIHByZXNlbnQgZm9yICVzJywKICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3VyaSkKICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoaXMgYXR0cmlidXRlIGluIHRoZQogICAgICogZmV0Y2hfcmVzcG9uc2UuCiAgICAgKgogICAgICogWFhYOiB3aGF0IHRvIGRvIGlmIHRoZSB2YWx1ZXMgYXJlIG5vdCBwcmVzZW50PyBkZWZhdWx0CiAgICAgKiBwYXJhbWV0ZXI/IHRoaXMgaXMgZnVubnkgYmVjYXVzZSBpdCdzIGFsd2F5cyBzdXBwb3NlZCB0byByZXR1cm4KICAgICAqIGEgbGlzdCwgc28gdGhlIGRlZmF1bHQgbWF5IGJyZWFrIHRoYXQsIHRob3VnaCBpdCdzIHByb3ZpZGVkIGJ5CiAgICAgKiB0aGUgdXNlcidzIGNvZGUsIHNvIGl0IG1pZ2h0IGJlIG9rYXkuIElmIG5vIGRlZmF1bHQgaXMKICAgICAqIHN1cHBsaWVkLCBzaG91bGQgdGhlIHJldHVybiBiZSBOb25lIG9yIFtdPwogICAgICoKICAgICAqIEBwYXJhbSB0eXBlX3VyaTogVGhlIFVSSSBvZiB0aGUgYXR0cmlidXRlCiAgICAgKgogICAgICogQHJldHVybiAkdmFsdWVzIFRoZSBsaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUgaW4gdGhlCiAgICAgKiByZXNwb25zZS4gTWF5IGJlIGFuIGVtcHR5IGxpc3QuICBJZiB0aGUgYXR0cmlidXRlIHdhcyBub3Qgc2VudAogICAgICogaW4gdGhlIHJlc3BvbnNlLCByZXR1cm5zIEF1dGhfT3BlbklEX0FYX0Vycm9yLgogICAgICovCiAgICBmdW5jdGlvbiBnZXQoJHR5cGVfdXJpKQogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCR0eXBlX3VyaSwgJHRoaXMtPmRhdGEpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskdHlwZV91cmldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgc3ByaW50ZigiVHlwZSBVUkkgJXMgbm90IGZvdW5kIGluIHJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3VyaSkKICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHJlc3BvbnNlcyBmb3IgYSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZSBpbiB0aGlzCiAgICAgKiBmZXRjaF9yZXNwb25zZSBtZXNzYWdlLgogICAgICoKICAgICAqIEBwYXJhbSB0eXBlX3VyaTogVGhlIFVSSSBvZiB0aGUgYXR0cmlidXRlCiAgICAgKgogICAgICogQHJldHVybnMgaW50IFRoZSBudW1iZXIgb2YgdmFsdWVzIHNlbnQgZm9yIHRoaXMgYXR0cmlidXRlLiAgSWYKICAgICAqIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBzZW50IGluIHRoZSByZXNwb25zZSwgcmV0dXJucwogICAgICogQXV0aF9PcGVuSURfQVhfRXJyb3IuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvdW50KCR0eXBlX3VyaSkKICAgIHsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkdHlwZV91cmksICR0aGlzLT5kYXRhKSkgewogICAgICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmdldCgkdHlwZV91cmkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX0Vycm9yKAogICAgICAgICAgICAgIHNwcmludGYoIlR5cGUgVVJJICVzIG5vdCBmb3VuZCBpbiByZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgICAkdHlwZV91cmkpCiAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KCi8qKgogKiBBIGZldGNoX3Jlc3BvbnNlIGF0dHJpYnV0ZSBleGNoYW5nZSBtZXNzYWdlLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0FYX0ZldGNoUmVzcG9uc2UgZXh0ZW5kcyBBdXRoX09wZW5JRF9BWF9LZXlWYWx1ZU1lc3NhZ2UgewogICAgdmFyICRtb2RlID0gJ2ZldGNoX3Jlc3BvbnNlJzsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9BWF9GZXRjaFJlc3BvbnNlKCR1cGRhdGVfdXJsPW51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPkF1dGhfT3BlbklEX0FYX0tleVZhbHVlTWVzc2FnZSgpOwogICAgICAgICR0aGlzLT51cGRhdGVfdXJsID0gJHVwZGF0ZV91cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXJpYWxpemUgdGhpcyBvYmplY3QgaW50byBhcmd1bWVudHMgaW4gdGhlIGF0dHJpYnV0ZSBleGNoYW5nZQogICAgICogbmFtZXNwYWNlCiAgICAgKgogICAgICogQHJldHVybiAkYXJncyBUaGUgZGljdGlvbmFyeSBvZiB1bnF1YWxpZmllZCBhdHRyaWJ1dGUgZXhjaGFuZ2UKICAgICAqIGFyZ3VtZW50cyB0aGF0IHJlcHJlc2VudCB0aGlzIGZldGNoX3Jlc3BvbnNlLCBvcgogICAgICogQXV0aF9PcGVuSURfQVhfRXJyb3Igb24gZXJyb3IuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoJHJlcXVlc3Q9bnVsbCkKICAgIHsKICAgICAgICAkYWxpYXNlcyA9IG5ldyBBdXRoX09wZW5JRF9OYW1lc3BhY2VNYXAoKTsKCiAgICAgICAgJHplcm9fdmFsdWVfdHlwZXMgPSBhcnJheSgpOwoKICAgICAgICBpZiAoJHJlcXVlc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlcXVlc3QgKHRoZQogICAgICAgICAgICAvLyBzYW1lIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHByZXNlbnQgaW4gZWFjaCwgYW5kIHRoZQogICAgICAgICAgICAvLyBjb3VudHMgaW4gdGhlIHJlc3BvbnNlIG11c3QgYmUgbm8gbW9yZSB0aGFuIHRoZSBjb3VudHMKICAgICAgICAgICAgLy8gaW4gdGhlIHJlcXVlc3QpCgogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkdHlwZV91cmkgPT4gJHVudXNlZCkgewogICAgICAgICAgICAgICAgaWYgKCEkcmVxdWVzdC0+Y29udGFpbnMoJHR5cGVfdXJpKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJSZXNwb25zZSBhdHRyaWJ1dGUgbm90IHByZXNlbnQgaW4gcmVxdWVzdDogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV91cmkpCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkcmVxdWVzdC0+aXRlckF0dHJzKCkgYXMgJGF0dHJfaW5mbykgewogICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgYWxpYXNlcyBmcm9tIHRoZSByZXF1ZXN0IHNvIHRoYXQgcmVhZGluZwogICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIGluIGxpZ2h0IG9mIHRoZSByZXF1ZXN0IGlzIGVhc2llcgogICAgICAgICAgICAgICAgaWYgKCRhdHRyX2luZm8tPmFsaWFzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJGFsaWFzZXMtPmFkZCgkYXR0cl9pbmZvLT50eXBlX3VyaSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRhbGlhcyA9ICRhbGlhc2VzLT5hZGRBbGlhcygkYXR0cl9pbmZvLT50eXBlX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJfaW5mby0+YWxpYXMpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJGFsaWFzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigiQ291bGQgbm90IGFkZCBhbGlhcyAlcyBmb3IgVVJJICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhdHRyX2luZm8tPmFsaWFzLCAkYXR0cl9pbmZvLT50eXBlX3VyaSkKICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkYXR0cl9pbmZvLT50eXBlX3VyaSwgJHRoaXMtPmRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlcyA9ICR0aGlzLT5kYXRhWyRhdHRyX2luZm8tPnR5cGVfdXJpXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJHplcm9fdmFsdWVfdHlwZXNbXSA9ICRhdHRyX2luZm87CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCgkYXR0cl9pbmZvLT5jb3VudCAhPSBBdXRoX09wZW5JRF9BWF9VTkxJTUlURURfVkFMVUVTKSAmJgogICAgICAgICAgICAgICAgICAgICgkYXR0cl9pbmZvLT5jb3VudCA8IGNvdW50KCR2YWx1ZXMpKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQVhfRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJNb3JlIHRoYW4gdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQgdmFsdWVzICIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2VyZSBzcGVjaWZpZWQgZm9yICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJfaW5mby0+dHlwZV91cmkpCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAka3ZfYXJncyA9ICR0aGlzLT5fZ2V0RXh0ZW5zaW9uS1ZBcmdzKCRhbGlhc2VzKTsKCiAgICAgICAgLy8gQWRkIHRoZSBLViBhcmdzIGludG8gdGhlIHJlc3BvbnNlIHdpdGggdGhlIGFyZ3MgdGhhdCBhcmUKICAgICAgICAvLyB1bmlxdWUgdG8gdGhlIGZldGNoX3Jlc3BvbnNlCiAgICAgICAgJGF4X2FyZ3MgPSAkdGhpcy0+X25ld0FyZ3MoKTsKCiAgICAgICAgLy8gRm9yIGVhY2ggcmVxdWVzdGVkIGF0dHJpYnV0ZSwgcHV0IGl0cyB0eXBlL2FsaWFzIGFuZCBjb3VudAogICAgICAgIC8vIGludG8gdGhlIHJlc3BvbnNlIGV2ZW4gaWYgbm8gZGF0YSB3ZXJlIHJldHVybmVkLgogICAgICAgIGZvcmVhY2ggKCR6ZXJvX3ZhbHVlX3R5cGVzIGFzICRhdHRyX2luZm8pIHsKICAgICAgICAgICAgJGFsaWFzID0gJGFsaWFzZXMtPmdldEFsaWFzKCRhdHRyX2luZm8tPnR5cGVfdXJpKTsKICAgICAgICAgICAgJGt2X2FyZ3NbJ3R5cGUuJyAuICRhbGlhc10gPSAkYXR0cl9pbmZvLT50eXBlX3VyaTsKICAgICAgICAgICAgJGt2X2FyZ3NbJ2NvdW50LicgLiAkYWxpYXNdID0gJzAnOwogICAgICAgIH0KCiAgICAgICAgJHVwZGF0ZV91cmwgPSBudWxsOwogICAgICAgIGlmICgkcmVxdWVzdCkgewogICAgICAgICAgICAkdXBkYXRlX3VybCA9ICRyZXF1ZXN0LT51cGRhdGVfdXJsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR1cGRhdGVfdXJsID0gJHRoaXMtPnVwZGF0ZV91cmw7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHVwZGF0ZV91cmwpIHsKICAgICAgICAgICAgJGF4X2FyZ3NbJ3VwZGF0ZV91cmwnXSA9ICR1cGRhdGVfdXJsOwogICAgICAgIH0KCiAgICAgICAgQXV0aF9PcGVuSUQ6OnVwZGF0ZSgkYXhfYXJncywgJGt2X2FyZ3MpOwoKICAgICAgICByZXR1cm4gJGF4X2FyZ3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuICRyZXN1bHQgQXV0aF9PcGVuSURfQVhfRXJyb3Igb24gZmFpbHVyZSBvciB0cnVlIG9uCiAgICAgKiBzdWNjZXNzLgogICAgICovCiAgICBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbkFyZ3MoJGF4X2FyZ3MpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHBhcmVudDo6cGFyc2VFeHRlbnNpb25BcmdzKCRheF9hcmdzKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEX0FYOjppc0Vycm9yKCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnVwZGF0ZV91cmwgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGF4X2FyZ3MsICd1cGRhdGVfdXJsJyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgRmV0Y2hSZXNwb25zZSBvYmplY3QgZnJvbSBhbiBPcGVuSUQgbGlicmFyeQogICAgICogU3VjY2Vzc1Jlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3VjY2Vzc19yZXNwb25zZTogQSBzdWNjZXNzZnVsIGlkX3JlcyByZXNwb25zZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gc2lnbmVkOiBXaGV0aGVyIG5vbi1zaWduZWQgYXJncyBzaG91bGQgYmUgcHJvY2Vzc3NlZC4gSWYKICAgICAqIFRydWUgKHRoZSBkZWZhdWx0KSwgb25seSBzaWduZWQgYXJndW1lbnRzIHdpbGwgYmUgcHJvY2Vzc3NlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuICRyZXNwb25zZSBBIEZldGNoUmVzcG9uc2UgY29udGFpbmluZyB0aGUgZGF0YSBmcm9tIHRoZQogICAgICogT3BlbklEIG1lc3NhZ2UKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21TdWNjZXNzUmVzcG9uc2UoJHN1Y2Nlc3NfcmVzcG9uc2UsICRzaWduZWQ9dHJ1ZSkKICAgIHsKICAgICAgICAkb2JqID0gbmV3IEF1dGhfT3BlbklEX0FYX0ZldGNoUmVzcG9uc2UoKTsKICAgICAgICBpZiAoJHNpZ25lZCkgewogICAgICAgICAgICAkYXhfYXJncyA9ICRzdWNjZXNzX3Jlc3BvbnNlLT5nZXRTaWduZWROUygkb2JqLT5uc191cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRheF9hcmdzID0gJHN1Y2Nlc3NfcmVzcG9uc2UtPm1lc3NhZ2UtPmdldEFyZ3MoJG9iai0+bnNfdXJpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRheF9hcmdzID09PSBudWxsIHx8IEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJGF4X2FyZ3MpIHx8CiAgICAgICAgICAgICAgc2l6ZW9mKCRheF9hcmdzKSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICRvYmotPnBhcnNlRXh0ZW5zaW9uQXJncygkYXhfYXJncyk7CiAgICAgICAgaWYgKEF1dGhfT3BlbklEX0FYOjppc0Vycm9yKCRyZXN1bHQpKSB7CiAgICAgICAgICAgICNYWFggbG9nIG1lCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KfQoKLyoqCiAqIEEgc3RvcmUgcmVxdWVzdCBhdHRyaWJ1dGUgZXhjaGFuZ2UgbWVzc2FnZSByZXByZXNlbnRhdGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9BWF9TdG9yZVJlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9BWF9LZXlWYWx1ZU1lc3NhZ2UgewogICAgdmFyICRtb2RlID0gJ3N0b3JlX3JlcXVlc3QnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRhbGlhc2VzIFRoZSBuYW1lc3BhY2UgYWxpYXNlcyB0byB1c2Ugd2hlbiBtYWtpbmcKICAgICAqIHRoaXMgc3RvcmUgcmVzcG9uc2UuIExlYXZlIGFzIE5vbmUgdG8gdXNlIGRlZmF1bHRzLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRFeHRlbnNpb25BcmdzKCRhbGlhc2VzPW51bGwpCiAgICB7CiAgICAgICAgJGF4X2FyZ3MgPSAkdGhpcy0+X25ld0FyZ3MoKTsKICAgICAgICAka3ZfYXJncyA9ICR0aGlzLT5fZ2V0RXh0ZW5zaW9uS1ZBcmdzKCRhbGlhc2VzKTsKICAgICAgICBBdXRoX09wZW5JRDo6dXBkYXRlKCRheF9hcmdzLCAka3ZfYXJncyk7CiAgICAgICAgcmV0dXJuICRheF9hcmdzOwogICAgfQp9CgovKioKICogQW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBzdG9yZSByZXF1ZXN0IHdhcyBwcm9jZXNzZWQgYWxvbmcgd2l0aCB0aGlzCiAqIE9wZW5JRCB0cmFuc2FjdGlvbi4gIFVzZSBtYWtlKCksIE5PVCB0aGUgY29uc3RydWN0b3IsIHRvIGNyZWF0ZQogKiByZXNwb25zZSBvYmplY3RzLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0FYX1N0b3JlUmVzcG9uc2UgZXh0ZW5kcyBBdXRoX09wZW5JRF9BWF9NZXNzYWdlIHsKICAgIHZhciAkU1VDQ0VTU19NT0RFID0gJ3N0b3JlX3Jlc3BvbnNlX3N1Y2Nlc3MnOwogICAgdmFyICRGQUlMVVJFX01PREUgPSAnc3RvcmVfcmVzcG9uc2VfZmFpbHVyZSc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIEF1dGhfT3BlbklEX0FYX0Vycm9yIG9uIGVycm9yIG9yIGFuCiAgICAgKiBBdXRoX09wZW5JRF9BWF9TdG9yZVJlc3BvbnNlIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBmdW5jdGlvbiBtYWtlKCRzdWNjZWVkZWQ9dHJ1ZSwgJGVycm9yX21lc3NhZ2U9bnVsbCkKICAgIHsKICAgICAgICBpZiAoKCRzdWNjZWVkZWQpICYmICgkZXJyb3JfbWVzc2FnZSAhPT0gbnVsbCkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9BWF9FcnJvcignQW4gZXJyb3IgbWVzc2FnZSBtYXkgb25seSBiZSAnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZWQgaW4gYSBmYWlsaW5nIGZldGNoIHJlc3BvbnNlJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0FYX1N0b3JlUmVzcG9uc2UoJHN1Y2NlZWRlZCwgJGVycm9yX21lc3NhZ2UpOwogICAgfQoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0FYX1N0b3JlUmVzcG9uc2UoJHN1Y2NlZWRlZD10cnVlLCAkZXJyb3JfbWVzc2FnZT1udWxsKQogICAgewogICAgICAgIGlmICgkc3VjY2VlZGVkKSB7CiAgICAgICAgICAgICR0aGlzLT5tb2RlID0gJHRoaXMtPlNVQ0NFU1NfTU9ERTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+bW9kZSA9ICR0aGlzLT5GQUlMVVJFX01PREU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZXJyb3JfbWVzc2FnZSA9ICRlcnJvcl9tZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogV2FzIHRoaXMgcmVzcG9uc2UgYSBzdWNjZXNzIHJlc3BvbnNlPwogICAgICovCiAgICBmdW5jdGlvbiBzdWNjZWVkZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bW9kZSA9PSAkdGhpcy0+U1VDQ0VTU19NT0RFOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKQogICAgewogICAgICAgICRheF9hcmdzID0gJHRoaXMtPl9uZXdBcmdzKCk7CiAgICAgICAgaWYgKCghJHRoaXMtPnN1Y2NlZWRlZCgpKSAmJiAkdGhpcy0+ZXJyb3JfbWVzc2FnZSkgewogICAgICAgICAgICAkYXhfYXJnc1snZXJyb3InXSA9ICR0aGlzLT5lcnJvcl9tZXNzYWdlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRheF9hcmdzOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/BigMath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBCaWdNYXRoOiBBIG1hdGggbGlicmFyeSB3cmFwcGVyIHRoYXQgYWJzdHJhY3RzIG91dCB0aGUgdW5kZXJseWluZwogKiBsb25nIGludGVnZXIgbGlicmFyeS4KICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBOZWVkZWQgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9DcnlwdFV0aWwucGhwJzsKCi8qKgogKiBOZWVkIEF1dGhfT3BlbklEOjpieXRlcygpLgogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC5waHAnOwoKLyoqCiAqIFRoZSBzdXBlcmNsYXNzIG9mIGFsbCBiaWctaW50ZWdlciBtYXRoIGltcGxlbWVudGF0aW9ucwogKiBAYWNjZXNzIHByaXZhdGUKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9NYXRoTGlicmFyeSB7CiAgICAvKioKICAgICAqIEdpdmVuIGEgbG9uZyBpbnRlZ2VyLCByZXR1cm5zIHRoZSBudW1iZXIgY29udmVydGVkIHRvIGEgYmluYXJ5CiAgICAgKiBzdHJpbmcuICBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgbG9uZyBpbnRlZ2VyIHZhbHVlcyBvZiBhcmJpdHJhcnkKICAgICAqIG1hZ25pdHVkZSBhbmQgdXNlcyB0aGUgbG9jYWwgbGFyZ2UtbnVtYmVyIG1hdGggbGlicmFyeSB3aGVuCiAgICAgKiBhdmFpbGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIGludGVnZXIgJGxvbmcgVGhlIGxvbmcgbnVtYmVyIChjYW4gYmUgYSBub3JtYWwgUEhQCiAgICAgKiBpbnRlZ2VyIG9yIGEgbnVtYmVyIGNyZWF0ZWQgYnkgb25lIG9mIHRoZSBhdmFpbGFibGUgbG9uZyBudW1iZXIKICAgICAqIGxpYnJhcmllcykKICAgICAqIEByZXR1cm4gc3RyaW5nICRiaW5hcnkgVGhlIGJpbmFyeSB2ZXJzaW9uIG9mICRsb25nCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvbmdUb0JpbmFyeSgkbG9uZykKICAgIHsKICAgICAgICAkY21wID0gJHRoaXMtPmNtcCgkbG9uZywgMCk7CiAgICAgICAgaWYgKCRjbXAgPCAwKSB7CiAgICAgICAgICAgICRtc2cgPSBfX0ZVTkNUSU9OX18gLiAiIHRha2VzIG9ubHkgcG9zaXRpdmUgaW50ZWdlcnMuIjsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigkbXNnLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICgkY21wID09IDApIHsKICAgICAgICAgICAgcmV0dXJuICJceDAwIjsKICAgICAgICB9CgogICAgICAgICRieXRlcyA9IGFycmF5KCk7CgogICAgICAgIHdoaWxlICgkdGhpcy0+Y21wKCRsb25nLCAwKSA+IDApIHsKICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkYnl0ZXMsICR0aGlzLT5tb2QoJGxvbmcsIDI1NikpOwogICAgICAgICAgICAkbG9uZyA9ICR0aGlzLT5kaXYoJGxvbmcsIHBvdygyLCA4KSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJ5dGVzICYmICgkYnl0ZXNbMF0gPiAxMjcpKSB7CiAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJGJ5dGVzLCAwKTsKICAgICAgICB9CgogICAgICAgICRzdHJpbmcgPSAnJzsKICAgICAgICBmb3JlYWNoICgkYnl0ZXMgYXMgJGJ5dGUpIHsKICAgICAgICAgICAgJHN0cmluZyAuPSBwYWNrKCdDJywgJGJ5dGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGJpbmFyeSBzdHJpbmcsIHJldHVybnMgdGhlIGJpbmFyeSBzdHJpbmcgY29udmVydGVkIHRvIGEKICAgICAqIGxvbmcgbnVtYmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeSBUaGUgYmluYXJ5IHZlcnNpb24gb2YgYSBsb25nIG51bWJlciwKICAgICAqIHByb2JhYmx5IGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcgbG9uZ1RvQmluYXJ5CiAgICAgKiBAcmV0dXJuIGludGVnZXIgJGxvbmcgVGhlIGxvbmcgbnVtYmVyIGVxdWl2YWxlbnQgb2YgdGhlIGJpbmFyeQogICAgICogc3RyaW5nICRzdHIKICAgICAqLwogICAgZnVuY3Rpb24gYmluYXJ5VG9Mb25nKCRzdHIpCiAgICB7CiAgICAgICAgaWYgKCRzdHIgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBVc2UgYXJyYXlfbWVyZ2UgdG8gcmV0dXJuIGEgemVyby1pbmRleGVkIGFycmF5IGluc3RlYWQgb2YgYQogICAgICAgIC8vIG9uZS1pbmRleGVkIGFycmF5LgogICAgICAgICRieXRlcyA9IGFycmF5X21lcmdlKHVucGFjaygnQyonLCAkc3RyKSk7CgogICAgICAgICRuID0gJHRoaXMtPmluaXQoMCk7CgogICAgICAgIGlmICgkYnl0ZXMgJiYgKCRieXRlc1swXSA+IDEyNykpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigiYnl0ZXNUb051bSB3b3JrcyBvbmx5IGZvciBwb3NpdGl2ZSBpbnRlZ2Vycy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkYnl0ZXMgYXMgJGJ5dGUpIHsKICAgICAgICAgICAgJG4gPSAkdGhpcy0+bXVsKCRuLCBwb3coMiwgOCkpOwogICAgICAgICAgICAkbiA9ICR0aGlzLT5hZGQoJG4sICRieXRlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbjsKICAgIH0KCiAgICBmdW5jdGlvbiBiYXNlNjRUb0xvbmcoJHN0cikKICAgIHsKICAgICAgICAkYjY0ID0gYmFzZTY0X2RlY29kZSgkc3RyKTsKCiAgICAgICAgaWYgKCRiNjQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+YmluYXJ5VG9Mb25nKCRiNjQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvbmdUb0Jhc2U2NCgkc3RyKQogICAgewogICAgICAgIHJldHVybiBiYXNlNjRfZW5jb2RlKCR0aGlzLT5sb25nVG9CaW5hcnkoJHN0cikpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHJhbmRvbSBudW1iZXIgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4gIFRoaXMgZnVuY3Rpb24KICAgICAqIGFjY2VwdHMgJHN0YXJ0LCAkc3RvcCwgYW5kICRzdGVwIHZhbHVlcyBvZiBhcmJpdHJhcnkgbWFnbml0dWRlCiAgICAgKiBhbmQgd2lsbCB1dGlsaXplIHRoZSBsb2NhbCBsYXJnZS1udW1iZXIgbWF0aCBsaWJyYXJ5IHdoZW4KICAgICAqIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgb3IgdGhlIG1pbmltdW0KICAgICAqIHJhbmRvbSBudW1iZXIgdG8gcmV0dXJuCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkc3RvcCBUaGUgZW5kIG9mIHRoZSByYW5nZSwgb3IgdGhlIG1heGltdW0KICAgICAqIHJhbmRvbSBudW1iZXIgdG8gcmV0dXJuCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkc3RlcCBUaGUgc3RlcCBzaXplLCBzdWNoIHRoYXQgJHJlc3VsdCAtICgkc3RlcAogICAgICogKiBOKSA9ICRzdGFydCBmb3Igc29tZSBOCiAgICAgKiBAcmV0dXJuIGludGVnZXIgJHJlc3VsdCBUaGUgcmVzdWx0aW5nIHJhbmRvbWx5LWdlbmVyYXRlZCBudW1iZXIKICAgICAqLwogICAgZnVuY3Rpb24gcmFuZCgkc3RvcCkKICAgIHsKICAgICAgICBzdGF0aWMgJGR1cGxpY2F0ZV9jYWNoZSA9IGFycmF5KCk7CgogICAgICAgIC8vIFVzZWQgYXMgdGhlIGtleSBmb3IgdGhlIGR1cGxpY2F0ZSBjYWNoZQogICAgICAgICRyYnl0ZXMgPSAkdGhpcy0+bG9uZ1RvQmluYXJ5KCRzdG9wKTsKCiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJHJieXRlcywgJGR1cGxpY2F0ZV9jYWNoZSkpIHsKICAgICAgICAgICAgbGlzdCgkZHVwbGljYXRlLCAkbmJ5dGVzKSA9ICRkdXBsaWNhdGVfY2FjaGVbJHJieXRlc107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCRyYnl0ZXNbMF0gPT0gIlx4MDAiKSB7CiAgICAgICAgICAgICAgICAkbmJ5dGVzID0gQXV0aF9PcGVuSUQ6OmJ5dGVzKCRyYnl0ZXMpIC0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuYnl0ZXMgPSBBdXRoX09wZW5JRDo6Ynl0ZXMoJHJieXRlcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRteHJhbmQgPSAkdGhpcy0+cG93KDI1NiwgJG5ieXRlcyk7CgogICAgICAgICAgICAvLyBJZiB3ZSBnZXQgYSBudW1iZXIgbGVzcyB0aGFuIHRoaXMsIHRoZW4gaXQgaXMgaW4gdGhlCiAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgcmFuZ2UuCiAgICAgICAgICAgICRkdXBsaWNhdGUgPSAkdGhpcy0+bW9kKCRteHJhbmQsICRzdG9wKTsKCiAgICAgICAgICAgIGlmIChjb3VudCgkZHVwbGljYXRlX2NhY2hlKSA+IDEwKSB7CiAgICAgICAgICAgICAgICAkZHVwbGljYXRlX2NhY2hlID0gYXJyYXkoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGR1cGxpY2F0ZV9jYWNoZVskcmJ5dGVzXSA9IGFycmF5KCRkdXBsaWNhdGUsICRuYnl0ZXMpOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICAkYnl0ZXMgPSAiXHgwMCIgLiBBdXRoX09wZW5JRF9DcnlwdFV0aWw6OmdldEJ5dGVzKCRuYnl0ZXMpOwogICAgICAgICAgICAkbiA9ICR0aGlzLT5iaW5hcnlUb0xvbmcoJGJ5dGVzKTsKICAgICAgICAgICAgLy8gS2VlcCBsb29waW5nIGlmIHRoaXMgdmFsdWUgaXMgaW4gdGhlIGxvdyBkdXBsaWNhdGVkIHJhbmdlCiAgICAgICAgfSB3aGlsZSAoJHRoaXMtPmNtcCgkbiwgJGR1cGxpY2F0ZSkgPCAwKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2QoJG4sICRzdG9wKTsKICAgIH0KfQoKLyoqCiAqIEV4cG9zZXMgQkNtYXRoIG1hdGggbGlicmFyeSBmdW5jdGlvbmFsaXR5LgogKgogKiB7QGxpbmsgQXV0aF9PcGVuSURfQmNNYXRoV3JhcHBlcn0gd3JhcHMgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQKICogYnkgdGhlIEJDTWF0aCBleHRlbnNpb24uCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0JjTWF0aFdyYXBwZXIgZXh0ZW5kcyBBdXRoX09wZW5JRF9NYXRoTGlicmFyeXsKICAgIHZhciAkdHlwZSA9ICdiY21hdGgnOwoKICAgIGZ1bmN0aW9uIGFkZCgkeCwgJHkpCiAgICB7CiAgICAgICAgcmV0dXJuIGJjYWRkKCR4LCAkeSk7CiAgICB9CgogICAgZnVuY3Rpb24gc3ViKCR4LCAkeSkKICAgIHsKICAgICAgICByZXR1cm4gYmNzdWIoJHgsICR5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3coJGJhc2UsICRleHBvbmVudCkKICAgIHsKICAgICAgICByZXR1cm4gYmNwb3coJGJhc2UsICRleHBvbmVudCk7CiAgICB9CgogICAgZnVuY3Rpb24gY21wKCR4LCAkeSkKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR4LCAkeSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5pdCgkbnVtYmVyLCAkYmFzZSA9IDEwKQogICAgewogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfQoKICAgIGZ1bmN0aW9uIG1vZCgkYmFzZSwgJG1vZHVsdXMpCiAgICB7CiAgICAgICAgcmV0dXJuIGJjbW9kKCRiYXNlLCAkbW9kdWx1cyk7CiAgICB9CgogICAgZnVuY3Rpb24gbXVsKCR4LCAkeSkKICAgIHsKICAgICAgICByZXR1cm4gYmNtdWwoJHgsICR5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXYoJHgsICR5KQogICAgewogICAgICAgIHJldHVybiBiY2RpdigkeCwgJHkpOwogICAgfQoKICAgIC8qKgogICAgICogU2FtZSBhcyBiY3Bvd21vZCB3aGVuIGJjcG93bW9kIGlzIG1pc3NpbmcKICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3Bvd21vZCgkYmFzZSwgJGV4cG9uZW50LCAkbW9kdWx1cykKICAgIHsKICAgICAgICAkc3F1YXJlID0gJHRoaXMtPm1vZCgkYmFzZSwgJG1vZHVsdXMpOwogICAgICAgICRyZXN1bHQgPSAxOwogICAgICAgIHdoaWxlKCR0aGlzLT5jbXAoJGV4cG9uZW50LCAwKSA+IDApIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5tb2QoJGV4cG9uZW50LCAyKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5tb2QoJHRoaXMtPm11bCgkcmVzdWx0LCAkc3F1YXJlKSwgJG1vZHVsdXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzcXVhcmUgPSAkdGhpcy0+bW9kKCR0aGlzLT5tdWwoJHNxdWFyZSwgJHNxdWFyZSksICRtb2R1bHVzKTsKICAgICAgICAgICAgJGV4cG9uZW50ID0gJHRoaXMtPmRpdigkZXhwb25lbnQsIDIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3dtb2QoJGJhc2UsICRleHBvbmVudCwgJG1vZHVsdXMpCiAgICB7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnYmNwb3dtb2QnKSkgewogICAgICAgICAgICByZXR1cm4gYmNwb3dtb2QoJGJhc2UsICRleHBvbmVudCwgJG1vZHVsdXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3Bvd21vZCgkYmFzZSwgJGV4cG9uZW50LCAkbW9kdWx1cyk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCRudW0pCiAgICB7CiAgICAgICAgcmV0dXJuICRudW07CiAgICB9Cn0KCi8qKgogKiBFeHBvc2VzIEdNUCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25hbGl0eS4KICoKICoge0BsaW5rIEF1dGhfT3BlbklEX0dtcE1hdGhXcmFwcGVyfSB3cmFwcyB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZAogKiBieSB0aGUgR01QIGV4dGVuc2lvbi4KICoKICogQGFjY2VzcyBwcml2YXRlCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfR21wTWF0aFdyYXBwZXIgZXh0ZW5kcyBBdXRoX09wZW5JRF9NYXRoTGlicmFyeXsKICAgIHZhciAkdHlwZSA9ICdnbXAnOwoKICAgIGZ1bmN0aW9uIGFkZCgkeCwgJHkpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9hZGQoJHgsICR5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBzdWIoJHgsICR5KQogICAgewogICAgICAgIHJldHVybiBnbXBfc3ViKCR4LCAkeSk7CiAgICB9CgogICAgZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9wb3coJGJhc2UsICRleHBvbmVudCk7CiAgICB9CgogICAgZnVuY3Rpb24gY21wKCR4LCAkeSkKICAgIHsKICAgICAgICByZXR1cm4gZ21wX2NtcCgkeCwgJHkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGluaXQoJG51bWJlciwgJGJhc2UgPSAxMCkKICAgIHsKICAgICAgICByZXR1cm4gZ21wX2luaXQoJG51bWJlciwgJGJhc2UpOwogICAgfQoKICAgIGZ1bmN0aW9uIG1vZCgkYmFzZSwgJG1vZHVsdXMpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9tb2QoJGJhc2UsICRtb2R1bHVzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBtdWwoJHgsICR5KQogICAgewogICAgICAgIHJldHVybiBnbXBfbXVsKCR4LCAkeSk7CiAgICB9CgogICAgZnVuY3Rpb24gZGl2KCR4LCAkeSkKICAgIHsKICAgICAgICByZXR1cm4gZ21wX2Rpdl9xKCR4LCAkeSk7CiAgICB9CgogICAgZnVuY3Rpb24gcG93bW9kKCRiYXNlLCAkZXhwb25lbnQsICRtb2R1bHVzKQogICAgewogICAgICAgIHJldHVybiBnbXBfcG93bSgkYmFzZSwgJGV4cG9uZW50LCAkbW9kdWx1cyk7CiAgICB9CgogICAgZnVuY3Rpb24gdG9TdHJpbmcoJG51bSkKICAgIHsKICAgICAgICByZXR1cm4gZ21wX3N0cnZhbCgkbnVtKTsKICAgIH0KfQoKLyoqCiAqIERlZmluZSB0aGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMuICBBbiBleHRlbnNpb24gYXJyYXkgaGFzIGtleXMKICogJ21vZHVsZXMnLCAnZXh0ZW5zaW9uJywgYW5kICdjbGFzcycuICAnbW9kdWxlcycgaXMgYW4gYXJyYXkgb2YgUEhQCiAqIG1vZHVsZSBuYW1lcyB3aGljaCB0aGUgbG9hZGluZyBjb2RlIHdpbGwgYXR0ZW1wdCB0byBsb2FkLiAgVGhlc2UKICogdmFsdWVzIHdpbGwgYmUgc3VmZml4ZWQgd2l0aCBhIGxpYnJhcnkgZmlsZSBleHRlbnNpb24gKGUuZy4gIi5zbyIpLgogKiAnZXh0ZW5zaW9uJyBpcyB0aGUgbmFtZSBvZiBhIFBIUCBleHRlbnNpb24gd2hpY2ggd2lsbCBiZSB0ZXN0ZWQKICogYmVmb3JlICdtb2R1bGVzJyBhcmUgbG9hZGVkLiAgJ2NsYXNzJyBpcyB0aGUgc3RyaW5nIG5hbWUgb2YgYQogKiB7QGxpbmsgQXV0aF9PcGVuSURfTWF0aFdyYXBwZXJ9IHN1YmNsYXNzIHdoaWNoIHNob3VsZCBiZQogKiBpbnN0YW50aWF0ZWQgaWYgYSBnaXZlbiBleHRlbnNpb24gaXMgcHJlc2VudC4KICoKICogWW91IGNhbiBkZWZpbmUgbmV3IG1hdGggbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZCB0aGVtIHRvCiAqIHRoaXMgYXJyYXkuCiAqLwpmdW5jdGlvbiBBdXRoX09wZW5JRF9tYXRoX2V4dGVuc2lvbnMoKQp7CiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICBpZiAoIWRlZmluZWQoJ0F1dGhfT3BlbklEX0JVR0dZX0dNUCcpKSB7CiAgICAgICAgJHJlc3VsdFtdID0KICAgICAgICAgICAgYXJyYXkoJ21vZHVsZXMnID0+IGFycmF5KCdnbXAnLCAncGhwX2dtcCcpLAogICAgICAgICAgICAgICAgICAnZXh0ZW5zaW9uJyA9PiAnZ21wJywKICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiAnQXV0aF9PcGVuSURfR21wTWF0aFdyYXBwZXInKTsKICAgIH0KCiAgICAkcmVzdWx0W10gPSBhcnJheSgnbW9kdWxlcycgPT4gYXJyYXkoJ2JjbWF0aCcsICdwaHBfYmNtYXRoJyksCiAgICAgICAgICAgICAgICAgICAgICAnZXh0ZW5zaW9uJyA9PiAnYmNtYXRoJywKICAgICAgICAgICAgICAgICAgICAgICdjbGFzcycgPT4gJ0F1dGhfT3BlbklEX0JjTWF0aFdyYXBwZXInKTsKCiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIERldGVjdCB3aGljaCAoaWYgYW55KSBtYXRoIGxpYnJhcnkgaXMgYXZhaWxhYmxlCiAqLwpmdW5jdGlvbiBBdXRoX09wZW5JRF9kZXRlY3RNYXRoTGlicmFyeSgkZXh0cykKewogICAgJGxvYWRlZCA9IGZhbHNlOwoKCSRoYXNEbCA9IGZ1bmN0aW9uX2V4aXN0cygnZGwnKTsKICAgIGZvcmVhY2ggKCRleHRzIGFzICRleHRlbnNpb24pIHsKICAgICAgICBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgkZXh0ZW5zaW9uWydleHRlbnNpb24nXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRleHRlbnNpb247CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIHtAbGluayBBdXRoX09wZW5JRF9nZXRNYXRoTGlifSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBsb25nCiAqIG51bWJlciBleHRlbnNpb24gbW9kdWxlcyBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZgogKiB7QGxpbmsgQXV0aF9PcGVuSURfTWF0aFdyYXBwZXJ9IHdoaWNoIGV4cG9zZXMgdGhlIG1vZHVsZSdzCiAqIGZ1bmN0aW9uYWxpdHkuCiAqCiAqIENoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhbiBleHRlbnNpb24gbW9kdWxlIGRlc2NyaWJlZCBieSB0aGUKICogcmVzdWx0IG9mIHtAbGluayBBdXRoX09wZW5JRF9tYXRoX2V4dGVuc2lvbnMoKX0gYW5kIHJldHVybnMgYW4KICogaW5zdGFuY2Ugb2YgYSB3cmFwcGVyIGZvciB0aGF0IGV4dGVuc2lvbiBtb2R1bGUuICBJZiBubyBleHRlbnNpb24KICogbW9kdWxlIGlzIGZvdW5kLCBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXV0aF9PcGVuSURfTWF0aFdyYXBwZXJ9IGlzCiAqIHJldHVybmVkLCB3aGljaCB3cmFwcyB0aGUgbmF0aXZlIFBIUCBpbnRlZ2VyIGltcGxlbWVudGF0aW9uLiAgVGhlCiAqIHByb3BlciBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHRoaXMgbWV0aG9kIGlzICRsaWIgPQogKiBBdXRoX09wZW5JRF9nZXRNYXRoTGliKCkuCiAqCiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHNwZWNpZmljIGxvbmcgbnVtYmVyCiAqIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBHTVAgZm9sbG93ZWQgYnkgQkNtYXRoLgogKgogKiBAcmV0dXJuIEF1dGhfT3BlbklEX01hdGhXcmFwcGVyICRpbnN0YW5jZSBBbiBpbnN0YW5jZSBvZgogKiB7QGxpbmsgQXV0aF9PcGVuSURfTWF0aFdyYXBwZXJ9IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3NlcwogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldE1hdGhMaWIoKQp7CiAgICAvLyBUaGUgaW5zdGFuY2Ugb2YgQXV0aF9PcGVuSURfTWF0aFdyYXBwZXIgdGhhdCB3ZSBjaG9vc2UgdG8KICAgIC8vIHN1cHBseSB3aWxsIGJlIHN0b3JlZCBoZXJlLCBzbyB0aGF0IHN1YnNlcWVudCBjYWxscyB0byB0aGlzCiAgICAvLyBtZXRob2Qgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0LgogICAgc3RhdGljICRsaWIgPSBudWxsOwoKICAgIGlmIChpc3NldCgkbGliKSkgewogICAgICAgIHJldHVybiAkbGliOwogICAgfQoKICAgIGlmIChBdXRoX09wZW5JRF9ub01hdGhTdXBwb3J0KCkpIHsKICAgICAgICAkbnVsbCA9IG51bGw7CiAgICAgICAgcmV0dXJuICRudWxsOwogICAgfQoKICAgIC8vIElmIHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCBsb29rIGF0CiAgICAvLyBBdXRoX09wZW5JRF9tYXRoX2V4dGVuc2lvbnMgYW5kIHRyeSB0byBmaW5kIGFuIGV4dGVuc2lvbiB0aGF0CiAgICAvLyB3b3Jrcy4KICAgICRleHQgPSBBdXRoX09wZW5JRF9kZXRlY3RNYXRoTGlicmFyeShBdXRoX09wZW5JRF9tYXRoX2V4dGVuc2lvbnMoKSk7CiAgICBpZiAoJGV4dCA9PT0gZmFsc2UpIHsKICAgICAgICAkdHJpZWQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKEF1dGhfT3BlbklEX21hdGhfZXh0ZW5zaW9ucygpIGFzICRleHRpbmZvKSB7CiAgICAgICAgICAgICR0cmllZFtdID0gJGV4dGluZm9bJ2V4dGVuc2lvbiddOwogICAgICAgIH0KICAgICAgICAkdHJpZWRzdHIgPSBpbXBsb2RlKCIsICIsICR0cmllZCk7CgogICAgICAgIEF1dGhfT3BlbklEX3NldE5vTWF0aFN1cHBvcnQoKTsKCiAgICAgICAgJHJlc3VsdCA9IG51bGw7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLy8gSW5zdGFudGlhdGUgYSBuZXcgd3JhcHBlcgogICAgJGNsYXNzID0gJGV4dFsnY2xhc3MnXTsKICAgICRsaWIgPSBuZXcgJGNsYXNzKCk7CgogICAgcmV0dXJuICRsaWI7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX3NldE5vTWF0aFN1cHBvcnQoKQp7CiAgICBpZiAoIWRlZmluZWQoJ0F1dGhfT3BlbklEX05PX01BVEhfU1VQUE9SVCcpKSB7CiAgICAgICAgZGVmaW5lKCdBdXRoX09wZW5JRF9OT19NQVRIX1NVUFBPUlQnLCB0cnVlKTsKICAgIH0KfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfbm9NYXRoU3VwcG9ydCgpCnsKICAgIHJldHVybiBkZWZpbmVkKCdBdXRoX09wZW5JRF9OT19NQVRIX1NVUFBPUlQnKTsKfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Consumer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBkb2N1bWVudHMgdGhlIG1haW4gaW50ZXJmYWNlIHdpdGggdGhlIE9wZW5JRCBjb25zdW1lcgogKiBsaWJyYXJ5LiAgVGhlIG9ubHkgcGFydCBvZiB0aGUgbGlicmFyeSB3aGljaCBoYXMgdG8gYmUgdXNlZCBhbmQKICogaXNuJ3QgZG9jdW1lbnRlZCBpbiBmdWxsIGhlcmUgaXMgdGhlIHN0b3JlIHJlcXVpcmVkIHRvIGNyZWF0ZSBhbgogKiBBdXRoX09wZW5JRF9Db25zdW1lciBpbnN0YW5jZS4gIE1vcmUgb24gdGhlIGFic3RyYWN0IHN0b3JlIHR5cGUgYW5kCiAqIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiBpdCB0aGF0IGFyZSBwcm92aWRlZCBpbiB0aGUKICogZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEF1dGhfT3BlbklEX0NvbnN1bWVyIGNvbnN0cnVjdG9yLgogKgogKiBPVkVSVklFVwogKgogKiBUaGUgT3BlbklEIGlkZW50aXR5IHZlcmlmaWNhdGlvbiBwcm9jZXNzIG1vc3QgY29tbW9ubHkgdXNlcyB0aGUKICogZm9sbG93aW5nIHN0ZXBzLCBhcyB2aXNpYmxlIHRvIHRoZSB1c2VyIG9mIHRoaXMgbGlicmFyeToKICoKICogICAxLiBUaGUgdXNlciBlbnRlcnMgdGhlaXIgT3BlbklEIGludG8gYSBmaWVsZCBvbiB0aGUgY29uc3VtZXIncwogKiAgICAgIHNpdGUsIGFuZCBoaXRzIGEgbG9naW4gYnV0dG9uLgogKiAgIDIuIFRoZSBjb25zdW1lciBzaXRlIGRpc2NvdmVycyB0aGUgdXNlcidzIE9wZW5JRCBzZXJ2ZXIgdXNpbmcgdGhlCiAqICAgICAgWUFESVMgcHJvdG9jb2wuCiAqICAgMy4gVGhlIGNvbnN1bWVyIHNpdGUgc2VuZHMgdGhlIGJyb3dzZXIgYSByZWRpcmVjdCB0byB0aGUgaWRlbnRpdHkKICogICAgICBzZXJ2ZXIuICBUaGlzIGlzIHRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFzIGRlc2NyaWJlZCBpbgogKiAgICAgIHRoZSBPcGVuSUQgc3BlY2lmaWNhdGlvbi4KICogICA0LiBUaGUgaWRlbnRpdHkgc2VydmVyJ3Mgc2l0ZSBzZW5kcyB0aGUgYnJvd3NlciBhIHJlZGlyZWN0IGJhY2sKICogICAgICB0byB0aGUgY29uc3VtZXIgc2l0ZS4gIFRoaXMgcmVkaXJlY3QgY29udGFpbnMgdGhlIHNlcnZlcidzCiAqICAgICAgcmVzcG9uc2UgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCiAqCiAqIFRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZSBmbG93IHRvIG5vdGUgaXMgdGhlIGNvbnN1bWVyJ3Mgc2l0ZQogKiBtdXN0IGhhbmRsZSB0d28gc2VwYXJhdGUgSFRUUCByZXF1ZXN0cyBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBmdWxsCiAqIGlkZW50aXR5IGNoZWNrLgogKgogKiBMSUJSQVJZIERFU0lHTgogKiAKICogVGhpcyBjb25zdW1lciBsaWJyYXJ5IGlzIGRlc2lnbmVkIHdpdGggdGhhdCBmbG93IGluIG1pbmQuICBUaGUgZ29hbAogKiBpcyB0byBtYWtlIGl0IGFzIGVhc3kgYXMgcG9zc2libGUgdG8gcGVyZm9ybSB0aGUgYWJvdmUgc3RlcHMKICogc2VjdXJlbHkuCiAqCiAqIEF0IGEgaGlnaCBsZXZlbCwgdGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgcGFydHMgaW4gdGhlIGNvbnN1bWVyCiAqIGxpYnJhcnkuICBUaGUgZmlyc3QgaW1wb3J0YW50IHBhcnQgaXMgdGhpcyBtb2R1bGUsIHdoaWNoIGNvbnRhaW5zCiAqIHRoZSBpbnRlcmZhY2UgdG8gYWN0dWFsbHkgdXNlIHRoaXMgbGlicmFyeS4gIFRoZSBzZWNvbmQgaXMgdGhlCiAqIEF1dGhfT3BlbklEX0ludGVyZmFjZSBjbGFzcywgd2hpY2ggZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgdG8gdXNlCiAqIGlmIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIGN1c3RvbSBtZXRob2QgZm9yIHN0b3JpbmcgdGhlIHN0YXRlIHRoaXMKICogbGlicmFyeSBuZWVkcyB0byBtYWludGFpbiBiZXR3ZWVuIHJlcXVlc3RzLgogKgogKiBJbiBnZW5lcmFsLCB0aGUgc2Vjb25kIHBhcnQgaXMgbGVzcyBpbXBvcnRhbnQgZm9yIHVzZXJzIG9mIHRoZQogKiBsaWJyYXJ5IHRvIGtub3cgYWJvdXQsIGFzIHNldmVyYWwgaW1wbGVtZW50YXRpb25zIGFyZSBwcm92aWRlZAogKiB3aGljaCBjb3ZlciBhIHdpZGUgdmFyaWV0eSBvZiBzaXR1YXRpb25zIGluIHdoaWNoIGNvbnN1bWVycyBtYXkgdXNlCiAqIHRoZSBsaWJyYXJ5LgogKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyBhIGNsYXNzLCBBdXRoX09wZW5JRF9Db25zdW1lciwgd2l0aCBtZXRob2RzCiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdGlvbnMgbmVjZXNzYXJ5IGluIGVhY2ggb2Ygc3RlcHMgMiwgMywgYW5kIDQKICogZGVzY3JpYmVkIGluIHRoZSBvdmVydmlldy4gIFVzZSBvZiB0aGlzIGxpYnJhcnkgc2hvdWxkIGJlIGFzIGVhc3kKICogYXMgY3JlYXRpbmcgYW4gQXV0aF9PcGVuSURfQ29uc3VtZXIgaW5zdGFuY2UgYW5kIGNhbGxpbmcgdGhlCiAqIG1ldGhvZHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBhY3Rpb24gdGhlIHNpdGUgd2FudHMgdG8gdGFrZS4KICoKICogU1RPUkVTIEFORCBEVU1CIE1PREUKICoKICogT3BlbklEIGlzIGEgcHJvdG9jb2wgdGhhdCB3b3JrcyBiZXN0IHdoZW4gdGhlIGNvbnN1bWVyIHNpdGUgaXMgYWJsZQogKiB0byBzdG9yZSBzb21lIHN0YXRlLiAgVGhpcyBpcyB0aGUgbm9ybWFsIG1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUKICogcHJvdG9jb2wsIGFuZCBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgc21hcnQgbW9kZS4gIFRoZXJlIGlzCiAqIGFsc28gYSBmYWxsYmFjayBtb2RlLCBrbm93biBhcyBkdW1iIG1vZGUsIHdoaWNoIGlzIGF2YWlsYWJsZSB3aGVuCiAqIHRoZSBjb25zdW1lciBzaXRlIGlzIG5vdCBhYmxlIHRvIHN0b3JlIHN0YXRlLiAgVGhpcyBtb2RlIHNob3VsZCBiZQogKiBhdm9pZGVkIHdoZW4gcG9zc2libGUsIGFzIGl0IGxlYXZlcyB0aGUgaW1wbGVtZW50YXRpb24gbW9yZQogKiB2dWxuZXJhYmxlIHRvIHJlcGxheSBhdHRhY2tzLgogKgogKiBUaGUgbW9kZSB0aGUgbGlicmFyeSB3b3JrcyBpbiBmb3Igbm9ybWFsIG9wZXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5CiAqIHRoZSBzdG9yZSB0aGF0IGl0IGlzIGdpdmVuLiAgVGhlIHN0b3JlIGlzIGFuIGFic3RyYWN0aW9uIHRoYXQKICogaGFuZGxlcyB0aGUgZGF0YSB0aGF0IHRoZSBjb25zdW1lciBuZWVkcyB0byBtYW5hZ2UgYmV0d2VlbiBodHRwCiAqIHJlcXVlc3RzIGluIG9yZGVyIHRvIG9wZXJhdGUgZWZmaWNpZW50bHkgYW5kIHNlY3VyZWx5LgogKgogKiBTZXZlcmFsIHN0b3JlIGltcGxlbWVudGF0aW9uIGFyZSBwcm92aWRlZCwgYW5kIHRoZSBpbnRlcmZhY2UgaXMKICogZnVsbHkgZG9jdW1lbnRlZCBzbyB0aGF0IGN1c3RvbSBzdG9yZXMgY2FuIGJlIHVzZWQgYXMgd2VsbC4gIFNlZQogKiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEF1dGhfT3BlbklEX0NvbnN1bWVyIGNsYXNzIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uIG9uIHRoZSBpbnRlcmZhY2UgZm9yIHN0b3Jlcy4gIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdAogKiBhcmUgcHJvdmlkZWQgYWxsb3cgdGhlIGNvbnN1bWVyIHNpdGUgdG8gc3RvcmUgdGhlIG5lY2Vzc2FyeSBkYXRhIGluCiAqIHNldmVyYWwgZGlmZmVyZW50IHdheXMsIGluY2x1ZGluZyBzZXZlcmFsIFNRTCBkYXRhYmFzZXMgYW5kIG5vcm1hbAogKiBmaWxlcyBvbiBkaXNrLgogKgogKiBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIGNvbmNyZXRlIHN0b3JlIHByb3ZpZGVkIHRoYXQgcHV0cyB0aGUgc3lzdGVtCiAqIGluIGR1bWIgbW9kZS4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBhcyBpdCByZW1vdmVzIHRoZSBsaWJyYXJ5J3MKICogYWJpbGl0eSB0byBzdG9wIHJlcGxheSBhdHRhY2tzIHJlbGlhYmx5LiAgSXQgc3RpbGwgdXNlcyB0aW1lLWJhc2VkCiAqIGNoZWNraW5nIHRvIG1ha2UgcmVwbGF5IGF0dGFja3Mgb25seSBwb3NzaWJsZSB3aXRoaW4gYSBzbWFsbAogKiB3aW5kb3csIGJ1dCB0aGV5IHJlbWFpbiBwb3NzaWJsZSB3aXRoaW4gdGhhdCB3aW5kb3cuICBUaGlzIHN0b3JlCiAqIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGNvbnN1bWVyIHNpdGUgaGFzIG5vIHdheSB0byByZXRhaW4gZGF0YQogKiBiZXR3ZWVuIHJlcXVlc3RzIGF0IGFsbC4KICoKICogSU1NRURJQVRFIE1PREUKICoKICogSW4gdGhlIGZsb3cgZGVzY3JpYmVkIGFib3ZlLCB0aGUgdXNlciBtYXkgbmVlZCB0byBjb25maXJtIHRvIHRoZQogKiBsaWRlbnRpdHkgc2VydmVyIHRoYXQgaXQncyBvayB0byBhdXRob3JpemUgaGlzIG9yIGhlciBpZGVudGl0eS4KICogVGhlIHNlcnZlciBtYXkgZHJhdyBwYWdlcyBhc2tpbmcgZm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIKICogYmVmb3JlIGl0IHJlZGlyZWN0cyB0aGUgYnJvd3NlciBiYWNrIHRvIHRoZSBjb25zdW1lcidzIHNpdGUuICBUaGlzCiAqIGlzIGdlbmVyYWxseSB0cmFuc3BhcmVudCB0byB0aGUgY29uc3VtZXIgc2l0ZSwgc28gaXQgaXMgdHlwaWNhbGx5CiAqIGlnbm9yZWQgYXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgogKgogKiBUaGVyZSBjYW4gYmUgdGltZXMsIGhvd2V2ZXIsIHdoZXJlIHRoZSBjb25zdW1lciBzaXRlIHdhbnRzIHRvIGdldCBhCiAqIHJlc3BvbnNlIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgY29uc3VtZXIgY2FuIHB1dAogKiB0aGUgbGlicmFyeSBpbiBpbW1lZGlhdGUgbW9kZS4gIEluIGltbWVkaWF0ZSBtb2RlLCB0aGVyZSBpcyBhbgogKiBleHRyYSByZXNwb25zZSBwb3NzaWJsZSBmcm9tIHRoZSBzZXJ2ZXIsIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZQogKiBzZXJ2ZXIgcmVwb3J0aW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhbnN3ZXIKICogdGhlIHF1ZXN0aW9uIHlldC4KICoKICogVVNJTkcgVEhJUyBMSUJSQVJZCiAqCiAqIEludGVncmF0aW5nIHRoaXMgbGlicmFyeSBpbnRvIGFuIGFwcGxpY2F0aW9uIGlzIHVzdWFsbHkgYQogKiByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLiAgVGhlIHByb2Nlc3Mgc2hvdWxkIGJhc2ljYWxseQogKiBmb2xsb3cgdGhpcyBwbGFuOgogKgogKiBBZGQgYW4gT3BlbklEIGxvZ2luIGZpZWxkIHNvbWV3aGVyZSBvbiB5b3VyIHNpdGUuICBXaGVuIGFuIE9wZW5JRAogKiBpcyBlbnRlcmVkIGluIHRoYXQgZmllbGQgYW5kIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCwgaXQgc2hvdWxkIG1ha2UKICogYSByZXF1ZXN0IHRvIHRoZSB5b3VyIHNpdGUgd2hpY2ggaW5jbHVkZXMgdGhhdCBPcGVuSUQgVVJMLgogKgogKiBGaXJzdCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBpbnN0YW50aWF0ZSB0aGUgQXV0aF9PcGVuSURfQ29uc3VtZXIKICogY2xhc3MgdXNpbmcgdGhlIHN0b3JlIG9mIGNob2ljZSAoQXV0aF9PcGVuSURfRmlsZVN0b3JlIG9yIG9uZSBvZgogKiB0aGUgU1FMLWJhc2VkIHN0b3JlcykuICBJZiB0aGUgYXBwbGljYXRpb24gaGFzIGEgY3VzdG9tCiAqIHNlc3Npb24tbWFuYWdlbWVudCBpbXBsZW1lbnRhdGlvbiwgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKICoge0BsaW5rIEF1dGhfWWFkaXNfUEhQU2Vzc2lvbn0gaW50ZXJmYWNlIHNob3VsZCBiZSBwYXNzZWQgYXMgdGhlCiAqIHNlY29uZCBwYXJhbWV0ZXIuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHVzZXMgJF9TRVNTSU9OLgogKgogKiBOZXh0LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhlIEF1dGhfT3BlbklEX0NvbnN1bWVyIG9iamVjdCdzCiAqICdiZWdpbicgbWV0aG9kLiAgVGhpcyBtZXRob2QgdGFrZXMgdGhlIE9wZW5JRCBVUkwuICBUaGUgJ2JlZ2luJwogKiBtZXRob2QgcmV0dXJucyBhbiBBdXRoX09wZW5JRF9BdXRoUmVxdWVzdCBvYmplY3QuCiAqCiAqIE5leHQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGUgJ3JlZGlyZWN0VVJMJyBtZXRob2Qgb2YgdGhlCiAqIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0IG9iamVjdC4gIFRoZSAncmV0dXJuX3RvJyBVUkwgcGFyYW1ldGVyIGlzCiAqIHRoZSBVUkwgdGhhdCB0aGUgT3BlbklEIHNlcnZlciB3aWxsIHNlbmQgdGhlIHVzZXIgYmFjayB0byBhZnRlcgogKiBhdHRlbXB0aW5nIHRvIHZlcmlmeSBoaXMgb3IgaGVyIGlkZW50aXR5LiAgVGhlICd0cnVzdF9yb290JyBpcyB0aGUKICogVVJMIChvciBVUkwgcGF0dGVybikgdGhhdCBpZGVudGlmaWVzIHlvdXIgd2ViIHNpdGUgdG8gdGhlIHVzZXIgd2hlbgogKiBoZSBvciBzaGUgaXMgYXV0aG9yaXppbmcgaXQuICBTZW5kIGEgcmVkaXJlY3QgdG8gdGhlIHJlc3VsdGluZyBVUkwKICogdG8gdGhlIHVzZXIncyBicm93c2VyLgogKgogKiBUaGF0J3MgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuICBUaGUgc2Vjb25kCiAqIGhhbGYgb2YgdGhlIHByb2Nlc3MgaXMgZG9uZSBhZnRlciB0aGUgdXNlcidzIElEIHNlcnZlciBzZW5kcyB0aGUKICogdXNlcidzIGJyb3dzZXIgYSByZWRpcmVjdCBiYWNrIHRvIHlvdXIgc2l0ZSB0byBjb21wbGV0ZSB0aGVpcgogKiBsb2dpbi4KICoKICogV2hlbiB0aGF0IGhhcHBlbnMsIHRoZSB1c2VyIHdpbGwgY29udGFjdCB5b3VyIHNpdGUgYXQgdGhlIFVSTCBnaXZlbgogKiBhcyB0aGUgJ3JldHVybl90bycgVVJMIHRvIHRoZSBBdXRoX09wZW5JRF9BdXRoUmVxdWVzdDo6cmVkaXJlY3RVUkwKICogY2FsbCBtYWRlIGFib3ZlLiAgVGhlIHJlcXVlc3Qgd2lsbCBoYXZlIHNldmVyYWwgcXVlcnkgcGFyYW1ldGVycwogKiBhZGRlZCB0byB0aGUgVVJMIGJ5IHRoZSBpZGVudGl0eSBzZXJ2ZXIgYXMgdGhlIGluZm9ybWF0aW9uCiAqIG5lY2Vzc2FyeSB0byBmaW5pc2ggdGhlIHJlcXVlc3QuCiAqCiAqIExhc3RseSwgaW5zdGFudGlhdGUgYW4gQXV0aF9PcGVuSURfQ29uc3VtZXIgaW5zdGFuY2UgYXMgYWJvdmUgYW5kCiAqIGNhbGwgaXRzICdjb21wbGV0ZScgbWV0aG9kLCBwYXNzaW5nIGluIGFsbCB0aGUgcmVjZWl2ZWQgcXVlcnkKICogYXJndW1lbnRzLgogKgogKiBUaGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgcmV0dXJuIHR5cGVzIHBvc3NpYmxlIGZyb20gdGhhdAogKiBtZXRob2QuIFRoZXNlIGluZGljYXRlIHRoZSB3aGV0aGVyIG9yIG5vdCB0aGUgbG9naW4gd2FzIHN1Y2Nlc3NmdWwsCiAqIGFuZCBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGVpciB0eXBlLgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogUmVxdWlyZSB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbnN1bWVyLgogKi8KcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL01lc3NhZ2UucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9ITUFDLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvQXNzb2NpYXRpb24ucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9DcnlwdFV0aWwucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9EaWZmaWVIZWxsbWFuLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvS1ZGb3JtLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvTm9uY2UucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9EaXNjb3Zlci5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1VSSU5vcm0ucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL1lhZGlzL01hbmFnZXIucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL1lhZGlzL1hSSS5waHAiOwoKLyoqCiAqIFRoaXMgaXMgdGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIHdoZW4gdGhlIGNvbXBsZXRlIG1ldGhvZCByZXR1cm5zCiAqIHN1Y2Nlc3NmdWxseS4KICovCmRlZmluZSgnQXV0aF9PcGVuSURfU1VDQ0VTUycsICdzdWNjZXNzJyk7CgovKioKICogU3RhdHVzIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBvZiBPcGVuSUQgYXV0aGVudGljYXRpb24uCiAqLwpkZWZpbmUoJ0F1dGhfT3BlbklEX0NBTkNFTCcsICdjYW5jZWwnKTsKCi8qKgogKiBUaGlzIGlzIHRoZSBzdGF0dXMgY29kZSBjb21wbGV0ZUF1dGggcmV0dXJucyB3aGVuIHRoZSB2YWx1ZSBpdAogKiByZWNlaXZlZCBpbmRpY2F0ZWQgYW4gaW52YWxpZCBsb2dpbi4KICovCmRlZmluZSgnQXV0aF9PcGVuSURfRkFJTFVSRScsICdmYWlsdXJlJyk7CgovKioKICogVGhpcyBpcyB0aGUgc3RhdHVzIGNvZGUgY29tcGxldGVBdXRoIHJldHVybnMgd2hlbiB0aGUKICoge0BsaW5rIEF1dGhfT3BlbklEX0NvbnN1bWVyfSBpbnN0YW5jZSBpcyBpbiBpbW1lZGlhdGUgbW9kZSwgYW5kIHRoZQogKiBpZGVudGl0eSBzZXJ2ZXIgc2VuZHMgYmFjayBhIFVSTCB0byBzZW5kIHRoZSB1c2VyIHRvIHRvIGNvbXBsZXRlIGhpcwogKiBvciBoZXIgbG9naW4uCiAqLwpkZWZpbmUoJ0F1dGhfT3BlbklEX1NFVFVQX05FRURFRCcsICdzZXR1cCBuZWVkZWQnKTsKCi8qKgogKiBUaGlzIGlzIHRoZSBzdGF0dXMgY29kZSBiZWdpbkF1dGggcmV0dXJucyB3aGVuIHRoZSBwYWdlIGZldGNoZWQKICogZnJvbSB0aGUgZW50ZXJlZCBPcGVuSUQgVVJMIGRvZXNuJ3QgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGxpbmsgdGFncwogKiB0byBmdW5jdGlvbiBhcyBhbiBpZGVudGl0eSBwYWdlLgogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9QQVJTRV9FUlJPUicsICdwYXJzZSBlcnJvcicpOwoKLyoqCiAqIEFuIE9wZW5JRCBjb25zdW1lciBpbXBsZW1lbnRhdGlvbiB0aGF0IHBlcmZvcm1zIGRpc2NvdmVyeSBhbmQgZG9lcwogKiBzZXNzaW9uIG1hbmFnZW1lbnQuICBTZWUgdGhlIENvbnN1bWVyLnBocCBmaWxlIGRvY3VtZW50YXRpb24gZm9yCiAqIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfQ29uc3VtZXIgewoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHZhciAkZGlzY292ZXJNZXRob2QgPSAnQXV0aF9PcGVuSURfZGlzY292ZXInOwoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHZhciAkc2Vzc2lvbl9rZXlfcHJlZml4ID0gIl9vcGVuaWRfY29uc3VtZXJfIjsKCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJF90b2tlbl9zdWZmaXggPSAibGFzdF90b2tlbiI7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIGEgQ29uc3VtZXIgaW5zdGFuY2UuCiAgICAgKgogICAgICogWW91IHNob3VsZCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIENvbnN1bWVyIG9iamVjdCB3aXRoCiAgICAgKiBldmVyeSBIVFRQIHJlcXVlc3QgdGhhdCBoYW5kbGVzIE9wZW5JRCB0cmFuc2FjdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlICRzdG9yZSBUaGlzIG11c3QgYmUgYW4gb2JqZWN0CiAgICAgKiB0aGF0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZSBpbiB7QGxpbmsKICAgICAqIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlfS4gIFNldmVyYWwgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIGFyZQogICAgICogcHJvdmlkZWQsIHRvIGNvdmVyIG1vc3QgY29tbW9uIHVzZSBjYXNlcy4gIEZvciBzdG9yZXMgYmFja2VkIGJ5CiAgICAgKiBNeVNRTCwgUG9zdGdyZVNRTCwgb3IgU1FMaXRlLCBzZWUgdGhlIHtAbGluawogICAgICogQXV0aF9PcGVuSURfU1FMU3RvcmV9IGNsYXNzIGFuZCBpdHMgc3VibGNhc3Nlcy4gIEZvciBhCiAgICAgKiBmaWxlc3lzdGVtLWJhY2tlZCBzdG9yZSwgc2VlIHRoZSB7QGxpbmsgQXV0aF9PcGVuSURfRmlsZVN0b3JlfQogICAgICogbW9kdWxlLiAgQXMgYSBsYXN0IHJlc29ydCwgaWYgaXQgaXNuJ3QgcG9zc2libGUgZm9yIHRoZSBzZXJ2ZXIKICAgICAqIHRvIHN0b3JlIHN0YXRlIGF0IGFsbCwgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rCiAgICAgKiBBdXRoX09wZW5JRF9EdW1iU3RvcmV9IGNhbiBiZSB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc2Vzc2lvbiBBbiBvYmplY3Qgd2hpY2ggaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlCiAgICAgKiBvZiB0aGUge0BsaW5rIEF1dGhfWWFkaXNfUEhQU2Vzc2lvbn0gY2xhc3MuICBQYXJ0aWN1bGFybHksIHRoaXMKICAgICAqIG9iamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIHRoZXNlIG1ldGhvZHM6IGdldCgka2V5KSwgc2V0KCRrZXkpLAogICAgICogJHZhbHVlKSwgYW5kIGRlbCgka2V5KS4gIFRoaXMgZGVmYXVsdHMgdG8gYSBzZXNzaW9uIG9iamVjdAogICAgICogd2hpY2ggd3JhcHMgUEhQJ3MgbmF0aXZlIHNlc3Npb24gbWFjaGluZXJ5LiAgWW91IHNob3VsZCBvbmx5CiAgICAgKiBuZWVkIHRvIHBhc3Mgc29tZXRoaW5nIGhlcmUgaWYgeW91IGhhdmUgeW91ciBvd24gc2Vzc2lvbmluZwogICAgICogaW1wbGVtZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0ciAkY29uc3VtZXJfY2xzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZQogICAgICogd2hlbiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgY29uc3VtZXIgb2JqZWN0LiAgVGhpcyBpcyB1c2VkIGZvcgogICAgICogdGVzdGluZy4KICAgICAqLwogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQ29uc3VtZXIoJHN0b3JlLCAkc2Vzc2lvbiA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uc3VtZXJfY2xzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHNlc3Npb24gPT09IG51bGwpIHsKICAgICAgICAgICAgJHNlc3Npb24gPSBuZXcgQXV0aF9ZYWRpc19QSFBTZXNzaW9uKCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vzc2lvbiA9ICRzZXNzaW9uOwoKICAgICAgICBpZiAoJGNvbnN1bWVyX2NscyAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+Y29uc3VtZXIgPSBuZXcgJGNvbnN1bWVyX2Nscygkc3RvcmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jb25zdW1lciA9IG5ldyBBdXRoX09wZW5JRF9HZW5lcmljQ29uc3VtZXIoJHN0b3JlKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5fdG9rZW5fa2V5ID0gJHRoaXMtPnNlc3Npb25fa2V5X3ByZWZpeCAuICR0aGlzLT5fdG9rZW5fc3VmZml4OwogICAgfQoKICAgIC8qKgogICAgICogVXNlZCBpbiB0ZXN0aW5nIHRvIGRlZmluZSB0aGUgZGlzY292ZXJ5IG1lY2hhbmlzbS4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RGlzY292ZXJ5T2JqZWN0KCRzZXNzaW9uLCAkb3BlbmlkX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vzc2lvbl9rZXlfcHJlZml4KQogICAgewogICAgICAgIHJldHVybiBuZXcgQXV0aF9ZYWRpc19EaXNjb3ZlcnkoJHNlc3Npb24sICRvcGVuaWRfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlc3Npb25fa2V5X3ByZWZpeCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCB0aGUgT3BlbklEIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuIFNlZSBzdGVwcyAxLTIgaW4gdGhlCiAgICAgKiBvdmVydmlldyBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyX3VybCBJZGVudGl0eSBVUkwgZ2l2ZW4gYnkgdGhlIHVzZXIuIFRoaXMKICAgICAqIG1ldGhvZCBwZXJmb3JtcyBhIHRleHR1YWwgdHJhbnNmb3JtYXRpb24gb2YgdGhlIFVSTCB0byB0cnkgYW5kCiAgICAgKiBtYWtlIHN1cmUgaXQgaXMgbm9ybWFsaXplZC4gRm9yIGV4YW1wbGUsIGEgdXNlcl91cmwgb2YKICAgICAqIGV4YW1wbGUuY29tIHdpbGwgYmUgbm9ybWFsaXplZCB0byBodHRwOi8vZXhhbXBsZS5jb20vCiAgICAgKiBub3JtYWxpemluZyBhbmQgcmVzb2x2aW5nIGFueSByZWRpcmVjdHMgdGhlIHNlcnZlciBtaWdodCBpc3N1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYW5vbnltb3VzIFRydWUgaWYgdGhlIE9wZW5JRCByZXF1ZXN0IGlzIHRvIGJlIHNlbnQKICAgICAqIHRvIHRoZSBzZXJ2ZXIgd2l0aG91dCBhbnkgaWRlbnRpZmllciBpbmZvcm1hdGlvbi4gIFVzZSB0aGlzCiAgICAgKiB3aGVuIHlvdSB3YW50IHRvIHRyYW5zcG9ydCBkYXRhIGJ1dCBkb24ndCB3YW50IHRvIGRvIE9wZW5JRAogICAgICogYXV0aGVudGljYXRpb24gd2l0aCBpZGVudGlmaWVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0ICRhdXRoX3JlcXVlc3QgQW4gb2JqZWN0CiAgICAgKiBjb250YWluaW5nIHRoZSBkaXNjb3ZlcmVkIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQsIHdpdGggYQogICAgICogbWV0aG9kIGZvciBidWlsZGluZyBhIHJlZGlyZWN0IFVSTCB0byB0aGUgc2VydmVyLCBhcyBkZXNjcmliZWQKICAgICAqIGluIHN0ZXAgMyBvZiB0aGUgb3ZlcnZpZXcuIFRoaXMgb2JqZWN0IG1heSBhbHNvIGJlIHVzZWQgdG8gYWRkCiAgICAgKiBleHRlbnNpb24gYXJndW1lbnRzIHRvIHRoZSByZXF1ZXN0LCB1c2luZyBpdHMgJ2FkZEV4dGVuc2lvbkFyZycKICAgICAqIG1ldGhvZC4KICAgICAqLwogICAgZnVuY3Rpb24gYmVnaW4oJHVzZXJfdXJsLCAkYW5vbnltb3VzPWZhbHNlKQogICAgewogICAgICAgICRvcGVuaWRfdXJsID0gJHVzZXJfdXJsOwoKICAgICAgICAkZGlzY28gPSAkdGhpcy0+Z2V0RGlzY292ZXJ5T2JqZWN0KCR0aGlzLT5zZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wZW5pZF91cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbl9rZXlfcHJlZml4KTsKCiAgICAgICAgLy8gU2V0IHRoZSAnc3RhbGUnIGF0dHJpYnV0ZSBvZiB0aGUgbWFuYWdlci4gIElmIGRpc2NvdmVyeQogICAgICAgIC8vIGZhaWxzIGluIGEgZmF0YWwgd2F5LCB0aGUgc3RhbGUgZmxhZyB3aWxsIGNhdXNlIHRoZSBtYW5hZ2VyCiAgICAgICAgLy8gdG8gYmUgY2xlYW5lZCB1cCBuZXh0IHRpbWUgZGlzY292ZXJ5IGlzIGF0dGVtcHRlZC4KCiAgICAgICAgJG0gPSAkZGlzY28tPmdldE1hbmFnZXIoKTsKICAgICAgICAkbG9hZGVyID0gbmV3IEF1dGhfWWFkaXNfTWFuYWdlckxvYWRlcigpOwoKICAgICAgICBpZiAoJG0pIHsKICAgICAgICAgICAgaWYgKCRtLT5zdGFsZSkgewogICAgICAgICAgICAgICAgJGRpc2NvLT5kZXN0cm95TWFuYWdlcigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG0tPnN0YWxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICRkaXNjby0+c2Vzc2lvbi0+c2V0KCRkaXNjby0+c2Vzc2lvbl9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUoJGxvYWRlci0+dG9TZXNzaW9uKCRtKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkZW5kcG9pbnQgPSAkZGlzY28tPmdldE5leHRTZXJ2aWNlKCR0aGlzLT5kaXNjb3Zlck1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb25zdW1lci0+ZmV0Y2hlcik7CgogICAgICAgIC8vIFJlc2V0IHRoZSAnc3RhbGUnIGF0dHJpYnV0ZSBvZiB0aGUgbWFuYWdlci4KICAgICAgICAkbSA9ICRkaXNjby0+Z2V0TWFuYWdlcigpOwogICAgICAgIGlmICgkbSkgewogICAgICAgICAgICAkbS0+c3RhbGUgPSBmYWxzZTsKICAgICAgICAgICAgJGRpc2NvLT5zZXNzaW9uLT5zZXQoJGRpc2NvLT5zZXNzaW9uX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKCRsb2FkZXItPnRvU2Vzc2lvbigkbSkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZW5kcG9pbnQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5iZWdpbldpdGhvdXREaXNjb3ZlcnkoJGVuZHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYW5vbnltb3VzKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCBPcGVuSUQgdmVyaWZpY2F0aW9uIHdpdGhvdXQgZG9pbmcgT3BlbklEIHNlcnZlcgogICAgICogZGlzY292ZXJ5LiBUaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYnkgQ29uc3VtZXIuYmVnaW4KICAgICAqIGFmdGVyIGRpc2NvdmVyeSBpcyBwZXJmb3JtZWQsIGFuZCBleGlzdHMgdG8gcHJvdmlkZSBhbgogICAgICogaW50ZXJmYWNlIGZvciBsaWJyYXJ5IHVzZXJzIG5lZWRpbmcgdG8gcGVyZm9ybSB0aGVpciBvd24KICAgICAqIGRpc2NvdmVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50ICRlbmRwb2ludCBhbiBPcGVuSUQgc2VydmljZQogICAgICogZW5kcG9pbnQgZGVzY3JpcHRvci4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCBhbm9ueW1vdXMgU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gcGVyZm9ybSBPcGVuSUQKICAgICAqIHdpdGhvdXQgaWRlbnRpZmllcnMuCiAgICAgKgogICAgICogQHJldHVybiBBdXRoX09wZW5JRF9BdXRoUmVxdWVzdCAkYXV0aF9yZXF1ZXN0IEFuIE9wZW5JRAogICAgICogYXV0aGVudGljYXRpb24gcmVxdWVzdCBvYmplY3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGJlZ2luV2l0aG91dERpc2NvdmVyeSgkZW5kcG9pbnQsICRhbm9ueW1vdXM9ZmFsc2UpCiAgICB7CiAgICAgICAgJGxvYWRlciA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnRMb2FkZXIoKTsKICAgICAgICAkYXV0aF9yZXEgPSAkdGhpcy0+Y29uc3VtZXItPmJlZ2luKCRlbmRwb2ludCk7CiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldCgkdGhpcy0+X3Rva2VuX2tleSwKICAgICAgICAgICAgICAkbG9hZGVyLT50b1Nlc3Npb24oJGF1dGhfcmVxLT5lbmRwb2ludCkpOwogICAgICAgIGlmICghJGF1dGhfcmVxLT5zZXRBbm9ueW1vdXMoJGFub255bW91cykpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UobnVsbCwKICAgICAgICAgICAgICAiT3BlbklEIDEgcmVxdWVzdHMgTVVTVCBpbmNsdWRlIHRoZSBpZGVudGlmaWVyICIgLgogICAgICAgICAgICAgICJpbiB0aGUgcmVxdWVzdC4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRhdXRoX3JlcTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGxlZCB0byBpbnRlcnByZXQgdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGFuIE9wZW5JRAogICAgICogcmVxdWVzdC4gSXQgaXMgY2FsbGVkIGluIHN0ZXAgNCBvZiB0aGUgZmxvdyBkZXNjcmliZWQgaW4gdGhlCiAgICAgKiBjb25zdW1lciBvdmVydmlldy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjdXJyZW50X3VybCBUaGUgVVJMIHVzZWQgdG8gaW52b2tlIHRoZSBhcHBsaWNhdGlvbi4KICAgICAqIEV4dHJhY3QgdGhlIFVSTCBmcm9tIHlvdXIgYXBwbGljYXRpb24ncyB3ZWIKICAgICAqIHJlcXVlc3QgZnJhbWV3b3JrIGFuZCBzcGVjaWZ5IGl0IGhlcmUgdG8gaGF2ZSBpdCBjaGVja2VkCiAgICAgKiBhZ2FpbnN0IHRoZSBvcGVuaWQuY3VycmVudF91cmwgdmFsdWUgaW4gdGhlIHJlc3BvbnNlLiAgSWYKICAgICAqIHRoZSBjdXJyZW50X3VybCBVUkwgY2hlY2sgZmFpbHMsIHRoZSBzdGF0dXMgb2YgdGhlCiAgICAgKiBjb21wbGV0aW9uIHdpbGwgYmUgRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5IEFuIGFycmF5IG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIChrZXkgPT4KICAgICAqIHZhbHVlIHBhaXJzKSBmb3IgdGhpcyBIVFRQIHJlcXVlc3QuICBEZWZhdWx0cyB0byBudWxsLiAgSWYKICAgICAqIG51bGwsIHRoZSBHRVQgb3IgUE9TVCBkYXRhIGFyZSBhdXRvbWF0aWNhbGx5IGdvdHRlbiBmcm9tIHRoZQogICAgICogUEhQIGVudmlyb25tZW50LiAgSXQgaXMgb25seSB1c2VmdWwgdG8gb3ZlcnJpZGUgJHF1ZXJ5IGZvcgogICAgICogdGVzdGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgJHJlc3BvbnNlIEEgaW5zdGFuY2Ugb2YgYW4KICAgICAqIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2Ugc3ViY2xhc3MuIFRoZSB0eXBlIG9mIHJlc3BvbnNlIGlzCiAgICAgKiBpbmRpY2F0ZWQgYnkgdGhlIHN0YXR1cyBhdHRyaWJ1dGUsIHdoaWNoIHdpbGwgYmUgb25lIG9mCiAgICAgKiBTVUNDRVNTLCBDQU5DRUwsIEZBSUxVUkUsIG9yIFNFVFVQX05FRURFRC4KICAgICAqLwogICAgZnVuY3Rpb24gY29tcGxldGUoJGN1cnJlbnRfdXJsLCAkcXVlcnk9bnVsbCkKICAgIHsKICAgICAgICBpZiAoJGN1cnJlbnRfdXJsICYmICFpc19zdHJpbmcoJGN1cnJlbnRfdXJsKSkgewogICAgICAgICAgICAvLyBUaGlzIGlzIHVnbHksIGJ1dCB3ZSBuZWVkIHRvIGNvbXBsYWluIGxvdWRseSB3aGVuCiAgICAgICAgICAgIC8vIHNvbWVvbmUgdXNlcyB0aGUgQVBJIGluY29ycmVjdGx5LgogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJjdXJyZW50X3VybCBtdXN0IGJlIGEgc3RyaW5nOyBzZWUgTkVXUyBmaWxlICIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgdXBncmFkaW5nIG5vdGVzLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRV9VU0VSX0VSUk9SKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcXVlcnkgPT09IG51bGwpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gQXV0aF9PcGVuSUQ6OmdldFF1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICAkbG9hZGVyID0gbmV3IEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludExvYWRlcigpOwogICAgICAgICRlbmRwb2ludF9kYXRhID0gJHRoaXMtPnNlc3Npb24tPmdldCgkdGhpcy0+X3Rva2VuX2tleSk7CiAgICAgICAgJGVuZHBvaW50ID0KICAgICAgICAgICAgJGxvYWRlci0+ZnJvbVNlc3Npb24oJGVuZHBvaW50X2RhdGEpOwoKICAgICAgICAkbWVzc2FnZSA9IEF1dGhfT3BlbklEX01lc3NhZ2U6OmZyb21Qb3N0QXJncygkcXVlcnkpOwogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jb25zdW1lci0+Y29tcGxldGUoJG1lc3NhZ2UsICRlbmRwb2ludCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF91cmwpOwogICAgICAgICR0aGlzLT5zZXNzaW9uLT5kZWwoJHRoaXMtPl90b2tlbl9rZXkpOwoKICAgICAgICBpZiAoaW5fYXJyYXkoJHJlc3BvbnNlLT5zdGF0dXMsIGFycmF5KEF1dGhfT3BlbklEX1NVQ0NFU1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9DQU5DRUwpKSkgewogICAgICAgICAgICBpZiAoJHJlc3BvbnNlLT5pZGVudGl0eV91cmwgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRkaXNjbyA9ICR0aGlzLT5nZXREaXNjb3ZlcnlPYmplY3QoJHRoaXMtPnNlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZS0+aWRlbnRpdHlfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbl9rZXlfcHJlZml4KTsKICAgICAgICAgICAgICAgICRkaXNjby0+Y2xlYW51cCh0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KfQoKLyoqCiAqIEEgY2xhc3MgaW1wbGVtZW50aW5nIEhNQUMvREgtU0hBMSBjb25zdW1lciBzZXNzaW9ucy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMUNvbnN1bWVyU2Vzc2lvbiB7CiAgICB2YXIgJHNlc3Npb25fdHlwZSA9ICdESC1TSEExJzsKICAgIHZhciAkaGFzaF9mdW5jID0gJ0F1dGhfT3BlbklEX1NIQTEnOwogICAgdmFyICRzZWNyZXRfc2l6ZSA9IDIwOwogICAgdmFyICRhbGxvd2VkX2Fzc29jX3R5cGVzID0gYXJyYXkoJ0hNQUMtU0hBMScpOwoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0RpZmZpZUhlbGxtYW5TSEExQ29uc3VtZXJTZXNzaW9uKCRkaCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRkaCA9PT0gbnVsbCkgewogICAgICAgICAgICAkZGggPSBuZXcgQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hbigpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRoID0gJGRoOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJlcXVlc3QoKQogICAgewogICAgICAgICRtYXRoID0gQXV0aF9PcGVuSURfZ2V0TWF0aExpYigpOwoKICAgICAgICAkY3B1YiA9ICRtYXRoLT5sb25nVG9CYXNlNjQoJHRoaXMtPmRoLT5wdWJsaWMpOwoKICAgICAgICAkYXJncyA9IGFycmF5KCdkaF9jb25zdW1lcl9wdWJsaWMnID0+ICRjcHViKTsKCiAgICAgICAgaWYgKCEkdGhpcy0+ZGgtPnVzaW5nRGVmYXVsdFZhbHVlcygpKSB7CiAgICAgICAgICAgICRhcmdzID0gYXJyYXlfbWVyZ2UoJGFyZ3MsIGFycmF5KAogICAgICAgICAgICAgICAgJ2RoX21vZHVsdXMnID0+CiAgICAgICAgICAgICAgICAgICAgICRtYXRoLT5sb25nVG9CYXNlNjQoJHRoaXMtPmRoLT5tb2QpLAogICAgICAgICAgICAgICAgJ2RoX2dlbicgPT4KICAgICAgICAgICAgICAgICAgICAgJG1hdGgtPmxvbmdUb0Jhc2U2NCgkdGhpcy0+ZGgtPmdlbikpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXJnczsKICAgIH0KCiAgICBmdW5jdGlvbiBleHRyYWN0U2VjcmV0KCRyZXNwb25zZSkKICAgIHsKICAgICAgICBpZiAoISRyZXNwb25zZS0+aGFzS2V5KEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaF9zZXJ2ZXJfcHVibGljJykpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRyZXNwb25zZS0+aGFzS2V5KEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmNfbWFjX2tleScpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJG1hdGggPSBBdXRoX09wZW5JRF9nZXRNYXRoTGliKCk7CgogICAgICAgICRzcHViID0gJG1hdGgtPmJhc2U2NFRvTG9uZygkcmVzcG9uc2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaF9zZXJ2ZXJfcHVibGljJykpOwogICAgICAgICRlbmNfbWFjX2tleSA9IGJhc2U2NF9kZWNvZGUoJHJlc3BvbnNlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuY19tYWNfa2V5JykpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmRoLT54b3JTZWNyZXQoJHNwdWIsICRlbmNfbWFjX2tleSwgJHRoaXMtPmhhc2hfZnVuYyk7CiAgICB9Cn0KCi8qKgogKiBBIGNsYXNzIGltcGxlbWVudGluZyBITUFDL0RILVNIQTI1NiBjb25zdW1lciBzZXNzaW9ucy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMjU2Q29uc3VtZXJTZXNzaW9uIGV4dGVuZHMKICAgICAgQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hblNIQTFDb25zdW1lclNlc3Npb24gewogICAgdmFyICRzZXNzaW9uX3R5cGUgPSAnREgtU0hBMjU2JzsKICAgIHZhciAkaGFzaF9mdW5jID0gJ0F1dGhfT3BlbklEX1NIQTI1Nic7CiAgICB2YXIgJHNlY3JldF9zaXplID0gMzI7CiAgICB2YXIgJGFsbG93ZWRfYXNzb2NfdHlwZXMgPSBhcnJheSgnSE1BQy1TSEEyNTYnKTsKfQoKLyoqCiAqIEEgY2xhc3MgaW1wbGVtZW50aW5nIHBsYWludGV4dCBjb25zdW1lciBzZXNzaW9ucy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9QbGFpblRleHRDb25zdW1lclNlc3Npb24gewogICAgdmFyICRzZXNzaW9uX3R5cGUgPSAnbm8tZW5jcnlwdGlvbic7CiAgICB2YXIgJGFsbG93ZWRfYXNzb2NfdHlwZXMgPSAgYXJyYXkoJ0hNQUMtU0hBMScsICdITUFDLVNIQTI1NicpOwoKICAgIGZ1bmN0aW9uIGdldFJlcXVlc3QoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4dHJhY3RTZWNyZXQoJHJlc3BvbnNlKQogICAgewogICAgICAgIGlmICghJHJlc3BvbnNlLT5oYXNLZXkoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnbWFjX2tleScpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJHJlc3BvbnNlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWNfa2V5JykpOwogICAgfQp9CgovKioKICogUmV0dXJucyBhdmFpbGFibGUgc2Vzc2lvbiB0eXBlcy4KICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldEF2YWlsYWJsZVNlc3Npb25UeXBlcygpCnsKICAgICR0eXBlcyA9IGFycmF5KAogICAgICAnbm8tZW5jcnlwdGlvbicgPT4gJ0F1dGhfT3BlbklEX1BsYWluVGV4dENvbnN1bWVyU2Vzc2lvbicsCiAgICAgICdESC1TSEExJyA9PiAnQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hblNIQTFDb25zdW1lclNlc3Npb24nLAogICAgICAnREgtU0hBMjU2JyA9PiAnQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hblNIQTI1NkNvbnN1bWVyU2Vzc2lvbicpOwoKICAgIHJldHVybiAkdHlwZXM7Cn0KCi8qKgogKiBUaGlzIGNsYXNzIGlzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIE9wZW5JRCBjb25zdW1lciBsb2dpYy4KICogSW5zdGFuY2VzIG9mIGl0IG1haW50YWluIG5vIHBlci1yZXF1ZXN0IHN0YXRlLCBzbyB0aGV5IGNhbiBiZQogKiByZXVzZWQgKG9yIGV2ZW4gdXNlZCBieSBtdWx0aXBsZSB0aHJlYWRzIGNvbmN1cnJlbnRseSkgYXMgbmVlZGVkLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0dlbmVyaWNDb25zdW1lciB7CiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJGRpc2NvdmVyTWV0aG9kID0gJ0F1dGhfT3BlbklEX2Rpc2NvdmVyJzsKCiAgICAvKioKICAgICAqIFRoaXMgY29uc3VtZXIncyBzdG9yZSBvYmplY3QuCiAgICAgKi8KICAgIHZhciAkc3RvcmU7CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgdmFyICRfdXNlX2Fzc29jczsKCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJG9wZW5pZDFfbm9uY2VfcXVlcnlfYXJnX25hbWUgPSAnamFucmFpbl9ub25jZSc7CgogICAgLyoqCiAgICAgKiBBbm90aGVyIHF1ZXJ5IHBhcmFtZXRlciB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIHJldHVybl90byBmb3IKICAgICAqIE9wZW5JRCAxOyBpZiB0aGUgdXNlcidzIHNlc3Npb24gc3RhdGUgaXMgbG9zdCwgdXNlIHRoaXMgY2xhaW1lZAogICAgICogaWRlbnRpZmllciB0byBkbyBkaXNjb3Zlcnkgd2hlbiB2ZXJpZnlpbmcgdGhlIHJlc3BvbnNlLgogICAgICovCiAgICB2YXIgJG9wZW5pZDFfcmV0dXJuX3RvX2lkZW50aWZpZXJfbmFtZSA9ICdvcGVuaWQxX2NsYWltZWRfaWQnOwoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgYSBuZXcge0BsaW5rIEF1dGhfT3BlbklEX0NvbnN1bWVyfQogICAgICogaW5zdGFuY2UgdG8gYWNjZXNzIHRoZSBsaWJyYXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBBdXRoX09wZW5JRF9PcGVuSURTdG9yZSAkc3RvcmUgVGhpcyBtdXN0IGJlIGFuIG9iamVjdAogICAgICogdGhhdCBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2UgaW4ge0BsaW5rIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlfS4KICAgICAqIFNldmVyYWwgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIGFyZSBwcm92aWRlZCwgdG8gY292ZXIgbW9zdCBjb21tb24gdXNlCiAgICAgKiBjYXNlcy4gIEZvciBzdG9yZXMgYmFja2VkIGJ5IE15U1FMLCBQb3N0Z3JlU1FMLCBvciBTUUxpdGUsIHNlZQogICAgICogdGhlIHtAbGluayBBdXRoX09wZW5JRF9TUUxTdG9yZX0gY2xhc3MgYW5kIGl0cyBzdWJsY2Fzc2VzLiAgRm9yIGEKICAgICAqIGZpbGVzeXN0ZW0tYmFja2VkIHN0b3JlLCBzZWUgdGhlIHtAbGluayBBdXRoX09wZW5JRF9GaWxlU3RvcmV9IG1vZHVsZS4KICAgICAqIEFzIGEgbGFzdCByZXNvcnQsIGlmIGl0IGlzbid0IHBvc3NpYmxlIGZvciB0aGUgc2VydmVyIHRvIHN0b3JlCiAgICAgKiBzdGF0ZSBhdCBhbGwsIGFuIGluc3RhbmNlIG9mIHtAbGluayBBdXRoX09wZW5JRF9EdW1iU3RvcmV9IGNhbiBiZSB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRpbW1lZGlhdGUgVGhpcyBpcyBhbiBvcHRpb25hbCBib29sZWFuIHZhbHVlLiAgSXQKICAgICAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGxpYnJhcnkgdXNlcyBpbW1lZGlhdGUgbW9kZSwgYXMgZXhwbGFpbmVkCiAgICAgKiBpbiB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgRmFsc2UsIHdoaWNoCiAgICAgKiBkaXNhYmxlcyBpbW1lZGlhdGUgbW9kZS4KICAgICAqLwogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfR2VuZXJpY0NvbnN1bWVyKCRzdG9yZSkKICAgIHsKICAgICAgICAkdGhpcy0+c3RvcmUgPSAkc3RvcmU7CiAgICAgICAgJHRoaXMtPm5lZ290aWF0b3IgPSBBdXRoX09wZW5JRF9nZXREZWZhdWx0TmVnb3RpYXRvcigpOwogICAgICAgICR0aGlzLT5fdXNlX2Fzc29jcyA9IChpc19udWxsKCR0aGlzLT5zdG9yZSkgPyBmYWxzZSA6IHRydWUpOwoKICAgICAgICAkdGhpcy0+ZmV0Y2hlciA9IEF1dGhfWWFkaXNfWWFkaXM6OmdldEhUVFBGZXRjaGVyKCk7CgogICAgICAgICR0aGlzLT5zZXNzaW9uX3R5cGVzID0gQXV0aF9PcGVuSURfZ2V0QXZhaWxhYmxlU2Vzc2lvblR5cGVzKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsZWQgdG8gYmVnaW4gT3BlbklEIGF1dGhlbnRpY2F0aW9uIHVzaW5nIHRoZSBzcGVjaWZpZWQKICAgICAqIHtAbGluayBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnR9LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBiZWdpbigkc2VydmljZV9lbmRwb2ludCkKICAgIHsKICAgICAgICAkYXNzb2MgPSAkdGhpcy0+X2dldEFzc29jaWF0aW9uKCRzZXJ2aWNlX2VuZHBvaW50KTsKICAgICAgICAkciA9IG5ldyBBdXRoX09wZW5JRF9BdXRoUmVxdWVzdCgkc2VydmljZV9lbmRwb2ludCwgJGFzc29jKTsKICAgICAgICAkci0+cmV0dXJuX3RvX2FyZ3NbJHRoaXMtPm9wZW5pZDFfbm9uY2VfcXVlcnlfYXJnX25hbWVdID0KICAgICAgICAgICAgQXV0aF9PcGVuSURfbWtOb25jZSgpOwoKICAgICAgICBpZiAoJHItPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgICRyLT5yZXR1cm5fdG9fYXJnc1skdGhpcy0+b3BlbmlkMV9yZXR1cm5fdG9faWRlbnRpZmllcl9uYW1lXSA9CiAgICAgICAgICAgICAgICAkci0+ZW5kcG9pbnQtPmNsYWltZWRfaWQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiB7QGxpbmsgQXV0aF9PcGVuSURfTWVzc2FnZX0sIHtAbGluawogICAgICogQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50fSBhbmQgb3B0aW9uYWwgcmV0dXJuX3RvIFVSTCwKICAgICAqIGNvbXBsZXRlIE9wZW5JRCBhdXRoZW50aWNhdGlvbi4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gY29tcGxldGUoJG1lc3NhZ2UsICRlbmRwb2ludCwgJHJldHVybl90bykKICAgIHsKICAgICAgICAkbW9kZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnbW9kZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bm8gbW9kZSBzZXQ+Jyk7CgogICAgICAgICRtb2RlX21ldGhvZHMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbmNlbCcgPT4gJ19jb21wbGV0ZV9jYW5jZWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+ICdfY29tcGxldGVfZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXBfbmVlZGVkJyA9PiAnX2NvbXBsZXRlX3NldHVwX25lZWRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9yZXMnID0+ICdfY29tcGxldGVfaWRfcmVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgJG1ldGhvZCA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkbW9kZV9tZXRob2RzLCAkbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfY29tcGxldGVJbnZhbGlkJyk7CgogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJG1ldGhvZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRtZXNzYWdlLCAmJGVuZHBvaW50LCAkcmV0dXJuX3RvKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2NvbXBsZXRlSW52YWxpZCgkbWVzc2FnZSwgJGVuZHBvaW50LCAkdW51c2VkKQogICAgewogICAgICAgICRtb2RlID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdtb2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxObyBtb2RlIHNldD4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UoJGVuZHBvaW50LAogICAgICAgICAgICAgICAgICAgIHNwcmludGYoIkludmFsaWQgb3BlbmlkLm1vZGUgJyVzJyIsICRtb2RlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2NvbXBsZXRlX2NhbmNlbCgkbWVzc2FnZSwgJGVuZHBvaW50LCAkdW51c2VkKQogICAgewogICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQ2FuY2VsUmVzcG9uc2UoJGVuZHBvaW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfY29tcGxldGVfZXJyb3IoJG1lc3NhZ2UsICRlbmRwb2ludCwgJHVudXNlZCkKICAgIHsKICAgICAgICAkZXJyb3IgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2Vycm9yJyk7CiAgICAgICAgJGNvbnRhY3QgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2NvbnRhY3QnKTsKICAgICAgICAkcmVmZXJlbmNlID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdyZWZlcmVuY2UnKTsKCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UoJGVuZHBvaW50LCAkZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhY3QsICRyZWZlcmVuY2UpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jb21wbGV0ZV9zZXR1cF9uZWVkZWQoJG1lc3NhZ2UsICRlbmRwb2ludCwgJHVudXNlZCkKICAgIHsKICAgICAgICBpZiAoISRtZXNzYWdlLT5pc09wZW5JRDIoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9jb21wbGV0ZUludmFsaWQoJG1lc3NhZ2UsICRlbmRwb2ludCk7CiAgICAgICAgfQoKICAgICAgICAkdXNlcl9zZXR1cF91cmwgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRDJfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9zZXR1cF91cmwnKTsKICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NldHVwTmVlZGVkUmVzcG9uc2UoJGVuZHBvaW50LCAkdXNlcl9zZXR1cF91cmwpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jb21wbGV0ZV9pZF9yZXMoJG1lc3NhZ2UsICRlbmRwb2ludCwgJHJldHVybl90bykKICAgIHsKICAgICAgICAkdXNlcl9zZXR1cF91cmwgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRDFfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9zZXR1cF91cmwnKTsKCiAgICAgICAgaWYgKCR0aGlzLT5fY2hlY2tTZXR1cE5lZWRlZCgkbWVzc2FnZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXR1cE5lZWRlZFJlc3BvbnNlKAogICAgICAgICAgICAgICAgJGVuZHBvaW50LCAkdXNlcl9zZXR1cF91cmwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RvSWRSZXMoJG1lc3NhZ2UsICRlbmRwb2ludCwgJHJldHVybl90byk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jaGVja1NldHVwTmVlZGVkKCRtZXNzYWdlKQogICAgewogICAgICAgIC8vIEluIE9wZW5JRCAxLCB3ZSBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIGNhbmNlbCBmcm9tCiAgICAgICAgLy8gaW1tZWRpYXRlIG1vZGUgYnkgdGhlIHByZXNlbmNlIG9mIHRoZSB1c2VyX3NldHVwX3VybAogICAgICAgIC8vIHBhcmFtZXRlci4KICAgICAgICBpZiAoJG1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgICR1c2VyX3NldHVwX3VybCA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEMV9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9zZXR1cF91cmwnKTsKICAgICAgICAgICAgaWYgKCR1c2VyX3NldHVwX3VybCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZG9JZFJlcygkbWVzc2FnZSwgJGVuZHBvaW50LCAkcmV0dXJuX3RvKQogICAgewogICAgICAgIC8vIENoZWNrcyBmb3IgcHJlc2VuY2Ugb2YgYXBwcm9wcmlhdGUgZmllbGRzIChhbmQgY2hlY2tzCiAgICAgICAgLy8gc2lnbmVkIGxpc3QgZmllbGRzKQogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+X2lkUmVzQ2hlY2tGb3JGaWVsZHMoJG1lc3NhZ2UpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPl9jaGVja1JldHVyblRvKCRtZXNzYWdlLCAkcmV0dXJuX3RvKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICBzcHJpbnRmKCJyZXR1cm5fdG8gZG9lcyBub3QgbWF0Y2ggcmV0dXJuIFVSTC4gRXhwZWN0ZWQgJXMsIGdvdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgJHJldHVybl90bywKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3JldHVybl90bycpKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBWZXJpZnkgZGlzY292ZXJ5IGluZm9ybWF0aW9uOgogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+X3ZlcmlmeURpc2NvdmVyeVJlc3VsdHMoJG1lc3NhZ2UsICRlbmRwb2ludCk7CgogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJGVuZHBvaW50ID0gJHJlc3VsdDsKCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faWRSZXNDaGVja1NpZ25hdHVyZSgkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbmRwb2ludC0+c2VydmVyX3VybCk7CgogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faWRSZXNDaGVja05vbmNlKCRtZXNzYWdlLCAkZW5kcG9pbnQpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgICRzaWduZWRfbGlzdF9zdHIgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZ25lZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfTk9fREVGQVVMVCk7CiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJHNpZ25lZF9saXN0X3N0cikpIHsKICAgICAgICAgICAgcmV0dXJuICRzaWduZWRfbGlzdF9zdHI7CiAgICAgICAgfQogICAgICAgICRzaWduZWRfbGlzdCA9IGV4cGxvZGUoJywnLCAkc2lnbmVkX2xpc3Rfc3RyKTsKCiAgICAgICAgJHNpZ25lZF9maWVsZHMgPSBBdXRoX09wZW5JRDo6YWRkUHJlZml4KCRzaWduZWRfbGlzdCwgIm9wZW5pZC4iKTsKCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TdWNjZXNzUmVzcG9uc2UoJGVuZHBvaW50LCAkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2lnbmVkX2ZpZWxkcyk7CgogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jaGVja1JldHVyblRvKCRtZXNzYWdlLCAkcmV0dXJuX3RvKQogICAgewogICAgICAgIC8vIENoZWNrIGFuIE9wZW5JRCBtZXNzYWdlIGFuZCBpdHMgb3BlbmlkLnJldHVybl90byB2YWx1ZQogICAgICAgIC8vIGFnYWluc3QgYSByZXR1cm5fdG8gVVJMIGZyb20gYW4gYXBwbGljYXRpb24uICBSZXR1cm4gVHJ1ZQogICAgICAgIC8vIG9uIHN1Y2Nlc3MsIEZhbHNlIG9uIGZhaWx1cmUuCgogICAgICAgIC8vIENoZWNrIHRoZSBvcGVuaWQucmV0dXJuX3RvIGFyZ3MgYWdhaW5zdCBhcmdzIGluIHRoZQogICAgICAgIC8vIG9yaWdpbmFsIG1lc3NhZ2UuCiAgICAgICAgJHJlc3VsdCA9IEF1dGhfT3BlbklEX0dlbmVyaWNDb25zdW1lcjo6X3ZlcmlmeVJldHVyblRvQXJncygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXNzYWdlLT50b1Bvc3RBcmdzKCkpOwogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHRoZSByZXR1cm5fdG8gYmFzZSBVUkwgYWdhaW5zdCB0aGUgb25lIGluIHRoZQogICAgICAgIC8vIG1lc3NhZ2UuCiAgICAgICAgJG1zZ19yZXR1cm5fdG8gPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybl90bycpOwogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXR1cm5fdG8pKSB7CiAgICAgICAgICAgIC8vIFhYWCBsb2cgbWUKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJldHVybl90b19wYXJ0cyA9IHBhcnNlX3VybChBdXRoX09wZW5JRF91cmlub3JtKCRyZXR1cm5fdG8pKTsKICAgICAgICAkbXNnX3JldHVybl90b19wYXJ0cyA9IHBhcnNlX3VybChBdXRoX09wZW5JRF91cmlub3JtKCRtc2dfcmV0dXJuX3RvKSk7CgogICAgICAgIC8vIElmIHBvcnQgaXMgYWJzZW50IGZyb20gYm90aCwgYWRkIGl0IHNvIGl0J3MgZXF1YWwgaW4gdGhlCiAgICAgICAgLy8gY2hlY2sgYmVsb3cuCiAgICAgICAgaWYgKCghYXJyYXlfa2V5X2V4aXN0cygncG9ydCcsICRyZXR1cm5fdG9fcGFydHMpKSAmJgogICAgICAgICAgICAoIWFycmF5X2tleV9leGlzdHMoJ3BvcnQnLCAkbXNnX3JldHVybl90b19wYXJ0cykpKSB7CiAgICAgICAgICAgICRyZXR1cm5fdG9fcGFydHNbJ3BvcnQnXSA9IG51bGw7CiAgICAgICAgICAgICRtc2dfcmV0dXJuX3RvX3BhcnRzWydwb3J0J10gPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgcGF0aCBpcyBhYnNlbnQgZnJvbSBib3RoLCBhZGQgaXQgc28gaXQncyBlcXVhbCBpbiB0aGUKICAgICAgICAvLyBjaGVjayBiZWxvdy4KICAgICAgICBpZiAoKCFhcnJheV9rZXlfZXhpc3RzKCdwYXRoJywgJHJldHVybl90b19wYXJ0cykpICYmCiAgICAgICAgICAgICghYXJyYXlfa2V5X2V4aXN0cygncGF0aCcsICRtc2dfcmV0dXJuX3RvX3BhcnRzKSkpIHsKICAgICAgICAgICAgJHJldHVybl90b19wYXJ0c1sncGF0aCddID0gbnVsbDsKICAgICAgICAgICAgJG1zZ19yZXR1cm5fdG9fcGFydHNbJ3BhdGgnXSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgVVJMIHNjaGVtZSwgYXV0aG9yaXR5LCBhbmQgcGF0aCBNVVNUIGJlIHRoZSBzYW1lCiAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvIFVSTHMuCiAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ3NjaGVtZScsICdob3N0JywgJ3BvcnQnLCAncGF0aCcpIGFzICRjb21wb25lbnQpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIHVybCBjb21wb25lbnQgaXMgYWJzZW50IGluIGVpdGhlciBVUkwsIGZhaWwuCiAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSBzY2hlbWUsIGhvc3QsIHBvcnQsIGFuZCBwYXRoLgogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGNvbXBvbmVudCwgJHJldHVybl90b19wYXJ0cykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRjb21wb25lbnQsICRtc2dfcmV0dXJuX3RvX3BhcnRzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRyZXR1cm5fdG9fcGFydHMsICRjb21wb25lbnQpICE9PQogICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRtc2dfcmV0dXJuX3RvX3BhcnRzLCAkY29tcG9uZW50KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfdmVyaWZ5UmV0dXJuVG9BcmdzKCRxdWVyeSkKICAgIHsKICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnRzIGluIHRoZSByZXR1cm5fdG8gVVJMIGFyZSBwcmVzZW50IGluIHRoaXMKICAgICAgICAvLyByZXNwb25zZS4KCiAgICAgICAgJG1lc3NhZ2UgPSBBdXRoX09wZW5JRF9NZXNzYWdlOjpmcm9tUG9zdEFyZ3MoJHF1ZXJ5KTsKICAgICAgICAkcmV0dXJuX3RvID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdyZXR1cm5fdG8nKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJHJldHVybl90bykpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXR1cm5fdG87CiAgICAgICAgfQogICAgICAgIC8vIFhYWDogdGhpcyBzaG91bGQgYmUgY2hlY2tlZCBieSBfaWRSZXNDaGVja0ZvckZpZWxkcwogICAgICAgIGlmICghJHJldHVybl90bykgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzcG9uc2UgaGFzIG5vIHJldHVybl90byIpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZF91cmwgPSBwYXJzZV91cmwoJHJldHVybl90byk7CgogICAgICAgICRxID0gYXJyYXkoKTsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncXVlcnknLCAkcGFyc2VkX3VybCkpIHsKICAgICAgICAgICAgJHJ0X3F1ZXJ5ID0gJHBhcnNlZF91cmxbJ3F1ZXJ5J107CiAgICAgICAgICAgICRxID0gQXV0aF9PcGVuSUQ6OnBhcnNlX3N0cigkcnRfcXVlcnkpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHEgYXMgJHJ0X2tleSA9PiAkcnRfdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRydF9rZXksICRxdWVyeSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKG51bGwsCiAgICAgICAgICAgICAgICAgIHNwcmludGYoInJldHVybl90byBwYXJhbWV0ZXIgJXMgYWJzZW50IGZyb20gcXVlcnkiLCAkcnRfa2V5KSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkcXVlcnlbJHJ0X2tleV07CiAgICAgICAgICAgICAgICBpZiAoJHJ0X3ZhbHVlICE9ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJwYXJhbWV0ZXIgJXMgdmFsdWUgJXMgZG9lcyBub3QgbWF0Y2ggIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5fdG8gdmFsdWUgJXMiLCAkcnRfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUsICRydF92YWx1ZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIG5vbi1PcGVuSUQgYXJndW1lbnRzIGluIHRoZSByZXNwb25zZSBhcmUgYWxzbwogICAgICAgIC8vIGluIHRoZSBzaWduZWQgcmV0dXJuX3RvLgogICAgICAgICRiYXJlX2FyZ3MgPSAkbWVzc2FnZS0+Z2V0QXJncyhBdXRoX09wZW5JRF9CQVJFX05TKTsKICAgICAgICBmb3JlYWNoICgkYmFyZV9hcmdzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChBdXRoX09wZW5JRDo6YXJyYXlHZXQoJHEsICRrZXkpICE9ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UobnVsbCwKICAgICAgICAgICAgICAgICAgc3ByaW50ZigiUGFyYW1ldGVyICVzID0gJXMgbm90IGluIHJldHVybl90byBVUkwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICRrZXksICR2YWx1ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfaWRSZXNDaGVja1NpZ25hdHVyZSgkbWVzc2FnZSwgJHNlcnZlcl91cmwpCiAgICB7CiAgICAgICAgJGFzc29jX2hhbmRsZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NvY19oYW5kbGUnKTsKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkYXNzb2NfaGFuZGxlKSkgewogICAgICAgICAgICByZXR1cm4gJGFzc29jX2hhbmRsZTsKICAgICAgICB9CgogICAgICAgICRhc3NvYyA9ICR0aGlzLT5zdG9yZS0+Z2V0QXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRhc3NvY19oYW5kbGUpOwoKICAgICAgICBpZiAoJGFzc29jKSB7CiAgICAgICAgICAgIGlmICgkYXNzb2MtPmdldEV4cGlyZXNJbigpIDw9IDApIHsKICAgICAgICAgICAgICAgIC8vIFhYWDogSXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgc29tZXRpbWVzIHRvIHJlLXN0YXJ0CiAgICAgICAgICAgICAgICAvLyB0aGUgYXV0aGVudGljYXRpb24gd2l0aCBhIG5ldyBhc3NvY2lhdGlvbi4gRG9pbmcgaXQKICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgb3BlbnMgdGhlIHBvc3NpYmlsaXR5IGZvcgogICAgICAgICAgICAgICAgLy8gZGVuaWFsLW9mLXNlcnZpY2UgYnkgYSBzZXJ2ZXIgdGhhdCBqdXN0IHJldHVybnMKICAgICAgICAgICAgICAgIC8vIGV4cGlyZWQgYXNzb2NpYXRpb25zIChvciByZWFsbHkgc2hvcnQtbGl2ZWQKICAgICAgICAgICAgICAgIC8vIGFzc29jaWF0aW9ucykKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fzc29jaWF0aW9uIHdpdGggJyAuICRzZXJ2ZXJfdXJsIC4gJyBleHBpcmVkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJGFzc29jLT5jaGVja01lc3NhZ2VTaWduYXR1cmUoJG1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBzaWduYXR1cmUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEl0J3Mgbm90IGFuIGFzc29jaWF0aW9uIHdlIGtub3cgYWJvdXQuICBTdGF0ZWxlc3MgbW9kZQogICAgICAgICAgICAvLyBpcyBvdXIgb25seSBwb3NzaWJsZSBwYXRoIGZvciByZWNvdmVyeS4gIFhYWCAtIGFzeW5jCiAgICAgICAgICAgIC8vIGZyYW1ld29yayB3aWxsIG5vdCB3YW50IHRvIGJsb2NrIG9uIHRoaXMgY2FsbCB0bwogICAgICAgICAgICAvLyBfY2hlY2tBdXRoLgogICAgICAgICAgICBpZiAoISR0aGlzLT5fY2hlY2tBdXRoKCRtZXNzYWdlLCAkc2VydmVyX3VybCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZlciBkZW5pZWQgY2hlY2tfYXV0aGVudGljYXRpb24iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3ZlcmlmeURpc2NvdmVyeVJlc3VsdHMoJG1lc3NhZ2UsICRlbmRwb2ludD1udWxsKQogICAgewogICAgICAgIGlmICgkbWVzc2FnZS0+Z2V0T3BlbklETmFtZXNwYWNlKCkgPT0gQXV0aF9PcGVuSURfT1BFTklEMl9OUykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl92ZXJpZnlEaXNjb3ZlcnlSZXN1bHRzT3BlbklEMigkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVuZHBvaW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl92ZXJpZnlEaXNjb3ZlcnlSZXN1bHRzT3BlbklEMSgkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVuZHBvaW50KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3ZlcmlmeURpc2NvdmVyeVJlc3VsdHNPcGVuSUQxKCRtZXNzYWdlLCAkZW5kcG9pbnQpCiAgICB7CiAgICAgICAgJGNsYWltZWRfaWQgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX0JBUkVfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm9wZW5pZDFfcmV0dXJuX3RvX2lkZW50aWZpZXJfbmFtZSk7CgogICAgICAgIGlmICgoJGVuZHBvaW50ID09PSBudWxsKSAmJiAoJGNsYWltZWRfaWQgPT09IG51bGwpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKCRlbmRwb2ludCwKICAgICAgICAgICAgICAnV2hlbiB1c2luZyBPcGVuSUQgMSwgdGhlIGNsYWltZWQgSUQgbXVzdCBiZSBzdXBwbGllZCwgJyAuCiAgICAgICAgICAgICAgJ2VpdGhlciBieSBwYXNzaW5nIGl0IHRocm91Z2ggYXMgYSByZXR1cm5fdG8gcGFyYW1ldGVyICcgLgogICAgICAgICAgICAgICdvciBieSB1c2luZyBhIHNlc3Npb24sIGFuZCBzdXBwbGllZCB0byB0aGUgR2VuZXJpY0NvbnN1bWVyICcgLgogICAgICAgICAgICAgICdhcyB0aGUgYXJndW1lbnQgdG8gY29tcGxldGUoKScpOwogICAgICAgIH0gZWxzZSBpZiAoKCRlbmRwb2ludCAhPT0gbnVsbCkgJiYgKCRjbGFpbWVkX2lkID09PSBudWxsKSkgewogICAgICAgICAgICAkY2xhaW1lZF9pZCA9ICRlbmRwb2ludC0+Y2xhaW1lZF9pZDsKICAgICAgICB9CgogICAgICAgICR0b19tYXRjaCA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQoKTsKICAgICAgICAkdG9fbWF0Y2gtPnR5cGVfdXJpcyA9IGFycmF5KEF1dGhfT3BlbklEX1RZUEVfMV8xKTsKICAgICAgICAkdG9fbWF0Y2gtPmxvY2FsX2lkID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSUQxX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZGVudGl0eScpOwoKICAgICAgICAvLyBSZXN0b3JlIGRlbGVnYXRlIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYXRpb24gcGhhc2UKICAgICAgICAkdG9fbWF0Y2gtPmNsYWltZWRfaWQgPSAkY2xhaW1lZF9pZDsKCiAgICAgICAgaWYgKCR0b19tYXRjaC0+bG9jYWxfaWQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UoJGVuZHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgb3BlbmlkLmlkZW50aXR5Iik7CiAgICAgICAgfQoKICAgICAgICAkdG9fbWF0Y2hfMV8wID0gJHRvX21hdGNoLT5jb3B5KCk7CiAgICAgICAgJHRvX21hdGNoXzFfMC0+dHlwZV91cmlzID0gYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8xXzApOwoKICAgICAgICBpZiAoJGVuZHBvaW50ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+X3ZlcmlmeURpc2NvdmVyeVNpbmdsZSgkZW5kcG9pbnQsICR0b19tYXRjaCk7CgogICAgICAgICAgICBpZiAoaXNfYSgkcmVzdWx0LCAnQXV0aF9PcGVuSURfVHlwZVVSSU1pc21hdGNoJykpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+X3ZlcmlmeURpc2NvdmVyeVNpbmdsZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRvX21hdGNoXzFfMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXN1bHQpKSB7CiAgICAgICAgICAgICAgICAvLyBvaWR1dGlsLmxvZygiRXJyb3IgYXR0ZW1wdGluZyB0byB1c2Ugc3RvcmVkCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBkaXNjb3ZlcnkgaW5mb3JtYXRpb246ICIgKyBzdHIoZSkpCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBvaWR1dGlsLmxvZygiQXR0ZW1wdGluZyBkaXNjb3ZlcnkgdG8KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHZlcmlmeSBlbmRwb2ludCIpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGVuZHBvaW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBFbmRwb2ludCBpcyBlaXRoZXIgYmFkIChmYWlsZWQgdmVyaWZpY2F0aW9uKSBvciBOb25lCiAgICAgICAgcmV0dXJuICR0aGlzLT5fZGlzY292ZXJBbmRWZXJpZnkoJHRvX21hdGNoLT5jbGFpbWVkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCR0b19tYXRjaCwgJHRvX21hdGNoXzFfMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF92ZXJpZnlEaXNjb3ZlcnlTaW5nbGUoJGVuZHBvaW50LCAkdG9fbWF0Y2gpCiAgICB7CiAgICAgICAgLy8gRXZlcnkgdHlwZSBVUkkgdGhhdCdzIGluIHRoZSB0b19tYXRjaCBlbmRwb2ludCBoYXMgdG8gYmUKICAgICAgICAvLyBwcmVzZW50IGluIHRoZSBkaXNjb3ZlcmVkIGVuZHBvaW50LgogICAgICAgIGZvcmVhY2ggKCR0b19tYXRjaC0+dHlwZV91cmlzIGFzICR0eXBlX3VyaSkgewogICAgICAgICAgICBpZiAoISRlbmRwb2ludC0+dXNlc0V4dGVuc2lvbigkdHlwZV91cmkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1R5cGVVUklNaXNtYXRjaCgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVpcmVkIHR5cGUgIi4kdHlwZV91cmkuIiBub3QgcHJlc2VudCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGcmFnbWVudHMgZG8gbm90IGluZmx1ZW5jZSBkaXNjb3ZlcnksIHNvIHdlIGNhbid0IGNvbXBhcmUgYQogICAgICAgIC8vIGNsYWltZWQgaWRlbnRpZmllciB3aXRoIGEgZnJhZ21lbnQgdG8gZGlzY292ZXJlZAogICAgICAgIC8vIGluZm9ybWF0aW9uLgogICAgICAgIGxpc3QoJGRlZnJhZ2dlZF9jbGFpbWVkX2lkLCAkXykgPQogICAgICAgICAgICBBdXRoX09wZW5JRDo6dXJsZGVmcmFnKCR0b19tYXRjaC0+Y2xhaW1lZF9pZCk7CgogICAgICAgIGlmICgkZGVmcmFnZ2VkX2NsYWltZWRfaWQgIT0gJGVuZHBvaW50LT5jbGFpbWVkX2lkKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKCRlbmRwb2ludCwKICAgICAgICAgICAgICBzcHJpbnRmKCdDbGFpbWVkIElEIGRvZXMgbm90IG1hdGNoIChkaWZmZXJlbnQgc3ViamVjdHMhKSwgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgJXMsIGdvdCAlcycsICRkZWZyYWdnZWRfY2xhaW1lZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICRlbmRwb2ludC0+Y2xhaW1lZF9pZCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0b19tYXRjaC0+Z2V0TG9jYWxJRCgpICE9ICRlbmRwb2ludC0+Z2V0TG9jYWxJRCgpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKCRlbmRwb2ludCwKICAgICAgICAgICAgICBzcHJpbnRmKCdsb2NhbF9pZCBtaXNtYXRjaC4gRXhwZWN0ZWQgJXMsIGdvdCAlcycsCiAgICAgICAgICAgICAgICAgICAgICAkdG9fbWF0Y2gtPmdldExvY2FsSUQoKSwgJGVuZHBvaW50LT5nZXRMb2NhbElEKCkpKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgVVJMIGlzIE5vbmUsIHRoaXMgbXVzdCBiZSBhbiBPcGVuSUQgMQogICAgICAgIC8vIHJlc3BvbnNlLCBiZWNhdXNlIG9wX2VuZHBvaW50IGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluCiAgICAgICAgLy8gT3BlbklEIDIuIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSB3aGF0IHRoZQogICAgICAgIC8vIGRpc2NvdmVyZWQgc2VydmVyX3VybCBpcywgYmVjYXVzZSBzaWduYXR1cmUgY2hlY2tpbmcgb3IKICAgICAgICAvLyBjaGVja19hdXRoIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhhdCBjaGVjayBmb3IgdXMuCiAgICAgICAgaWYgKCR0b19tYXRjaC0+c2VydmVyX3VybCA9PT0gbnVsbCkgewogICAgICAgICAgICBpZiAoJHRvX21hdGNoLT5wcmVmZXJyZWROYW1lc3BhY2UoKSAhPSBBdXRoX09wZW5JRF9PUEVOSUQxX05TKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZWZlcnJlZCBuYW1lc3BhY2UgbWlzbWF0Y2ggKGJ1ZykiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoJHRvX21hdGNoLT5zZXJ2ZXJfdXJsICE9ICRlbmRwb2ludC0+c2VydmVyX3VybCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgc3ByaW50ZignT1AgRW5kcG9pbnQgbWlzbWF0Y2guIEV4cGVjdGVkICVzLCBnb3QgJXMnLAogICAgICAgICAgICAgICAgICAgICAgJHRvX21hdGNoLT5zZXJ2ZXJfdXJsLCAkZW5kcG9pbnQtPnNlcnZlcl91cmwpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF92ZXJpZnlEaXNjb3ZlcnlSZXN1bHRzT3BlbklEMigkbWVzc2FnZSwgJGVuZHBvaW50KQogICAgewogICAgICAgICR0b19tYXRjaCA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQoKTsKICAgICAgICAkdG9fbWF0Y2gtPnR5cGVfdXJpcyA9IGFycmF5KEF1dGhfT3BlbklEX1RZUEVfMl8wKTsKICAgICAgICAkdG9fbWF0Y2gtPmNsYWltZWRfaWQgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRDJfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhaW1lZF9pZCcpOwoKICAgICAgICAkdG9fbWF0Y2gtPmxvY2FsX2lkID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSUQyX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRlbnRpdHknKTsKCiAgICAgICAgJHRvX21hdGNoLT5zZXJ2ZXJfdXJsID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSUQyX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wX2VuZHBvaW50Jyk7CgogICAgICAgIGlmICgkdG9fbWF0Y2gtPnNlcnZlcl91cmwgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UoJGVuZHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIk9QIEVuZHBvaW50IFVSTCBtaXNzaW5nIik7CiAgICAgICAgfQoKICAgICAgICAvLyBjbGFpbWVkX2lkIGFuZCBpZGVudGlmaWVyIG11c3QgYm90aCBiZSBwcmVzZW50IG9yIGJvdGggYmUKICAgICAgICAvLyBhYnNlbnQKICAgICAgICBpZiAoKCR0b19tYXRjaC0+Y2xhaW1lZF9pZCA9PT0gbnVsbCkgJiYKICAgICAgICAgICAgKCR0b19tYXRjaC0+bG9jYWxfaWQgIT09IG51bGwpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKCRlbmRwb2ludCwKICAgICAgICAgICAgICAnb3BlbmlkLmlkZW50aXR5IGlzIHByZXNlbnQgd2l0aG91dCBvcGVuaWQuY2xhaW1lZF9pZCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgkdG9fbWF0Y2gtPmNsYWltZWRfaWQgIT09IG51bGwpICYmCiAgICAgICAgICAgICgkdG9fbWF0Y2gtPmxvY2FsX2lkID09PSBudWxsKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgJ29wZW5pZC5jbGFpbWVkX2lkIGlzIHByZXNlbnQgd2l0aG91dCBvcGVuaWQuaWRlbnRpdHknKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdG9fbWF0Y2gtPmNsYWltZWRfaWQgPT09IG51bGwpIHsKICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlc3BvbnNlIHdpdGhvdXQgaWRlbnRpZmllcnMsIHNvIHRoZXJlJ3MKICAgICAgICAgICAgLy8gcmVhbGx5IG5vIGNoZWNraW5nIHRoYXQgd2UgY2FuIGRvLCBzbyByZXR1cm4gYW4KICAgICAgICAgICAgLy8gZW5kcG9pbnQgdGhhdCdzIGZvciB0aGUgc3BlY2lmaWVkIGBvcGVuaWQub3BfZW5kcG9pbnQnCiAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQ6OmZyb21PUEVuZHBvaW50VVJMKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9fbWF0Y2gtPnNlcnZlcl91cmwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkZW5kcG9pbnQpIHsKICAgICAgICAgICAgLy8gVGhlIGNsYWltZWQgSUQgZG9lc24ndCBtYXRjaCwgc28gd2UgaGF2ZSB0byBkbwogICAgICAgICAgICAvLyBkaXNjb3ZlcnkgYWdhaW4uIFRoaXMgY292ZXJzIG5vdCB1c2luZyBzZXNzaW9ucywgT1AKICAgICAgICAgICAgLy8gaWRlbnRpZmllciBlbmRwb2ludHMgYW5kIHJlc3BvbnNlcyB0aGF0IGRpZG4ndCBtYXRjaAogICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgcmVxdWVzdC4KICAgICAgICAgICAgLy8gb2lkdXRpbC5sb2coJ05vIHByZS1kaXNjb3ZlcmVkIGluZm9ybWF0aW9uIHN1cHBsaWVkLicpCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2Rpc2NvdmVyQW5kVmVyaWZ5KCR0b19tYXRjaC0+Y2xhaW1lZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJHRvX21hdGNoKSk7CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIC8vIFRoZSBjbGFpbWVkIElEIG1hdGNoZXMsIHNvIHdlIHVzZSB0aGUgZW5kcG9pbnQgdGhhdCB3ZQogICAgICAgICAgICAvLyBkaXNjb3ZlcmVkIGluIGluaXRpYXRpb24uIFRoaXMgc2hvdWxkIGJlIHRoZSBtb3N0CiAgICAgICAgICAgIC8vIGNvbW1vbiBjYXNlLgogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl92ZXJpZnlEaXNjb3ZlcnlTaW5nbGUoJGVuZHBvaW50LCAkdG9fbWF0Y2gpOwoKICAgICAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICRlbmRwb2ludCA9ICR0aGlzLT5fZGlzY292ZXJBbmRWZXJpZnkoJHRvX21hdGNoLT5jbGFpbWVkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkdG9fbWF0Y2gpKTsKICAgICAgICAgICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRlbmRwb2ludCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVuZHBvaW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZW5kcG9pbnQgd2UgcmV0dXJuIHNob3VsZCBoYXZlIHRoZSBjbGFpbWVkIElEIGZyb20gdGhlCiAgICAgICAgLy8gbWVzc2FnZSB3ZSBqdXN0IHZlcmlmaWVkLCBmcmFnbWVudCBhbmQgYWxsLgogICAgICAgIGlmICgkZW5kcG9pbnQtPmNsYWltZWRfaWQgIT0gJHRvX21hdGNoLT5jbGFpbWVkX2lkKSB7CiAgICAgICAgICAgICRlbmRwb2ludC0+Y2xhaW1lZF9pZCA9ICR0b19tYXRjaC0+Y2xhaW1lZF9pZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZW5kcG9pbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2Rpc2NvdmVyQW5kVmVyaWZ5KCRjbGFpbWVkX2lkLCAkdG9fbWF0Y2hfZW5kcG9pbnRzKQogICAgewogICAgICAgIC8vIG9pZHV0aWwubG9nKCdQZXJmb3JtaW5nIGRpc2NvdmVyeSBvbiAlcycgJSAoY2xhaW1lZF9pZCwpKQogICAgICAgIGxpc3QoJHVudXNlZCwgJHNlcnZpY2VzKSA9IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5kaXNjb3Zlck1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCwKCQkJCQkJCQkJCQkJICAmJHRoaXMtPmZldGNoZXIpOwoKICAgICAgICBpZiAoISRzZXJ2aWNlcykgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgIHNwcmludGYoIk5vIE9wZW5JRCBpbmZvcm1hdGlvbiBmb3VuZCBhdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmVyaWZ5RGlzY292ZXJ5U2VydmljZXMoJGNsYWltZWRfaWQsICRzZXJ2aWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9fbWF0Y2hfZW5kcG9pbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfdmVyaWZ5RGlzY292ZXJ5U2VydmljZXMoJGNsYWltZWRfaWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2aWNlcywgJHRvX21hdGNoX2VuZHBvaW50cykKICAgIHsKICAgICAgICAvLyBTZWFyY2ggdGhlIHNlcnZpY2VzIHJlc3VsdGluZyBmcm9tIGRpc2NvdmVyeSB0byBmaW5kIG9uZQogICAgICAgIC8vIHRoYXQgbWF0Y2hlcyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXNzZXJ0aW9uCgogICAgICAgIGZvcmVhY2ggKCRzZXJ2aWNlcyBhcyAkZW5kcG9pbnQpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRvX21hdGNoX2VuZHBvaW50cyBhcyAkdG9fbWF0Y2hfZW5kcG9pbnQpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+X3ZlcmlmeURpc2NvdmVyeVNpbmdsZSgkZW5kcG9pbnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b19tYXRjaF9lbmRwb2ludCk7CgogICAgICAgICAgICAgICAgaWYgKCFBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRyZXN1bHQpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSXQgbWF0Y2hlcywgc28gZGlzY292ZXIgdmVyaWZpY2F0aW9uIGhhcwogICAgICAgICAgICAgICAgICAgIC8vIHN1Y2NlZWRlZC4gUmV0dXJuIHRoaXMgZW5kcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbmRwb2ludDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UobnVsbCwKICAgICAgICAgIHNwcmludGYoJ05vIG1hdGNoaW5nIGVuZHBvaW50IGZvdW5kIGFmdGVyIGRpc2NvdmVyaW5nICVzOiAlcycsCiAgICAgICAgICAgICAgICAgICRjbGFpbWVkX2lkLCAkcmVzdWx0LT5tZXNzYWdlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IHRoZSBub25jZSBmcm9tIGFuIE9wZW5JRCAxIHJlc3BvbnNlLiAgUmV0dXJuIHRoZSBub25jZQogICAgICogZnJvbSB0aGUgQkFSRV9OUyBzaW5jZSB3ZSBpbmRlcGVuZGVudGx5IGNoZWNrIHRoZSByZXR1cm5fdG8KICAgICAqIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UuCiAgICAgKgogICAgICogU2VlIHRoZSBvcGVuaWQxX25vbmNlX3F1ZXJ5X2FyZ19uYW1lIGNsYXNzIHZhcmlhYmxlCiAgICAgKgogICAgICogQHJldHVybnMgJG5vbmNlIFRoZSBub25jZSBhcyBhIHN0cmluZyBvciBudWxsCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9pZFJlc0dldE5vbmNlT3BlbklEMSgkbWVzc2FnZSwgJGVuZHBvaW50KQogICAgewogICAgICAgIHJldHVybiAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX0JBUkVfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm9wZW5pZDFfbm9uY2VfcXVlcnlfYXJnX25hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9pZFJlc0NoZWNrTm9uY2UoJG1lc3NhZ2UsICRlbmRwb2ludCkKICAgIHsKICAgICAgICBpZiAoJG1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIG5vbmNlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbnN1bWVyCiAgICAgICAgICAgICRub25jZSA9ICR0aGlzLT5faWRSZXNHZXROb25jZU9wZW5JRDEoJG1lc3NhZ2UsICRlbmRwb2ludCk7CiAgICAgICAgICAgICRzZXJ2ZXJfdXJsID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vbmNlID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSUQyX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNwb25zZV9ub25jZScpOwoKICAgICAgICAgICAgJHNlcnZlcl91cmwgPSAkZW5kcG9pbnQtPnNlcnZlcl91cmw7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG5vbmNlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKCRlbmRwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25jZSBtaXNzaW5nIGZyb20gcmVzcG9uc2UiKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IEF1dGhfT3BlbklEX3NwbGl0Tm9uY2UoJG5vbmNlKTsKCiAgICAgICAgaWYgKCRwYXJ0cyA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFsZm9ybWVkIG5vbmNlIGluIHJlc3BvbnNlIik7CiAgICAgICAgfQoKICAgICAgICBsaXN0KCR0aW1lc3RhbXAsICRzYWx0KSA9ICRwYXJ0czsKCiAgICAgICAgaWYgKCEkdGhpcy0+c3RvcmUtPnVzZU5vbmNlKCRzZXJ2ZXJfdXJsLCAkdGltZXN0YW1wLCAkc2FsdCkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UoJGVuZHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmNlIGFscmVhZHkgdXNlZCBvciBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9pZFJlc0NoZWNrRm9yRmllbGRzKCRtZXNzYWdlKQogICAgewogICAgICAgICRiYXNpY19maWVsZHMgPSBhcnJheSgncmV0dXJuX3RvJywgJ2Fzc29jX2hhbmRsZScsICdzaWcnLCAnc2lnbmVkJyk7CiAgICAgICAgJGJhc2ljX3NpZ19maWVsZHMgPSBhcnJheSgncmV0dXJuX3RvJywgJ2lkZW50aXR5Jyk7CgogICAgICAgICRyZXF1aXJlX2ZpZWxkcyA9IGFycmF5KAogICAgICAgICAgICBBdXRoX09wZW5JRF9PUEVOSUQyX05TID0+IGFycmF5X21lcmdlKCRiYXNpY19maWVsZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ29wX2VuZHBvaW50JykpLAoKICAgICAgICAgICAgQXV0aF9PcGVuSURfT1BFTklEMV9OUyA9PiBhcnJheV9tZXJnZSgkYmFzaWNfZmllbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdpZGVudGl0eScpKQogICAgICAgICAgICApOwoKICAgICAgICAkcmVxdWlyZV9zaWdzID0gYXJyYXkoCiAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRDJfTlMgPT4gYXJyYXlfbWVyZ2UoJGJhc2ljX3NpZ19maWVsZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3Jlc3BvbnNlX25vbmNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhaW1lZF9pZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc29jX2hhbmRsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wX2VuZHBvaW50JykpLAogICAgICAgICAgICBBdXRoX09wZW5JRF9PUEVOSUQxX05TID0+IGFycmF5X21lcmdlKCRiYXNpY19zaWdfZmllbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdub25jZScpKQogICAgICAgICAgICApOwoKICAgICAgICBmb3JlYWNoICgkcmVxdWlyZV9maWVsZHNbJG1lc3NhZ2UtPmdldE9wZW5JRE5hbWVzcGFjZSgpXSBhcyAkZmllbGQpIHsKICAgICAgICAgICAgaWYgKCEkbWVzc2FnZS0+aGFzS2V5KEF1dGhfT3BlbklEX09QRU5JRF9OUywgJGZpZWxkKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UobnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyByZXF1aXJlZCBmaWVsZCAnIi4kZmllbGQuIiciKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNpZ25lZF9saXN0X3N0ciA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaWduZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX05PX0RFRkFVTFQpOwogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRzaWduZWRfbGlzdF9zdHIpKSB7CiAgICAgICAgICAgIHJldHVybiAkc2lnbmVkX2xpc3Rfc3RyOwogICAgICAgIH0KICAgICAgICAkc2lnbmVkX2xpc3QgPSBleHBsb2RlKCcsJywgJHNpZ25lZF9saXN0X3N0cik7CgogICAgICAgIGZvcmVhY2ggKCRyZXF1aXJlX3NpZ3NbJG1lc3NhZ2UtPmdldE9wZW5JRE5hbWVzcGFjZSgpXSBhcyAkZmllbGQpIHsKICAgICAgICAgICAgLy8gRmllbGQgaXMgcHJlc2VudCBhbmQgbm90IGluIHNpZ25lZCBsaXN0CiAgICAgICAgICAgIGlmICgkbWVzc2FnZS0+aGFzS2V5KEF1dGhfT3BlbklEX09QRU5JRF9OUywgJGZpZWxkKSAmJgogICAgICAgICAgICAgICAgKCFpbl9hcnJheSgkZmllbGQsICRzaWduZWRfbGlzdCkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIi4kZmllbGQuIicgbm90IHNpZ25lZCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfY2hlY2tBdXRoKCRtZXNzYWdlLCAkc2VydmVyX3VybCkKICAgIHsKICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5fY3JlYXRlQ2hlY2tBdXRoUmVxdWVzdCgkbWVzc2FnZSk7CiAgICAgICAgaWYgKCRyZXF1ZXN0ID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRyZXNwX21lc3NhZ2UgPSAkdGhpcy0+X21ha2VLVlBvc3QoJHJlcXVlc3QsICRzZXJ2ZXJfdXJsKTsKICAgICAgICBpZiAoKCRyZXNwX21lc3NhZ2UgPT09IG51bGwpIHx8CiAgICAgICAgICAgIChpc19hKCRyZXNwX21lc3NhZ2UsICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvckNvbnRhaW5lcicpKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl9wcm9jZXNzQ2hlY2tBdXRoUmVzcG9uc2UoJHJlc3BfbWVzc2FnZSwgJHNlcnZlcl91cmwpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jcmVhdGVDaGVja0F1dGhSZXF1ZXN0KCRtZXNzYWdlKQogICAgewogICAgICAgICRzaWduZWQgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZ25lZCcpOwogICAgICAgIGlmICgkc2lnbmVkKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKGV4cGxvZGUoJywnLCAkc2lnbmVkKSBhcyAkaykgewogICAgICAgICAgICAgICAgJHZhbHVlID0gJG1lc3NhZ2UtPmdldEFsaWFzZWRBcmcoJGspOwogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRjYV9tZXNzYWdlID0gJG1lc3NhZ2UtPmNvcHkoKTsKICAgICAgICAkY2FfbWVzc2FnZS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ21vZGUnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGVja19hdXRoZW50aWNhdGlvbicpOwogICAgICAgIHJldHVybiAkY2FfbWVzc2FnZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfcHJvY2Vzc0NoZWNrQXV0aFJlc3BvbnNlKCRyZXNwb25zZSwgJHNlcnZlcl91cmwpCiAgICB7CiAgICAgICAgJGlzX3ZhbGlkID0gJHJlc3BvbnNlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnaXNfdmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWxzZScpOwoKICAgICAgICAkaW52YWxpZGF0ZV9oYW5kbGUgPSAkcmVzcG9uc2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWRhdGVfaGFuZGxlJyk7CgogICAgICAgIGlmICgkaW52YWxpZGF0ZV9oYW5kbGUgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPnN0b3JlLT5yZW1vdmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW52YWxpZGF0ZV9oYW5kbGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpc192YWxpZCA9PSAndHJ1ZScpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGFwdCBhIFBPU1QgcmVzcG9uc2UgdG8gYSBNZXNzYWdlLgogICAgICoKICAgICAqIEBwYXJhbSAkcmVzcG9uc2UgUmVzdWx0IG9mIGEgUE9TVCB0byBhbiBPcGVuSUQgZW5kcG9pbnQuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBfaHR0cFJlc3BvbnNlVG9NZXNzYWdlKCRyZXNwb25zZSwgJHNlcnZlcl91cmwpCiAgICB7CiAgICAgICAgLy8gU2hvdWxkIHRoaXMgZnVuY3Rpb24gYmUgbmFtZWQgTWVzc2FnZS5mcm9tSFRUUFJlc3BvbnNlIGluc3RlYWQ/CiAgICAgICAgJHJlc3BvbnNlX21lc3NhZ2UgPSBBdXRoX09wZW5JRF9NZXNzYWdlOjpmcm9tS1ZGb3JtKCRyZXNwb25zZS0+Ym9keSk7CgogICAgICAgIGlmICgkcmVzcG9uc2UtPnN0YXR1cyA9PSA0MDApIHsKICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX1NlcnZlckVycm9yQ29udGFpbmVyOjpmcm9tTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlX21lc3NhZ2UpOwogICAgICAgIH0gZWxzZSBpZiAoJHJlc3BvbnNlLT5zdGF0dXMgIT0gMjAwIGFuZCAkcmVzcG9uc2UtPnN0YXR1cyAhPSAyMDYpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlX21lc3NhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX21ha2VLVlBvc3QoJG1lc3NhZ2UsICRzZXJ2ZXJfdXJsKQogICAgewogICAgICAgICRib2R5ID0gJG1lc3NhZ2UtPnRvVVJMRW5jb2RlZCgpOwogICAgICAgICRyZXNwID0gJHRoaXMtPmZldGNoZXItPnBvc3QoJHNlcnZlcl91cmwsICRib2R5KTsKCiAgICAgICAgaWYgKCRyZXNwID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5faHR0cFJlc3BvbnNlVG9NZXNzYWdlKCRyZXNwLCAkc2VydmVyX3VybCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2dldEFzc29jaWF0aW9uKCRlbmRwb2ludCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5fdXNlX2Fzc29jcykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRhc3NvYyA9ICR0aGlzLT5zdG9yZS0+Z2V0QXNzb2NpYXRpb24oJGVuZHBvaW50LT5zZXJ2ZXJfdXJsKTsKCiAgICAgICAgaWYgKCgkYXNzb2MgPT09IG51bGwpIHx8CiAgICAgICAgICAgICgkYXNzb2MtPmdldEV4cGlyZXNJbigpIDw9IDApKSB7CgogICAgICAgICAgICAkYXNzb2MgPSAkdGhpcy0+X25lZ290aWF0ZUFzc29jaWF0aW9uKCRlbmRwb2ludCk7CgogICAgICAgICAgICBpZiAoJGFzc29jICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RvcmUtPnN0b3JlQXNzb2NpYXRpb24oJGVuZHBvaW50LT5zZXJ2ZXJfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXNzb2M7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGUgU2VydmVyRXJyb3JzIHJlc3VsdGluZyBmcm9tIGFzc29jaWF0aW9uIHJlcXVlc3RzLgogICAgICoKICAgICAqIEByZXR1cm4gJHJlc3VsdCBJZiBzZXJ2ZXIgcmVwbGllZCB3aXRoIGFuIEN7dW5zdXBwb3J0ZWQtdHlwZX0KICAgICAqIGVycm9yLCByZXR1cm4gYSB0dXBsZSBvZiBzdXBwb3J0ZWQgQ3thc3NvY2lhdGlvbl90eXBlfSwKICAgICAqIEN7c2Vzc2lvbl90eXBlfS4gIE90aGVyd2lzZSBsb2dzIHRoZSBlcnJvciBhbmQgcmV0dXJucyBudWxsLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZXh0cmFjdFN1cHBvcnRlZEFzc29jaWF0aW9uVHlwZSgkc2VydmVyX2Vycm9yLCAkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NfdHlwZSkKICAgIHsKICAgICAgICAvLyBBbnkgZXJyb3IgbWVzc2FnZSB3aG9zZSBjb2RlIGlzIG5vdCAndW5zdXBwb3J0ZWQtdHlwZScKICAgICAgICAvLyBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHRvdGFsIGZhaWx1cmUuCiAgICAgICAgaWYgKCgkc2VydmVyX2Vycm9yLT5lcnJvcl9jb2RlICE9ICd1bnN1cHBvcnRlZC10eXBlJykgfHwKICAgICAgICAgICAgKCRzZXJ2ZXJfZXJyb3ItPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIFRoZSBzZXJ2ZXIgZGlkbid0IGxpa2UgdGhlIGFzc29jaWF0aW9uL3Nlc3Npb24gdHlwZSB0aGF0IHdlCiAgICAgICAgLy8gc2VudCwgYW5kIGl0IHNlbnQgdXMgYmFjayBhIG1lc3NhZ2UgdGhhdCBtaWdodCB0ZWxsIHVzIGhvdwogICAgICAgIC8vIHRvIGhhbmRsZSBpdC4KCiAgICAgICAgLy8gRXh0cmFjdCB0aGUgc2Vzc2lvbl90eXBlIGFuZCBhc3NvY190eXBlIGZyb20gdGhlIGVycm9yCiAgICAgICAgLy8gbWVzc2FnZQogICAgICAgICRhc3NvY190eXBlID0gJHNlcnZlcl9lcnJvci0+bWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzb2NfdHlwZScpOwoKICAgICAgICAkc2Vzc2lvbl90eXBlID0gJHNlcnZlcl9lcnJvci0+bWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXNzaW9uX3R5cGUnKTsKCiAgICAgICAgaWYgKCgkYXNzb2NfdHlwZSA9PT0gbnVsbCkgfHwgKCRzZXNzaW9uX3R5cGUgPT09IG51bGwpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSBpZiAoISR0aGlzLT5uZWdvdGlhdG9yLT5pc0FsbG93ZWQoJGFzc29jX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vzc2lvbl90eXBlKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGFycmF5KCRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX25lZ290aWF0ZUFzc29jaWF0aW9uKCRlbmRwb2ludCkKICAgIHsKICAgICAgICAvLyBHZXQgb3VyIHByZWZlcnJlZCBzZXNzaW9uL2Fzc29jaWF0aW9uIHR5cGUgZnJvbSB0aGUgbmVnb3RpYXRpb3IuCiAgICAgICAgbGlzdCgkYXNzb2NfdHlwZSwgJHNlc3Npb25fdHlwZSkgPSAkdGhpcy0+bmVnb3RpYXRvci0+Z2V0QWxsb3dlZFR5cGUoKTsKCiAgICAgICAgJGFzc29jID0gJHRoaXMtPl9yZXF1ZXN0QXNzb2NpYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbmRwb2ludCwgJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkYXNzb2MpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2EoJGFzc29jLCAnQXV0aF9PcGVuSURfU2VydmVyRXJyb3JDb250YWluZXInKSkgewogICAgICAgICAgICAkd2h5ID0gJGFzc29jOwoKICAgICAgICAgICAgJHN1cHBvcnRlZFR5cGVzID0gJHRoaXMtPl9leHRyYWN0U3VwcG9ydGVkQXNzb2NpYXRpb25UeXBlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoeSwgJGVuZHBvaW50LCAkYXNzb2NfdHlwZSk7CgogICAgICAgICAgICBpZiAoJHN1cHBvcnRlZFR5cGVzICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBsaXN0KCRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKSA9ICRzdXBwb3J0ZWRUeXBlczsKCiAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBhc3NvY2lhdGlvbiBmcm9tIHRoZSBhc3NvY190eXBlCiAgICAgICAgICAgICAgICAvLyBhbmQgc2Vzc2lvbl90eXBlIHRoYXQgdGhlIHNlcnZlciB0b2xkIHVzIGl0CiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAkYXNzb2MgPSAkdGhpcy0+X3JlcXVlc3RBc3NvY2lhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZW5kcG9pbnQsICRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKTsKCiAgICAgICAgICAgICAgICBpZiAoaXNfYSgkYXNzb2MsICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvckNvbnRhaW5lcicpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGtlZXAgdHJ5aW5nLCBzaW5jZSBpdCByZWplY3RlZCB0aGUKICAgICAgICAgICAgICAgICAgICAvLyBhc3NvY2lhdGlvbiB0eXBlIHRoYXQgaXQgdG9sZCB1cyB0byB1c2UuCiAgICAgICAgICAgICAgICAgICAgLy8gb2lkdXRpbC5sb2coJ1NlcnZlciAlcyByZWZ1c2VkIGl0cyBzdWdnZXN0ZWQgYXNzb2NpYXRpb24KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAndHlwZTogc2Vzc2lvbl90eXBlPSVzLCBhc3NvY190eXBlPSVzJwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICUgKGVuZHBvaW50LnNlcnZlcl91cmwsIHNlc3Npb25fdHlwZSwKICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBhc3NvY190eXBlKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhc3NvYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRhc3NvYzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3JlcXVlc3RBc3NvY2lhdGlvbigkZW5kcG9pbnQsICRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKQogICAgewogICAgICAgIGxpc3QoJGFzc29jX3Nlc3Npb24sICRhcmdzKSA9ICR0aGlzLT5fY3JlYXRlQXNzb2NpYXRlUmVxdWVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZW5kcG9pbnQsICRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKTsKCiAgICAgICAgJHJlc3BvbnNlX21lc3NhZ2UgPSAkdGhpcy0+X21ha2VLVlBvc3QoJGFyZ3MsICRlbmRwb2ludC0+c2VydmVyX3VybCk7CgogICAgICAgIGlmICgkcmVzcG9uc2VfbWVzc2FnZSA9PT0gbnVsbCkgewogICAgICAgICAgICAvLyBvaWR1dGlsLmxvZygnb3BlbmlkLmFzc29jaWF0ZSByZXF1ZXN0IGZhaWxlZDogJXMnICUgKHdoeVswXSwpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKGlzX2EoJHJlc3BvbnNlX21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvckNvbnRhaW5lcicpKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2VfbWVzc2FnZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+X2V4dHJhY3RBc3NvY2lhdGlvbigkcmVzcG9uc2VfbWVzc2FnZSwgJGFzc29jX3Nlc3Npb24pOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9leHRyYWN0QXNzb2NpYXRpb24oJGFzc29jX3Jlc3BvbnNlLCAkYXNzb2Nfc2Vzc2lvbikKICAgIHsKICAgICAgICAvLyBFeHRyYWN0IHRoZSBjb21tb24gZmllbGRzIGZyb20gdGhlIHJlc3BvbnNlLCByYWlzaW5nIGFuCiAgICAgICAgLy8gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBmb3VuZAogICAgICAgICRhc3NvY190eXBlID0gJGFzc29jX3Jlc3BvbnNlLT5nZXRBcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9PUEVOSURfTlMsICdhc3NvY190eXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX05PX0RFRkFVTFQpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkYXNzb2NfdHlwZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRhc3NvY190eXBlOwogICAgICAgIH0KCiAgICAgICAgJGFzc29jX2hhbmRsZSA9ICRhc3NvY19yZXNwb25zZS0+Z2V0QXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9PUEVOSURfTlMsICdhc3NvY19oYW5kbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9OT19ERUZBVUxUKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJGFzc29jX2hhbmRsZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRhc3NvY19oYW5kbGU7CiAgICAgICAgfQoKICAgICAgICAvLyBleHBpcmVzX2luIGlzIGEgYmFzZS0xMCBzdHJpbmcuIFRoZSBQeXRob24gcGFyc2luZyB3aWxsCiAgICAgICAgLy8gYWNjZXB0IGxpdGVyYWxzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGFyb3VuZCB0aGVtIGFuZCB3aWxsCiAgICAgICAgLy8gYWNjZXB0IG5lZ2F0aXZlIHZhbHVlcy4gTmVpdGhlciBvZiB0aGVzZSBhcmUgcmVhbGx5IGluLXNwZWMsCiAgICAgICAgLy8gYnV0IHdlIHRoaW5rIGl0J3MgT0sgdG8gYWNjZXB0IHRoZW0uCiAgICAgICAgJGV4cGlyZXNfaW5fc3RyID0gJGFzc29jX3Jlc3BvbnNlLT5nZXRBcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfT1BFTklEX05TLCAnZXhwaXJlc19pbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfTk9fREVGQVVMVCk7CgogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRleHBpcmVzX2luX3N0cikpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBpcmVzX2luX3N0cjsKICAgICAgICB9CgogICAgICAgICRleHBpcmVzX2luID0gQXV0aF9PcGVuSUQ6OmludHZhbCgkZXhwaXJlc19pbl9zdHIpOwogICAgICAgIGlmICgkZXhwaXJlc19pbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRlcnIgPSBzcHJpbnRmKCJDb3VsZCBub3QgcGFyc2UgZXhwaXJlc19pbiBmcm9tIGFzc29jaWF0aW9uICIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNwb25zZSAlcyIsIHByaW50X3IoJGFzc29jX3Jlc3BvbnNlLCB0cnVlKSk7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlKG51bGwsICRlcnIpOwogICAgICAgIH0KCiAgICAgICAgLy8gT3BlbklEIDEgaGFzIGZ1bm55IGFzc29jaWF0aW9uIHNlc3Npb24gYmVoYXZpb3VyLgogICAgICAgIGlmICgkYXNzb2NfcmVzcG9uc2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgICRzZXNzaW9uX3R5cGUgPSAkdGhpcy0+X2dldE9wZW5JRDFTZXNzaW9uVHlwZSgkYXNzb2NfcmVzcG9uc2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZXNzaW9uX3R5cGUgPSAkYXNzb2NfcmVzcG9uc2UtPmdldEFyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRDJfTlMsICdzZXNzaW9uX3R5cGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfTk9fREVGQVVMVCk7CgogICAgICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkc2Vzc2lvbl90eXBlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRzZXNzaW9uX3R5cGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNlc3Npb24gdHlwZSBtaXNtYXRjaAogICAgICAgIGlmICgkYXNzb2Nfc2Vzc2lvbi0+c2Vzc2lvbl90eXBlICE9ICRzZXNzaW9uX3R5cGUpIHsKICAgICAgICAgICAgaWYgKCRhc3NvY19yZXNwb25zZS0+aXNPcGVuSUQxKCkgJiYKICAgICAgICAgICAgICAgICgkc2Vzc2lvbl90eXBlID09ICduby1lbmNyeXB0aW9uJykpIHsKICAgICAgICAgICAgICAgIC8vIEluIE9wZW5JRCAxLCBhbnkgYXNzb2NpYXRpb24gcmVxdWVzdCBjYW4gcmVzdWx0IGluCiAgICAgICAgICAgICAgICAvLyBhICduby1lbmNyeXB0aW9uJyBhc3NvY2lhdGlvbiByZXNwb25zZS4gU2V0dGluZwogICAgICAgICAgICAgICAgLy8gYXNzb2Nfc2Vzc2lvbiB0byBhIG5ldyBuby1lbmNyeXB0aW9uIHNlc3Npb24gc2hvdWxkCiAgICAgICAgICAgICAgICAvLyBtYWtlIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gd29yayBwcm9wZXJseSBmb3IKICAgICAgICAgICAgICAgIC8vIHRoYXQgY2FzZS4KICAgICAgICAgICAgICAgICRhc3NvY19zZXNzaW9uID0gbmV3IEF1dGhfT3BlbklEX1BsYWluVGV4dENvbnN1bWVyU2Vzc2lvbigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQW55IG90aGVyIG1pc21hdGNoLCByZWdhcmRsZXNzIG9mIHByb3RvY29sIHZlcnNpb24KICAgICAgICAgICAgICAgIC8vIHJlc3VsdHMgaW4gdGhlIGZhaWx1cmUgb2YgdGhlIGFzc29jaWF0aW9uIHNlc3Npb24KICAgICAgICAgICAgICAgIC8vIGFsdG9nZXRoZXIuCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTWFrZSBzdXJlIGFzc29jX3R5cGUgaXMgdmFsaWQgZm9yIHNlc3Npb25fdHlwZQogICAgICAgIGlmICghaW5fYXJyYXkoJGFzc29jX3R5cGUsICRhc3NvY19zZXNzaW9uLT5hbGxvd2VkX2Fzc29jX3R5cGVzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIERlbGVnYXRlIHRvIHRoZSBhc3NvY2lhdGlvbiBzZXNzaW9uIHRvIGV4dHJhY3QgdGhlIHNlY3JldAogICAgICAgIC8vIGZyb20gdGhlIHJlc3BvbnNlLCBob3dldmVyIGlzIGFwcHJvcHJpYXRlIGZvciB0aGF0IHNlc3Npb24KICAgICAgICAvLyB0eXBlLgogICAgICAgICRzZWNyZXQgPSAkYXNzb2Nfc2Vzc2lvbi0+ZXh0cmFjdFNlY3JldCgkYXNzb2NfcmVzcG9uc2UpOwoKICAgICAgICBpZiAoJHNlY3JldCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9Bc3NvY2lhdGlvbjo6ZnJvbUV4cGlyZXNJbigKICAgICAgICAgICAgICAgICAkZXhwaXJlc19pbiwgJGFzc29jX2hhbmRsZSwgJHNlY3JldCwgJGFzc29jX3R5cGUpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jcmVhdGVBc3NvY2lhdGVSZXF1ZXN0KCRlbmRwb2ludCwgJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJHNlc3Npb25fdHlwZSwgJHRoaXMtPnNlc3Npb25fdHlwZXMpKSB7CiAgICAgICAgICAgICRzZXNzaW9uX3R5cGVfY2xhc3MgPSAkdGhpcy0+c2Vzc2lvbl90eXBlc1skc2Vzc2lvbl90eXBlXTsKCiAgICAgICAgICAgIGlmIChpc19jYWxsYWJsZSgkc2Vzc2lvbl90eXBlX2NsYXNzKSkgewogICAgICAgICAgICAgICAgJGFzc29jX3Nlc3Npb24gPSAkc2Vzc2lvbl90eXBlX2NsYXNzKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYXNzb2Nfc2Vzc2lvbiA9IG5ldyAkc2Vzc2lvbl90eXBlX2NsYXNzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRhcmdzID0gYXJyYXkoCiAgICAgICAgICAgICdtb2RlJyA9PiAnYXNzb2NpYXRlJywKICAgICAgICAgICAgJ2Fzc29jX3R5cGUnID0+ICRhc3NvY190eXBlKTsKCiAgICAgICAgaWYgKCEkZW5kcG9pbnQtPmNvbXBhdGliaWxpdHlNb2RlKCkpIHsKICAgICAgICAgICAgJGFyZ3NbJ25zJ10gPSBBdXRoX09wZW5JRF9PUEVOSUQyX05TOwogICAgICAgIH0KCiAgICAgICAgLy8gTGVhdmUgb3V0IHRoZSBzZXNzaW9uIHR5cGUgaWYgd2UncmUgaW4gY29tcGF0aWJpbGl0eSBtb2RlCiAgICAgICAgLy8gKmFuZCogaXQncyBuby1lbmNyeXB0aW9uLgogICAgICAgIGlmICgoISRlbmRwb2ludC0+Y29tcGF0aWJpbGl0eU1vZGUoKSkgfHwKICAgICAgICAgICAgKCRhc3NvY19zZXNzaW9uLT5zZXNzaW9uX3R5cGUgIT0gJ25vLWVuY3J5cHRpb24nKSkgewogICAgICAgICAgICAkYXJnc1snc2Vzc2lvbl90eXBlJ10gPSAkYXNzb2Nfc2Vzc2lvbi0+c2Vzc2lvbl90eXBlOwogICAgICAgIH0KCiAgICAgICAgJGFyZ3MgPSBhcnJheV9tZXJnZSgkYXJncywgJGFzc29jX3Nlc3Npb24tPmdldFJlcXVlc3QoKSk7CiAgICAgICAgJG1lc3NhZ2UgPSBBdXRoX09wZW5JRF9NZXNzYWdlOjpmcm9tT3BlbklEQXJncygkYXJncyk7CiAgICAgICAgcmV0dXJuIGFycmF5KCRhc3NvY19zZXNzaW9uLCAkbWVzc2FnZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhc3NvY2lhdGlvbiByZXNwb25zZSBtZXNzYWdlLCBleHRyYWN0IHRoZSBPcGVuSUQgMS5YCiAgICAgKiBzZXNzaW9uIHR5cGUuCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiBtb3N0bHkgdGFrZXMgY2FyZSBvZiB0aGUgJ25vLWVuY3J5cHRpb24nIGRlZmF1bHQKICAgICAqIGJlaGF2aW9yIGluIE9wZW5JRCAxLgogICAgICoKICAgICAqIElmIHRoZSBhc3NvY2lhdGlvbiB0eXBlIGlzIHBsYWluLXRleHQsIHRoaXMgZnVuY3Rpb24gd2lsbAogICAgICogcmV0dXJuICduby1lbmNyeXB0aW9uJwogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHJldHVybiAkdHlwIFRoZSBhc3NvY2lhdGlvbiB0eXBlIGZvciB0aGlzIG1lc3NhZ2UKICAgICAqLwogICAgZnVuY3Rpb24gX2dldE9wZW5JRDFTZXNzaW9uVHlwZSgkYXNzb2NfcmVzcG9uc2UpCiAgICB7CiAgICAgICAgLy8gSWYgaXQncyBhbiBPcGVuSUQgMSBtZXNzYWdlLCBhbGxvdyBzZXNzaW9uX3R5cGUgdG8gZGVmYXVsdAogICAgICAgIC8vIHRvIE5vbmUgKHdoaWNoIHNpZ25pZmllcyAibm8tZW5jcnlwdGlvbiIpCiAgICAgICAgJHNlc3Npb25fdHlwZSA9ICRhc3NvY19yZXNwb25zZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRDFfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXNzaW9uX3R5cGUnKTsKCiAgICAgICAgLy8gSGFuZGxlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5vLWVuY3J5cHRpb24gYXNzb2NpYXRpb24KICAgICAgICAvLyByZXNwb25lcyBpbiBPcGVuSUQgMSBhbmQgMjoKCiAgICAgICAgLy8gbm8tZW5jcnlwdGlvbiBpcyBub3QgcmVhbGx5IGEgdmFsaWQgc2Vzc2lvbiB0eXBlIGZvciBPcGVuSUQKICAgICAgICAvLyAxLCBidXQgd2UnbGwgYWNjZXB0IGl0IGFueXdheSwgd2hpbGUgaXNzdWluZyBhIHdhcm5pbmcuCiAgICAgICAgaWYgKCRzZXNzaW9uX3R5cGUgPT0gJ25vLWVuY3J5cHRpb24nKSB7CiAgICAgICAgICAgIC8vIG9pZHV0aWwubG9nKCdXQVJOSU5HOiBPcGVuSUQgc2VydmVyIHNlbnQgIm5vLWVuY3J5cHRpb24iJwogICAgICAgICAgICAvLyAgICAgICAgICAgICAnZm9yIE9wZW5JRCAxLlgnKQogICAgICAgIH0gZWxzZSBpZiAoKCRzZXNzaW9uX3R5cGUgPT0gJycpIHx8ICgkc2Vzc2lvbl90eXBlID09PSBudWxsKSkgewogICAgICAgICAgICAvLyBNaXNzaW5nIG9yIGVtcHR5IHNlc3Npb24gdHlwZSBpcyB0aGUgd2F5IHRvIGZsYWcgYQogICAgICAgICAgICAvLyAnbm8tZW5jcnlwdGlvbicgcmVzcG9uc2UuIENoYW5nZSB0aGUgc2Vzc2lvbiB0eXBlIHRvCiAgICAgICAgICAgIC8vICduby1lbmNyeXB0aW9uJyBzbyB0aGF0IGl0IGNhbiBiZSBoYW5kbGVkIGluIHRoZSBzYW1lCiAgICAgICAgICAgIC8vIHdheSBhcyBPcGVuSUQgMiAnbm8tZW5jcnlwdGlvbicgcmVzcG9uZXMuCiAgICAgICAgICAgICRzZXNzaW9uX3R5cGUgPSAnbm8tZW5jcnlwdGlvbic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlc3Npb25fdHlwZTsKICAgIH0KfQoKLyoqCiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZyb20gYSBjb25zdW1lciB0bwogKiBhbiBPcGVuSUQgc2VydmVyLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0IHsKCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aXRoIHRoZSBzcGVjaWZpZWQgdG9rZW4sCiAgICAgKiBhc3NvY2lhdGlvbiwgYW5kIGVuZHBvaW50LgogICAgICoKICAgICAqIFVzZXJzIG9mIHRoaXMgbGlicmFyeSBzaG91bGQgbm90IGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhpcwogICAgICogY2xhc3MuICBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBieSB0aGUgbGlicmFyeSB3aGVuCiAgICAgKiBuZWVkZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0KCRlbmRwb2ludCwgJGFzc29jKQogICAgewogICAgICAgICR0aGlzLT5hc3NvYyA9ICRhc3NvYzsKICAgICAgICAkdGhpcy0+ZW5kcG9pbnQgPSAkZW5kcG9pbnQ7CiAgICAgICAgJHRoaXMtPnJldHVybl90b19hcmdzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+bWVzc2FnZSA9IG5ldyBBdXRoX09wZW5JRF9NZXNzYWdlKAogICAgICAgICAgICAkZW5kcG9pbnQtPnByZWZlcnJlZE5hbWVzcGFjZSgpKTsKICAgICAgICAkdGhpcy0+X2Fub255bW91cyA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGV4dGVuc2lvbiB0byB0aGlzIGNoZWNraWQgcmVxdWVzdC4KICAgICAqCiAgICAgKiAkZXh0ZW5zaW9uX3JlcXVlc3Q6IEFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGV4dGVuc2lvbgogICAgICogcmVxdWVzdCBpbnRlcmZhY2UgZm9yIGFkZGluZyBhcmd1bWVudHMgdG8gYW4gT3BlbklEIG1lc3NhZ2UuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZEV4dGVuc2lvbigkZXh0ZW5zaW9uX3JlcXVlc3QpCiAgICB7CiAgICAgICAgJGV4dGVuc2lvbl9yZXF1ZXN0LT50b01lc3NhZ2UoJHRoaXMtPm1lc3NhZ2UpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGV4dGVuc2lvbiBhcmd1bWVudCB0byB0aGlzIE9wZW5JRCBhdXRoZW50aWNhdGlvbgogICAgICogcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgY2F1dGlvbiB3aGVuIGFkZGluZyBhcmd1bWVudHMsIGJlY2F1c2UgdGhleSB3aWxsIGJlCiAgICAgKiBVUkwtZXNjYXBlZCBhbmQgYXBwZW5kZWQgdG8gdGhlIHJlZGlyZWN0IFVSTCwgd2hpY2ggY2FuIGVhc2lseQogICAgICogZ2V0IHF1aXRlIGxvbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBleHRlbnNpb24uIEZvcgogICAgICogZXhhbXBsZSwgdGhlIHNpbXBsZSByZWdpc3RyYXRpb24gZXh0ZW5zaW9uIHVzZXMgdGhlIG5hbWVzcGFjZQogICAgICogJ3NyZWcnLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHdpdGhpbiB0aGUgZXh0ZW5zaW9uIG5hbWVzcGFjZS4gRm9yCiAgICAgKiBleGFtcGxlLCB0aGUgbmlja25hbWUgZmllbGQgaW4gdGhlIHNpbXBsZSByZWdpc3RyYXRpb24KICAgICAqIGV4dGVuc2lvbidzIGtleSBpcyAnbmlja25hbWUnLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIHRoZSBzZXJ2ZXIgZm9yCiAgICAgKiB0aGlzIGFyZ3VtZW50LgogICAgICovCiAgICBmdW5jdGlvbiBhZGRFeHRlbnNpb25BcmcoJG5hbWVzcGFjZSwgJGtleSwgJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWVzc2FnZS0+c2V0QXJnKCRuYW1lc3BhY2UsICRrZXksICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciB0aGlzIHJlcXVlc3Qgc2hvdWxkIGJlIG1hZGUgYW5vbnltb3VzbHkuIElmIGEKICAgICAqIHJlcXVlc3QgaXMgYW5vbnltb3VzLCB0aGUgaWRlbnRpZmllciB3aWxsIG5vdCBiZSBzZW50IGluIHRoZQogICAgICogcmVxdWVzdC4gVGhpcyBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgYXJlIG1ha2luZyBhbm90aGVyIGtpbmQgb2YKICAgICAqIHJlcXVlc3Qgd2l0aCBhbiBleHRlbnNpb24gaW4gdGhpcyByZXF1ZXN0LgogICAgICoKICAgICAqIEFub255bW91cyByZXF1ZXN0cyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBtYWRlCiAgICAgKiB3aXRoIE9wZW5JRCAxLgogICAgICovCiAgICBmdW5jdGlvbiBzZXRBbm9ueW1vdXMoJGlzX2Fub255bW91cykKICAgIHsKICAgICAgICBpZiAoJGlzX2Fub255bW91cyAmJiAkdGhpcy0+bWVzc2FnZS0+aXNPcGVuSUQxKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5fYW5vbnltb3VzID0gJGlzX2Fub255bW91czsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUHJvZHVjZSBhIHtAbGluayBBdXRoX09wZW5JRF9NZXNzYWdlfSByZXByZXNlbnRpbmcgdGhpcwogICAgICogcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFsbSBUaGUgVVJMIChvciBVUkwgcGF0dGVybikgdGhhdCBpZGVudGlmaWVzCiAgICAgKiB5b3VyIHdlYiBzaXRlIHRvIHRoZSB1c2VyIHdoZW4gc2hlIGlzIGF1dGhvcml6aW5nIGl0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJldHVybl90byBUaGUgVVJMIHRoYXQgdGhlIE9wZW5JRCBwcm92aWRlciB3aWxsCiAgICAgKiBzZW5kIHRoZSB1c2VyIGJhY2sgdG8gYWZ0ZXIgYXR0ZW1wdGluZyB0byB2ZXJpZnkgaGVyIGlkZW50aXR5LgogICAgICoKICAgICAqIE5vdCBzcGVjaWZ5aW5nIGEgcmV0dXJuX3RvIFVSTCBtZWFucyB0aGF0IHRoZSB1c2VyIHdpbGwgbm90IGJlCiAgICAgKiByZXR1cm5lZCB0byB0aGUgc2l0ZSBpc3N1aW5nIHRoZSByZXF1ZXN0IHVwb24gaXRzIGNvbXBsZXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGltbWVkaWF0ZSBJZiB0cnVlLCB0aGUgT3BlbklEIHByb3ZpZGVyIGlzIHRvIHNlbmQKICAgICAqIGJhY2sgYSByZXNwb25zZSBpbW1lZGlhdGVseSwgdXNlZnVsIGZvciBiZWhpbmQtdGhlLXNjZW5lcwogICAgICogYXV0aGVudGljYXRpb24gYXR0ZW1wdHMuICBPdGhlcndpc2UgdGhlIE9wZW5JRCBwcm92aWRlciBtYXkKICAgICAqIGVuZ2FnZSB0aGUgdXNlciBiZWZvcmUgcHJvdmlkaW5nIGEgcmVzcG9uc2UuICBUaGlzIGlzIHRoZQogICAgICogZGVmYXVsdCBjYXNlLCBhcyB0aGUgdXNlciBtYXkgbmVlZCB0byBwcm92aWRlIGNyZWRlbnRpYWxzIG9yCiAgICAgKiBhcHByb3ZlIHRoZSByZXF1ZXN0IGJlZm9yZSBhIHBvc2l0aXZlIHJlc3BvbnNlIGNhbiBiZSBzZW50LgogICAgICovCiAgICBmdW5jdGlvbiBnZXRNZXNzYWdlKCRyZWFsbSwgJHJldHVybl90bz1udWxsLCAkaW1tZWRpYXRlPWZhbHNlKQogICAgewogICAgICAgIGlmICgkcmV0dXJuX3RvKSB7CiAgICAgICAgICAgICRyZXR1cm5fdG8gPSBBdXRoX09wZW5JRDo6YXBwZW5kQXJncygkcmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJldHVybl90b19hcmdzKTsKICAgICAgICB9IGVsc2UgaWYgKCRpbW1lZGlhdGUpIHsKICAgICAgICAgICAgLy8gcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgLy8gICAgICcicmV0dXJuX3RvIiBpcyBtYW5kYXRvcnkgd2hlbgogICAgICAgICAgICAvL3VzaW5nICJjaGVja2lkX2ltbWVkaWF0ZSInKQogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICIncmV0dXJuX3RvJyBpcyBtYW5kYXRvcnkgd2hlbiB1c2luZyBjaGVja2lkX2ltbWVkaWF0ZSIpOwogICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgIC8vIHJhaXNlIFZhbHVlRXJyb3IoJyJyZXR1cm5fdG8iIGlzCiAgICAgICAgICAgIC8vIG1hbmRhdG9yeSBmb3IgT3BlbklEIDEgcmVxdWVzdHMnKQogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICIncmV0dXJuX3RvJyBpcyBtYW5kYXRvcnkgZm9yIE9wZW5JRCAxIHJlcXVlc3RzIik7CiAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+cmV0dXJuX3RvX2FyZ3MpIHsKICAgICAgICAgICAgLy8gcmFpc2UgVmFsdWVFcnJvcignZXh0cmEgInJldHVybl90byIgYXJndW1lbnRzCiAgICAgICAgICAgIC8vIHdlcmUgc3BlY2lmaWVkLCBidXQgbm8gcmV0dXJuX3RvIHdhcyBzcGVjaWZpZWQnKQogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICJleHRyYSAncmV0dXJuX3RvJyBhcmd1bWVudHMgd2hlcmUgc3BlY2lmaWVkLCAiIC4KICAgICAgICAgICAgICAiYnV0IG5vIHJldHVybl90byB3YXMgc3BlY2lmaWVkIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGltbWVkaWF0ZSkgewogICAgICAgICAgICAkbW9kZSA9ICdjaGVja2lkX2ltbWVkaWF0ZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1vZGUgPSAnY2hlY2tpZF9zZXR1cCc7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9ICR0aGlzLT5tZXNzYWdlLT5jb3B5KCk7CiAgICAgICAgaWYgKCRtZXNzYWdlLT5pc09wZW5JRDEoKSkgewogICAgICAgICAgICAkcmVhbG1fa2V5ID0gJ3RydXN0X3Jvb3QnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZWFsbV9rZXkgPSAncmVhbG0nOwogICAgICAgIH0KCiAgICAgICAgJG1lc3NhZ2UtPnVwZGF0ZUFyZ3MoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFsbV9rZXkgPT4gJHJlYWxtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RlJyA9PiAkbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV0dXJuX3RvJyA9PiAkcmV0dXJuX3RvKSk7CgogICAgICAgIGlmICghJHRoaXMtPl9hbm9ueW1vdXMpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5lbmRwb2ludC0+aXNPUElkZW50aWZpZXIoKSkgewogICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiB3aGVuIHdlJ3JlIGluIGNvbXBhdGliaWxpdHkKICAgICAgICAgICAgICAgIC8vIG1vZGUsIGFzIGxvbmcgYXMgaXNPUElkZW50aWZpZXIoKSByZXR1cm5zIEZhbHNlCiAgICAgICAgICAgICAgICAvLyB3aGVuZXZlciBwcmVmZXJyZWROYW1lc3BhY2UoKSByZXR1cm5zIE9QRU5JRDFfTlMuCiAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCA9ICRyZXF1ZXN0X2lkZW50aXR5ID0KICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9JREVOVElGSUVSX1NFTEVDVDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXF1ZXN0X2lkZW50aXR5ID0gJHRoaXMtPmVuZHBvaW50LT5nZXRMb2NhbElEKCk7CiAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCA9ICR0aGlzLT5lbmRwb2ludC0+Y2xhaW1lZF9pZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gVGhpcyBpcyB0cnVlIGZvciBib3RoIE9wZW5JRCAxIGFuZCAyCiAgICAgICAgICAgICRtZXNzYWdlLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnaWRlbnRpdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0X2lkZW50aXR5KTsKCiAgICAgICAgICAgIGlmICgkbWVzc2FnZS0+aXNPcGVuSUQyKCkpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEMl9OUywgJ2NsYWltZWRfaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+YXNzb2MpIHsKICAgICAgICAgICAgJG1lc3NhZ2UtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdhc3NvY19oYW5kbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvYy0+aGFuZGxlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWVzc2FnZTsKICAgIH0KCiAgICBmdW5jdGlvbiByZWRpcmVjdFVSTCgkcmVhbG0sICRyZXR1cm5fdG8gPSBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgJGltbWVkaWF0ZSA9IGZhbHNlKQogICAgewogICAgICAgICRtZXNzYWdlID0gJHRoaXMtPmdldE1lc3NhZ2UoJHJlYWxtLCAkcmV0dXJuX3RvLCAkaW1tZWRpYXRlKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkbWVzc2FnZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWVzc2FnZS0+dG9VUkwoJHRoaXMtPmVuZHBvaW50LT5zZXJ2ZXJfdXJsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBodG1sIGZvciBhIGZvcm0gdG8gc3VibWl0IHRoaXMgcmVxdWVzdCB0byB0aGUgSURQLgogICAgICoKICAgICAqIGZvcm1fdGFnX2F0dHJzOiBBbiBhcnJheSBvZiBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIHRvIHRoZSBmb3JtCiAgICAgKiB0YWcuICdhY2NlcHQtY2hhcnNldCcgYW5kICdlbmN0eXBlJyBoYXZlIGRlZmF1bHRzIHRoYXQgY2FuIGJlCiAgICAgKiBvdmVycmlkZGVuLiBJZiBhIHZhbHVlIGlzIHN1cHBsaWVkIGZvciAnYWN0aW9uJyBvciAnbWV0aG9kJywgaXQKICAgICAqIHdpbGwgYmUgcmVwbGFjZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZvcm1NYXJrdXAoJHJlYWxtLCAkcmV0dXJuX3RvPW51bGwsICRpbW1lZGlhdGU9ZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICRmb3JtX3RhZ19hdHRycz1udWxsKQogICAgewogICAgICAgICRtZXNzYWdlID0gJHRoaXMtPmdldE1lc3NhZ2UoJHJlYWxtLCAkcmV0dXJuX3RvLCAkaW1tZWRpYXRlKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG1lc3NhZ2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkbWVzc2FnZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWVzc2FnZS0+dG9Gb3JtTWFya3VwKCR0aGlzLT5lbmRwb2ludC0+c2VydmVyX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9ybV90YWdfYXR0cnMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgY29tcGxldGUgaHRtbCBkb2N1bWVudCB0aGF0IHdpbGwgYXV0b3N1Ym1pdCB0aGUgcmVxdWVzdAogICAgICogdG8gdGhlIElEUC4KICAgICAqCiAgICAgKiBXcmFwcyBmb3JtTWFya3VwLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IGZ1bmN0aW9uLgogICAgICovCiAgICBmdW5jdGlvbiBodG1sTWFya3VwKCRyZWFsbSwgJHJldHVybl90bz1udWxsLCAkaW1tZWRpYXRlPWZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAkZm9ybV90YWdfYXR0cnM9bnVsbCkKICAgIHsKICAgICAgICAkZm9ybSA9ICR0aGlzLT5mb3JtTWFya3VwKCRyZWFsbSwgJHJldHVybl90bywgJGltbWVkaWF0ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9ybV90YWdfYXR0cnMpOwoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkZm9ybSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmb3JtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gQXV0aF9PcGVuSUQ6OmF1dG9TdWJtaXRIVE1MKCRmb3JtKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG91bGRTZW5kUmVkaXJlY3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZW5kcG9pbnQtPmNvbXBhdGliaWxpdHlNb2RlKCk7CiAgICB9Cn0KCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgcmVzcG9uc2VzIGZyb20gdGhlIEF1dGhfT3BlbklEX0NvbnN1bWVyLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgewogICAgdmFyICRzdGF0dXMgPSBudWxsOwoKICAgIGZ1bmN0aW9uIHNldEVuZHBvaW50KCRlbmRwb2ludCkKICAgIHsKICAgICAgICAkdGhpcy0+ZW5kcG9pbnQgPSAkZW5kcG9pbnQ7CiAgICAgICAgaWYgKCRlbmRwb2ludCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+aWRlbnRpdHlfdXJsID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+aWRlbnRpdHlfdXJsID0gJGVuZHBvaW50LT5jbGFpbWVkX2lkOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGlzcGxheSBpZGVudGlmaWVyIGZvciB0aGlzIHJlc3BvbnNlLgogICAgICoKICAgICAqIFRoZSBkaXNwbGF5IGlkZW50aWZpZXIgaXMgcmVsYXRlZCB0byB0aGUgQ2xhaW1lZCBJZGVudGlmaWVyLCBidXQgdGhlCiAgICAgKiB0d28gYXJlIG5vdCBhbHdheXMgaWRlbnRpY2FsLiAgVGhlIGRpc3BsYXkgaWRlbnRpZmllciBpcyBzb21ldGhpbmcgdGhlCiAgICAgKiB1c2VyIHNob3VsZCByZWNvZ25pemUgYXMgd2hhdCB0aGV5IGVudGVyZWQsIHdoZXJlYXMgdGhlIHJlc3BvbnNlJ3MKICAgICAqIGNsYWltZWQgaWRlbnRpZmllciAoaW4gdGhlIGlkZW50aXR5X3VybCBhdHRyaWJ1dGUpIG1heSBoYXZlIGV4dHJhCiAgICAgKiBpbmZvcm1hdGlvbiBmb3IgYmV0dGVyIHBlcnNpc3RlbmNlLgogICAgICoKICAgICAqIFVSTHMgd2lsbCBiZSBzdHJpcHBlZCBvZiB0aGVpciBmcmFnbWVudHMgZm9yIGRpc3BsYXkuICBYUklzIHdpbGwKICAgICAqIGRpc3BsYXkgdGhlIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXIgKGktbmFtZSkgaW5zdGVhZCBvZiB0aGUKICAgICAqIHBlcnNpc3RlbnQgaWRlbnRpZmllciAoaS1udW1iZXIpLgogICAgICoKICAgICAqIFVzZSB0aGUgZGlzcGxheSBpZGVudGlmaWVyIGluIHlvdXIgdXNlciBpbnRlcmZhY2UuICBVc2UKICAgICAqIGlkZW50aXR5X3VybCBmb3IgcXVlcnlpbmcgeW91ciBkYXRhYmFzZSBvciBhdXRob3JpemF0aW9uIHNlcnZlci4KICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldERpc3BsYXlJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuZHBvaW50ICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZW5kcG9pbnQtPmdldERpc3BsYXlJZGVudGlmaWVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9CgovKioKICogQSByZXNwb25zZSB3aXRoIGEgc3RhdHVzIG9mIEF1dGhfT3BlbklEX1NVQ0NFU1MuIEluZGljYXRlcyB0aGF0CiAqIHRoaXMgcmVxdWVzdCBpcyBhIHN1Y2Nlc3NmdWwgYWNrbm93bGVkZ2VtZW50IGZyb20gdGhlIE9wZW5JRCBzZXJ2ZXIKICogdGhhdCB0aGUgc3VwcGxpZWQgVVJMIGlzLCBpbmRlZWQgY29udHJvbGxlZCBieSB0aGUgcmVxdWVzdGluZwogKiBhZ2VudC4gIFRoaXMgaGFzIHRocmVlIHJlbGV2YW50IGF0dHJpYnV0ZXM6CiAqCiAqIGNsYWltZWRfaWQgLSBUaGUgaWRlbnRpdHkgVVJMIHRoYXQgaGFzIGJlZW4gYXV0aGVudGljYXRlZAogKgogKiBzaWduZWRfYXJncyAtIFRoZSBhcmd1bWVudHMgaW4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRoYXQgd2VyZQogKiBzaWduZWQgYW5kIHZlcmlmaWVkLgogKgogKiBzdGF0dXMgLSBBdXRoX09wZW5JRF9TVUNDRVNTLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1N1Y2Nlc3NSZXNwb25zZSBleHRlbmRzIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgewogICAgdmFyICRzdGF0dXMgPSBBdXRoX09wZW5JRF9TVUNDRVNTOwoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1N1Y2Nlc3NSZXNwb25zZSgkZW5kcG9pbnQsICRtZXNzYWdlLCAkc2lnbmVkX2FyZ3M9bnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+ZW5kcG9pbnQgPSAkZW5kcG9pbnQ7CiAgICAgICAgJHRoaXMtPmlkZW50aXR5X3VybCA9ICRlbmRwb2ludC0+Y2xhaW1lZF9pZDsKICAgICAgICAkdGhpcy0+c2lnbmVkX2FyZ3MgPSAkc2lnbmVkX2FyZ3M7CiAgICAgICAgJHRoaXMtPm1lc3NhZ2UgPSAkbWVzc2FnZTsKCiAgICAgICAgaWYgKCR0aGlzLT5zaWduZWRfYXJncyA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c2lnbmVkX2FyZ3MgPSBhcnJheSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3Qgc2lnbmVkIGV4dGVuc2lvbiBkYXRhIGZyb20gdGhlIHNlcnZlcidzIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBUaGUgZXh0ZW5zaW9uIG5hbWVzcGFjZSBmcm9tIHdoaWNoIHRvCiAgICAgKiBleHRyYWN0IHRoZSBleHRlbnNpb24gZGF0YS4KICAgICAqLwogICAgZnVuY3Rpb24gZXh0ZW5zaW9uUmVzcG9uc2UoJG5hbWVzcGFjZV91cmksICRyZXF1aXJlX3NpZ25lZCkKICAgIHsKICAgICAgICBpZiAoJHJlcXVpcmVfc2lnbmVkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0U2lnbmVkTlMoJG5hbWVzcGFjZV91cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bWVzc2FnZS0+Z2V0QXJncygkbmFtZXNwYWNlX3VyaSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGlzT3BlbklEMSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tZXNzYWdlLT5pc09wZW5JRDEoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1NpZ25lZCgkbnNfdXJpLCAkbnNfa2V5KQogICAgewogICAgICAgIC8vIFJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBrZXkgaXMgc2lnbmVkLCByZWdhcmRsZXNzIG9mCiAgICAgICAgLy8gaXRzIG5hbWVzcGFjZSBhbGlhcwogICAgICAgIHJldHVybiBpbl9hcnJheSgkdGhpcy0+bWVzc2FnZS0+Z2V0S2V5KCRuc191cmksICRuc19rZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2lnbmVkX2FyZ3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNpZ25lZCgkbnNfdXJpLCAkbnNfa2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gUmV0dXJuIHRoZSBzcGVjaWZpZWQgc2lnbmVkIGZpZWxkIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlCiAgICAgICAgLy8gcmV0dXJuIGRlZmF1bHQKICAgICAgICBpZiAoJHRoaXMtPmlzU2lnbmVkKCRuc191cmksICRuc19rZXkpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bWVzc2FnZS0+Z2V0QXJnKCRuc191cmksICRuc19rZXksICRkZWZhdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNpZ25lZE5TKCRuc191cmkpCiAgICB7CiAgICAgICAgJGFyZ3MgPSBhcnJheSgpOwoKICAgICAgICAkbXNnX2FyZ3MgPSAkdGhpcy0+bWVzc2FnZS0+Z2V0QXJncygkbnNfdXJpKTsKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkbXNnX2FyZ3MpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJG1zZ19hcmdzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPmlzU2lnbmVkKCRuc191cmksICRrZXkpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkbXNnX2FyZ3NbJGtleV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG1zZ19hcmdzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBvcGVuaWQucmV0dXJuX3RvIGFyZ3VtZW50IGZyb20gdGhpcyByZXNwb25zZS4KICAgICAqCiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhpcyByZXF1ZXN0IHdhcyBpbml0aWF0ZWQgYnkKICAgICAqIHRoaXMgY29uc3VtZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgJHJldHVybl90byBUaGUgcmV0dXJuX3RvIFVSTCBzdXBwbGllZCB0byB0aGUKICAgICAqIHNlcnZlciBvbiB0aGUgaW5pdGlhbCByZXF1ZXN0LCBvciBudWxsIGlmIHRoZSByZXNwb25zZSBkaWQgbm90CiAgICAgKiBjb250YWluIGFuICdvcGVuaWQucmV0dXJuX3RvJyBhcmd1bWVudC4KICAgICovCiAgICBmdW5jdGlvbiBnZXRSZXR1cm5UbygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduZWQoQXV0aF9PcGVuSURfT1BFTklEX05TLCAncmV0dXJuX3RvJyk7CiAgICB9Cn0KCi8qKgogKiBBIHJlc3BvbnNlIHdpdGggYSBzdGF0dXMgb2YgQXV0aF9PcGVuSURfRkFJTFVSRS4gSW5kaWNhdGVzIHRoYXQgdGhlCiAqIE9wZW5JRCBwcm90b2NvbCBoYXMgZmFpbGVkLiBUaGlzIGNvdWxkIGJlIGxvY2FsbHkgb3IgcmVtb3RlbHkKICogdHJpZ2dlcmVkLiAgVGhpcyBoYXMgdGhyZWUgcmVsZXZhbnQgYXR0cmlidXRlczoKICoKICogY2xhaW1lZF9pZCAtIFRoZSBpZGVudGl0eSBVUkwgZm9yIHdoaWNoIGF1dGhlbnRpY2F0aW9uIHdhcwogKiBhdHRlbXB0ZWQsIGlmIGl0IGNhbiBiZSBkZXRlcm1pbmVkLiAgT3RoZXJ3aXNlLCBudWxsLgogKgogKiBtZXNzYWdlIC0gQSBtZXNzYWdlIGluZGljYXRpbmcgd2h5IHRoZSByZXF1ZXN0IGZhaWxlZCwgaWYgb25lIGlzCiAqIHN1cHBsaWVkLiAgT3RoZXJ3aXNlLCBudWxsLgogKgogKiBzdGF0dXMgLSBBdXRoX09wZW5JRF9GQUlMVVJFLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSBleHRlbmRzIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgewogICAgdmFyICRzdGF0dXMgPSBBdXRoX09wZW5JRF9GQUlMVVJFOwoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZSgkZW5kcG9pbnQsICRtZXNzYWdlID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGFjdCA9IG51bGwsICRyZWZlcmVuY2UgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5zZXRFbmRwb2ludCgkZW5kcG9pbnQpOwogICAgICAgICR0aGlzLT5tZXNzYWdlID0gJG1lc3NhZ2U7CiAgICAgICAgJHRoaXMtPmNvbnRhY3QgPSAkY29udGFjdDsKICAgICAgICAkdGhpcy0+cmVmZXJlbmNlID0gJHJlZmVyZW5jZTsKICAgIH0KfQoKLyoqCiAqIEEgc3BlY2lmaWMsIGludGVybmFsIGZhaWx1cmUgdXNlZCB0byBkZXRlY3QgdHlwZSBVUkkgbWlzbWF0Y2guCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfVHlwZVVSSU1pc21hdGNoIGV4dGVuZHMgQXV0aF9PcGVuSURfRmFpbHVyZVJlc3BvbnNlIHsKfQoKLyoqCiAqIEV4Y2VwdGlvbiB0aGF0IGlzIHJhaXNlZCB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBhIDQwMCByZXNwb25zZQogKiBjb2RlIHRvIGEgZGlyZWN0IHJlcXVlc3QuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU2VydmVyRXJyb3JDb250YWluZXIgewogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfU2VydmVyRXJyb3JDb250YWluZXIoJGVycm9yX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXNzYWdlKQogICAgewogICAgICAgICR0aGlzLT5lcnJvcl90ZXh0ID0gJGVycm9yX3RleHQ7CiAgICAgICAgJHRoaXMtPmVycm9yX2NvZGUgPSAkZXJyb3JfY29kZTsKICAgICAgICAkdGhpcy0+bWVzc2FnZSA9ICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBmcm9tTWVzc2FnZSgkbWVzc2FnZSkKICAgIHsKICAgICAgICAkZXJyb3JfdGV4dCA9ICRtZXNzYWdlLT5nZXRBcmcoCiAgICAgICAgICAgQXV0aF9PcGVuSURfT1BFTklEX05TLCAnZXJyb3InLCAnPG5vIGVycm9yIG1lc3NhZ2Ugc3VwcGxpZWQ+Jyk7CiAgICAgICAgJGVycm9yX2NvZGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2Vycm9yX2NvZGUnKTsKICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yQ29udGFpbmVyKCRlcnJvcl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSk7CiAgICB9Cn0KCi8qKgogKiBBIHJlc3BvbnNlIHdpdGggYSBzdGF0dXMgb2YgQXV0aF9PcGVuSURfQ0FOQ0VMLiBJbmRpY2F0ZXMgdGhhdCB0aGUKICogdXNlciBjYW5jZWxsZWQgdGhlIE9wZW5JRCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LiAgVGhpcyBoYXMgdHdvCiAqIHJlbGV2YW50IGF0dHJpYnV0ZXM6CiAqCiAqIGNsYWltZWRfaWQgLSBUaGUgaWRlbnRpdHkgVVJMIGZvciB3aGljaCBhdXRoZW50aWNhdGlvbiB3YXMKICogYXR0ZW1wdGVkLCBpZiBpdCBjYW4gYmUgZGV0ZXJtaW5lZC4gIE90aGVyd2lzZSwgbnVsbC4KICoKICogc3RhdHVzIC0gQXV0aF9PcGVuSURfU1VDQ0VTUy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9DYW5jZWxSZXNwb25zZSBleHRlbmRzIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgewogICAgdmFyICRzdGF0dXMgPSBBdXRoX09wZW5JRF9DQU5DRUw7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQ2FuY2VsUmVzcG9uc2UoJGVuZHBvaW50KQogICAgewogICAgICAgICR0aGlzLT5zZXRFbmRwb2ludCgkZW5kcG9pbnQpOwogICAgfQp9CgovKioKICogQSByZXNwb25zZSB3aXRoIGEgc3RhdHVzIG9mIEF1dGhfT3BlbklEX1NFVFVQX05FRURFRC4gSW5kaWNhdGVzCiAqIHRoYXQgdGhlIHJlcXVlc3Qgd2FzIGluIGltbWVkaWF0ZSBtb2RlLCBhbmQgdGhlIHNlcnZlciBpcyB1bmFibGUgdG8KICogYXV0aGVudGljYXRlIHRoZSB1c2VyIHdpdGhvdXQgZnVydGhlciBpbnRlcmFjdGlvbi4KICoKICogY2xhaW1lZF9pZCAtIFRoZSBpZGVudGl0eSBVUkwgZm9yIHdoaWNoIGF1dGhlbnRpY2F0aW9uIHdhcwogKiBhdHRlbXB0ZWQuCiAqCiAqIHNldHVwX3VybCAtIEEgVVJMIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VuZCB0aGUgdXNlciB0byB0aGUgc2VydmVyCiAqIHRvIHNldCB1cCBmb3IgYXV0aGVudGljYXRpb24uIFRoZSB1c2VyIHNob3VsZCBiZSByZWRpcmVjdGVkIGluIHRvCiAqIHRoZSBzZXR1cF91cmwsIGVpdGhlciBpbiB0aGUgY3VycmVudCB3aW5kb3cgb3IgaW4gYSBuZXcgYnJvd3NlcgogKiB3aW5kb3cuICBOdWxsIGluIE9wZW5JRCAyLgogKgogKiBzdGF0dXMgLSBBdXRoX09wZW5JRF9TRVRVUF9ORUVERUQuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU2V0dXBOZWVkZWRSZXNwb25zZSBleHRlbmRzIEF1dGhfT3BlbklEX0NvbnN1bWVyUmVzcG9uc2UgewogICAgdmFyICRzdGF0dXMgPSBBdXRoX09wZW5JRF9TRVRVUF9ORUVERUQ7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfU2V0dXBOZWVkZWRSZXNwb25zZSgkZW5kcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXR1cF91cmwgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5zZXRFbmRwb2ludCgkZW5kcG9pbnQpOwogICAgICAgICR0aGlzLT5zZXR1cF91cmwgPSAkc2V0dXBfdXJsOwogICAgfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/CryptUtil.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDcnlwdFV0aWw6IEEgc3VpdGUgb2Ygd3JhcHBlciB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5JRAogKiBsaWJyYXJ5LgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQGFjY2VzcyBwcml2YXRlCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKaWYgKCFkZWZpbmVkKCdBdXRoX09wZW5JRF9SQU5EX1NPVVJDRScpKSB7CiAgICAvKioKICAgICAqIFRoZSBmaWxlbmFtZSBmb3IgYSBzb3VyY2Ugb2YgcmFuZG9tIGJ5dGVzLiBEZWZpbmUgdGhpcyB5b3Vyc2VsZgogICAgICogaWYgeW91IGhhdmUgYSBkaWZmZXJlbnQgc291cmNlIG9mIHJhbmRvbW5lc3MuCiAgICAgKi8KICAgIGRlZmluZSgnQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UnLCAnL2Rldi91cmFuZG9tJyk7Cn0KCmNsYXNzIEF1dGhfT3BlbklEX0NyeXB0VXRpbCB7CiAgICAvKioKICAgICAqIEdldCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByYW5kb20gYnl0ZXMuCiAgICAgKgogICAgICogQXR0ZW1wdHMgdG8gdXNlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIChub3QgcHJlZGljdGFibGUpCiAgICAgKiBzb3VyY2Ugb2YgcmFuZG9tbmVzcyBpZiBhdmFpbGFibGUuIElmIHRoZXJlIGlzIG5vIGhpZ2gtZW50cm9weQogICAgICogcmFuZG9tbmVzcyBzb3VyY2UgYXZhaWxhYmxlLCBpdCB3aWxsIGZhaWwuIEFzIGEgbGFzdCByZXNvcnQsCiAgICAgKiBmb3Igbm9uLWNyaXRpY2FsIHN5c3RlbXMsIGRlZmluZQogICAgICogPGNvZGU+QXV0aF9PcGVuSURfUkFORF9TT1VSQ0U8L2NvZGU+IGFzIDxjb2RlPm51bGw8L2NvZGU+LCBhbmQKICAgICAqIHRoZSBjb2RlIHdpbGwgZmFsbCBiYWNrIG9uIGEgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG51bV9ieXRlcyBUaGUgbGVuZ3RoIG9mIHRoZSByZXR1cm4gdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nICRieXRlcyByYW5kb20gYnl0ZXMKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGdldEJ5dGVzKCRudW1fYnl0ZXMpCiAgICB7CiAgICAgICAgc3RhdGljICRmID0gbnVsbDsKICAgICAgICAkYnl0ZXMgPSAnJzsKICAgICAgICBpZiAoJGYgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKEF1dGhfT3BlbklEX1JBTkRfU09VUkNFID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkZiA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGYgPSBAZm9wZW4oQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UsICJyIik7CiAgICAgICAgICAgICAgICBpZiAoJGYgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJG1zZyA9ICdEZWZpbmUgQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UgYXMgbnVsbCB0byAnIC4KICAgICAgICAgICAgICAgICAgICAgICAgJyBjb250aW51ZSB3aXRoIGFuIGluc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLic7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigkbXNnLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkZiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgLy8gcHNldWRvcmFuZG9tIHVzZWQKICAgICAgICAgICAgJGJ5dGVzID0gJyc7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRudW1fYnl0ZXM7ICRpICs9IDQpIHsKICAgICAgICAgICAgICAgICRieXRlcyAuPSBwYWNrKCdMJywgbXRfcmFuZCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnl0ZXMgPSBzdWJzdHIoJGJ5dGVzLCAwLCAkbnVtX2J5dGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYnl0ZXMgPSBmcmVhZCgkZiwgJG51bV9ieXRlcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYnl0ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm9kdWNlIGEgc3RyaW5nIG9mIGxlbmd0aCByYW5kb20gYnl0ZXMsIGNob3NlbiBmcm9tIGNocnMuICBJZgogICAgICogJGNocnMgaXMgbnVsbCwgdGhlIHJlc3VsdGluZyBzdHJpbmcgbWF5IGNvbnRhaW4gYW55IGNoYXJhY3RlcnMuCiAgICAgKgogICAgICogQHBhcmFtIGludGVnZXIgJGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcKICAgICAqIHJhbmRvbWx5LWdlbmVyYXRlZCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNocnMgQSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmcm9tIHdoaWNoIHRvIGNob29zZQogICAgICogdG8gYnVpbGQgdGhlIG5ldyBzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nICRyZXN1bHQgQSBzdHJpbmcgb2YgcmFuZG9tbHktY2hvc2VuIGNoYXJhY3RlcnMKICAgICAqIGZyb20gJGNocnMKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbVN0cmluZygkbGVuZ3RoLCAkcG9wdWxhdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRwb3B1bGF0aW9uID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9DcnlwdFV0aWw6OmdldEJ5dGVzKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgJHBvcHNpemUgPSBzdHJsZW4oJHBvcHVsYXRpb24pOwoKICAgICAgICBpZiAoJHBvcHNpemUgPiAyNTYpIHsKICAgICAgICAgICAgJG1zZyA9ICdNb3JlIHRoYW4gMjU2IGNoYXJhY3RlcnMgc3VwcGxpZWQgdG8gJyAuIF9fRlVOQ1RJT05fXzsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigkbXNnLCBFX1VTRVJfRVJST1IpOwogICAgICAgIH0KCiAgICAgICAgJGR1cGxpY2F0ZSA9IDI1NiAlICRwb3BzaXplOwoKICAgICAgICAkc3RyID0gIiI7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAkbiA9IG9yZChBdXRoX09wZW5JRF9DcnlwdFV0aWw6OmdldEJ5dGVzKDEpKTsKICAgICAgICAgICAgfSB3aGlsZSAoJG4gPCAkZHVwbGljYXRlKTsKCiAgICAgICAgICAgICRuICU9ICRwb3BzaXplOwogICAgICAgICAgICAkc3RyIC49ICRwb3B1bGF0aW9uWyRuXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3RyOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/DatabaseConnection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGUgQXV0aF9PcGVuSURfRGF0YWJhc2VDb25uZWN0aW9uIGNsYXNzLCB3aGljaCBpcyB1c2VkIHRvIGVtdWxhdGUKICogYSBQRUFSIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKLyoqCiAqIEFuIGVtcHR5IGJhc2UgY2xhc3MgaW50ZW5kZWQgdG8gZW11bGF0ZSBQRUFSIGNvbm5lY3Rpb24KICogZnVuY3Rpb25hbGl0eSBpbiBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwbHkgdGhlaXIgb3duIGRhdGFiYXNlCiAqIGFic3RyYWN0aW9uIG1lY2hhbmlzbXMuICBTZWUge0BsaW5rIEF1dGhfT3BlbklEX1NRTFN0b3JlfSBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbi4gIFlvdSBzaG91bGQgc3ViY2xhc3MgdGhpcyBjbGFzcyBpZiB5b3UgbmVlZCB0byBjcmVhdGUKICogYW4gU1FMIHN0b3JlIHRoYXQgbmVlZHMgdG8gYWNjZXNzIGl0cyBkYXRhYmFzZSB1c2luZyBhbgogKiBhcHBsaWNhdGlvbidzIGRhdGFiYXNlIGFic3RyYWN0aW9uIGxheWVyIGluc3RlYWQgb2YgYSBQRUFSIGRhdGFiYXNlCiAqIGNvbm5lY3Rpb24uICBBbnkgc3ViY2xhc3Mgb2YgQXV0aF9PcGVuSURfRGF0YWJhc2VDb25uZWN0aW9uIE1VU1QKICogYWRoZXJlIHRvIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkIGhlcmUuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfRGF0YWJhc2VDb25uZWN0aW9uIHsKICAgIC8qKgogICAgICogU2V0cyBhdXRvLWNvbW1pdCBtb2RlIG9uIHRoaXMgZGF0YWJhc2UgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkbW9kZSBUcnVlIGlmIGF1dG8tY29tbWl0IGlzIHRvIGJlIHVzZWQ7IGZhbHNlIGlmCiAgICAgKiBub3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGF1dG9Db21taXQoJG1vZGUpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gYW4gU1FMIHF1ZXJ5IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLCBpZiBhbnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3FsIEFuIFNRTCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMuICBUaGUKICAgICAqIHBsYWNlaG9sZGVycyBhcmUgYXNzdW1lZCB0byBiZSBzcGVjaWZpYyB0byB0aGUgZGF0YWJhc2UgZW5naW5lCiAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gaW5zZXJ0IGludG8gdGhlCiAgICAgKiBTUUwgc3RyaW5nIHVzaW5nIHRoaXMgY29ubmVjdGlvbidzIGVzY2FwaW5nIG1lY2hhbmlzbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkICRyZXN1bHQgVGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoaXMgY29ubmVjdGlvbidzCiAgICAgKiBpbnRlcm5hbCBxdWVyeSBmdW5jdGlvbi4gIFRoZSB0eXBlIG9mIHJlc3VsdCBkZXBlbmRzIG9uIHRoZQogICAgICogdW5kZXJseWluZyBkYXRhYmFzZSBlbmdpbmUuICBUaGlzIG1ldGhvZCBpcyB1c3VhbGx5IHVzZWQgd2hlbgogICAgICogdGhlIHJlc3VsdCBvZiBhIHF1ZXJ5IGlzIG5vdCBpbXBvcnRhbnQsIGxpa2UgYSBEREwgcXVlcnkuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHF1ZXJ5KCRzcWwsICRwYXJhbXMgPSBhcnJheSgpKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogU3RhcnRzIGEgdHJhbnNhY3Rpb24gb24gdGhpcyBjb25uZWN0aW9uLCBpZiBzdXBwb3J0ZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGJlZ2luKCkKICAgIHsKICAgIH0KCiAgICAvKioKICAgICAqIENvbW1pdHMgYSB0cmFuc2FjdGlvbiBvbiB0aGlzIGNvbm5lY3Rpb24sIGlmIHN1cHBvcnRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gY29tbWl0KCkKICAgIHsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGEgcm9sbGJhY2sgb24gdGhpcyBjb25uZWN0aW9uLCBpZiBzdXBwb3J0ZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJvbGxiYWNrKCkKICAgIHsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1biBhbiBTUUwgcXVlcnkgYW5kIHJldHVybiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cKICAgICAqIG9mIHRoZSByZXN1bHQgc2V0LCBpZiBhbnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3FsIEFuIFNRTCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMuICBUaGUKICAgICAqIHBsYWNlaG9sZGVycyBhcmUgYXNzdW1lZCB0byBiZSBzcGVjaWZpYyB0byB0aGUgZGF0YWJhc2UgZW5naW5lCiAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gaW5zZXJ0IGludG8gdGhlCiAgICAgKiBTUUwgc3RyaW5nIHVzaW5nIHRoaXMgY29ubmVjdGlvbidzIGVzY2FwaW5nIG1lY2hhbmlzbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkICRyZXN1bHQgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlCiAgICAgKiBmaXJzdCByb3cgb2YgdGhlIHJlc3VsdCBzZXQuICBGYWxzZSBpZiBubyBzdWNoIHJlc3VsdCB3YXMKICAgICAqIGZvdW5kLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRPbmUoJHNxbCwgJHBhcmFtcyA9IGFycmF5KCkpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gYW4gU1FMIHF1ZXJ5IGFuZCByZXR1cm4gdGhlIGZpcnN0IHJvdyBvZiB0aGUgcmVzdWx0IHNldCwgaWYKICAgICAqIGFueS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcWwgQW4gU1FMIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVycy4gIFRoZQogICAgICogcGxhY2Vob2xkZXJzIGFyZSBhc3N1bWVkIHRvIGJlIHNwZWNpZmljIHRvIHRoZSBkYXRhYmFzZSBlbmdpbmUKICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgb2YgcGFyYW1ldGVycyB0byBpbnNlcnQgaW50byB0aGUKICAgICAqIFNRTCBzdHJpbmcgdXNpbmcgdGhpcyBjb25uZWN0aW9uJ3MgZXNjYXBpbmcgbWVjaGFuaXNtLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgJHJlc3VsdCBUaGUgZmlyc3Qgcm93IG9mIHRoZSByZXN1bHQgc2V0LCBpZiBhbnksCiAgICAgKiBrZXllZCBvbiBjb2x1bW4gbmFtZS4gIEZhbHNlIGlmIG5vIHN1Y2ggcmVzdWx0IHdhcyBmb3VuZC4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0Um93KCRzcWwsICRwYXJhbXMgPSBhcnJheSgpKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogUnVuIGFuIFNRTCBxdWVyeSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycywgaWYgYW55LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbCBBbiBTUUwgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzLiAgVGhlCiAgICAgKiBwbGFjZWhvbGRlcnMgYXJlIGFzc3VtZWQgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIGRhdGFiYXNlIGVuZ2luZQogICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRvIGluc2VydCBpbnRvIHRoZQogICAgICogU1FMIHN0cmluZyB1c2luZyB0aGlzIGNvbm5lY3Rpb24ncyBlc2NhcGluZyBtZWNoYW5pc20uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAkcmVzdWx0IEFuIGFycmF5IG9mIGFycmF5cyByZXByZXNlbnRpbmcgdGhlCiAgICAgKiByZXN1bHQgb2YgdGhlIHF1ZXJ5OyBlYWNoIGFycmF5IGlzIGtleWVkIG9uIGNvbHVtbiBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRBbGwoJHNxbCwgJHBhcmFtcyA9IGFycmF5KCkpCiAgICB7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/DiffieHellman.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGUgT3BlbklEIGxpYnJhcnkncyBEaWZmaWUtSGVsbG1hbiBpbXBsZW1lbnRhdGlvbi4KICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9CaWdNYXRoLnBocCc7CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXREZWZhdWx0TW9kKCkKewogICAgcmV0dXJuICcxNTUxNzI4OTgxODE0NzM2OTc0NzEyMzIyNTc3NjM3MTU1Mzk5MTU3MjQ4MDEnLgogICAgICAgICc5NjY5MTU0MDQ0Nzk3MDc3OTUzMTQwNTc2MjkzNzg1NDE5MTc1ODA2NTEyMjc0MjMnLgogICAgICAgICc2OTgxODg5OTM3Mjc4MTYxNTI2NDY2MzE0Mzg1NjE1OTU4MjU2ODgxODg4ODk5NTEnLgogICAgICAgICcyNzIxNTg4NDI2NzU0MTk5NTAzNDEyNTg3MDY1NTY1NDk4MDM1ODAxMDQ4NzA1MzcnLgogICAgICAgICc2ODE0NzY3MjY1MTMyNTU3NDcwNDA3NjU4NTc0NzkyOTEyOTE1NzIzMzQ1MTA2NDMnLgogICAgICAgICcyNDUwOTQ3MTUwMDcyMjk2MjEwOTQxOTQzNDk3ODM5MjU5ODQ3NjAzNzU1OTQ5ODUnLgogICAgICAgICc4NDgyNTMzNTkzMDU1ODU0Mzk2Mzg0NDMnOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXREZWZhdWx0R2VuKCkKewogICAgcmV0dXJuICcyJzsKfQoKLyoqCiAqIFRoZSBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UgY2xhc3MuICBUaGlzIGNsYXNzIHJlbGllcyBvbgogKiB7QGxpbmsgQXV0aF9PcGVuSURfTWF0aExpYnJhcnl9IHRvIHBlcmZvcm0gbGFyZ2UgbnVtYmVyIG9wZXJhdGlvbnMuCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0RpZmZpZUhlbGxtYW4gewoKICAgIHZhciAkbW9kOwogICAgdmFyICRnZW47CiAgICB2YXIgJHByaXZhdGU7CiAgICB2YXIgJGxpYiA9IG51bGw7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hbigkbW9kID0gbnVsbCwgJGdlbiA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcml2YXRlID0gbnVsbCwgJGxpYiA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRsaWIgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPmxpYiA9IEF1dGhfT3BlbklEX2dldE1hdGhMaWIoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+bGliID0gJGxpYjsKICAgICAgICB9CgogICAgICAgIGlmICgkbW9kID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5tb2QgPSAkdGhpcy0+bGliLT5pbml0KEF1dGhfT3BlbklEX2dldERlZmF1bHRNb2QoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPm1vZCA9ICRtb2Q7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGdlbiA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+Z2VuID0gJHRoaXMtPmxpYi0+aW5pdChBdXRoX09wZW5JRF9nZXREZWZhdWx0R2VuKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5nZW4gPSAkZ2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRwcml2YXRlID09PSBudWxsKSB7CiAgICAgICAgICAgICRyID0gJHRoaXMtPmxpYi0+cmFuZCgkdGhpcy0+bW9kKTsKICAgICAgICAgICAgJHRoaXMtPnByaXZhdGUgPSAkdGhpcy0+bGliLT5hZGQoJHIsIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcml2YXRlID0gJHByaXZhdGU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cHVibGljID0gJHRoaXMtPmxpYi0+cG93bW9kKCR0aGlzLT5nZW4sICR0aGlzLT5wcml2YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1vZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2hhcmVkU2VjcmV0KCRjb21wb3NpdGUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5saWItPnBvd21vZCgkY29tcG9zaXRlLCAkdGhpcy0+cHJpdmF0ZSwgJHRoaXMtPm1vZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnB1YmxpYzsKICAgIH0KCiAgICBmdW5jdGlvbiB1c2luZ0RlZmF1bHRWYWx1ZXMoKQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPm1vZCA9PSBBdXRoX09wZW5JRF9nZXREZWZhdWx0TW9kKCkgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5nZW4gPT0gQXV0aF9PcGVuSURfZ2V0RGVmYXVsdEdlbigpKTsKICAgIH0KCiAgICBmdW5jdGlvbiB4b3JTZWNyZXQoJGNvbXBvc2l0ZSwgJHNlY3JldCwgJGhhc2hfZnVuYykKICAgIHsKICAgICAgICAkZGhfc2hhcmVkID0gJHRoaXMtPmdldFNoYXJlZFNlY3JldCgkY29tcG9zaXRlKTsKICAgICAgICAkZGhfc2hhcmVkX3N0ciA9ICR0aGlzLT5saWItPmxvbmdUb0JpbmFyeSgkZGhfc2hhcmVkKTsKICAgICAgICAkaGFzaF9kaF9zaGFyZWQgPSAkaGFzaF9mdW5jKCRkaF9zaGFyZWRfc3RyKTsKCiAgICAgICAgJHhzZWNyZXQgPSAiIjsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBBdXRoX09wZW5JRDo6Ynl0ZXMoJHNlY3JldCk7ICRpKyspIHsKICAgICAgICAgICAgJHhzZWNyZXQgLj0gY2hyKG9yZCgkc2VjcmV0WyRpXSkgXiBvcmQoJGhhc2hfZGhfc2hhcmVkWyRpXSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4c2VjcmV0OwogICAgfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Discover.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGUgT3BlbklEIGFuZCBZYWRpcyBkaXNjb3ZlcnkgaW1wbGVtZW50YXRpb24gZm9yIE9wZW5JRCAxLjIuCiAqLwoKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1BhcnNlLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvTWVzc2FnZS5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvWWFkaXMvWFJJUmVzLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9ZYWRpcy5waHAiOwoKLy8gWE1MIG5hbWVzcGFjZSB2YWx1ZQpkZWZpbmUoJ0F1dGhfT3BlbklEX1hNTE5TXzFfMCcsICdodHRwOi8vb3BlbmlkLm5ldC94bWxucy8xLjAnKTsKCi8vIFlhZGlzIHNlcnZpY2UgdHlwZXMKZGVmaW5lKCdBdXRoX09wZW5JRF9UWVBFXzFfMicsICdodHRwOi8vb3BlbmlkLm5ldC9zaWdub24vMS4yJyk7CmRlZmluZSgnQXV0aF9PcGVuSURfVFlQRV8xXzEnLCAnaHR0cDovL29wZW5pZC5uZXQvc2lnbm9uLzEuMScpOwpkZWZpbmUoJ0F1dGhfT3BlbklEX1RZUEVfMV8wJywgJ2h0dHA6Ly9vcGVuaWQubmV0L3NpZ25vbi8xLjAnKTsKZGVmaW5lKCdBdXRoX09wZW5JRF9UWVBFXzJfMF9JRFAnLCAnaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvc2VydmVyJyk7CmRlZmluZSgnQXV0aF9PcGVuSURfVFlQRV8yXzAnLCAnaHR0cDovL3NwZWNzLm9wZW5pZC5uZXQvYXV0aC8yLjAvc2lnbm9uJyk7CmRlZmluZSgnQXV0aF9PcGVuSURfUlBfUkVUVVJOX1RPX1VSTF9UWVBFJywKICAgICAgICdodHRwOi8vc3BlY3Mub3BlbmlkLm5ldC9hdXRoLzIuMC9yZXR1cm5fdG8nKTsKCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldE9wZW5JRFR5cGVVUklzKCkKewogICAgcmV0dXJuIGFycmF5KEF1dGhfT3BlbklEX1RZUEVfMl8wX0lEUCwKICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9UWVBFXzJfMCwKICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9UWVBFXzFfMiwKICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9UWVBFXzFfMSwKICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9UWVBFXzFfMCk7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldE9wZW5JRENvbnN1bWVyVHlwZVVSSXMoKQp7CiAgICByZXR1cm4gYXJyYXkoQXV0aF9PcGVuSURfUlBfUkVUVVJOX1RPX1VSTF9UWVBFKTsKfQoKCi8qCiAqIFByb3ZpZGVzIGEgdXNlci1yZWFkYWJsZSBpbnRlcnByZXRhdGlvbiBvZiBhIHR5cGUgdXJpLgogKiBVc2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLgogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfZ2V0T3BlbklEVHlwZU5hbWUoJHR5cGVfdXJpKSB7CiAgICBzd2l0Y2ggKCR0eXBlX3VyaSkgewogICAgY2FzZSBBdXRoX09wZW5JRF9UWVBFXzJfMF9JRFA6CiAgICAgIHJldHVybiAnT3BlbklEIDIuMCBJRFAnOwogICAgY2FzZSBBdXRoX09wZW5JRF9UWVBFXzJfMDoKICAgICAgcmV0dXJuICdPcGVuSUQgMi4wJzsKICAgIGNhc2UgQXV0aF9PcGVuSURfVFlQRV8xXzI6CiAgICAgIHJldHVybiAnT3BlbklEIDEuMic7CiAgICBjYXNlIEF1dGhfT3BlbklEX1RZUEVfMV8xOgogICAgICByZXR1cm4gJ09wZW5JRCAxLjEnOwogICAgY2FzZSBBdXRoX09wZW5JRF9UWVBFXzFfMDoKICAgICAgcmV0dXJuICdPcGVuSUQgMS4wJzsKICAgIGNhc2UgQXV0aF9PcGVuSURfUlBfUkVUVVJOX1RPX1VSTF9UWVBFOgogICAgICByZXR1cm4gJ09wZW5JRCByZWx5aW5nIHBhcnR5JzsKICAgIH0KfQoKLyoqCiAqIE9iamVjdCByZXByZXNlbnRpbmcgYW4gT3BlbklEIHNlcnZpY2UgZW5kcG9pbnQuCiAqLwpjbGFzcyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQgewogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhaW1lZF9pZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPnNlcnZlcl91cmwgPSBudWxsOwogICAgICAgICR0aGlzLT50eXBlX3VyaXMgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5sb2NhbF9pZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPmNhbm9uaWNhbElEID0gbnVsbDsKICAgICAgICAkdGhpcy0+dXNlZF95YWRpcyA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoaXMgY2FtZSBmcm9tIGFuIFhSRFMKICAgICAgICAkdGhpcy0+ZGlzcGxheV9pZGVudGlmaWVyID0gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXREaXNwbGF5SWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5kaXNwbGF5X2lkZW50aWZpZXIpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kaXNwbGF5X2lkZW50aWZpZXI7CiAgICAgICAgfQogICAgICAgIGlmICghICR0aGlzLT5jbGFpbWVkX2lkKSB7CiAgICAgICAgICByZXR1cm4gJHRoaXMtPmNsYWltZWRfaWQ7CiAgICAgICAgfQogICAgICAgICRwYXJzZWQgPSBwYXJzZV91cmwoJHRoaXMtPmNsYWltZWRfaWQpOwogICAgICAgICRzY2hlbWUgPSAkcGFyc2VkWydzY2hlbWUnXTsKICAgICAgICAkaG9zdCA9ICRwYXJzZWRbJ2hvc3QnXTsKICAgICAgICAkcGF0aCA9ICRwYXJzZWRbJ3BhdGgnXTsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncXVlcnknLCAkcGFyc2VkKSkgewogICAgICAgICAgICAkcXVlcnkgPSAkcGFyc2VkWydxdWVyeSddOwogICAgICAgICAgICAkbm9fZnJhZyA9ICIkc2NoZW1lOi8vJGhvc3QkcGF0aD8kcXVlcnkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRub19mcmFnID0gIiRzY2hlbWU6Ly8kaG9zdCRwYXRoIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRub19mcmFnOwogICAgfQoKICAgIGZ1bmN0aW9uIHVzZXNFeHRlbnNpb24oJGV4dGVuc2lvbl91cmkpCiAgICB7CiAgICAgICAgcmV0dXJuIGluX2FycmF5KCRleHRlbnNpb25fdXJpLCAkdGhpcy0+dHlwZV91cmlzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwcmVmZXJyZWROYW1lc3BhY2UoKQogICAgewogICAgICAgIGlmIChpbl9hcnJheShBdXRoX09wZW5JRF9UWVBFXzJfMF9JRFAsICR0aGlzLT50eXBlX3VyaXMpIHx8CiAgICAgICAgICAgIGluX2FycmF5KEF1dGhfT3BlbklEX1RZUEVfMl8wLCAkdGhpcy0+dHlwZV91cmlzKSkgewogICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfT1BFTklEMl9OUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfT1BFTklEMV9OUzsKICAgICAgICB9CiAgICB9CgogICAgLyoKICAgICAqIFF1ZXJ5IHRoaXMgZW5kcG9pbnQgdG8gc2VlIGlmIGl0IGhhcyBhbnkgb2YgdGhlIGdpdmVuIHR5cGUKICAgICAqIFVSSXMuIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgb3RoZXIgZW5kcG9pbnQgY2xhc3NlcwogICAgICogdGhhdCBlLmcuIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSB2ZXJzaW9ucwogICAgICogb2YgYSBzaW5nbGUgcHJvdG9jb2wuCiAgICAgKgogICAgICogQHBhcmFtICR0eXBlX3VyaXMgVGhlIFVSSXMgdGhhdCB5b3Ugd2lzaCB0byBjaGVjawogICAgICoKICAgICAqIEByZXR1cm4gYWxsIHR5cGVzIHRoYXQgYXJlIGluIGJvdGggaW4gdHlwZV91cmlzIGFuZAogICAgICogJHRoaXMtPnR5cGVfdXJpcwogICAgICovCiAgICBmdW5jdGlvbiBtYXRjaFR5cGVzKCR0eXBlX3VyaXMpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHR5cGVfdXJpcyBhcyAkdGVzdF91cmkpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5zdXBwb3J0c1R5cGUoJHRlc3RfdXJpKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHRlc3RfdXJpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBmdW5jdGlvbiBzdXBwb3J0c1R5cGUoJHR5cGVfdXJpKQogICAgewogICAgICAgIC8vIERvZXMgdGhpcyBlbmRwb2ludCBzdXBwb3J0IHRoaXMgdHlwZT8KICAgICAgICByZXR1cm4gKChpbl9hcnJheSgkdHlwZV91cmksICR0aGlzLT50eXBlX3VyaXMpKSB8fAogICAgICAgICAgICAgICAgKCgkdHlwZV91cmkgPT0gQXV0aF9PcGVuSURfVFlQRV8yXzApICYmCiAgICAgICAgICAgICAgICAgJHRoaXMtPmlzT1BJZGVudGlmaWVyKCkpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21wYXRpYmlsaXR5TW9kZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcmVmZXJyZWROYW1lc3BhY2UoKSAhPSBBdXRoX09wZW5JRF9PUEVOSUQyX05TOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzT1BJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8yXzBfSURQLCAkdGhpcy0+dHlwZV91cmlzKTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbU9QRW5kcG9pbnRVUkwoJG9wX2VuZHBvaW50X3VybCkKICAgIHsKICAgICAgICAvLyBDb25zdHJ1Y3QgYW4gT1AtSWRlbnRpZmllciBPcGVuSURTZXJ2aWNlRW5kcG9pbnQgb2JqZWN0IGZvcgogICAgICAgIC8vIGEgZ2l2ZW4gT1AgRW5kcG9pbnQgVVJMCiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQoKTsKICAgICAgICAkb2JqLT5zZXJ2ZXJfdXJsID0gJG9wX2VuZHBvaW50X3VybDsKICAgICAgICAkb2JqLT50eXBlX3VyaXMgPSBhcnJheShBdXRoX09wZW5JRF9UWVBFXzJfMF9JRFApOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlU2VydmljZSgkeWFkaXNfdXJsLCAkdXJpLCAkdHlwZV91cmlzLCAkc2VydmljZV9lbGVtZW50KQogICAgewogICAgICAgIC8vIFNldCB0aGUgc3RhdGUgb2YgdGhpcyBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQogICAgICAgIC8vIHNlcnZpY2UgZWxlbWVudC4gIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIG5vdAogICAgICAgIC8vIChpZiBmaW5kT1BMb2NhbElkZW50aWZpZXIgcmV0dXJucyBmYWxzZSkuCiAgICAgICAgJHRoaXMtPnR5cGVfdXJpcyA9ICR0eXBlX3VyaXM7CiAgICAgICAgJHRoaXMtPnNlcnZlcl91cmwgPSAkdXJpOwogICAgICAgICR0aGlzLT51c2VkX3lhZGlzID0gdHJ1ZTsKCiAgICAgICAgaWYgKCEkdGhpcy0+aXNPUElkZW50aWZpZXIoKSkgewogICAgICAgICAgICAkdGhpcy0+Y2xhaW1lZF9pZCA9ICR5YWRpc191cmw7CiAgICAgICAgICAgICR0aGlzLT5sb2NhbF9pZCA9IEF1dGhfT3BlbklEX2ZpbmRPUExvY2FsSWRlbnRpZmllcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2aWNlX2VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dHlwZV91cmlzKTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5sb2NhbF9pZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TG9jYWxJRCgpCiAgICB7CiAgICAgICAgLy8gUmV0dXJuIHRoZSBpZGVudGlmaWVyIHRoYXQgc2hvdWxkIGJlIHNlbnQgYXMgdGhlCiAgICAgICAgLy8gb3BlbmlkLmlkZW50aXR5X3VybCBwYXJhbWV0ZXIgdG8gdGhlIHNlcnZlci4KICAgICAgICBpZiAoJHRoaXMtPmxvY2FsX2lkID09PSBudWxsICYmICR0aGlzLT5jYW5vbmljYWxJRCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNsYWltZWRfaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5sb2NhbF9pZCkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5sb2NhbF9pZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y2Fub25pY2FsSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoKICAgICAqIFBhcnNlIHRoZSBnaXZlbiBkb2N1bWVudCBhcyBYUkRTIGxvb2tpbmcgZm9yIE9wZW5JRCBjb25zdW1lciBzZXJ2aWNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG9mIEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludCBvciBudWxsIGlmIHRoZQogICAgICogZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KICAgICAqLwogICAgZnVuY3Rpb24gY29uc3VtZXJGcm9tWFJEUygkdXJpLCAkeHJkc190ZXh0KQogICAgewogICAgICAgICR4cmRzID0mIEF1dGhfWWFkaXNfWFJEUzo6cGFyc2VYUkRTKCR4cmRzX3RleHQpOwoKICAgICAgICBpZiAoJHhyZHMpIHsKICAgICAgICAgICAgJHlhZGlzX3NlcnZpY2VzID0KICAgICAgICAgICAgICAkeHJkcy0+c2VydmljZXMoYXJyYXkoJ2ZpbHRlcl9NYXRjaGVzQW55T3BlbklEQ29uc3VtZXJUeXBlJykpOwogICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfbWFrZU9wZW5JREVuZHBvaW50cygkdXJpLCAkeWFkaXNfc2VydmljZXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoKICAgICAqIFBhcnNlIHRoZSBnaXZlbiBkb2N1bWVudCBhcyBYUkRTIGxvb2tpbmcgZm9yIE9wZW5JRCBzZXJ2aWNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG9mIEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludCBvciBudWxsIGlmIHRoZQogICAgICogZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21YUkRTKCR1cmksICR4cmRzX3RleHQpCiAgICB7CiAgICAgICAgJHhyZHMgPSBBdXRoX1lhZGlzX1hSRFM6OnBhcnNlWFJEUygkeHJkc190ZXh0KTsKCiAgICAgICAgaWYgKCR4cmRzKSB7CiAgICAgICAgICAgICR5YWRpc19zZXJ2aWNlcyA9CiAgICAgICAgICAgICAgJHhyZHMtPnNlcnZpY2VzKGFycmF5KCdmaWx0ZXJfTWF0Y2hlc0FueU9wZW5JRFR5cGUnKSk7CiAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9tYWtlT3BlbklERW5kcG9pbnRzKCR1cmksICR5YWRpc19zZXJ2aWNlcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKgogICAgICogQ3JlYXRlIGVuZHBvaW50cyBmcm9tIGEgRGlzY292ZXJ5UmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBkaXNjb3ZlcnlSZXN1bHQgQXV0aF9ZYWRpc19EaXNjb3ZlcnlSZXN1bHQKICAgICAqIEByZXR1cm4gYXJyYXkgb2YgQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50IG9yIG51bGwgaWYKICAgICAqIGVuZHBvaW50cyBjYW5ub3QgYmUgY3JlYXRlZC4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21EaXNjb3ZlcnlSZXN1bHQoJGRpc2NvdmVyeVJlc3VsdCkKICAgIHsKICAgICAgICBpZiAoJGRpc2NvdmVyeVJlc3VsdC0+aXNYUkRTKCkpIHsKICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludDo6ZnJvbVhSRFMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzY292ZXJ5UmVzdWx0LT5ub3JtYWxpemVkX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNjb3ZlcnlSZXN1bHQtPnJlc3BvbnNlX3RleHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQ6OmZyb21IVE1MKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NvdmVyeVJlc3VsdC0+bm9ybWFsaXplZF91cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzY292ZXJ5UmVzdWx0LT5yZXNwb25zZV90ZXh0KTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21IVE1MKCR1cmksICRodG1sKQogICAgewogICAgICAgICRkaXNjb3ZlcnlfdHlwZXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8yXzAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuaWQyLnByb3ZpZGVyJywgJ29wZW5pZDIubG9jYWxfaWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8xXzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuaWQuc2VydmVyJywgJ29wZW5pZC5kZWxlZ2F0ZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICRzZXJ2aWNlcyA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCRkaXNjb3ZlcnlfdHlwZXMgYXMgJHRyaXBsZSkgewogICAgICAgICAgICBsaXN0KCR0eXBlX3VyaSwgJHNlcnZlcl9yZWwsICRkZWxlZ2F0ZV9yZWwpID0gJHRyaXBsZTsKCiAgICAgICAgICAgICR1cmxzID0gQXV0aF9PcGVuSURfbGVnYWN5X2Rpc2NvdmVyKCRodG1sLCAkc2VydmVyX3JlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGVnYXRlX3JlbCk7CgogICAgICAgICAgICBpZiAoJHVybHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGlzdCgkZGVsZWdhdGVfdXJsLCAkc2VydmVyX3VybCkgPSAkdXJsczsKCiAgICAgICAgICAgICRzZXJ2aWNlID0gbmV3IEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludCgpOwogICAgICAgICAgICAkc2VydmljZS0+Y2xhaW1lZF9pZCA9ICR1cmk7CiAgICAgICAgICAgICRzZXJ2aWNlLT5sb2NhbF9pZCA9ICRkZWxlZ2F0ZV91cmw7CiAgICAgICAgICAgICRzZXJ2aWNlLT5zZXJ2ZXJfdXJsID0gJHNlcnZlcl91cmw7CiAgICAgICAgICAgICRzZXJ2aWNlLT50eXBlX3VyaXMgPSBhcnJheSgkdHlwZV91cmkpOwoKICAgICAgICAgICAgJHNlcnZpY2VzW10gPSAkc2VydmljZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2VydmljZXM7CiAgICB9CgogICAgZnVuY3Rpb24gY29weSgpCiAgICB7CiAgICAgICAgJHggPSBuZXcgQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50KCk7CgogICAgICAgICR4LT5jbGFpbWVkX2lkID0gJHRoaXMtPmNsYWltZWRfaWQ7CiAgICAgICAgJHgtPnNlcnZlcl91cmwgPSAkdGhpcy0+c2VydmVyX3VybDsKICAgICAgICAkeC0+dHlwZV91cmlzID0gJHRoaXMtPnR5cGVfdXJpczsKICAgICAgICAkeC0+bG9jYWxfaWQgPSAkdGhpcy0+bG9jYWxfaWQ7CiAgICAgICAgJHgtPmNhbm9uaWNhbElEID0gJHRoaXMtPmNhbm9uaWNhbElEOwogICAgICAgICR4LT51c2VkX3lhZGlzID0gJHRoaXMtPnVzZWRfeWFkaXM7CgogICAgICAgIHJldHVybiAkeDsKICAgIH0KfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfZmluZE9QTG9jYWxJZGVudGlmaWVyKCRzZXJ2aWNlLCAkdHlwZV91cmlzKQp7CiAgICAvLyBFeHRyYWN0IGEgb3BlbmlkOkRlbGVnYXRlIHZhbHVlIGZyb20gYSBZYWRpcyBTZXJ2aWNlIGVsZW1lbnQuCiAgICAvLyBJZiBubyBkZWxlZ2F0ZSBpcyBmb3VuZCwgcmV0dXJucyBudWxsLiAgUmV0dXJucyBmYWxzZSBvbgogICAgLy8gZGlzY292ZXJ5IGZhaWx1cmUgKHdoZW4gbXVsdGlwbGUgZGVsZWdhdGUvbG9jYWxJRCB0YWdzIGhhdmUKICAgIC8vIGRpZmZlcmVudCB2YWx1ZXMpLgoKICAgICRzZXJ2aWNlLT5wYXJzZXItPnJlZ2lzdGVyTmFtZXNwYWNlKCdvcGVuaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfWE1MTlNfMV8wKTsKCiAgICAkc2VydmljZS0+cGFyc2VyLT5yZWdpc3Rlck5hbWVzcGFjZSgneHJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfWWFkaXNfWE1MTlNfWFJEXzJfMCk7CgogICAgJHBhcnNlciA9ICRzZXJ2aWNlLT5wYXJzZXI7CgogICAgJHBlcm1pdHRlZF90YWdzID0gYXJyYXkoKTsKCiAgICBpZiAoaW5fYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8xXzEsICR0eXBlX3VyaXMpIHx8CiAgICAgICAgaW5fYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8xXzAsICR0eXBlX3VyaXMpKSB7CiAgICAgICAgJHBlcm1pdHRlZF90YWdzW10gPSAnb3BlbmlkOkRlbGVnYXRlJzsKICAgIH0KCiAgICBpZiAoaW5fYXJyYXkoQXV0aF9PcGVuSURfVFlQRV8yXzAsICR0eXBlX3VyaXMpKSB7CiAgICAgICAgJHBlcm1pdHRlZF90YWdzW10gPSAneHJkOkxvY2FsSUQnOwogICAgfQoKICAgICRsb2NhbF9pZCA9IG51bGw7CgogICAgZm9yZWFjaCAoJHBlcm1pdHRlZF90YWdzIGFzICR0YWdfbmFtZSkgewogICAgICAgICR0YWdzID0gJHNlcnZpY2UtPmdldEVsZW1lbnRzKCR0YWdfbmFtZSk7CgogICAgICAgIGZvcmVhY2ggKCR0YWdzIGFzICR0YWcpIHsKICAgICAgICAgICAgJGNvbnRlbnQgPSAkcGFyc2VyLT5jb250ZW50KCR0YWcpOwoKICAgICAgICAgICAgaWYgKCRsb2NhbF9pZCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGxvY2FsX2lkID0gJGNvbnRlbnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJGxvY2FsX2lkICE9ICRjb250ZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRsb2NhbF9pZDsKfQoKZnVuY3Rpb24gZmlsdGVyX01hdGNoZXNBbnlPcGVuSURUeXBlKCRzZXJ2aWNlKQp7CiAgICAkdXJpcyA9ICRzZXJ2aWNlLT5nZXRUeXBlcygpOwoKICAgIGZvcmVhY2ggKCR1cmlzIGFzICR1cmkpIHsKICAgICAgICBpZiAoaW5fYXJyYXkoJHVyaSwgQXV0aF9PcGVuSURfZ2V0T3BlbklEVHlwZVVSSXMoKSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZmlsdGVyX01hdGNoZXNBbnlPcGVuSURDb25zdW1lclR5cGUoJiRzZXJ2aWNlKQp7CiAgICAkdXJpcyA9ICRzZXJ2aWNlLT5nZXRUeXBlcygpOwoKICAgIGZvcmVhY2ggKCR1cmlzIGFzICR1cmkpIHsKICAgICAgICBpZiAoaW5fYXJyYXkoJHVyaSwgQXV0aF9PcGVuSURfZ2V0T3BlbklEQ29uc3VtZXJUeXBlVVJJcygpKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9iZXN0TWF0Y2hpbmdTZXJ2aWNlKCRzZXJ2aWNlLCAkcHJlZmVycmVkX3R5cGVzKQp7CiAgICAvLyBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYXRjaGluZyB0eXBlLCBvciBzb21ldGhpbmcKICAgIC8vIGhpZ2hlciBpZiBubyB0eXBlIG1hdGNoZXMuCiAgICAvLwogICAgLy8gVGhpcyBwcm92aWRlcyBhbiBvcmRlcmluZyBpbiB3aGljaCBzZXJ2aWNlIGVsZW1lbnRzIHRoYXQKICAgIC8vIGNvbnRhaW4gYSB0eXBlIHRoYXQgY29tZXMgZWFybGllciBpbiB0aGUgcHJlZmVycmVkIHR5cGVzIGxpc3QKICAgIC8vIGNvbWUgYmVmb3JlIHNlcnZpY2UgZWxlbWVudHMgdGhhdCBjb21lIGxhdGVyLiBJZiBhIHNlcnZpY2UKICAgIC8vIGVsZW1lbnQgaGFzIG1vcmUgdGhhbiBvbmUgdHlwZSwgdGhlIG1vc3QgcHJlZmVycmVkIG9uZSB3aW5zLgoKICAgIGZvcmVhY2ggKCRwcmVmZXJyZWRfdHlwZXMgYXMgJGluZGV4ID0+ICR0eXApIHsKICAgICAgICBpZiAoaW5fYXJyYXkoJHR5cCwgJHNlcnZpY2UtPnR5cGVfdXJpcykpIHsKICAgICAgICAgICAgcmV0dXJuICRpbmRleDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNvdW50KCRwcmVmZXJyZWRfdHlwZXMpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9hcnJhbmdlQnlUeXBlKCRzZXJ2aWNlX2xpc3QsICRwcmVmZXJyZWRfdHlwZXMpCnsKICAgIC8vIFJlYXJyYW5nZSBzZXJ2aWNlX2xpc3QgaW4gYSBuZXcgbGlzdCBzbyBzZXJ2aWNlcyBhcmUgb3JkZXJlZCBieQogICAgLy8gdHlwZXMgbGlzdGVkIGluIHByZWZlcnJlZF90eXBlcy4gIFJldHVybiB0aGUgbmV3IGxpc3QuCgogICAgLy8gQnVpbGQgYSBsaXN0IHdpdGggdGhlIHNlcnZpY2UgZWxlbWVudHMgaW4gdHVwbGVzIHdob3NlCiAgICAvLyBjb21wYXJpc29uIHdpbGwgcHJlZmVyIHRoZSBvbmUgd2l0aCB0aGUgYmVzdCBtYXRjaGluZyBzZXJ2aWNlCiAgICAkcHJpb19zZXJ2aWNlcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoICgkc2VydmljZV9saXN0IGFzICRpbmRleCA9PiAkc2VydmljZSkgewogICAgICAgICRwcmlvX3NlcnZpY2VzW10gPSBhcnJheShBdXRoX09wZW5JRF9iZXN0TWF0Y2hpbmdTZXJ2aWNlKCRzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmVmZXJyZWRfdHlwZXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXgsICRzZXJ2aWNlKTsKICAgIH0KCiAgICBzb3J0KCRwcmlvX3NlcnZpY2VzKTsKCiAgICAvLyBOb3cgdGhhdCB0aGUgc2VydmljZXMgYXJlIHNvcnRlZCBieSBwcmlvcml0eSwgcmVtb3ZlIHRoZSBzb3J0CiAgICAvLyBrZXlzIGZyb20gdGhlIGxpc3QuCiAgICBmb3JlYWNoICgkcHJpb19zZXJ2aWNlcyBhcyAkaW5kZXggPT4gJHMpIHsKICAgICAgICAkcHJpb19zZXJ2aWNlc1skaW5kZXhdID0gJHByaW9fc2VydmljZXNbJGluZGV4XVsyXTsKICAgIH0KCiAgICByZXR1cm4gJHByaW9fc2VydmljZXM7Cn0KCi8vIEV4dHJhY3QgT1AgSWRlbnRpZmllciBzZXJ2aWNlcy4gIElmIG5vbmUgZm91bmQsIHJldHVybiB0aGUgcmVzdCwKLy8gc29ydGVkIHdpdGggbW9zdCBwcmVmZXJyZWQgZmlyc3QgYWNjb3JkaW5nIHRvCi8vIE9wZW5JRFNlcnZpY2VFbmRwb2ludC5vcGVuaWRfdHlwZV91cmlzLgovLwovLyBvcGVuaWRfc2VydmljZXMgaXMgYSBsaXN0IG9mIE9wZW5JRFNlcnZpY2VFbmRwb2ludCBvYmplY3RzLgovLwovLyBSZXR1cm5zIGEgbGlzdCBvZiBPcGVuSURTZXJ2aWNlRW5kcG9pbnQgb2JqZWN0cy4iIiIKZnVuY3Rpb24gQXV0aF9PcGVuSURfZ2V0T1BPclVzZXJTZXJ2aWNlcygkb3BlbmlkX3NlcnZpY2VzKQp7CiAgICAkb3Bfc2VydmljZXMgPSBBdXRoX09wZW5JRF9hcnJhbmdlQnlUeXBlKCRvcGVuaWRfc2VydmljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheShBdXRoX09wZW5JRF9UWVBFXzJfMF9JRFApKTsKCiAgICAkb3BlbmlkX3NlcnZpY2VzID0gQXV0aF9PcGVuSURfYXJyYW5nZUJ5VHlwZSgkb3BlbmlkX3NlcnZpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfZ2V0T3BlbklEVHlwZVVSSXMoKSk7CgogICAgaWYgKCRvcF9zZXJ2aWNlcykgewogICAgICAgIHJldHVybiAkb3Bfc2VydmljZXM7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAkb3BlbmlkX3NlcnZpY2VzOwogICAgfQp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9tYWtlT3BlbklERW5kcG9pbnRzKCR1cmksICR5YWRpc19zZXJ2aWNlcykKewogICAgJHMgPSBhcnJheSgpOwoKICAgIGlmICghJHlhZGlzX3NlcnZpY2VzKSB7CiAgICAgICAgcmV0dXJuICRzOwogICAgfQoKICAgIGZvcmVhY2ggKCR5YWRpc19zZXJ2aWNlcyBhcyAkc2VydmljZSkgewogICAgICAgICR0eXBlX3VyaXMgPSAkc2VydmljZS0+Z2V0VHlwZXMoKTsKICAgICAgICAkdXJpcyA9ICRzZXJ2aWNlLT5nZXRVUklzKCk7CgogICAgICAgIC8vIElmIGFueSBUeXBlIFVSSXMgbWF0Y2ggYW5kIHRoZXJlIGlzIGFuIGVuZHBvaW50IFVSSQogICAgICAgIC8vIHNwZWNpZmllZCwgdGhlbiB0aGlzIGlzIGFuIE9wZW5JRCBlbmRwb2ludAogICAgICAgIGlmICgkdHlwZV91cmlzICYmCiAgICAgICAgICAgICR1cmlzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR1cmlzIGFzICRzZXJ2aWNlX3VyaSkgewogICAgICAgICAgICAgICAgJG9wZW5pZF9lbmRwb2ludCA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQoKTsKICAgICAgICAgICAgICAgIGlmICgkb3BlbmlkX2VuZHBvaW50LT5wYXJzZVNlcnZpY2UoJHVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcnZpY2VfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV91cmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmljZSkpIHsKICAgICAgICAgICAgICAgICAgICAkc1tdID0gJG9wZW5pZF9lbmRwb2ludDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHM7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2Rpc2NvdmVyV2l0aFlhZGlzKCR1cmksICRmZXRjaGVyLAogICAgICAgICAgICAgICRlbmRwb2ludF9maWx0ZXI9J0F1dGhfT3BlbklEX2dldE9QT3JVc2VyU2VydmljZXMnLAogICAgICAgICAgICAgICRkaXNjb3Zlcl9mdW5jdGlvbj1udWxsKQp7CiAgICAvLyBEaXNjb3ZlciBPcGVuSUQgc2VydmljZXMgZm9yIGEgVVJJLiBUcmllcyBZYWRpcyBhbmQgZmFsbHMgYmFjawogICAgLy8gb24gb2xkLXN0eWxlIDxsaW5rIHJlbD0nLi4uJz4gZGlzY292ZXJ5IGlmIFlhZGlzIGZhaWxzLgoKICAgIC8vIE1pZ2h0IHJhaXNlIGEgeWFkaXMuZGlzY292ZXIuRGlzY292ZXJ5RmFpbHVyZSBpZiBubyBkb2N1bWVudAogICAgLy8gY2FtZSBiYWNrIGZvciB0aGF0IFVSSSBhdCBhbGwuICBJIGRvbid0IHRoaW5rIGZhbGxpbmcgYmFjayB0bwogICAgLy8gT3BlbklEIDEuMCBkaXNjb3Zlcnkgb24gdGhlIHNhbWUgVVJMIHdpbGwgaGVscCwgc28gZG9uJ3QgYm90aGVyCiAgICAvLyB0byBjYXRjaCBpdC4KICAgIGlmICgkZGlzY292ZXJfZnVuY3Rpb24gPT09IG51bGwpIHsKICAgICAgICAkZGlzY292ZXJfZnVuY3Rpb24gPSBhcnJheSgnQXV0aF9ZYWRpc19ZYWRpcycsICdkaXNjb3ZlcicpOwogICAgfQoKICAgICRvcGVuaWRfc2VydmljZXMgPSBhcnJheSgpOwoKICAgICRyZXNwb25zZSA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCRkaXNjb3Zlcl9mdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCR1cmksICRmZXRjaGVyKSk7CgogICAgJHlhZGlzX3VybCA9ICRyZXNwb25zZS0+bm9ybWFsaXplZF91cmk7CiAgICAkeWFkaXNfc2VydmljZXMgPSBhcnJheSgpOwoKICAgIGlmICgkcmVzcG9uc2UtPmlzRmFpbHVyZSgpICYmICEkcmVzcG9uc2UtPmlzWFJEUygpKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCR1cmksIGFycmF5KCkpOwogICAgfQoKICAgICRvcGVuaWRfc2VydmljZXMgPSBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnQ6OmZyb21YUkRTKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5YWRpc191cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5yZXNwb25zZV90ZXh0KTsKCiAgICBpZiAoISRvcGVuaWRfc2VydmljZXMpIHsKICAgICAgICBpZiAoJHJlc3BvbnNlLT5pc1hSRFMoKSkgewogICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfZGlzY292ZXJXaXRob3V0WWFkaXMoJHVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmZXRjaGVyKTsKICAgICAgICB9CgogICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgcmVzcG9uc2UgYXMgSFRNTCB0byBnZXQgT3BlbklEIDEuMC8xLjEKICAgICAgICAvLyA8bGluayByZWw9Ii4uLiI+CiAgICAgICAgJG9wZW5pZF9zZXJ2aWNlcyA9IEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludDo6ZnJvbUhUTUwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeWFkaXNfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5yZXNwb25zZV90ZXh0KTsKICAgIH0KCiAgICAkb3BlbmlkX3NlcnZpY2VzID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGVuZHBvaW50X2ZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkb3BlbmlkX3NlcnZpY2VzKSk7CgogICAgcmV0dXJuIGFycmF5KCR5YWRpc191cmwsICRvcGVuaWRfc2VydmljZXMpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9kaXNjb3ZlclVSSSgkdXJpLCAkZmV0Y2hlcikKewogICAgJHVyaSA9IEF1dGhfT3BlbklEOjpub3JtYWxpemVVcmwoJHVyaSk7CiAgICByZXR1cm4gQXV0aF9PcGVuSURfZGlzY292ZXJXaXRoWWFkaXMoJHVyaSwgJGZldGNoZXIpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9kaXNjb3ZlcldpdGhvdXRZYWRpcygkdXJpLCAkZmV0Y2hlcikKewogICAgJGh0dHBfcmVzcCA9IEAkZmV0Y2hlci0+Z2V0KCR1cmkpOwoKICAgIGlmICgkaHR0cF9yZXNwLT5zdGF0dXMgIT0gMjAwIGFuZCAkaHR0cF9yZXNwLT5zdGF0dXMgIT0gMjA2KSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCR1cmksIGFycmF5KCkpOwogICAgfQoKICAgICRpZGVudGl0eV91cmwgPSAkaHR0cF9yZXNwLT5maW5hbF91cmw7CgogICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSByZXNwb25zZSBhcyBIVE1MIHRvIGdldCBPcGVuSUQgMS4wLzEuMSA8bGluawogICAgLy8gcmVsPSIuLi4iPgogICAgJG9wZW5pZF9zZXJ2aWNlcyA9IEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludDo6ZnJvbUhUTUwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWRlbnRpdHlfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh0dHBfcmVzcC0+Ym9keSk7CgogICAgcmV0dXJuIGFycmF5KCRpZGVudGl0eV91cmwsICRvcGVuaWRfc2VydmljZXMpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9kaXNjb3ZlclhSSSgkaW5hbWUsICRmZXRjaGVyKQp7CiAgICAkcmVzb2x2ZXIgPSBuZXcgQXV0aF9ZYWRpc19Qcm94eVJlc29sdmVyKCRmZXRjaGVyKTsKICAgIGxpc3QoJGNhbm9uaWNhbElELCAkeWFkaXNfc2VydmljZXMpID0KICAgICAgICAkcmVzb2x2ZXItPnF1ZXJ5KCRpbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX2dldE9wZW5JRFR5cGVVUklzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgnZmlsdGVyX01hdGNoZXNBbnlPcGVuSURUeXBlJykpOwoKICAgICRvcGVuaWRfc2VydmljZXMgPSBBdXRoX09wZW5JRF9tYWtlT3BlbklERW5kcG9pbnRzKCRpbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5YWRpc19zZXJ2aWNlcyk7CgogICAgJG9wZW5pZF9zZXJ2aWNlcyA9IEF1dGhfT3BlbklEX2dldE9QT3JVc2VyU2VydmljZXMoJG9wZW5pZF9zZXJ2aWNlcyk7CgogICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG9wZW5pZF9zZXJ2aWNlcyk7ICRpKyspIHsKICAgICAgICAkb3BlbmlkX3NlcnZpY2VzWyRpXS0+Y2Fub25pY2FsSUQgPSAkY2Fub25pY2FsSUQ7CiAgICAgICAgJG9wZW5pZF9zZXJ2aWNlc1skaV0tPmNsYWltZWRfaWQgPSAkY2Fub25pY2FsSUQ7CiAgICAgICAgJG9wZW5pZF9zZXJ2aWNlc1skaV0tPmRpc3BsYXlfaWRlbnRpZmllciA9ICRpbmFtZTsKICAgIH0KCiAgICAvLyBGSVhNRTogcmV0dXJuZWQgeHJpIHNob3VsZCBwcm9iYWJseSBiZSBpbiBzb21lIG5vcm1hbCBmb3JtCiAgICByZXR1cm4gYXJyYXkoJGluYW1lLCAkb3BlbmlkX3NlcnZpY2VzKTsKfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfZGlzY292ZXIoJHVyaSwgJGZldGNoZXIpCnsKICAgIC8vIElmIHRoZSBmZXRjaGVyIChpLmUuLCBQSFApIGRvZXNuJ3Qgc3VwcG9ydCBTU0wsIHdlIGNhbid0IGRvCiAgICAvLyBkaXNjb3Zlcnkgb24gYW4gSFRUUFMgVVJMLgogICAgaWYgKCRmZXRjaGVyLT5pc0hUVFBTKCR1cmkpICYmICEkZmV0Y2hlci0+c3VwcG9ydHNTU0woKSkgewogICAgICAgIHJldHVybiBhcnJheSgkdXJpLCBhcnJheSgpKTsKICAgIH0KCiAgICBpZiAoQXV0aF9ZYWRpc19pZGVudGlmaWVyU2NoZW1lKCR1cmkpID09ICdYUkknKSB7CiAgICAgICAgJHJlc3VsdCA9IEF1dGhfT3BlbklEX2Rpc2NvdmVyWFJJKCR1cmksICRmZXRjaGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IEF1dGhfT3BlbklEX2Rpc2NvdmVyVVJJKCR1cmksICRmZXRjaGVyKTsKICAgIH0KCiAgICAvLyBJZiB0aGUgZmV0Y2hlciBkb2Vzbid0IHN1cHBvcnQgU1NMLCB3ZSBjYW4ndCBpbnRlcmFjdCB3aXRoCiAgICAvLyBIVFRQUyBzZXJ2ZXIgVVJMczsgcmVtb3ZlIHRob3NlIGVuZHBvaW50cyBmcm9tIHRoZSBsaXN0LgogICAgaWYgKCEkZmV0Y2hlci0+c3VwcG9ydHNTU0woKSkgewogICAgICAgICRodHRwX2VuZHBvaW50cyA9IGFycmF5KCk7CiAgICAgICAgbGlzdCgkbmV3X3VyaSwgJGVuZHBvaW50cykgPSAkcmVzdWx0OwoKICAgICAgICBmb3JlYWNoICgkZW5kcG9pbnRzIGFzICRlKSB7CiAgICAgICAgICAgIGlmICghJGZldGNoZXItPmlzSFRUUFMoJGUtPnNlcnZlcl91cmwpKSB7CiAgICAgICAgICAgICAgICAkaHR0cF9lbmRwb2ludHNbXSA9ICRlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoJG5ld191cmksICRodHRwX2VuZHBvaW50cyk7CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/DumbStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgc3VwcGxpZXMgYSBkdW1iIHN0b3JlIGJhY2tlbmQgZm9yIE9wZW5JRCBzZXJ2ZXJzIGFuZAogKiBjb25zdW1lcnMuCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBJbXBvcnQgdGhlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBuZXcgc3RvcmUgY2xhc3MuCiAqLwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0ludGVyZmFjZS5waHAnOwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0hNQUMucGhwJzsKCi8qKgogKiBUaGlzIGlzIGEgc3RvcmUgZm9yIHVzZSBpbiB0aGUgd29yc3QgY2FzZSwgd2hlbiB5b3UgaGF2ZSBubyB3YXkgb2YKICogc2F2aW5nIHN0YXRlIG9uIHRoZSBjb25zdW1lciBzaXRlLiBVc2luZyB0aGlzIHN0b3JlIG1ha2VzIHRoZQogKiBjb25zdW1lciB2dWxuZXJhYmxlIHRvIHJlcGxheSBhdHRhY2tzLCBhcyBpdCdzIHVuYWJsZSB0byB1c2UKICogbm9uY2VzLiBBdm9pZCB1c2luZyB0aGlzIHN0b3JlIGlmIGl0IGlzIGF0IGFsbCBwb3NzaWJsZS4KICoKICogTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgogKiBVc2VycyBvZiB0aGlzIGNsYXNzIG5lZWQgdG8gd29ycnkgb25seSBhYm91dCB0aGUgY29uc3RydWN0b3IuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfRHVtYlN0b3JlIGV4dGVuZHMgQXV0aF9PcGVuSURfT3BlbklEU3RvcmUgewoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgQXV0aF9PcGVuSURfRHVtYlN0b3JlfSBpbnN0YW5jZS4gRm9yIHRoZSBzZWN1cml0eQogICAgICogb2YgdGhlIHRva2VucyBnZW5lcmF0ZWQgYnkgdGhlIGxpYnJhcnksIHRoaXMgY2xhc3MgYXR0ZW1wdHMgdG8KICAgICAqIGF0IGxlYXN0IGhhdmUgYSBzZWN1cmUgaW1wbGVtZW50YXRpb24gb2YgZ2V0QXV0aEtleS4KICAgICAqCiAgICAgKiBXaGVuIHlvdSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgcGFzcyBpbiBhIHNlY3JldAogICAgICogcGhyYXNlLiBUaGUgcGhyYXNlIGlzIGhhc2hlZCB3aXRoIHNoYTEgdG8gbWFrZSBpdCB0aGUgY29ycmVjdAogICAgICogbGVuZ3RoIGFuZCBmb3JtIGZvciBhbiBhdXRoIGtleS4gVGhhdCBhbGxvd3MgeW91IHRvIHVzZSBhIGxvbmcKICAgICAqIHN0cmluZyBhcyB0aGUgc2VjcmV0IHBocmFzZSwgd2hpY2ggbWVhbnMgeW91IGNhbiBtYWtlIGl0IHZlcnkKICAgICAqIGRpZmZpY3VsdCB0byBndWVzcy4KICAgICAqCiAgICAgKiBFYWNoIHtAbGluayBBdXRoX09wZW5JRF9EdW1iU3RvcmV9IGluc3RhbmNlIHRoYXQgaXMgY3JlYXRlZCBmb3IgdXNlIGJ5CiAgICAgKiB5b3VyIGNvbnN1bWVyIHNpdGUgbmVlZHMgdG8gdXNlIHRoZSBzYW1lICRzZWNyZXRfcGhyYXNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgc2VjcmV0X3BocmFzZSBUaGUgcGhyYXNlIHVzZWQgdG8gY3JlYXRlIHRoZSBhdXRoCiAgICAgKiBrZXkgcmV0dXJuZWQgYnkgZ2V0QXV0aEtleQogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9EdW1iU3RvcmUoJHNlY3JldF9waHJhc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPmF1dGhfa2V5ID0gQXV0aF9PcGVuSURfU0hBMSgkc2VjcmV0X3BocmFzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KICAgICAqLwogICAgZnVuY3Rpb24gc3RvcmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGFzc29jaWF0aW9uKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcmV0dXJucyBudWxsLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGhhbmRsZSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgICovCiAgICBmdW5jdGlvbiByZW1vdmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGhhbmRsZSkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbiBhIHN5c3RlbSB0cnVseSBsaW1pdGVkIHRvIGR1bWIgbW9kZSwgbm9uY2VzIG11c3QgYWxsIGJlCiAgICAgKiBhY2NlcHRlZC4gVGhpcyB0aGVyZWZvcmUgYWx3YXlzIHJldHVybnMgdHJ1ZSwgd2hpY2ggbWFrZXMKICAgICAqIHJlcGxheSBhdHRhY2tzIGZlYXNpYmxlLgogICAgICovCiAgICBmdW5jdGlvbiB1c2VOb25jZSgkc2VydmVyX3VybCwgJHRpbWVzdGFtcCwgJHNhbHQpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhdXRoIGtleSBnZW5lcmF0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRBdXRoS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhfa2V5OwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Extension.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBbiBpbnRlcmZhY2UgZm9yIE9wZW5JRCBleHRlbnNpb25zLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCgovKioKICogUmVxdWlyZSB0aGUgTWVzc2FnZSBpbXBsZW1lbnRhdGlvbi4KICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvTWVzc2FnZS5waHAnOwoKLyoqCiAqIEEgYmFzZSBjbGFzcyBmb3IgYWNjZXNzaW5nIGV4dGVuc2lvbiByZXF1ZXN0IGFuZCByZXNwb25zZSBkYXRhIGZvcgogKiB0aGUgT3BlbklEIDIgcHJvdG9jb2wuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfRXh0ZW5zaW9uIHsKICAgIC8qKgogICAgICogbnNfdXJpOiBUaGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRvIGFkZCB0aGUgYXJndW1lbnRzIGZvciB0aGlzCiAgICAgKiBleHRlbnNpb24KICAgICAqLwogICAgdmFyICRuc191cmkgPSBudWxsOwogICAgdmFyICRuc19hbGlhcyA9IG51bGw7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0cmluZyBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gYW4gT3BlbklECiAgICAgKiBtZXNzYWdlIGZvciB0aGlzIGV4dGVuc2lvbi4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQXJncygpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgdGhlIGFyZ3VtZW50cyBmcm9tIHRoaXMgZXh0ZW5zaW9uIHRvIHRoZSBwcm92aWRlZCBtZXNzYWdlLgogICAgICoKICAgICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgZXh0ZW5zaW9uIGFyZ3VtZW50cyBhZGRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gdG9NZXNzYWdlKCRtZXNzYWdlKQogICAgewogICAgICAgICRpbXBsaWNpdCA9ICRtZXNzYWdlLT5pc09wZW5JRDEoKTsKICAgICAgICAkYWRkZWQgPSAkbWVzc2FnZS0+bmFtZXNwYWNlcy0+YWRkQWxpYXMoJHRoaXMtPm5zX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5zX2FsaWFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQpOwoKICAgICAgICBpZiAoJGFkZGVkID09PSBudWxsKSB7CiAgICAgICAgICAgIGlmICgkbWVzc2FnZS0+bmFtZXNwYWNlcy0+Z2V0QWxpYXMoJHRoaXMtPm5zX3VyaSkgIT0KICAgICAgICAgICAgICAgICR0aGlzLT5uc19hbGlhcykgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRtZXNzYWdlLT51cGRhdGVBcmdzKCR0aGlzLT5uc191cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldEV4dGVuc2lvbkFyZ3MoKSk7CiAgICAgICAgcmV0dXJuICRtZXNzYWdlOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/FileStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgc3VwcGxpZXMgYSBNZW1jYWNoZWQgc3RvcmUgYmFja2VuZCBmb3IgT3BlbklEIHNlcnZlcnMgYW5kCiAqIGNvbnN1bWVycy4KICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKLyoqCiAqIFJlcXVpcmUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBuZXcgaW50ZXJmYWNlLgogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC5waHAnOwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0ludGVyZmFjZS5waHAnOwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0hNQUMucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9Ob25jZS5waHAnOwoKLyoqCiAqIFRoaXMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIHN0b3JlIGZvciBPcGVuSUQgYXNzb2NpYXRpb25zIGFuZAogKiBub25jZXMuICBUaGlzIHN0b3JlIHNob3VsZCBiZSBzYWZlIGZvciB1c2UgaW4gY29uY3VycmVudCBzeXN0ZW1zIG9uCiAqIGJvdGggd2luZG93cyBhbmQgdW5peCAoZXhjbHVkaW5nIE5GUyBmaWxlc3lzdGVtcykuICBUaGVyZSBhcmUgYQogKiBjb3VwbGUgcmFjZSBjb25kaXRpb25zIGluIHRoZSBzeXN0ZW0sIGJ1dCB0aG9zZSBmYWlsdXJlIGNhc2VzIGhhdmUKICogYmVlbiBzZXQgdXAgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSB3b3JzdC1jYXNlIGJlaGF2aW9yIGlzIHNvbWVvbmUKICogaGF2aW5nIHRvIHRyeSB0byBsb2cgaW4gYSBzZWNvbmQgdGltZS4KICoKICogTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgogKiBQZW9wbGUgd2lzaGluZyB0byBqdXN0IHVzZSB0aGlzIHN0b3JlIG5lZWQgb25seSBwYXkgYXR0ZW50aW9uIHRvCiAqIHRoZSBjb25zdHJ1Y3Rvci4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9GaWxlU3RvcmUgZXh0ZW5kcyBBdXRoX09wZW5JRF9PcGVuSURTdG9yZSB7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyB7QGxpbmsgQXV0aF9PcGVuSURfRmlsZVN0b3JlfS4gIFRoaXMKICAgICAqIGluaXRpYWxpemVzIHRoZSBub25jZSBhbmQgYXNzb2NpYXRpb24gZGlyZWN0b3JpZXMsIHdoaWNoIGFyZQogICAgICogc3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBwYXNzZWQgaW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB0byBwdXQgdGhlIHN0b3JlCiAgICAgKiBkaXJlY3RvcmllcyBpbi4KICAgICAqLwogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfRmlsZVN0b3JlKCRkaXJlY3RvcnkpCiAgICB7CiAgICAgICAgaWYgKCFBdXRoX09wZW5JRDo6ZW5zdXJlRGlyKCRkaXJlY3RvcnkpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ05vdCBhIGRpcmVjdG9yeSBhbmQgZmFpbGVkIHRvIGNyZWF0ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgIC4gJGRpcmVjdG9yeSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICB9CiAgICAgICAgJGRpcmVjdG9yeSA9IHJlYWxwYXRoKCRkaXJlY3RvcnkpOwoKICAgICAgICAkdGhpcy0+ZGlyZWN0b3J5ID0gJGRpcmVjdG9yeTsKICAgICAgICAkdGhpcy0+YWN0aXZlID0gdHJ1ZTsKCiAgICAgICAgJHRoaXMtPm5vbmNlX2RpciA9ICRkaXJlY3RvcnkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ25vbmNlcyc7CgogICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbl9kaXIgPSAkZGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuCiAgICAgICAgICAgICdhc3NvY2lhdGlvbnMnOwoKICAgICAgICAvLyBUZW1wIGRpciBtdXN0IGJlIG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0gYXMgdGhlIGFzc2NpYXRpb25zCiAgICAgICAgLy8gJGRpcmVjdG9yeS4KICAgICAgICAkdGhpcy0+dGVtcF9kaXIgPSAkZGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd0ZW1wJzsKCiAgICAgICAgJHRoaXMtPm1heF9ub25jZV9hZ2UgPSA2ICogNjAgKiA2MDsgLy8gU2l4IGhvdXJzLCBpbiBzZWNvbmRzCgogICAgICAgIGlmICghJHRoaXMtPl9zZXR1cCgpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIE9wZW5JRCBmaWxlIHN0b3JlIGluICcgLgogICAgICAgICAgICAgICAgICAgICAgICAgICRkaXJlY3RvcnksIEVfVVNFUl9FUlJPUik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGRlc3Ryb3koKQogICAgewogICAgICAgIEF1dGhfT3BlbklEX0ZpbGVTdG9yZTo6X3JtdHJlZSgkdGhpcy0+ZGlyZWN0b3J5KTsKICAgICAgICAkdGhpcy0+YWN0aXZlID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3JpZXMgaW4gd2hpY2ggd2Ugc3RvcmUgb3VyIGRhdGEKICAgICAqIGV4aXN0LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfc2V0dXAoKQogICAgewogICAgICAgIHJldHVybiAoQXV0aF9PcGVuSUQ6OmVuc3VyZURpcigkdGhpcy0+bm9uY2VfZGlyKSAmJgogICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmVuc3VyZURpcigkdGhpcy0+YXNzb2NpYXRpb25fZGlyKSAmJgogICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmVuc3VyZURpcigkdGhpcy0+dGVtcF9kaXIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0gYXMKICAgICAqICR0aGlzLT5hc3NvY2lhdGlvbl9kaXIuCiAgICAgKgogICAgICogVGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjbGVhbmVkIGlmIHRoZXJlIGFyZSBhbnkKICAgICAqIHByb2Nlc3NlcyB1c2luZyB0aGUgc3RvcmUuIElmIHRoZXJlIGlzIG5vIGFjdGl2ZSBwcm9jZXNzIHVzaW5nCiAgICAgKiB0aGUgc3RvcmUsIGl0IGlzIHNhZmUgdG8gcmVtb3ZlIGFsbCBvZiB0aGUgZmlsZXMgaW4gdGhlCiAgICAgKiB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgKCRmZCwgJGZpbGVuYW1lKQogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9ta3RlbXAoKQogICAgewogICAgICAgICRuYW1lID0gQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfbWtzdGVtcCgkZGlyID0gJHRoaXMtPnRlbXBfZGlyKTsKICAgICAgICAkZmlsZV9vYmogPSBAZm9wZW4oJG5hbWUsICd3YicpOwogICAgICAgIGlmICgkZmlsZV9vYmogIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkZmlsZV9vYmosICRuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJG5hbWUpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwTm9uY2VzKCkKICAgIHsKICAgICAgICBnbG9iYWwgJEF1dGhfT3BlbklEX1NLRVc7CgogICAgICAgICRub25jZXMgPSBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9saXN0ZGlyKCR0aGlzLT5ub25jZV9kaXIpOwogICAgICAgICRub3cgPSB0aW1lKCk7CgogICAgICAgICRyZW1vdmVkID0gMDsKICAgICAgICAvLyBDaGVjayBhbGwgbm9uY2VzIGZvciBleHBpcnkKICAgICAgICBmb3JlYWNoICgkbm9uY2VzIGFzICRub25jZV9mbmFtZSkgewogICAgICAgICAgICAkYmFzZSA9IGJhc2VuYW1lKCRub25jZV9mbmFtZSk7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy0nLCAkYmFzZSwgMik7CiAgICAgICAgICAgICR0aW1lc3RhbXAgPSAkcGFydHNbMF07CiAgICAgICAgICAgICR0aW1lc3RhbXAgPSBpbnR2YWwoJHRpbWVzdGFtcCwgMTYpOwogICAgICAgICAgICBpZiAoYWJzKCR0aW1lc3RhbXAgLSAkbm93KSA+ICRBdXRoX09wZW5JRF9TS0VXKSB7CiAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJG5vbmNlX2ZuYW1lKTsKICAgICAgICAgICAgICAgICRyZW1vdmVkICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZW1vdmVkOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgdW5pcXVlIGZpbGVuYW1lIGZvciBhIGdpdmVuIHNlcnZlciB1cmwgYW5kCiAgICAgKiBoYW5kbGUuIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IHRoZQogICAgICogZm9ybWF0IG9mIHRoZSBoYW5kbGUuIFRoZSBmaWxlbmFtZSB0aGF0IGlzIHJldHVybmVkIHdpbGwKICAgICAqIGNvbnRhaW4gdGhlIGRvbWFpbiBuYW1lIGZyb20gdGhlIHNlcnZlciBVUkwgZm9yIGVhc2Ugb2YgaHVtYW4KICAgICAqIGluc3BlY3Rpb24gb2YgdGhlIGRhdGEgZGlyZWN0b3J5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRmaWxlbmFtZQogICAgICovCiAgICBmdW5jdGlvbiBnZXRBc3NvY2lhdGlvbkZpbGVuYW1lKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmFjdGl2ZSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJGaWxlU3RvcmUgbm8gbG9uZ2VyIGFjdGl2ZSIsIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cnBvcygkc2VydmVyX3VybCwgJzovLycpID09PSBmYWxzZSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKHNwcmludGYoIkJhZCBzZXJ2ZXIgVVJMOiAlcyIsICRzZXJ2ZXJfdXJsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgbGlzdCgkcHJvdG8sICRyZXN0KSA9IGV4cGxvZGUoJzovLycsICRzZXJ2ZXJfdXJsLCAyKTsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgJHJlc3QpOwogICAgICAgICRkb21haW4gPSBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9maWxlbmFtZUVzY2FwZSgkcGFydHNbMF0pOwogICAgICAgICR1cmxfaGFzaCA9IEF1dGhfT3BlbklEX0ZpbGVTdG9yZTo6X3NhZmU2NCgkc2VydmVyX3VybCk7CiAgICAgICAgaWYgKCRoYW5kbGUpIHsKICAgICAgICAgICAgJGhhbmRsZV9oYXNoID0gQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfc2FmZTY0KCRoYW5kbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRoYW5kbGVfaGFzaCA9ICcnOwogICAgICAgIH0KCiAgICAgICAgJGZpbGVuYW1lID0gc3ByaW50ZignJXMtJXMtJXMtJXMnLCAkcHJvdG8sICRkb21haW4sICR1cmxfaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYW5kbGVfaGFzaCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YXNzb2NpYXRpb25fZGlyLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgYW4gYXNzb2NpYXRpb24gaW4gdGhlIGFzc29jaWF0aW9uIGRpcmVjdG9yeS4KICAgICAqLwogICAgZnVuY3Rpb24gc3RvcmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGFzc29jaWF0aW9uKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmFjdGl2ZSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJGaWxlU3RvcmUgbm8gbG9uZ2VyIGFjdGl2ZSIsIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRhc3NvY2lhdGlvbl9zID0gJGFzc29jaWF0aW9uLT5zZXJpYWxpemUoKTsKICAgICAgICAkZmlsZW5hbWUgPSAkdGhpcy0+Z2V0QXNzb2NpYXRpb25GaWxlbmFtZSgkc2VydmVyX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NpYXRpb24tPmhhbmRsZSk7CiAgICAgICAgbGlzdCgkdG1wX2ZpbGUsICR0bXApID0gJHRoaXMtPl9ta3RlbXAoKTsKCiAgICAgICAgaWYgKCEkdG1wX2ZpbGUpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigiX21rdGVtcCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZ3cml0ZSgkdG1wX2ZpbGUsICRhc3NvY2lhdGlvbl9zKTsKCiAgICAgICAgZmZsdXNoKCR0bXBfZmlsZSk7CgogICAgICAgIGZjbG9zZSgkdG1wX2ZpbGUpOwoKICAgICAgICBpZiAoQHJlbmFtZSgkdG1wLCAkZmlsZW5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgb24gV2luZG93cywgdHJ5IHVubGlua2luZyB0aGUKICAgICAgICAgICAgLy8gZmlsZSBpbiBjYXNlIGl0IGV4aXN0cy4KICAgICAgICAgICAgQHVubGluaygkZmlsZW5hbWUpOwoKICAgICAgICAgICAgLy8gTm93IHRoZSB0YXJnZXQgc2hvdWxkIG5vdCBleGlzdC4gVHJ5IHJlbmFtaW5nIGFnYWluLAogICAgICAgICAgICAvLyBnaXZpbmcgdXAgaWYgaXQgZmFpbHMuCiAgICAgICAgICAgIGlmIChAcmVuYW1lKCR0bXAsICRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIGRvbid0IGxlYXZlIHRoZSB0ZW1wb3JhcnkgZmlsZQogICAgICAgIC8vIGFyb3VuZC4KICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJHRtcCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW4gYXNzb2NpYXRpb24uIElmIG5vIGhhbmRsZSBpcyBzcGVjaWZpZWQsIHJldHVybiB0aGUKICAgICAqIGFzc29jaWF0aW9uIHdpdGggdGhlIG1vc3QgcmVjZW50IGlzc3VlIHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCAkYXNzb2NpYXRpb24KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUgPSBudWxsKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmFjdGl2ZSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJGaWxlU3RvcmUgbm8gbG9uZ2VyIGFjdGl2ZSIsIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRoYW5kbGUgPT09IG51bGwpIHsKICAgICAgICAgICAgJGhhbmRsZSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhlIGZpbGVuYW1lIHdpdGggdGhlIGVtcHR5IGhhbmRsZSBpcyBhIHByZWZpeCBvZiBhbGwgb3RoZXIKICAgICAgICAvLyBhc3NvY2lhdGlvbnMgZm9yIHRoZSBnaXZlbiBzZXJ2ZXIgVVJMLgogICAgICAgICRmaWxlbmFtZSA9ICR0aGlzLT5nZXRBc3NvY2lhdGlvbkZpbGVuYW1lKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKTsKCiAgICAgICAgaWYgKCRoYW5kbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZ2V0QXNzb2NpYXRpb24oJGZpbGVuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYXNzb2NpYXRpb25fZmlsZXMgPQogICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfbGlzdGRpcigkdGhpcy0+YXNzb2NpYXRpb25fZGlyKTsKICAgICAgICAgICAgJG1hdGNoaW5nX2ZpbGVzID0gYXJyYXkoKTsKCiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiB0aGUgcGF0aCB0byBkbyB0aGUgY29tcGFyaXNvbgogICAgICAgICAgICAkbmFtZSA9IGJhc2VuYW1lKCRmaWxlbmFtZSk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRhc3NvY2lhdGlvbl9maWxlcyBhcyAkYXNzb2NpYXRpb25fZmlsZSkgewogICAgICAgICAgICAgICAgJGJhc2UgPSBiYXNlbmFtZSgkYXNzb2NpYXRpb25fZmlsZSk7CiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRiYXNlLCAkbmFtZSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAkbWF0Y2hpbmdfZmlsZXNbXSA9ICRhc3NvY2lhdGlvbl9maWxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWF0Y2hpbmdfYXNzb2NpYXRpb25zID0gYXJyYXkoKTsKICAgICAgICAgICAgLy8gcmVhZCB0aGUgbWF0Y2hpbmcgZmlsZXMgYW5kIHNvcnQgYnkgdGltZSBpc3N1ZWQKICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoaW5nX2ZpbGVzIGFzICRmdWxsX25hbWUpIHsKICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbiA9ICR0aGlzLT5fZ2V0QXNzb2NpYXRpb24oJGZ1bGxfbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAoJGFzc29jaWF0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJG1hdGNoaW5nX2Fzc29jaWF0aW9uc1tdID0gYXJyYXkoJGFzc29jaWF0aW9uLT5pc3N1ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jaWF0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGlzc3VlZCA9IGFycmF5KCk7CiAgICAgICAgICAgICRhc3NvY3MgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hpbmdfYXNzb2NpYXRpb25zIGFzICRrZXkgPT4gJGFzc29jKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVkWyRrZXldID0gJGFzc29jWzBdOwogICAgICAgICAgICAgICAgJGFzc29jc1ska2V5XSA9ICRhc3NvY1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYXJyYXlfbXVsdGlzb3J0KCRpc3N1ZWQsIFNPUlRfREVTQywgJGFzc29jcywgU09SVF9ERVNDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoaW5nX2Fzc29jaWF0aW9ucyk7CgogICAgICAgICAgICAvLyByZXR1cm4gdGhlIG1vc3QgcmVjZW50bHkgaXNzdWVkIG9uZS4KICAgICAgICAgICAgaWYgKCRtYXRjaGluZ19hc3NvY2lhdGlvbnMpIHsKICAgICAgICAgICAgICAgIGxpc3QoJGlzc3VlZCwgJGFzc29jKSA9ICRtYXRjaGluZ19hc3NvY2lhdGlvbnNbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gJGFzc29jOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2dldEFzc29jaWF0aW9uKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5hY3RpdmUpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigiRmlsZVN0b3JlIG5vIGxvbmdlciBhY3RpdmUiLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRhc3NvY19maWxlID0gQGZvcGVuKCRmaWxlbmFtZSwgJ3JiJyk7CgogICAgICAgIGlmICgkYXNzb2NfZmlsZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkYXNzb2NfcyA9IGZyZWFkKCRhc3NvY19maWxlLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsKICAgICAgICBmY2xvc2UoJGFzc29jX2ZpbGUpOwoKICAgICAgICBpZiAoISRhc3NvY19zKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGFzc29jaWF0aW9uID0KICAgICAgICAgICAgQXV0aF9PcGVuSURfQXNzb2NpYXRpb246OmRlc2VyaWFsaXplKCdBdXRoX09wZW5JRF9Bc3NvY2lhdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY19zKTsKCiAgICAgICAgaWYgKCEkYXNzb2NpYXRpb24pIHsKICAgICAgICAgICAgQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfcmVtb3ZlSWZQcmVzZW50KCRmaWxlbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhc3NvY2lhdGlvbi0+Z2V0RXhwaXJlc0luKCkgPT0gMCkgewogICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJGZpbGVuYW1lKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRhc3NvY2lhdGlvbjsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYW4gYXNzb2NpYXRpb24gaWYgaXQgZXhpc3RzLiBEbyBub3RoaW5nIGlmIGl0IGRvZXMgbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCAkc3VjY2VzcwogICAgICovCiAgICBmdW5jdGlvbiByZW1vdmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGhhbmRsZSkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5hY3RpdmUpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigiRmlsZVN0b3JlIG5vIGxvbmdlciBhY3RpdmUiLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRhc3NvYyA9ICR0aGlzLT5nZXRBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGhhbmRsZSk7CiAgICAgICAgaWYgKCRhc3NvYyA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGZpbGVuYW1lID0gJHRoaXMtPmdldEFzc29jaWF0aW9uRmlsZW5hbWUoJHNlcnZlcl91cmwsICRoYW5kbGUpOwogICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfcmVtb3ZlSWZQcmVzZW50KCRmaWxlbmFtZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBub25jZSBpcyBwcmVzZW50LiBBcyBhIHNpZGUgZWZmZWN0LCBtYXJrIGl0CiAgICAgKiBhcyBubyBsb25nZXIgcHJlc2VudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgJHByZXNlbnQKICAgICAqLwogICAgZnVuY3Rpb24gdXNlTm9uY2UoJHNlcnZlcl91cmwsICR0aW1lc3RhbXAsICRzYWx0KQogICAgewogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfU0tFVzsKCiAgICAgICAgaWYgKCEkdGhpcy0+YWN0aXZlKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoIkZpbGVTdG9yZSBubyBsb25nZXIgYWN0aXZlIiwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGFicygkdGltZXN0YW1wIC0gdGltZSgpKSA+ICRBdXRoX09wZW5JRF9TS0VXICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlcnZlcl91cmwpIHsKICAgICAgICAgICAgbGlzdCgkcHJvdG8sICRyZXN0KSA9IGV4cGxvZGUoJzovLycsICRzZXJ2ZXJfdXJsLCAyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvdG8gPSAnJzsKICAgICAgICAgICAgJHJlc3QgPSAnJzsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcmVzdCwgMik7CiAgICAgICAgJGRvbWFpbiA9ICR0aGlzLT5fZmlsZW5hbWVFc2NhcGUoJHBhcnRzWzBdKTsKICAgICAgICAkdXJsX2hhc2ggPSAkdGhpcy0+X3NhZmU2NCgkc2VydmVyX3VybCk7CiAgICAgICAgJHNhbHRfaGFzaCA9ICR0aGlzLT5fc2FmZTY0KCRzYWx0KTsKCiAgICAgICAgJGZpbGVuYW1lID0gc3ByaW50ZignJTA4eC0lcy0lcy0lcy0lcycsICR0aW1lc3RhbXAsICRwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkb21haW4sICR1cmxfaGFzaCwgJHNhbHRfaGFzaCk7CiAgICAgICAgJGZpbGVuYW1lID0gJHRoaXMtPm5vbmNlX2RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZW5hbWU7CgogICAgICAgICRyZXN1bHQgPSBAZm9wZW4oJGZpbGVuYW1lLCAneCcpOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZjbG9zZSgkcmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGV4cGlyZWQgZW50cmllcyBmcm9tIHRoZSBkYXRhYmFzZS4gVGhpcyBpcyBwb3RlbnRpYWxseQogICAgICogZXhwZW5zaXZlLCBzbyBvbmx5IHJ1biB3aGVuIGl0IGlzIGFjY2VwdGFibGUgdG8gdGFrZSB0aW1lLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfYWxsQXNzb2NzKCkKICAgIHsKICAgICAgICAkYWxsX2Fzc29jaWF0aW9ucyA9IGFycmF5KCk7CgogICAgICAgICRhc3NvY2lhdGlvbl9maWxlbmFtZXMgPQogICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9saXN0ZGlyKCR0aGlzLT5hc3NvY2lhdGlvbl9kaXIpOwoKICAgICAgICBmb3JlYWNoICgkYXNzb2NpYXRpb25fZmlsZW5hbWVzIGFzICRhc3NvY2lhdGlvbl9maWxlbmFtZSkgewogICAgICAgICAgICAkYXNzb2NpYXRpb25fZmlsZSA9IGZvcGVuKCRhc3NvY2lhdGlvbl9maWxlbmFtZSwgJ3JiJyk7CgogICAgICAgICAgICBpZiAoJGFzc29jaWF0aW9uX2ZpbGUgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkYXNzb2NfcyA9IGZyZWFkKCRhc3NvY2lhdGlvbl9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2l6ZSgkYXNzb2NpYXRpb25fZmlsZW5hbWUpKTsKICAgICAgICAgICAgICAgIGZjbG9zZSgkYXNzb2NpYXRpb25fZmlsZSk7CgogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGV4cGlyZWQgb3IgY29ycnVwdGVkIGFzc29jaWF0aW9ucwogICAgICAgICAgICAgICAgJGFzc29jaWF0aW9uID0KICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfQXNzb2NpYXRpb246OmRlc2VyaWFsaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhfT3BlbklEX0Fzc29jaWF0aW9uJywgJGFzc29jX3MpOwoKICAgICAgICAgICAgICAgIGlmICgkYXNzb2NpYXRpb24gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NpYXRpb25fZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGFzc29jaWF0aW9uLT5nZXRFeHBpcmVzSW4oKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhbGxfYXNzb2NpYXRpb25zW10gPSBhcnJheSgkYXNzb2NpYXRpb25fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NpYXRpb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhbGxfYXNzb2NpYXRpb25zOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFuKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5hY3RpdmUpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcigiRmlsZVN0b3JlIG5vIGxvbmdlciBhY3RpdmUiLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRub25jZXMgPSBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9saXN0ZGlyKCR0aGlzLT5ub25jZV9kaXIpOwogICAgICAgICRub3cgPSB0aW1lKCk7CgogICAgICAgIC8vIENoZWNrIGFsbCBub25jZXMgZm9yIGV4cGlyeQogICAgICAgIGZvcmVhY2ggKCRub25jZXMgYXMgJG5vbmNlKSB7CiAgICAgICAgICAgIGlmICghQXV0aF9PcGVuSURfY2hlY2tUaW1lc3RhbXAoJG5vbmNlLCAkbm93KSkgewogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gJHRoaXMtPm5vbmNlX2RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbm9uY2U7CiAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJGZpbGVuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9hbGxBc3NvY3MoKSBhcyAkcGFpcikgewogICAgICAgICAgICBsaXN0KCRhc3NvY19maWxlbmFtZSwgJGFzc29jKSA9ICRwYWlyOwogICAgICAgICAgICBpZiAoJGFzc29jLT5nZXRFeHBpcmVzSW4oKSA9PSAwKSB7CiAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9GaWxlU3RvcmU6Ol9yZW1vdmVJZlByZXNlbnQoJGFzc29jX2ZpbGVuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfcm10cmVlKCRkaXIpCiAgICB7CiAgICAgICAgaWYgKCRkaXJbc3RybGVuKCRkaXIpIC0gMV0gIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgewogICAgICAgICAgICAkZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJGRpcikpIHsKICAgICAgICAgICAgd2hpbGUgKCRpdGVtID0gcmVhZGRpcigkaGFuZGxlKSkgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkaXRlbSwgYXJyYXkoJy4nLCAnLi4nKSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRkaXIgLiAkaXRlbSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfcm10cmVlKCRkaXIgLiAkaXRlbSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfZmlsZSgkZGlyIC4gJGl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5saW5rKCRkaXIgLiAkaXRlbSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2xvc2VkaXIoJGhhbmRsZSk7CgogICAgICAgICAgICBpZiAoIUBybWRpcigkZGlyKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBDb3VsZG4ndCBvcGVuIGRpcmVjdG9yeS4KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfbWtzdGVtcCgkZGlyKQogICAgewogICAgICAgIGZvcmVhY2ggKHJhbmdlKDAsIDQpIGFzICRpKSB7CiAgICAgICAgICAgICRuYW1lID0gdGVtcG5hbSgkZGlyLCAicGhwX29wZW5pZF9maWxlc3RvcmVfIik7CgogICAgICAgICAgICBpZiAoJG5hbWUgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJG5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBfbWtkdGVtcCgkZGlyKQogICAgewogICAgICAgIGZvcmVhY2ggKHJhbmdlKDAsIDQpIGFzICRpKSB7CiAgICAgICAgICAgICRuYW1lID0gJGRpciAuIHN0cnZhbChESVJFQ1RPUllfU0VQQVJBVE9SKSAuIHN0cnZhbChnZXRteXBpZCgpKSAuCiAgICAgICAgICAgICAgICAiLSIgLiBzdHJ2YWwocmFuZCgxLCB0aW1lKCkpKTsKICAgICAgICAgICAgaWYgKCFta2RpcigkbmFtZSwgMDcwMCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2xpc3RkaXIoJGRpcikKICAgIHsKICAgICAgICAkaGFuZGxlID0gb3BlbmRpcigkZGlyKTsKICAgICAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJGZpbGVuYW1lLCBhcnJheSgnLicsICcuLicpKSkgewogICAgICAgICAgICAgICAgJGZpbGVzW10gPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpbGVzOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9pc0ZpbGVuYW1lU2FmZSgkY2hhcikKICAgIHsKICAgICAgICAkX0F1dGhfT3BlbklEX2ZpbGVuYW1lX2FsbG93ZWQgPSBBdXRoX09wZW5JRF9sZXR0ZXJzIC4KICAgICAgICAgICAgQXV0aF9PcGVuSURfZGlnaXRzIC4gIi4iOwogICAgICAgIHJldHVybiAoc3RycG9zKCRfQXV0aF9PcGVuSURfZmlsZW5hbWVfYWxsb3dlZCwgJGNoYXIpICE9PSBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3NhZmU2NCgkc3RyKQogICAgewogICAgICAgICRoNjQgPSBiYXNlNjRfZW5jb2RlKEF1dGhfT3BlbklEX1NIQTEoJHN0cikpOwogICAgICAgICRoNjQgPSBzdHJfcmVwbGFjZSgnKycsICdfJywgJGg2NCk7CiAgICAgICAgJGg2NCA9IHN0cl9yZXBsYWNlKCcvJywgJy4nLCAkaDY0KTsKICAgICAgICAkaDY0ID0gc3RyX3JlcGxhY2UoJz0nLCAnJywgJGg2NCk7CiAgICAgICAgcmV0dXJuICRoNjQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2ZpbGVuYW1lRXNjYXBlKCRzdHIpCiAgICB7CiAgICAgICAgJGZpbGVuYW1lID0gIiI7CiAgICAgICAgJGIgPSBBdXRoX09wZW5JRDo6dG9CeXRlcygkc3RyKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGIpOyAkaSsrKSB7CiAgICAgICAgICAgICRjID0gJGJbJGldOwogICAgICAgICAgICBpZiAoQXV0aF9PcGVuSURfRmlsZVN0b3JlOjpfaXNGaWxlbmFtZVNhZmUoJGMpKSB7CiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgLj0gJGM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgLj0gc3ByaW50ZigiXyUwMlgiLCBvcmQoJGMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpbGVuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogQXR0ZW1wdCB0byByZW1vdmUgYSBmaWxlLCByZXR1cm5pbmcgd2hldGhlciB0aGUgZmlsZSBleGlzdGVkIGF0CiAgICAgKiB0aGUgdGltZSBvZiB0aGUgY2FsbC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEByZXR1cm4gYm9vbCAkcmVzdWx0IFRydWUgaWYgdGhlIGZpbGUgd2FzIHByZXNlbnQsIGZhbHNlIGlmIG5vdC4KICAgICAqLwogICAgZnVuY3Rpb24gX3JlbW92ZUlmUHJlc2VudCgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuIEB1bmxpbmsoJGZpbGVuYW1lKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwQXNzb2NpYXRpb25zKCkKICAgIHsKICAgICAgICAkcmVtb3ZlZCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9hbGxBc3NvY3MoKSBhcyAkcGFpcikgewogICAgICAgICAgICBsaXN0KCRhc3NvY19maWxlbmFtZSwgJGFzc29jKSA9ICRwYWlyOwogICAgICAgICAgICBpZiAoJGFzc29jLT5nZXRFeHBpcmVzSW4oKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3JlbW92ZUlmUHJlc2VudCgkYXNzb2NfZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgJHJlbW92ZWQgKz0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlbW92ZWQ7CiAgICB9Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/HMAC.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGlzIHRoZSBITUFDU0hBMSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIE9wZW5JRCBsaWJyYXJ5LgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQGFjY2VzcyBwcml2YXRlCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC5waHAnOwoKLyoqCiAqIFNIQTFfQkxPQ0tTSVpFIGlzIHRoaXMgbW9kdWxlJ3MgU0hBMSBibG9ja3NpemUgdXNlZCBieSB0aGUgZmFsbGJhY2sKICogaW1wbGVtZW50YXRpb24uCiAqLwpkZWZpbmUoJ0F1dGhfT3BlbklEX1NIQTFfQkxPQ0tTSVpFJywgNjQpOwoKZnVuY3Rpb24gQXV0aF9PcGVuSURfU0hBMSgkdGV4dCkKewogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnaGFzaCcpICYmCiAgICAgICAgZnVuY3Rpb25fZXhpc3RzKCdoYXNoX2FsZ29zJykgJiYKICAgICAgICAoaW5fYXJyYXkoJ3NoYTEnLCBoYXNoX2FsZ29zKCkpKSkgewogICAgICAgIC8vIFBIUCA1IGNhc2UgKHNvbWV0aW1lcyk6ICdoYXNoJyBhdmFpbGFibGUgYW5kICdzaGExJyBhbGdvCiAgICAgICAgLy8gc3VwcG9ydGVkLgogICAgICAgIHJldHVybiBoYXNoKCdzaGExJywgJHRleHQsIHRydWUpOwogICAgfSBlbHNlIGlmIChmdW5jdGlvbl9leGlzdHMoJ3NoYTEnKSkgewogICAgICAgIC8vIFBIUCA0IGNhc2U6ICdzaGExJyBhdmFpbGFibGUuCiAgICAgICAgJGhleCA9IHNoYTEoJHRleHQpOwogICAgICAgICRyYXcgPSAnJzsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA0MDsgJGkgKz0gMikgewogICAgICAgICAgICAkaGV4Y29kZSA9IHN1YnN0cigkaGV4LCAkaSwgMik7CiAgICAgICAgICAgICRjaGFyY29kZSA9IChpbnQpYmFzZV9jb252ZXJ0KCRoZXhjb2RlLCAxNiwgMTApOwogICAgICAgICAgICAkcmF3IC49IGNocigkY2hhcmNvZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJhdzsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRXhwbG9kZS4KICAgICAgICB0cmlnZ2VyX2Vycm9yKCdObyBTSEExIGZ1bmN0aW9uIGZvdW5kJywgRV9VU0VSX0VSUk9SKTsKICAgIH0KfQoKLyoqCiAqIENvbXB1dGUgYW4gSE1BQy9TSEExIGhhc2guCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIEhNQUMga2V5CiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgVGhlIG1lc3NhZ2UgdGV4dCB0byBoYXNoCiAqIEByZXR1cm4gc3RyaW5nICRtYWMgVGhlIE1BQwogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfSE1BQ1NIQTEoJGtleSwgJHRleHQpCnsKICAgIGlmIChBdXRoX09wZW5JRDo6Ynl0ZXMoJGtleSkgPiBBdXRoX09wZW5JRF9TSEExX0JMT0NLU0laRSkgewogICAgICAgICRrZXkgPSBBdXRoX09wZW5JRF9TSEExKCRrZXksIHRydWUpOwogICAgfQoKICAgICRrZXkgPSBzdHJfcGFkKCRrZXksIEF1dGhfT3BlbklEX1NIQTFfQkxPQ0tTSVpFLCBjaHIoMHgwMCkpOwogICAgJGlwYWQgPSBzdHJfcmVwZWF0KGNocigweDM2KSwgQXV0aF9PcGVuSURfU0hBMV9CTE9DS1NJWkUpOwogICAgJG9wYWQgPSBzdHJfcmVwZWF0KGNocigweDVjKSwgQXV0aF9PcGVuSURfU0hBMV9CTE9DS1NJWkUpOwogICAgJGhhc2gxID0gQXV0aF9PcGVuSURfU0hBMSgoJGtleSBeICRpcGFkKSAuICR0ZXh0LCB0cnVlKTsKICAgICRobWFjID0gQXV0aF9PcGVuSURfU0hBMSgoJGtleSBeICRvcGFkKSAuICRoYXNoMSwgdHJ1ZSk7CiAgICByZXR1cm4gJGhtYWM7Cn0KCmlmIChmdW5jdGlvbl9leGlzdHMoJ2hhc2gnKSAmJgogICAgZnVuY3Rpb25fZXhpc3RzKCdoYXNoX2FsZ29zJykgJiYKICAgIChpbl9hcnJheSgnc2hhMjU2JywgaGFzaF9hbGdvcygpKSkpIHsKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1NIQTI1NigkdGV4dCkKICAgIHsKICAgICAgICAvLyBQSFAgNSBjYXNlOiAnaGFzaCcgYXZhaWxhYmxlIGFuZCAnc2hhMjU2JyBhbGdvIHN1cHBvcnRlZC4KICAgICAgICByZXR1cm4gaGFzaCgnc2hhMjU2JywgJHRleHQsIHRydWUpOwogICAgfQogICAgZGVmaW5lKCdBdXRoX09wZW5JRF9TSEEyNTZfU1VQUE9SVEVEJywgdHJ1ZSk7Cn0gZWxzZSB7CiAgICBkZWZpbmUoJ0F1dGhfT3BlbklEX1NIQTI1Nl9TVVBQT1JURUQnLCBmYWxzZSk7Cn0KCmlmIChmdW5jdGlvbl9leGlzdHMoJ2hhc2hfaG1hYycpICYmCiAgICBmdW5jdGlvbl9leGlzdHMoJ2hhc2hfYWxnb3MnKSAmJgogICAgKGluX2FycmF5KCdzaGEyNTYnLCBoYXNoX2FsZ29zKCkpKSkgewoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0hNQUNTSEEyNTYoJGtleSwgJHRleHQpCiAgICB7CiAgICAgICAgLy8gUmV0dXJuIHJhdyBNQUMgKG5vdCBoZXggc3RyaW5nKS4KICAgICAgICByZXR1cm4gaGFzaF9obWFjKCdzaGEyNTYnLCAkdGV4dCwgJGtleSwgdHJ1ZSk7CiAgICB9CgogICAgZGVmaW5lKCdBdXRoX09wZW5JRF9ITUFDU0hBMjU2X1NVUFBPUlRFRCcsIHRydWUpOwp9IGVsc2UgewogICAgZGVmaW5lKCdBdXRoX09wZW5JRF9ITUFDU0hBMjU2X1NVUFBPUlRFRCcsIGZhbHNlKTsKfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Interface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgc3BlY2lmaWVzIHRoZSBpbnRlcmZhY2UgZm9yIFBIUCBPcGVuSUQgc3RvcmUgaW1wbGVtZW50YXRpb25zLgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgc3RvcmUgb2JqZWN0cyB0aGUgT3BlbklEIGxpYnJhcnkKICogdXNlcy4gSXQgaXMgYSBzaW5nbGUgY2xhc3MgdGhhdCBwcm92aWRlcyBhbGwgb2YgdGhlIHBlcnNpc3RlbmNlCiAqIG1lY2hhbmlzbXMgdGhhdCB0aGUgT3BlbklEIGxpYnJhcnkgbmVlZHMsIGZvciBib3RoIHNlcnZlcnMgYW5kCiAqIGNvbnN1bWVycy4gIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBTUUwtZHJpdmVuIHN0b3JlLCBwbGVhc2Ugc2VlCiAqIHRoZW4ge0BsaW5rIEF1dGhfT3BlbklEX1NRTFN0b3JlfSBjbGFzcy4KICoKICogQ2hhbmdlOiBWZXJzaW9uIDIuMCByZW1vdmVkIHRoZSBzdG9yZU5vbmNlLCBnZXRBdXRoS2V5LCBhbmQgaXNEdW1iCiAqIG1ldGhvZHMsIGFuZCBjaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiB0aGUgdXNlTm9uY2UgbWV0aG9kIHRvIHN1cHBvcnQKICogb25lLXdheSBub25jZXMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICovCmNsYXNzIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlIHsKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgcHV0cyBhbiBBc3NvY2lhdGlvbiBvYmplY3QgaW50byBzdG9yYWdlLAogICAgICogcmV0cmlldmFibGUgYnkgc2VydmVyIFVSTCBhbmQgaGFuZGxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl91cmwgVGhlIFVSTCBvZiB0aGUgaWRlbnRpdHkgc2VydmVyIHRoYXQKICAgICAqIHRoaXMgYXNzb2NpYXRpb24gaXMgd2l0aC4gQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBzZXJ2ZXIgcG9ydGlvbgogICAgICogb2YgdGhlIGxpYnJhcnkgdXNlcyB0aGlzIGludGVyZmFjZSwgZG9uJ3QgYXNzdW1lIHRoZXJlIGFyZSBhbnkKICAgICAqIGxpbWl0YXRpb25zIG9uIHRoZSBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBpbnB1dCBzdHJpbmcuIEluCiAgICAgKiBwYXJ0aWN1bGFyLCBleHBlY3QgdG8gc2VlIHVuZXNjYXBlZCBub24tdXJsLXNhZmUgY2hhcmFjdGVycyBpbgogICAgICogdGhlIHNlcnZlcl91cmwgZmllbGQuCiAgICAgKgogICAgICogQHBhcmFtIEFzc29jaWF0aW9uICRhc3NvY2lhdGlvbiBUaGUgQXNzb2NpYXRpb24gdG8gc3RvcmUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN0b3JlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRhc3NvY2lhdGlvbikKICAgIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRF9PcGVuSURTdG9yZTo6c3RvcmVBc3NvY2lhdGlvbiAiLgogICAgICAgICAgICAgICAgICAgICAgIm5vdCBpbXBsZW1lbnRlZCIsIEVfVVNFUl9FUlJPUik7CiAgICB9CgogICAgLyoKICAgICAqIFJlbW92ZSBleHBpcmVkIG5vbmNlcyBmcm9tIHRoZSBzdG9yZS4KICAgICAqCiAgICAgKiBEaXNjYXJkcyBhbnkgbm9uY2UgZnJvbSBzdG9yYWdlIHRoYXQgaXMgb2xkIGVub3VnaCB0aGF0IGl0cwogICAgICogdGltZXN0YW1wIHdvdWxkIG5vdCBwYXNzIHVzZU5vbmNlKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBpbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUKICAgICAqIGxpYnJhcnkuICBJdCBwcm92aWRlcyBhIHdheSBmb3Igc3RvcmUgYWRtaW5zIHRvIGtlZXAgdGhlaXIKICAgICAqIHN0b3JhZ2UgZnJvbSBmaWxsaW5nIHVwIHdpdGggZXhwaXJlZCBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBub25jZXMgZXhwaXJlZAogICAgICovCiAgICBmdW5jdGlvbiBjbGVhbnVwTm9uY2VzKCkKICAgIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRF9PcGVuSURTdG9yZTo6Y2xlYW51cE5vbmNlcyAiLgogICAgICAgICAgICAgICAgICAgICAgIm5vdCBpbXBsZW1lbnRlZCIsIEVfVVNFUl9FUlJPUik7CiAgICB9CgogICAgLyoKICAgICAqIFJlbW92ZSBleHBpcmVkIGFzc29jaWF0aW9ucyBmcm9tIHRoZSBzdG9yZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGluIHRoZSBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZQogICAgICogbGlicmFyeS4gIEl0IHByb3ZpZGVzIGEgd2F5IGZvciBzdG9yZSBhZG1pbnMgdG8ga2VlcCB0aGVpcgogICAgICogc3RvcmFnZSBmcm9tIGZpbGxpbmcgdXAgd2l0aCBleHBpcmVkIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGFzc29jaWF0aW9ucyBleHBpcmVkLgogICAgICovCiAgICBmdW5jdGlvbiBjbGVhbnVwQXNzb2NpYXRpb25zKCkKICAgIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRF9PcGVuSURTdG9yZTo6Y2xlYW51cEFzc29jaWF0aW9ucyAiLgogICAgICAgICAgICAgICAgICAgICAgIm5vdCBpbXBsZW1lbnRlZCIsIEVfVVNFUl9FUlJPUik7CiAgICB9CgogICAgLyoKICAgICAqIFNob3J0Y3V0IGZvciBjbGVhbnVwTm9uY2VzKCksIGNsZWFudXBBc3NvY2lhdGlvbnMoKS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGluIHRoZSBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZQogICAgICogbGlicmFyeS4gIEl0IHByb3ZpZGVzIGEgd2F5IGZvciBzdG9yZSBhZG1pbnMgdG8ga2VlcCB0aGVpcgogICAgICogc3RvcmFnZSBmcm9tIGZpbGxpbmcgdXAgd2l0aCBleHBpcmVkIGRhdGEuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNsZWFudXAoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgkdGhpcy0+Y2xlYW51cE5vbmNlcygpLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y2xlYW51cEFzc29jaWF0aW9ucygpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcG9ydCB3aGV0aGVyIHRoaXMgc3RvcmFnZSBzdXBwb3J0cyBjbGVhbnVwCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN1cHBvcnRzQ2xlYW51cCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIEFzc29jaWF0aW9uIG9iamVjdCBmcm9tIHN0b3JhZ2UgdGhhdAogICAgICogbWF0Y2hlcyB0aGUgc2VydmVyIFVSTCBhbmQsIGlmIHNwZWNpZmllZCwgaGFuZGxlLiBJdCByZXR1cm5zCiAgICAgKiBudWxsIGlmIG5vIHN1Y2ggYXNzb2NpYXRpb24gaXMgZm91bmQgb3IgaWYgdGhlIG1hdGNoaW5nCiAgICAgKiBhc3NvY2lhdGlvbiBpcyBleHBpcmVkLgogICAgICoKICAgICAqIElmIG5vIGhhbmRsZSBpcyBzcGVjaWZpZWQsIHRoZSBzdG9yZSBtYXkgcmV0dXJuIGFueSBhc3NvY2lhdGlvbgogICAgICogd2hpY2ggbWF0Y2hlcyB0aGUgc2VydmVyIFVSTC4gSWYgbXVsdGlwbGUgYXNzb2NpYXRpb25zIGFyZQogICAgICogdmFsaWQsIHRoZSByZWNvbW1lbmRlZCByZXR1cm4gdmFsdWUgZm9yIHRoaXMgbWV0aG9kIGlzIHRoZSBvbmUKICAgICAqIG1vc3QgcmVjZW50bHkgaXNzdWVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIGFsbG93ZWQgKGFuZCBlbmNvdXJhZ2VkKSB0byBnYXJiYWdlIGNvbGxlY3QKICAgICAqIGV4cGlyZWQgYXNzb2NpYXRpb25zIHdoZW4gZm91bmQuIFRoaXMgbWV0aG9kIG11c3Qgbm90IHJldHVybgogICAgICogZXhwaXJlZCBhc3NvY2lhdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX3VybCBUaGUgVVJMIG9mIHRoZSBpZGVudGl0eSBzZXJ2ZXIgdG8gZ2V0CiAgICAgKiB0aGUgYXNzb2NpYXRpb24gZm9yLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIHNlcnZlciBwb3J0aW9uIG9mCiAgICAgKiB0aGUgbGlicmFyeSB1c2VzIHRoaXMgaW50ZXJmYWNlLCBkb24ndCBhc3N1bWUgdGhlcmUgYXJlIGFueQogICAgICogbGltaXRhdGlvbnMgb24gdGhlIGNoYXJhY3RlciBzZXQgb2YgdGhlIGlucHV0IHN0cmluZy4gIEluCiAgICAgKiBwYXJ0aWN1bGFyLCBleHBlY3QgdG8gc2VlIHVuZXNjYXBlZCBub24tdXJsLXNhZmUgY2hhcmFjdGVycyBpbgogICAgICogdGhlIHNlcnZlcl91cmwgZmllbGQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRoYW5kbGUgVGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgaXMgdGhlIGhhbmRsZSBvZgogICAgICogdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uIHRvIGdldC4gSWYgbm8gc3BlY2lmaWMgaGFuZGxlIGlzCiAgICAgKiBwcm92aWRlZCwgYW55IHZhbGlkIGFzc29jaWF0aW9uIG1hdGNoaW5nIHRoZSBzZXJ2ZXIgVVJMIGlzCiAgICAgKiByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEFzc29jaWF0aW9uIFRoZSBBc3NvY2lhdGlvbiBmb3IgdGhlIGdpdmVuIGlkZW50aXR5CiAgICAgKiBzZXJ2ZXIuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEFzc29jaWF0aW9uKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlID0gbnVsbCkKICAgIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRF9PcGVuSURTdG9yZTo6Z2V0QXNzb2NpYXRpb24gIi4KICAgICAgICAgICAgICAgICAgICAgICJub3QgaW1wbGVtZW50ZWQiLCBFX1VTRVJfRVJST1IpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgbWF0Y2hpbmcgYXNzb2NpYXRpb24gaWYgaXQncyBmb3VuZCwgYW5kCiAgICAgKiByZXR1cm5zIHdoZXRoZXIgdGhlIGFzc29jaWF0aW9uIHdhcyByZW1vdmVkIG9yIG5vdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfdXJsIFRoZSBVUkwgb2YgdGhlIGlkZW50aXR5IHNlcnZlciB0aGUKICAgICAqIGFzc29jaWF0aW9uIHRvIHJlbW92ZSBiZWxvbmdzIHRvLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIHNlcnZlcgogICAgICogcG9ydGlvbiBvZiB0aGUgbGlicmFyeSB1c2VzIHRoaXMgaW50ZXJmYWNlLCBkb24ndCBhc3N1bWUgdGhlcmUKICAgICAqIGFyZSBhbnkgbGltaXRhdGlvbnMgb24gdGhlIGNoYXJhY3RlciBzZXQgb2YgdGhlIGlucHV0CiAgICAgKiBzdHJpbmcuIEluIHBhcnRpY3VsYXIsIGV4cGVjdCB0byBzZWUgdW5lc2NhcGVkIG5vbi11cmwtc2FmZQogICAgICogY2hhcmFjdGVycyBpbiB0aGUgc2VydmVyX3VybCBmaWVsZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYW5kbGUgVGhpcyBpcyB0aGUgaGFuZGxlIG9mIHRoZSBhc3NvY2lhdGlvbiB0bwogICAgICogcmVtb3ZlLiBJZiB0aGVyZSBpc24ndCBhbiBhc3NvY2lhdGlvbiBmb3VuZCB0aGF0IG1hdGNoZXMgYm90aAogICAgICogdGhlIGdpdmVuIFVSTCBhbmQgaGFuZGxlLCB0aGVuIHRoZXJlIHdhcyBubyBtYXRjaGluZyBoYW5kbGUKICAgICAqIGZvdW5kLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gYXNzb2NpYXRpb24gZXhpc3RlZC4KICAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUpCiAgICB7CiAgICAgICAgdHJpZ2dlcl9lcnJvcigiQXV0aF9PcGVuSURfT3BlbklEU3RvcmU6OnJlbW92ZUFzc29jaWF0aW9uICIuCiAgICAgICAgICAgICAgICAgICAgICAibm90IGltcGxlbWVudGVkIiwgRV9VU0VSX0VSUk9SKTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHVzaW5nIGEgbm9uY2UuCiAgICAgKgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBDe1RydWV9IGlmIHRoZSBub25jZSBoYXMgbm90IGJlZW4KICAgICAqIHVzZWQgYmVmb3JlLCBhbmQgc3RvcmUgaXQgZm9yIGEgd2hpbGUgdG8gbWFrZSBzdXJlIG5vYm9keQogICAgICogdHJpZXMgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFnYWluLiAgSWYgdGhlIG5vbmNlIGhhcyBhbHJlYWR5CiAgICAgKiBiZWVuIHVzZWQsIHJldHVybiBDe0ZhbHNlfS4KICAgICAqCiAgICAgKiBDaGFuZ2U6IEluIGVhcmxpZXIgdmVyc2lvbnMsIHJvdW5kLXRyaXAgbm9uY2VzIHdlcmUgdXNlZCBhbmQgYQogICAgICogbm9uY2Ugd2FzIG9ubHkgdmFsaWQgaWYgaXQgaGFkIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgd2l0aAogICAgICogc3RvcmVOb25jZS4gIFZlcnNpb24gMi4wIHVzZXMgb25lLXdheSBub25jZXMsIHJlcXVpcmluZyBhCiAgICAgKiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gaGVyZSB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiBhCiAgICAgKiBzdG9yZU5vbmNlIGNhbGwuICAoc3RvcmVOb25jZSBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUKICAgICAqIGludGVyZmFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZSBUaGUgbm9uY2UgdG8gdXNlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBXaGV0aGVyIG9yIG5vdCB0aGUgbm9uY2Ugd2FzIHZhbGlkLgogICAgICovCiAgICBmdW5jdGlvbiB1c2VOb25jZSgkc2VydmVyX3VybCwgJHRpbWVzdGFtcCwgJHNhbHQpCiAgICB7CiAgICAgICAgdHJpZ2dlcl9lcnJvcigiQXV0aF9PcGVuSURfT3BlbklEU3RvcmU6OnVzZU5vbmNlICIuCiAgICAgICAgICAgICAgICAgICAgICAibm90IGltcGxlbWVudGVkIiwgRV9VU0VSX0VSUk9SKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgc3RvcmU7IGltcGxlbWVudGF0aW9uIGlzIG9wdGlvbmFsLgogICAgICovCiAgICBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICB9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/KVForm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPcGVuSUQgcHJvdG9jb2wga2V5LXZhbHVlL2NvbW1hLW5ld2xpbmUgZm9ybWF0IHBhcnNpbmcgYW5kCiAqIHNlcmlhbGl6YXRpb24KICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBDb250YWluZXIgZm9yIGtleS12YWx1ZS9jb21tYS1uZXdsaW5lIE9wZW5JRCBmb3JtYXQgYW5kIHBhcnNpbmcKICovCmNsYXNzIEF1dGhfT3BlbklEX0tWRm9ybSB7CiAgICAvKioKICAgICAqIENvbnZlcnQgYW4gT3BlbklEIGNvbG9uL25ld2xpbmUgc2VwYXJhdGVkIHN0cmluZyBpbnRvIGFuCiAgICAgKiBhc3NvY2lhdGl2ZSBhcnJheQogICAgICoKICAgICAqIEBzdGF0aWMKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gdG9BcnJheSgka3ZzLCAkc3RyaWN0PWZhbHNlKQogICAgewogICAgICAgICRsaW5lcyA9IGV4cGxvZGUoIlxuIiwgJGt2cyk7CgogICAgICAgICRsYXN0ID0gYXJyYXlfcG9wKCRsaW5lcyk7CiAgICAgICAgaWYgKCRsYXN0ICE9PSAnJykgewogICAgICAgICAgICBhcnJheV9wdXNoKCRsaW5lcywgJGxhc3QpOwogICAgICAgICAgICBpZiAoJHN0cmljdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yICgkbGluZW5vID0gMDsgJGxpbmVubyA8IGNvdW50KCRsaW5lcyk7ICRsaW5lbm8rKykgewogICAgICAgICAgICAkbGluZSA9ICRsaW5lc1skbGluZW5vXTsKICAgICAgICAgICAgJGt2ID0gZXhwbG9kZSgnOicsICRsaW5lLCAyKTsKICAgICAgICAgICAgaWYgKGNvdW50KCRrdikgIT0gMikgewogICAgICAgICAgICAgICAgaWYgKCRzdHJpY3QpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGtleSA9ICRrdlswXTsKICAgICAgICAgICAgJHRrZXkgPSB0cmltKCRrZXkpOwogICAgICAgICAgICBpZiAoJHRrZXkgIT0gJGtleSkgewogICAgICAgICAgICAgICAgaWYgKCRzdHJpY3QpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR2YWx1ZSA9ICRrdlsxXTsKICAgICAgICAgICAgJHR2YWwgPSB0cmltKCR2YWx1ZSk7CiAgICAgICAgICAgIGlmICgkdHZhbCAhPSAkdmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICgkc3RyaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFsdWVzWyR0a2V5XSA9ICR0dmFsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGFuIGFycmF5IGludG8gYW4gT3BlbklEIGNvbG9uL25ld2xpbmUgc2VwYXJhdGVkIHN0cmluZwogICAgICoKICAgICAqIEBzdGF0aWMKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbUFycmF5KCR2YWx1ZXMpCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZXMgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBrc29ydCgkdmFsdWVzKTsKCiAgICAgICAgJHNlcmlhbGl6ZWQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBhcnJheSgkdmFsdWVbMF0sICR2YWx1ZVsxXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGtleSwgJzonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc3RycG9zKCRrZXksICJcbiIpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAiXG4iKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZXJpYWxpemVkIC49ICIka2V5OiR2YWx1ZVxuIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzZXJpYWxpemVkOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/MDB2Store.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTUUwtYmFja2VkIE9wZW5JRCBzdG9yZXMgZm9yIHVzZSB3aXRoIFBFQVI6Ok1EQjIuCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNSBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCBMR1BMCiAqLwoKcmVxdWlyZV9vbmNlICdNREIyLnBocCc7CgovKioKICogQGFjY2VzcyBwcml2YXRlCiAqLwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0ludGVyZmFjZS5waHAnOwoKLyoqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC5waHAnOwoKLyoqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9Ob25jZS5waHAnOwoKLyoqCiAqIFRoaXMgc3RvcmUgdXNlcyBhIFBFQVI6Ok1EQjIgY29ubmVjdGlvbiB0byBzdG9yZSBwZXJzaXN0ZW5jZQogKiBpbmZvcm1hdGlvbi4KICoKICogVGhlIHRhYmxlIG5hbWVzIHVzZWQgYXJlIGRldGVybWluZWQgYnkgdGhlIGNsYXNzIHZhcmlhYmxlcwogKiBhc3NvY2lhdGlvbnNfdGFibGVfbmFtZSBhbmQgbm9uY2VzX3RhYmxlX25hbWUuICBUbyBjaGFuZ2UgdGhlIG5hbWUKICogb2YgdGhlIHRhYmxlcyB1c2VkLCBwYXNzIG5ldyB0YWJsZSBuYW1lcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4KICoKICogVG8gY3JlYXRlIHRoZSB0YWJsZXMgd2l0aCB0aGUgcHJvcGVyIHNjaGVtYSwgc2VlIHRoZSBjcmVhdGVUYWJsZXMKICogbWV0aG9kLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX01EQjJTdG9yZSBleHRlbmRzIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlIHsKICAgIC8qKgogICAgICogVGhpcyBjcmVhdGVzIGEgbmV3IE1EQjJTdG9yZSBpbnN0YW5jZS4gIEl0IHJlcXVpcmVzIGFuCiAgICAgKiBlc3RhYmxpc2hlZCBkYXRhYmFzZSBjb25uZWN0aW9uIGJlIGdpdmVuIHRvIGl0LCBhbmQgaXQgYWxsb3dzCiAgICAgKiBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHRhYmxlIG5hbWVzLgogICAgICoKICAgICAqIEBwYXJhbSBjb25uZWN0aW9uICRjb25uZWN0aW9uIFRoaXMgbXVzdCBiZSBhbiBlc3RhYmxpc2hlZAogICAgICogY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIG9mIHRoZSBjb3JyZWN0IHR5cGUgZm9yIHRoZSBTUUxTdG9yZQogICAgICogc3ViY2xhc3MgeW91J3JlIHVzaW5nLiAgVGhpcyBtdXN0IGJlIGEgUEVBUjo6TURCMiBjb25uZWN0aW9uCiAgICAgKiBoYW5kbGUuCiAgICAgKgogICAgICogQHBhcmFtIGFzc29jaWF0aW9uc190YWJsZTogVGhpcyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8KICAgICAqIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIHVzZWQgZm9yIHN0b3JpbmcgYXNzb2NpYXRpb25zLgogICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ29pZF9hc3NvY2lhdGlvbnMnLgogICAgICoKICAgICAqIEBwYXJhbSBub25jZXNfdGFibGU6IFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkKICAgICAqIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSB1c2VkIGZvciBzdG9yaW5nIG5vbmNlcy4gIFRoZSBkZWZhdWx0CiAgICAgKiB2YWx1ZSBpcyAnb2lkX25vbmNlcycuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX01EQjJTdG9yZSgkY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbnNfdGFibGUgPSBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vbmNlc190YWJsZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc29jaWF0aW9uc190YWJsZV9uYW1lID0gIm9pZF9hc3NvY2lhdGlvbnMiOwogICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSA9ICJvaWRfbm9uY2VzIjsKCiAgICAgICAgLy8gQ2hlY2sgdGhlIGNvbm5lY3Rpb24gb2JqZWN0IHR5cGUgdG8gYmUgc3VyZSBpdCdzIGEgUEVBUgogICAgICAgIC8vIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAgICAgICAgaWYgKCFpc19vYmplY3QoJGNvbm5lY3Rpb24pIHx8CiAgICAgICAgICAgICFpc19zdWJjbGFzc19vZigkY29ubmVjdGlvbiwgJ21kYjJfZHJpdmVyX2NvbW1vbicpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoIkF1dGhfT3BlbklEX01EQjJTdG9yZSBleHBlY3RlZCBQRUFSIGNvbm5lY3Rpb24gIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCAoZ290ICIuZ2V0X2NsYXNzKCRjb25uZWN0aW9uKS4iKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSAkY29ubmVjdGlvbjsKCiAgICAgICAgLy8gQmUgc3VyZSB0byBzZXQgdGhlIGZldGNoIG1vZGUgc28gdGhlIHJlc3VsdHMgYXJlIGtleWVkIG9uCiAgICAgICAgLy8gY29sdW1uIG5hbWUgaW5zdGVhZCBvZiBjb2x1bW4gaW5kZXguCiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPnNldEZldGNoTW9kZShNREIyX0ZFVENITU9ERV9BU1NPQyk7CiAgICAgICAgCiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24tPmxvYWRNb2R1bGUoJ0V4dGVuZGVkJykpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoIlVuYWJsZSB0byBsb2FkIE1EQjJfRXh0ZW5kZWQgbW9kdWxlIiwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhc3NvY2lhdGlvbnNfdGFibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc29jaWF0aW9uc190YWJsZV9uYW1lID0gJGFzc29jaWF0aW9uc190YWJsZTsKICAgICAgICB9CgogICAgICAgIGlmICgkbm9uY2VzX3RhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSA9ICRub25jZXNfdGFibGU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bWF4X25vbmNlX2FnZSA9IDYgKiA2MCAqIDYwOwogICAgfQoKICAgIGZ1bmN0aW9uIHRhYmxlRXhpc3RzKCR0YWJsZV9uYW1lKQogICAgewogICAgICAgIHJldHVybiAhUEVBUjo6aXNFcnJvcigkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJTRUxFQ1QgKiBGUk9NICVzIExJTUlUIDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFibGVfbmFtZSkpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVUYWJsZXMoKQogICAgewogICAgICAgICRuID0gJHRoaXMtPmNyZWF0ZV9ub25jZV90YWJsZSgpOwogICAgICAgICRhID0gJHRoaXMtPmNyZWF0ZV9hc3NvY190YWJsZSgpOwoKICAgICAgICBpZiAoISRuIHx8ICEkYSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZV9ub25jZV90YWJsZSgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+dGFibGVFeGlzdHMoJHRoaXMtPm5vbmNlc190YWJsZV9uYW1lKSkgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jb25uZWN0aW9uLT5waHB0eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJteXNxbCI6CiAgICAgICAgICAgICAgICBjYXNlICJteXNxbGkiOgogICAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBTUUwgZm9yIE15U1FMIHRvIHVzZSBJbm5vREIgYW5kIHZhcmlhYmxlLQogICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBrZXlzCiAgICAgICAgICAgICAgICAgICAgJHIgPSAkdGhpcy0+Y29ubmVjdGlvbi0+ZXhlYygKICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigiQ1JFQVRFIFRBQkxFICVzIChcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgc2VydmVyX3VybCBWQVJDSEFSKDIwNDcpIE5PVCBOVUxMIERFRkFVTFQgJycsXG4iLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHRpbWVzdGFtcCBJTlRFR0VSIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBzYWx0IENIQVIoNDApIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBVTklRVUUgKHNlcnZlcl91cmwoMjU1KSwgdGltZXN0YW1wLCBzYWx0KVxuIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBUWVBFPUlubm9EQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5vbmNlc190YWJsZV9uYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGlmIChQRUFSOjppc0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+bG9hZE1vZHVsZSgnTWFuYWdlcicpKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRmaWVsZHMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlcl91cmwiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiID0+ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGgiID0+IDIwNDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90bnVsbCIgPT4gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA9PiAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90bnVsbCIgPT4gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAic2FsdCIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgPT4gInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCIgPT4gNDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZml4ZWQiID0+IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90bnVsbCIgPT4gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkY29uc3RyYWludCA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAidW5pcXVlIiA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXJfdXJsIiA9PiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCIgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYWx0IiA9PiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICRyID0gJHRoaXMtPmNvbm5lY3Rpb24tPmNyZWF0ZVRhYmxlKCR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkciA9ICR0aGlzLT5jb25uZWN0aW9uLT5jcmVhdGVDb25zdHJhaW50KAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bm9uY2VzX3RhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSAuICJfY29uc3RyYWludCIsCiAgICAgICAgICAgICAgICAgICAgICAgICRjb25zdHJhaW50KTsKICAgICAgICAgICAgICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVfYXNzb2NfdGFibGUoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnRhYmxlRXhpc3RzKCR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSkpIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+Y29ubmVjdGlvbi0+cGhwdHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAibXlzcWwiOgogICAgICAgICAgICAgICAgY2FzZSAibXlzcWxpIjoKICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gU1FMIGZvciBNeVNRTCB0byB1c2UgSW5ub0RCIGFuZCB2YXJpYWJsZS0KICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGgga2V5cwogICAgICAgICAgICAgICAgICAgICRyID0gJHRoaXMtPmNvbm5lY3Rpb24tPmV4ZWMoCiAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoIkNSRUFURSBUQUJMRSAlcyhcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgc2VydmVyX3VybCBWQVJDSEFSKDIwNDcpIE5PVCBOVUxMIERFRkFVTFQgJycsXG4iLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhbmRsZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsXG4iLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHNlY3JldCBCTE9CIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBpc3N1ZWQgSU5URUdFUiBOT1QgTlVMTCxcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbGlmZXRpbWUgSU5URUdFUiBOT1QgTlVMTCxcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYXNzb2NfdHlwZSBWQVJDSEFSKDY0KSBOT1QgTlVMTCxcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgUFJJTUFSWSBLRVkgKHNlcnZlcl91cmwoMjU1KSwgaGFuZGxlKVxuIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBUWVBFPUlubm9EQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXNzb2NpYXRpb25zX3RhYmxlX25hbWUpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5sb2FkTW9kdWxlKCdNYW5hZ2VyJykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGZpZWxkcyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyX3VybCIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgPT4gInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCIgPT4gMjA0NywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3RudWxsIiA9PiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGUiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiID0+ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGgiID0+IDI1NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3RudWxsIiA9PiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICJzZWNyZXQiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiID0+ICJibG9iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGgiID0+ICIyNTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdG51bGwiID0+IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgImlzc3VlZCIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgPT4gImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdG51bGwiID0+IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgImxpZmV0aW1lIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiA9PiAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90bnVsbCIgPT4gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAiYXNzb2NfdHlwZSIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSIgPT4gInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCIgPT4gNjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90bnVsbCIgPT4gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAicHJpbWFyeSIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyX3VybCIgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGUiID0+IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgJHIgPSAkdGhpcy0+Y29ubmVjdGlvbi0+Y3JlYXRlVGFibGUoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkcywKICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRyKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHN0b3JlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRhc3NvY2lhdGlvbikKICAgIHsKICAgICAgICAkZmllbGRzID0gYXJyYXkoCiAgICAgICAgICAgICJzZXJ2ZXJfdXJsIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICJ2YWx1ZSIgPT4gJHNlcnZlcl91cmwsCiAgICAgICAgICAgICAgICAia2V5IiA9PiB0cnVlCiAgICAgICAgICAgICksCiAgICAgICAgICAgICJoYW5kbGUiID0+IGFycmF5KAogICAgICAgICAgICAgICAgInZhbHVlIiA9PiAkYXNzb2NpYXRpb24tPmhhbmRsZSwKICAgICAgICAgICAgICAgICJrZXkiID0+IHRydWUKICAgICAgICAgICAgKSwKICAgICAgICAgICAgInNlY3JldCIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAidmFsdWUiID0+ICRhc3NvY2lhdGlvbi0+c2VjcmV0LAogICAgICAgICAgICAgICAgInR5cGUiID0+ICJibG9iIgogICAgICAgICAgICApLAogICAgICAgICAgICAiaXNzdWVkIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICJ2YWx1ZSIgPT4gJGFzc29jaWF0aW9uLT5pc3N1ZWQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgImxpZmV0aW1lIiA9PiBhcnJheSgKICAgICAgICAgICAgICAgICJ2YWx1ZSIgPT4gJGFzc29jaWF0aW9uLT5saWZldGltZQogICAgICAgICAgICApLAogICAgICAgICAgICAiYXNzb2NfdHlwZSIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAidmFsdWUiID0+ICRhc3NvY2lhdGlvbi0+YXNzb2NfdHlwZQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICByZXR1cm4gIVBFQVI6OmlzRXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24tPnJlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXNzb2NpYXRpb25zX3RhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRzKSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2xlYW51cE5vbmNlcygpCiAgICB7CiAgICAgICAgZ2xvYmFsICRBdXRoX09wZW5JRF9TS0VXOwogICAgICAgICR2ID0gdGltZSgpIC0gJEF1dGhfT3BlbklEX1NLRVc7CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29ubmVjdGlvbi0+ZXhlYygKICAgICAgICAgICAgc3ByaW50ZigiREVMRVRFIEZST00gJXMgV0hFUkUgdGltZXN0YW1wIDwgJWQiLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSwgJHYpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwQXNzb2NpYXRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbm5lY3Rpb24tPmV4ZWMoCiAgICAgICAgICAgIHNwcmludGYoIkRFTEVURSBGUk9NICVzIFdIRVJFIGlzc3VlZCArIGxpZmV0aW1lIDwgJWQiLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSwgdGltZSgpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0QXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUgPSBudWxsKQogICAgewogICAgICAgICRzcWwgPSAiIjsKICAgICAgICAkcGFyYW1zID0gbnVsbDsKICAgICAgICAkdHlwZXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgImJsb2IiLAogICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgInRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICBpZiAoJGhhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkc3FsID0gc3ByaW50ZigiU0VMRUNUIGhhbmRsZSwgc2VjcmV0LCBpc3N1ZWQsIGxpZmV0aW1lLCBhc3NvY190eXBlICIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRlJPTSAlcyBXSEVSRSBzZXJ2ZXJfdXJsID0gPyBBTkQgaGFuZGxlID0gPyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSk7CiAgICAgICAgICAgICRwYXJhbXMgPSBhcnJheSgkc2VydmVyX3VybCwgJGhhbmRsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNxbCA9IHNwcmludGYoIlNFTEVDVCBoYW5kbGUsIHNlY3JldCwgaXNzdWVkLCBsaWZldGltZSwgYXNzb2NfdHlwZSAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZST00gJXMgV0hFUkUgc2VydmVyX3VybCA9ID8gT1JERVIgQlkgaXNzdWVkIERFU0MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXNzb2NpYXRpb25zX3RhYmxlX25hbWUpOwogICAgICAgICAgICAkcGFyYW1zID0gYXJyYXkoJHNlcnZlcl91cmwpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYXNzb2MgPSAkdGhpcy0+Y29ubmVjdGlvbi0+Z2V0Um93KCRzcWwsICR0eXBlcywgJHBhcmFtcyk7CgogICAgICAgIGlmICghJGFzc29jIHx8IFBFQVI6OmlzRXJyb3IoJGFzc29jKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYXNzb2NpYXRpb24gPSBuZXcgQXV0aF9PcGVuSURfQXNzb2NpYXRpb24oJGFzc29jWydoYW5kbGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9nZXRfY29udGVudHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jWydzZWNyZXQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NbJ2lzc3VlZCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jWydsaWZldGltZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jWydhc3NvY190eXBlJ10pOwogICAgICAgICAgICBmY2xvc2UoJGFzc29jWydzZWNyZXQnXSk7CiAgICAgICAgICAgIHJldHVybiAkYXNzb2NpYXRpb247CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUFzc29jaWF0aW9uKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKQogICAgewogICAgICAgICRyID0gJHRoaXMtPmNvbm5lY3Rpb24tPmV4ZWNQYXJhbSgKICAgICAgICAgICAgc3ByaW50ZigiREVMRVRFIEZST00gJXMgV0hFUkUgc2VydmVyX3VybCA9ID8gQU5EIGhhbmRsZSA9ID8iLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSksCiAgICAgICAgICAgIGFycmF5KCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKSk7CiAgICAgICAgCiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJHIpIHx8ICRyID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiB1c2VOb25jZSgkc2VydmVyX3VybCwgJHRpbWVzdGFtcCwgJHNhbHQpCiAgICB7CiAgICAgICAgZ2xvYmFsICRBdXRoX09wZW5JRF9TS0VXOwoKICAgICAgICBpZiAoYWJzKCR0aW1lc3RhbXAgLSB0aW1lKCkpID4gJEF1dGhfT3BlbklEX1NLRVcgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGZpZWxkcyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIiA9PiAkdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAic2FsdCIgPT4gJHNhbHQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAKICAgICAgICBpZiAoIWVtcHR5KCRzZXJ2ZXJfdXJsKSkgewogICAgICAgICAgICAkZmllbGRzWyJzZXJ2ZXJfdXJsIl0gPSAkc2VydmVyX3VybDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHIgPSAkdGhpcy0+Y29ubmVjdGlvbi0+YXV0b0V4ZWN1dGUoCiAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSwKICAgICAgICAgICAgJGZpZWxkcywKICAgICAgICAgICAgTURCMl9BVVRPUVVFUllfSU5TRVJUKTsKICAgICAgICAKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcikpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2V0cyB0aGUgc3RvcmUgYnkgcmVtb3ZpbmcgYWxsIHJlY29yZHMgZnJvbSB0aGUgc3RvcmUncwogICAgICogdGFibGVzLgogICAgICovCiAgICBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPnF1ZXJ5KHNwcmludGYoIkRFTEVURSBGUk9NICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXNzb2NpYXRpb25zX3RhYmxlX25hbWUpKTsKCiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPnF1ZXJ5KHNwcmludGYoIkRFTEVURSBGUk9NICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bm9uY2VzX3RhYmxlX25hbWUpKTsKICAgIH0KCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/MemcachedStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgc3VwcGxpZXMgYSBtZW1jYWNoZWQgc3RvcmUgYmFja2VuZCBmb3IgT3BlbklEIHNlcnZlcnMgYW5kCiAqIGNvbnN1bWVycy4KICoKICogUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEFydGVteSBUcmVndWJlbmtvIDxtZUBhcnR5Lm5hbWU+CiAqIEBjb3B5cmlnaHQgMjAwOCBKYW5SYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICogQ29udHJpYnV0ZWQgYnkgT3BlbiBXZWIgVGVjaG5vbG9naWVzIDxodHRwOi8vb3BlbndlYnRlY2gucnUvPgogKi8KCi8qKgogKiBJbXBvcnQgdGhlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBuZXcgc3RvcmUgY2xhc3MuCiAqLwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0ludGVyZmFjZS5waHAnOwoKLyoqCiAqIFRoaXMgaXMgYSBtZW1jYWNoZWQtYmFzZWQgc3RvcmUgZm9yIE9wZW5JRCBhc3NvY2lhdGlvbnMgYW5kCiAqIG5vbmNlcy4gCiAqIAogKiBBcyBtZW1jYWNoZSBoYXMgbGltaXQgb2YgMjUwIGNoYXJzIGZvciBrZXkgbGVuZ3RoLCAKICogc2VydmVyX3VybCwgaGFuZGxlIGFuZCBzYWx0IGFyZSBoYXNoZWQgd2l0aCBzaGExKCkuIAogKgogKiBNb3N0IG9mIHRoZSBtZXRob2RzIG9mIHRoaXMgY2xhc3MgYXJlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAqIFBlb3BsZSB3aXNoaW5nIHRvIGp1c3QgdXNlIHRoaXMgc3RvcmUgbmVlZCBvbmx5IHBheSBhdHRlbnRpb24gdG8KICogdGhlIGNvbnN0cnVjdG9yLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX01lbWNhY2hlZFN0b3JlIGV4dGVuZHMgQXV0aF9PcGVuSURfT3BlbklEU3RvcmUgewoKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZXMgYSBuZXcge0BsaW5rIEF1dGhfT3BlbklEX01lbWNhY2hlZFN0b3JlfSBpbnN0YW5jZS4KICAgICAqIEp1c3Qgc2F2ZXMgbWVtY2FjaGVkIG9iamVjdCBhcyBwcm9wZXJ0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgY29ubmVjdGlvbiBNZW1jYWNoZSBjb25uZWN0aW9uIHJlc291cnNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX01lbWNhY2hlZFN0b3JlKCRjb25uZWN0aW9uLCAkY29tcHJlc3MgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9ICRjb25uZWN0aW9uOwogICAgICAgICR0aGlzLT5jb21wcmVzcyA9ICRjb21wcmVzcyA/IE1FTUNBQ0hFX0NPTVBSRVNTRUQgOiAwOwogICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgYXNzb2NpYXRpb24gdW50aWwgaXRzIGV4cGlyYXRpb24gdGltZSBpbiBtZW1jYWNoZWQuIAogICAgICogT3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgYXNzb2NpYXRpb24gd2l0aCBzYW1lIHNlcnZlcl91cmwgYW5kIAogICAgICogaGFuZGxlLiBIYW5kbGVzIGxpc3Qgb2YgYXNzb2NpYXRpb25zIGZvciBldmVyeSBzZXJ2ZXIuIAogICAgICovCiAgICBmdW5jdGlvbiBzdG9yZUFzc29jaWF0aW9uKCRzZXJ2ZXJfdXJsLCAkYXNzb2NpYXRpb24pCiAgICB7CiAgICAgICAgLy8gY3JlYXRlIG1lbWNhY2hlZCBrZXlzIGZvciBhc3NvY2lhdGlvbiBpdHNlbGYgCiAgICAgICAgLy8gYW5kIGxpc3Qgb2YgYXNzb2NpYXRpb25zIGZvciB0aGlzIHNlcnZlcgogICAgICAgICRhc3NvY2lhdGlvbktleSA9ICR0aGlzLT5hc3NvY2lhdGlvbktleSgkc2VydmVyX3VybCwgCiAgICAgICAgICAgICRhc3NvY2lhdGlvbi0+aGFuZGxlKTsKICAgICAgICAkc2VydmVyS2V5ID0gJHRoaXMtPmFzc29jaWF0aW9uU2VydmVyS2V5KCRzZXJ2ZXJfdXJsKTsKICAgICAgICAKICAgICAgICAvLyBnZXQgbGlzdCBvZiBhc3NvY2lhdGlvbnMgCiAgICAgICAgJHNlcnZlckFzc29jaWF0aW9ucyA9ICR0aGlzLT5jb25uZWN0aW9uLT5nZXQoJHNlcnZlcktleSk7CiAgICAgICAgCiAgICAgICAgLy8gaWYgbm8gc3VjaCBsaXN0LCBpbml0aWFsaXplIGl0IHdpdGggZW1wdHkgYXJyYXkKICAgICAgICBpZiAoISRzZXJ2ZXJBc3NvY2lhdGlvbnMpIHsKICAgICAgICAgICAgJHNlcnZlckFzc29jaWF0aW9ucyA9IGFycmF5KCk7CiAgICAgICAgfQogICAgICAgIC8vIGFuZCBzdG9yZSBnaXZlbiBhc3NvY2lhdGlvbiBrZXkgaW4gaXQKICAgICAgICAkc2VydmVyQXNzb2NpYXRpb25zWyRhc3NvY2lhdGlvbi0+aXNzdWVkXSA9ICRhc3NvY2lhdGlvbktleTsKICAgICAgICAKICAgICAgICAvLyBzYXZlIGFzc29jaWF0aW9ucycga2V5cyBsaXN0IAogICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5zZXQoCiAgICAgICAgICAgICRzZXJ2ZXJLZXksCiAgICAgICAgICAgICRzZXJ2ZXJBc3NvY2lhdGlvbnMsCiAgICAgICAgICAgICR0aGlzLT5jb21wcmVzcwogICAgICAgICk7CiAgICAgICAgLy8gc2F2ZSBhc3NvY2lhdGlvbiBpdHNlbGYKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+c2V0KAogICAgICAgICAgICAkYXNzb2NpYXRpb25LZXksCiAgICAgICAgICAgICRhc3NvY2lhdGlvbiwgCiAgICAgICAgICAgICR0aGlzLT5jb21wcmVzcywgCiAgICAgICAgICAgICRhc3NvY2lhdGlvbi0+aXNzdWVkICsgJGFzc29jaWF0aW9uLT5saWZldGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkIGFzc29jaWF0aW9uIGZyb20gbWVtY2FjaGVkLiBJZiBubyBoYW5kbGUgZ2l2ZW4gCiAgICAgKiBhbmQgbXVsdGlwbGUgYXNzb2NpYXRpb25zIGZvdW5kLCByZXR1cm5zIGxhdGVzdCBpc3N1ZWQKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0QXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUgPSBudWxsKQogICAgewogICAgICAgIC8vIHNpbXBsZSBjYXNlOiBoYW5kbGUgZ2l2ZW4KICAgICAgICBpZiAoJGhhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICAgICAvLyBnZXQgYXNzb2NpYXRpb24sIHJldHVybiBudWxsIGlmIGZhaWxlZAogICAgICAgICAgICAkYXNzb2NpYXRpb24gPSAkdGhpcy0+Y29ubmVjdGlvbi0+Z2V0KAogICAgICAgICAgICAgICAgJHRoaXMtPmFzc29jaWF0aW9uS2V5KCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKSk7CiAgICAgICAgICAgIHJldHVybiAkYXNzb2NpYXRpb24gPyAkYXNzb2NpYXRpb24gOiBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBubyBoYW5kbGUgZ2l2ZW4sIHdvcmtpbmcgd2l0aCBsaXN0CiAgICAgICAgLy8gY3JlYXRlIGtleSBmb3IgbGlzdCBvZiBhc3NvY2lhdGlvbnMKICAgICAgICAkc2VydmVyS2V5ID0gJHRoaXMtPmFzc29jaWF0aW9uU2VydmVyS2V5KCRzZXJ2ZXJfdXJsKTsKICAgICAgICAKICAgICAgICAvLyBnZXQgbGlzdCBvZiBhc3NvY2lhdGlvbnMKICAgICAgICAkc2VydmVyQXNzb2NpYXRpb25zID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldCgkc2VydmVyS2V5KTsKICAgICAgICAvLyByZXR1cm4gbnVsbCBpZiBmYWlsZWQgb3IgZ290IGVtcHR5IGxpc3QKICAgICAgICBpZiAoISRzZXJ2ZXJBc3NvY2lhdGlvbnMpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGdldCBrZXkgb2YgbW9zdCByZWNlbnRseSBpc3N1ZWQgYXNzb2NpYXRpb24KICAgICAgICAka2V5cyA9IGFycmF5X2tleXMoJHNlcnZlckFzc29jaWF0aW9ucyk7CiAgICAgICAgc29ydCgka2V5cyk7CiAgICAgICAgJGxhc3RLZXkgPSAkc2VydmVyQXNzb2NpYXRpb25zW2FycmF5X3BvcCgka2V5cyldOwogICAgICAgIAogICAgICAgIC8vIGdldCBhc3NvY2lhdGlvbiwgcmV0dXJuIG51bGwgaWYgZmFpbGVkCiAgICAgICAgJGFzc29jaWF0aW9uID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldCgkbGFzdEtleSk7CiAgICAgICAgcmV0dXJuICRhc3NvY2lhdGlvbiA/ICRhc3NvY2lhdGlvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbW1lZGlhdGVseSBkZWxldGUgYXNzb2NpYXRpb24gZnJvbSBtZW1jYWNoZS4KICAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUpCiAgICB7CiAgICAgICAgLy8gY3JlYXRlIG1lbWNhY2hlZCBrZXlzIGZvciBhc3NvY2lhdGlvbiBpdHNlbGYgCiAgICAgICAgLy8gYW5kIGxpc3Qgb2YgYXNzb2NpYXRpb25zIGZvciB0aGlzIHNlcnZlcgogICAgICAgICRzZXJ2ZXJLZXkgPSAkdGhpcy0+YXNzb2NpYXRpb25TZXJ2ZXJLZXkoJHNlcnZlcl91cmwpOwogICAgICAgICRhc3NvY2lhdGlvbktleSA9ICR0aGlzLT5hc3NvY2lhdGlvbktleSgkc2VydmVyX3VybCwgCiAgICAgICAgICAgICRoYW5kbGUpOwogICAgICAgIAogICAgICAgIC8vIGdldCBsaXN0IG9mIGFzc29jaWF0aW9ucwogICAgICAgICRzZXJ2ZXJBc3NvY2lhdGlvbnMgPSAkdGhpcy0+Y29ubmVjdGlvbi0+Z2V0KCRzZXJ2ZXJLZXkpOwogICAgICAgIC8vIHJldHVybiBudWxsIGlmIGZhaWxlZCBvciBnb3QgZW1wdHkgbGlzdAogICAgICAgIGlmICghJHNlcnZlckFzc29jaWF0aW9ucykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGVuc3VyZSB0aGF0IGdpdmVuIGFzc29jaWF0aW9uIGtleSBleGlzdHMgaW4gbGlzdAogICAgICAgICRzZXJ2ZXJBc3NvY2lhdGlvbnMgPSBhcnJheV9mbGlwKCRzZXJ2ZXJBc3NvY2lhdGlvbnMpOwogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkYXNzb2NpYXRpb25LZXksICRzZXJ2ZXJBc3NvY2lhdGlvbnMpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gcmVtb3ZlIGdpdmVuIGFzc29jaWF0aW9uIGtleSBmcm9tIGxpc3QKICAgICAgICB1bnNldCgkc2VydmVyQXNzb2NpYXRpb25zWyRhc3NvY2lhdGlvbktleV0pOwogICAgICAgICRzZXJ2ZXJBc3NvY2lhdGlvbnMgPSBhcnJheV9mbGlwKCRzZXJ2ZXJBc3NvY2lhdGlvbnMpOwogICAgICAgIAogICAgICAgIC8vIHNhdmUgdXBkYXRlZCBsaXN0CiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPnNldCgKICAgICAgICAgICAgJHNlcnZlcktleSwKICAgICAgICAgICAgJHNlcnZlckFzc29jaWF0aW9ucywKICAgICAgICAgICAgJHRoaXMtPmNvbXByZXNzCiAgICAgICAgKTsKCiAgICAgICAgLy8gZGVsZXRlIGFzc29jaWF0aW9uIAogICAgICAgIHJldHVybiAkdGhpcy0+Y29ubmVjdGlvbi0+ZGVsZXRlKCRhc3NvY2lhdGlvbktleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgbm9uY2UgZm9yIHNlcnZlciBhbmQgc2FsdCwgZXhwaXJpbmcgYWZ0ZXIgCiAgICAgKiAkQXV0aF9PcGVuSURfU0tFVyBzZWNvbmRzLgogICAgICovCiAgICBmdW5jdGlvbiB1c2VOb25jZSgkc2VydmVyX3VybCwgJHRpbWVzdGFtcCwgJHNhbHQpCiAgICB7CiAgICAgICAgZ2xvYmFsICRBdXRoX09wZW5JRF9TS0VXOwogICAgICAgIAogICAgICAgIC8vIHNhdmUgb25lIHJlcXVlc3QgdG8gbWVtY2FjaGUgd2hlbiBub25jZSBvYnZpb3VzbHkgZXhwaXJlZCAKICAgICAgICBpZiAoYWJzKCR0aW1lc3RhbXAgLSB0aW1lKCkpID4gJEF1dGhfT3BlbklEX1NLRVcpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyByZXR1cm5zIGZhbHNlIHdoZW4gbm9uY2UgYWxyZWFkeSBleGlzdHMKICAgICAgICAvLyBvdGhlcndpc2UgYWRkcyBub25jZQogICAgICAgIHJldHVybiAkdGhpcy0+Y29ubmVjdGlvbi0+YWRkKAogICAgICAgICAgICAnb3BlbmlkX25vbmNlXycgLiBzaGExKCRzZXJ2ZXJfdXJsKSAuICdfJyAuIHNoYTEoJHNhbHQpLCAKICAgICAgICAgICAgMSwgLy8gYW55IHZhbHVlIGhlcmUgCiAgICAgICAgICAgICR0aGlzLT5jb21wcmVzcywgCiAgICAgICAgICAgICRBdXRoX09wZW5JRF9TS0VXKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBNZW1jYWNoZSBrZXkgaXMgcHJlZml4ZWQgd2l0aCAnb3BlbmlkX2Fzc29jaWF0aW9uXycgc3RyaW5nLiAKICAgICAqLwogICAgZnVuY3Rpb24gYXNzb2NpYXRpb25LZXkoJHNlcnZlcl91cmwsICRoYW5kbGUgPSBudWxsKSAKICAgIHsKICAgICAgICByZXR1cm4gJ29wZW5pZF9hc3NvY2lhdGlvbl8nIC4gc2hhMSgkc2VydmVyX3VybCkgLiAnXycgLiBzaGExKCRoYW5kbGUpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIE1lbWNhY2hlIGtleSBpcyBwcmVmaXhlZCB3aXRoICdvcGVuaWRfYXNzb2NpYXRpb25fJyBzdHJpbmcuIAogICAgICovCiAgICBmdW5jdGlvbiBhc3NvY2lhdGlvblNlcnZlcktleSgkc2VydmVyX3VybCkgCiAgICB7CiAgICAgICAgcmV0dXJuICdvcGVuaWRfYXNzb2NpYXRpb25fc2VydmVyXycgLiBzaGExKCRzZXJ2ZXJfdXJsKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBSZXBvcnQgdGhhdCB0aGlzIHN0b3JhZ2UgZG9lc24ndCBzdXBwb3J0IGNsZWFudXAKICAgICAqLwogICAgZnVuY3Rpb24gc3VwcG9ydHNDbGVhbnVwKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBFeHRlbnNpb24gYXJndW1lbnQgcHJvY2Vzc2luZyBjb2RlCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KCi8qKgogKiBJbXBvcnQgdG9vbHMgbmVlZGVkIHRvIGRlYWwgd2l0aCBtZXNzYWdlcy4KICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9LVkZvcm0ucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL1lhZGlzL1hNTC5waHAnOwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0NvbnN1bWVyLnBocCc7IC8vIEZvciBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UKCi8vIFRoaXMgZG9lc24ndCBSRUFMTFkgYmVsb25nIGhlcmUsIGJ1dCB3aGVyZSBpcyBiZXR0ZXI/CmRlZmluZSgnQXV0aF9PcGVuSURfSURFTlRJRklFUl9TRUxFQ1QnLAogICAgICAgImh0dHA6Ly9zcGVjcy5vcGVuaWQubmV0L2F1dGgvMi4wL2lkZW50aWZpZXJfc2VsZWN0Iik7CgovLyBVUkkgZm9yIFNpbXBsZSBSZWdpc3RyYXRpb24gZXh0ZW5zaW9uLCB0aGUgb25seSBjb21tb25seSBkZXBsb3llZAovLyBPcGVuSUQgMS54IGV4dGVuc2lvbiwgYW5kIHNvIGEgc3BlY2lhbCBjYXNlCmRlZmluZSgnQXV0aF9PcGVuSURfU1JFR19VUkknLCAnaHR0cDovL29wZW5pZC5uZXQvc3JlZy8xLjAnKTsKCi8vIFRoZSBPcGVuSUQgMS5YIG5hbWVzcGFjZSBVUkkKZGVmaW5lKCdBdXRoX09wZW5JRF9PUEVOSUQxX05TJywgJ2h0dHA6Ly9vcGVuaWQubmV0L3NpZ25vbi8xLjAnKTsKZGVmaW5lKCdBdXRoX09wZW5JRF9USEVfT1RIRVJfT1BFTklEMV9OUycsICdodHRwOi8vb3BlbmlkLm5ldC9zaWdub24vMS4xJyk7CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9pc09wZW5JRDEoJG5zKQp7CiAgICByZXR1cm4gKCRucyA9PSBBdXRoX09wZW5JRF9USEVfT1RIRVJfT1BFTklEMV9OUykgfHwKICAgICAgICAoJG5zID09IEF1dGhfT3BlbklEX09QRU5JRDFfTlMpOwp9CgovLyBUaGUgT3BlbklEIDIuMCBuYW1lc3BhY2UgVVJJCmRlZmluZSgnQXV0aF9PcGVuSURfT1BFTklEMl9OUycsICdodHRwOi8vc3BlY3Mub3BlbmlkLm5ldC9hdXRoLzIuMCcpOwoKLy8gVGhlIG5hbWVzcGFjZSBjb25zaXN0aW5nIG9mIHBhaXJzIHdpdGgga2V5cyB0aGF0IGFyZSBwcmVmaXhlZCB3aXRoCi8vICJvcGVuaWQuIiAgYnV0IG5vdCBpbiBhbm90aGVyIG5hbWVzcGFjZS4KZGVmaW5lKCdBdXRoX09wZW5JRF9OVUxMX05BTUVTUEFDRScsICdOdWxsIG5hbWVzcGFjZScpOwoKLy8gVGhlIG51bGwgbmFtZXNwYWNlLCB3aGVuIGl0IGlzIGFuIGFsbG93ZWQgT3BlbklEIG5hbWVzcGFjZQpkZWZpbmUoJ0F1dGhfT3BlbklEX09QRU5JRF9OUycsICdPcGVuSUQgbmFtZXNwYWNlJyk7CgovLyBUaGUgdG9wLWxldmVsIG5hbWVzcGFjZSwgZXhjbHVkaW5nIGFsbCBwYWlycyB3aXRoIGtleXMgdGhhdCBzdGFydAovLyB3aXRoICJvcGVuaWQuIgpkZWZpbmUoJ0F1dGhfT3BlbklEX0JBUkVfTlMnLCAnQmFyZSBuYW1lc3BhY2UnKTsKCi8vIFNlbnRpbmVsIGZvciBNZXNzYWdlIGltcGxlbWVudGF0aW9uIHRvIGluZGljYXRlIHRoYXQgZ2V0QXJnIHNob3VsZAovLyByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHJldHVybmluZyBhIGRlZmF1bHQuCmRlZmluZSgnQXV0aF9PcGVuSURfTk9fREVGQVVMVCcsICdOTyBERUZBVUxUIEFMTE9XRUQnKTsKCi8vIExpbWl0LCBpbiBieXRlcywgb2YgaWRlbnRpdHkgcHJvdmlkZXIgYW5kIHJldHVybl90byBVUkxzLCBpbmNsdWRpbmcKLy8gcmVzcG9uc2UgcGF5bG9hZC4gIFNlZSBPcGVuSUQgMS4xIHNwZWNpZmljYXRpb24sIEFwcGVuZGl4IEQuCmRlZmluZSgnQXV0aF9PcGVuSURfT1BFTklEMV9VUkxfTElNSVQnLCAyMDQ3KTsKCi8vIEFsbCBPcGVuSUQgcHJvdG9jb2wgZmllbGRzLiAgVXNlZCB0byBjaGVjayBuYW1lc3BhY2UgYWxpYXNlcy4KZ2xvYmFsICRBdXRoX09wZW5JRF9PUEVOSURfUFJPVE9DT0xfRklFTERTOwokQXV0aF9PcGVuSURfT1BFTklEX1BST1RPQ09MX0ZJRUxEUyA9IGFycmF5KAogICAgJ25zJywgJ21vZGUnLCAnZXJyb3InLCAncmV0dXJuX3RvJywgJ2NvbnRhY3QnLCAncmVmZXJlbmNlJywKICAgICdzaWduZWQnLCAnYXNzb2NfdHlwZScsICdzZXNzaW9uX3R5cGUnLCAnZGhfbW9kdWx1cycsICdkaF9nZW4nLAogICAgJ2RoX2NvbnN1bWVyX3B1YmxpYycsICdjbGFpbWVkX2lkJywgJ2lkZW50aXR5JywgJ3JlYWxtJywKICAgICdpbnZhbGlkYXRlX2hhbmRsZScsICdvcF9lbmRwb2ludCcsICdyZXNwb25zZV9ub25jZScsICdzaWcnLAogICAgJ2Fzc29jX2hhbmRsZScsICd0cnVzdF9yb290JywgJ29wZW5pZCcpOwoKLy8gR2xvYmFsIG5hbWVzcGFjZSAvIGFsaWFzIHJlZ2lzdHJhdGlvbiBtYXAuICBTZWUKLy8gQXV0aF9PcGVuSURfcmVnaXN0ZXJOYW1lc3BhY2VBbGlhcy4KZ2xvYmFsICRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXM7CiRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXMgPSBhcnJheSgpOwoKLyoqCiAqIFJlZ2lzdGVycyBhIChuYW1lc3BhY2UgVVJJLCBhbGlhcykgbWFwcGluZyBpbiBhIGdsb2JhbCBuYW1lc3BhY2UKICogYWxpYXMgbWFwLiAgUmFpc2VzIE5hbWVzcGFjZUFsaWFzUmVnaXN0cmF0aW9uRXJyb3IgaWYgZWl0aGVyIHRoZQogKiBuYW1lc3BhY2UgVVJJIG9yIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCB3aXRoIGEgZGlmZmVyZW50CiAqIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgYSBuYW1lc3BhY2UKICogd2l0aCBhbiBPcGVuSUQgMSBtZXNzYWdlLgogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfcmVnaXN0ZXJOYW1lc3BhY2VBbGlhcygkbmFtZXNwYWNlX3VyaSwgJGFsaWFzKQp7CiAgICBnbG9iYWwgJEF1dGhfT3BlbklEX3JlZ2lzdGVyZWRfYWxpYXNlczsKCiAgICBpZiAoQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGlhcykgPT0gJG5hbWVzcGFjZV91cmkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBpZiAoaW5fYXJyYXkoJG5hbWVzcGFjZV91cmksCiAgICAgICAgICAgICAgICAgYXJyYXlfdmFsdWVzKCRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXMpKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoaW5fYXJyYXkoJGFsaWFzLCBhcnJheV9rZXlzKCRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXMpKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkQXV0aF9PcGVuSURfcmVnaXN0ZXJlZF9hbGlhc2VzWyRhbGlhc10gPSAkbmFtZXNwYWNlX3VyaTsKICAgIHJldHVybiB0cnVlOwp9CgovKioKICogUmVtb3ZlcyBhIChuYW1lc3BhY2VfdXJpLCBhbGlhcykgcmVnaXN0cmF0aW9uIGZyb20gdGhlIGdsb2JhbAogKiBuYW1lc3BhY2UgYWxpYXMgbWFwLiAgUmV0dXJucyB0cnVlIGlmIHRoZSByZW1vdmFsIHN1Y2NlZWRlZDsgZmFsc2UKICogaWYgbm90IChpZiB0aGUgbWFwcGluZyBkaWQgbm90IGV4aXN0KS4KICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX3JlbW92ZU5hbWVzcGFjZUFsaWFzKCRuYW1lc3BhY2VfdXJpLCAkYWxpYXMpCnsKICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfcmVnaXN0ZXJlZF9hbGlhc2VzOwoKICAgIGlmIChBdXRoX09wZW5JRDo6YXJyYXlHZXQoJEF1dGhfT3BlbklEX3JlZ2lzdGVyZWRfYWxpYXNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsaWFzKSA9PT0gJG5hbWVzcGFjZV91cmkpIHsKICAgICAgICB1bnNldCgkQXV0aF9PcGVuSURfcmVnaXN0ZXJlZF9hbGlhc2VzWyRhbGlhc10pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEFuIEF1dGhfT3BlbklEX01hcHBpbmcgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGFyYml0cmFyeSBrZXlzIHRvCiAqIGFyYml0cmFyeSB2YWx1ZXMuICAoVGhpcyBpcyB1bmxpa2UgYW4gb3JkaW5hcnkgUEhQIGFycmF5LCB3aG9zZQogKiBrZXlzIG1heSBiZSBvbmx5IHNpbXBsZSBzY2FsYXJzLikKICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9NYXBwaW5nIHsKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZSBhIG1hcHBpbmcuICBJZiAkY2xhc3NpY19hcnJheSBpcyBzcGVjaWZpZWQsIGl0cyBrZXlzCiAgICAgKiBhbmQgdmFsdWVzIGFyZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBtYXBwaW5nLgogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9NYXBwaW5nKCRjbGFzc2ljX2FycmF5ID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+a2V5cyA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPnZhbHVlcyA9IGFycmF5KCk7CgogICAgICAgIGlmIChpc19hcnJheSgkY2xhc3NpY19hcnJheSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGNsYXNzaWNfYXJyYXkgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXQoJGtleSwgJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiAkdGhpbmcgaXMgYW4gQXV0aF9PcGVuSURfTWFwcGluZyBvYmplY3Q7IGZhbHNlCiAgICAgKiBpZiBub3QuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBpc0EoJHRoaW5nKQogICAgewogICAgICAgIHJldHVybiAoaXNfb2JqZWN0KCR0aGluZykgJiYKICAgICAgICAgICAgICAgIHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCR0aGluZykpID09ICdhdXRoX29wZW5pZF9tYXBwaW5nJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBrZXlzIGluIHRoZSBtYXBwaW5nLgogICAgICovCiAgICBmdW5jdGlvbiBrZXlzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmtleXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcyBpbiB0aGUgbWFwcGluZy4KICAgICAqLwogICAgZnVuY3Rpb24gdmFsdWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgKGtleSwgdmFsdWUpIHBhaXJzIGluIHRoZSBtYXBwaW5nLgogICAgICovCiAgICBmdW5jdGlvbiBpdGVtcygpCiAgICB7CiAgICAgICAgJHRlbXAgPSBhcnJheSgpOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+a2V5cyk7ICRpKyspIHsKICAgICAgICAgICAgJHRlbXBbXSA9IGFycmF5KCR0aGlzLT5rZXlzWyRpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT52YWx1ZXNbJGldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0ZW1wOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgImxlbmd0aCIgb2YgdGhlIG1hcHBpbmcsIG9yIHRoZSBudW1iZXIgb2Yga2V5cy4KICAgICAqLwogICAgZnVuY3Rpb24gbGVuKCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmtleXMpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBtYXBwaW5nLiAgSWYgdGhlIGtleSBhbHJlYWR5CiAgICAgKiBleGlzdHMsIGl0cyB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBuZXcgdmFsdWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldCgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgJGluZGV4ID0gYXJyYXlfc2VhcmNoKCRrZXksICR0aGlzLT5rZXlzKTsKCiAgICAgICAgaWYgKCRpbmRleCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHRoaXMtPnZhbHVlc1skaW5kZXhdID0gJHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5rZXlzW10gPSAka2V5OwogICAgICAgICAgICAkdGhpcy0+dmFsdWVzW10gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0cyBhIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBtYXBwaW5nLCBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQga2V5LiAgSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwcGluZywKICAgICAqICRkZWZhdWx0IGlzIHJldHVybmVkIGluc3RlYWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldCgka2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgJGluZGV4ID0gYXJyYXlfc2VhcmNoKCRrZXksICR0aGlzLT5rZXlzKTsKCiAgICAgICAgaWYgKCRpbmRleCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZXNbJGluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9yZWZsb3coKQogICAgewogICAgICAgIC8vIFBIUCBpcyBicm9rZW4geWV0IGFnYWluLiAgU29ydCB0aGUgYXJyYXlzIHRvIHJlbW92ZSB0aGUKICAgICAgICAvLyBob2xlIGluIHRoZSBudW1lcmljIGluZGV4ZXMgdGhhdCBtYWtlIHVwIHRoZSBhcnJheS4KICAgICAgICAkb2xkX2tleXMgPSAkdGhpcy0+a2V5czsKICAgICAgICAkb2xkX3ZhbHVlcyA9ICR0aGlzLT52YWx1ZXM7CgogICAgICAgICR0aGlzLT5rZXlzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+dmFsdWVzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJG9sZF9rZXlzIGFzICRrKSB7CiAgICAgICAgICAgICR0aGlzLT5rZXlzW10gPSAkazsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRvbGRfdmFsdWVzIGFzICR2KSB7CiAgICAgICAgICAgICR0aGlzLT52YWx1ZXNbXSA9ICR2OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIERlbGV0ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBtYXBwaW5nIHdpdGggdGhlIHNwZWNpZmllZAogICAgICoga2V5LgogICAgICovCiAgICBmdW5jdGlvbiBkZWwoJGtleSkKICAgIHsKICAgICAgICAkaW5kZXggPSBhcnJheV9zZWFyY2goJGtleSwgJHRoaXMtPmtleXMpOwoKICAgICAgICBpZiAoJGluZGV4ICE9PSBmYWxzZSkgewogICAgICAgICAgICB1bnNldCgkdGhpcy0+a2V5c1skaW5kZXhdKTsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnZhbHVlc1skaW5kZXhdKTsKICAgICAgICAgICAgJHRoaXMtPl9yZWZsb3coKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGhhcyBhIGtleSBpbiB0aGUgbWFwcGluZzsKICAgICAqIGZhbHNlIGlmIG5vdC4KICAgICAqLwogICAgZnVuY3Rpb24gY29udGFpbnMoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAoYXJyYXlfc2VhcmNoKCR2YWx1ZSwgJHRoaXMtPmtleXMpICE9PSBmYWxzZSk7CiAgICB9Cn0KCi8qKgogKiBNYWludGFpbnMgYSBiaWplY3RpdmUgbWFwIGJldHdlZW4gbmFtZXNwYWNlIHVyaXMgYW5kIGFsaWFzZXMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfTmFtZXNwYWNlTWFwIHsKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX05hbWVzcGFjZU1hcCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsaWFzX3RvX25hbWVzcGFjZSA9IG5ldyBBdXRoX09wZW5JRF9NYXBwaW5nKCk7CiAgICAgICAgJHRoaXMtPm5hbWVzcGFjZV90b19hbGlhcyA9IG5ldyBBdXRoX09wZW5JRF9NYXBwaW5nKCk7CiAgICAgICAgJHRoaXMtPmltcGxpY2l0X25hbWVzcGFjZXMgPSBhcnJheSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFsaWFzKCRuYW1lc3BhY2VfdXJpKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZXNwYWNlX3RvX2FsaWFzLT5nZXQoJG5hbWVzcGFjZV91cmkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE5hbWVzcGFjZVVSSSgkYWxpYXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbGlhc190b19uYW1lc3BhY2UtPmdldCgkYWxpYXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIGl0ZXJOYW1lc3BhY2VVUklzKCkKICAgIHsKICAgICAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgbmFtZXNwYWNlIFVSSXMKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWVzcGFjZV90b19hbGlhcy0+a2V5cygpOwogICAgfQoKICAgIGZ1bmN0aW9uIGl0ZXJBbGlhc2VzKCkKICAgIHsKICAgICAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgYWxpYXNlcyIiIgogICAgICAgIHJldHVybiAkdGhpcy0+YWxpYXNfdG9fbmFtZXNwYWNlLT5rZXlzKCk7CiAgICB9CgogICAgZnVuY3Rpb24gaXRlcml0ZW1zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWVzcGFjZV90b19hbGlhcy0+aXRlbXMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0ltcGxpY2l0KCRuYW1lc3BhY2VfdXJpKQogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkbmFtZXNwYWNlX3VyaSwgJHRoaXMtPmltcGxpY2l0X25hbWVzcGFjZXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZEFsaWFzKCRuYW1lc3BhY2VfdXJpLCAkZGVzaXJlZF9hbGlhcywgJGltcGxpY2l0PWZhbHNlKQogICAgewogICAgICAgIC8vIEFkZCBhbiBhbGlhcyBmcm9tIHRoaXMgbmFtZXNwYWNlIFVSSSB0byB0aGUgZGVzaXJlZCBhbGlhcwogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfT1BFTklEX1BST1RPQ09MX0ZJRUxEUzsKCiAgICAgICAgLy8gQ2hlY2sgdGhhdCBkZXNpcmVkX2FsaWFzIGlzIG5vdCBhbiBvcGVuaWQgcHJvdG9jb2wgZmllbGQgYXMKICAgICAgICAvLyBwZXIgdGhlIHNwZWMuCiAgICAgICAgaWYgKGluX2FycmF5KCRkZXNpcmVkX2FsaWFzLCAkQXV0aF9PcGVuSURfT1BFTklEX1BST1RPQ09MX0ZJRUxEUykpIHsKICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygiXCIlc1wiIGlzIG5vdCBhbiBhbGxvd2VkIG5hbWVzcGFjZSBhbGlhcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVzaXJlZF9hbGlhcyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhhdCBkZXNpcmVkX2FsaWFzIGRvZXMgbm90IGNvbnRhaW4gYSBwZXJpb2QgYXMgcGVyCiAgICAgICAgLy8gdGhlIHNwZWMuCiAgICAgICAgaWYgKHN0cnBvcygkZGVzaXJlZF9hbGlhcywgJy4nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygnIiVzIiBtdXN0IG5vdCBjb250YWluIGEgZG90JywgJGRlc2lyZWRfYWxpYXMpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm90IGEgbmFtZXNwYWNlIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlCiAgICAgICAgLy8gZGVzaXJlZCBhbGlhcwogICAgICAgICRjdXJyZW50X25hbWVzcGFjZV91cmkgPQogICAgICAgICAgICAkdGhpcy0+YWxpYXNfdG9fbmFtZXNwYWNlLT5nZXQoJGRlc2lyZWRfYWxpYXMpOwoKICAgICAgICBpZiAoKCRjdXJyZW50X25hbWVzcGFjZV91cmkgIT09IG51bGwpICYmCiAgICAgICAgICAgICgkY3VycmVudF9uYW1lc3BhY2VfdXJpICE9ICRuYW1lc3BhY2VfdXJpKSkgewogICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCdDYW5ub3QgbWFwICIlcyIgYmVjYXVzZSBwcmV2aW91cyBtYXBwaW5nIGV4aXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmFtZXNwYWNlX3VyaSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIChkaWZmZXJlbnQpIGFsaWFzIGZvcgogICAgICAgIC8vIHRoaXMgbmFtZXNwYWNlIFVSSQogICAgICAgICRhbGlhcyA9ICR0aGlzLT5uYW1lc3BhY2VfdG9fYWxpYXMtPmdldCgkbmFtZXNwYWNlX3VyaSk7CgogICAgICAgIGlmICgoJGFsaWFzICE9PSBudWxsKSAmJiAoJGFsaWFzICE9ICRkZXNpcmVkX2FsaWFzKSkgewogICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCdDYW5ub3QgbWFwICVzIHRvIGFsaWFzICVzLiAnIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJdCBpcyBhbHJlYWR5IG1hcHBlZCB0byBhbGlhcyAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmFtZXNwYWNlX3VyaSwgJGRlc2lyZWRfYWxpYXMsICRhbGlhcyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgYXNzZXJ0KChBdXRoX09wZW5JRF9OVUxMX05BTUVTUEFDRSA9PT0gJGRlc2lyZWRfYWxpYXMpIHx8CiAgICAgICAgICAgICAgIGlzX3N0cmluZygkZGVzaXJlZF9hbGlhcykpOwoKICAgICAgICAkdGhpcy0+YWxpYXNfdG9fbmFtZXNwYWNlLT5zZXQoJGRlc2lyZWRfYWxpYXMsICRuYW1lc3BhY2VfdXJpKTsKICAgICAgICAkdGhpcy0+bmFtZXNwYWNlX3RvX2FsaWFzLT5zZXQoJG5hbWVzcGFjZV91cmksICRkZXNpcmVkX2FsaWFzKTsKICAgICAgICBpZiAoJGltcGxpY2l0KSB7CiAgICAgICAgICAgIGFycmF5X3B1c2goJHRoaXMtPmltcGxpY2l0X25hbWVzcGFjZXMsICRuYW1lc3BhY2VfdXJpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGVzaXJlZF9hbGlhczsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGQoJG5hbWVzcGFjZV91cmkpCiAgICB7CiAgICAgICAgLy8gQWRkIHRoaXMgbmFtZXNwYWNlIFVSSSB0byB0aGUgbWFwcGluZywgd2l0aG91dCBjYXJpbmcgd2hhdAogICAgICAgIC8vIGFsaWFzIGl0IGVuZHMgdXAgd2l0aAoKICAgICAgICAvLyBTZWUgaWYgdGhpcyBuYW1lc3BhY2UgaXMgYWxyZWFkeSBtYXBwZWQgdG8gYW4gYWxpYXMKICAgICAgICAkYWxpYXMgPSAkdGhpcy0+bmFtZXNwYWNlX3RvX2FsaWFzLT5nZXQoJG5hbWVzcGFjZV91cmkpOwoKICAgICAgICBpZiAoJGFsaWFzICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkYWxpYXM7CiAgICAgICAgfQoKICAgICAgICAvLyBGYWxsIGJhY2sgdG8gZ2VuZXJhdGluZyBhIG51bWVyaWNhbCBhbGlhcwogICAgICAgICRpID0gMDsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAkYWxpYXMgPSAnZXh0JyAuIHN0cnZhbCgkaSk7CiAgICAgICAgICAgIGlmICgkdGhpcy0+YWRkQWxpYXMoJG5hbWVzcGFjZV91cmksICRhbGlhcykgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRpICs9IDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGFsaWFzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTaG91bGQgTkVWRVIgYmUgcmVhY2hlZCEKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBjb250YWlucygkbmFtZXNwYWNlX3VyaSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzRGVmaW5lZCgkbmFtZXNwYWNlX3VyaSk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNEZWZpbmVkKCRuYW1lc3BhY2VfdXJpKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZXNwYWNlX3RvX2FsaWFzLT5jb250YWlucygkbmFtZXNwYWNlX3VyaSk7CiAgICB9Cn0KCi8qKgogKiBJbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBvYmplY3QsIG51bGwgcmVwcmVzZW50cyB0aGUgZ2xvYmFsCiAqIG5hbWVzcGFjZSBhcyB3ZWxsIGFzIGEgbmFtZXNwYWNlIHdpdGggbm8ga2V5LgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX01lc3NhZ2UgewoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX01lc3NhZ2UoJG9wZW5pZF9uYW1lc3BhY2UgPSBudWxsKQogICAgewogICAgICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBNZXNzYWdlCiAgICAgICAgJHRoaXMtPmFsbG93ZWRfb3BlbmlkX25hbWVzcGFjZXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRDFfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9USEVfT1RIRVJfT1BFTklEMV9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRDJfTlMpOwoKICAgICAgICAkdGhpcy0+YXJncyA9IG5ldyBBdXRoX09wZW5JRF9NYXBwaW5nKCk7CiAgICAgICAgJHRoaXMtPm5hbWVzcGFjZXMgPSBuZXcgQXV0aF9PcGVuSURfTmFtZXNwYWNlTWFwKCk7CiAgICAgICAgaWYgKCRvcGVuaWRfbmFtZXNwYWNlID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5fb3BlbmlkX25zX3VyaSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGltcGxpY2l0ID0gQXV0aF9PcGVuSURfaXNPcGVuSUQxKCRvcGVuaWRfbmFtZXNwYWNlKTsKICAgICAgICAgICAgJHRoaXMtPnNldE9wZW5JRE5hbWVzcGFjZSgkb3BlbmlkX25hbWVzcGFjZSwgJGltcGxpY2l0KTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaXNPcGVuSUQxKCkKICAgIHsKICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfaXNPcGVuSUQxKCR0aGlzLT5nZXRPcGVuSUROYW1lc3BhY2UoKSk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNPcGVuSUQyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldE9wZW5JRE5hbWVzcGFjZSgpID09IEF1dGhfT3BlbklEX09QRU5JRDJfTlM7CiAgICB9CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21Qb3N0QXJncygkYXJncykKICAgIHsKICAgICAgICAvLyBDb25zdHJ1Y3QgYSBNZXNzYWdlIGNvbnRhaW5pbmcgYSBzZXQgb2YgUE9TVCBhcmd1bWVudHMKICAgICAgICAkb2JqID0gbmV3IEF1dGhfT3BlbklEX01lc3NhZ2UoKTsKCiAgICAgICAgLy8gUGFydGl0aW9uIGludG8gIm9wZW5pZC4iIGFyZ3MgYW5kIGJhcmUgYXJncwogICAgICAgICRvcGVuaWRfYXJncyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGFyZ3MgYXMgJGtleSA9PiAkdmFsdWUpIHsKCiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLicsICRrZXksIDIpOwoKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPT0gMikgewogICAgICAgICAgICAgICAgbGlzdCgkcHJlZml4LCAkcmVzdCkgPSAkcGFydHM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcHJlZml4ID0gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRwcmVmaXggIT0gJ29wZW5pZCcpIHsKICAgICAgICAgICAgICAgICRvYmotPmFyZ3MtPnNldChhcnJheShBdXRoX09wZW5JRF9CQVJFX05TLCAka2V5KSwgJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvcGVuaWRfYXJnc1skcmVzdF0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkb2JqLT5fZnJvbU9wZW5JREFyZ3MoJG9wZW5pZF9hcmdzKSkgewogICAgICAgICAgICByZXR1cm4gJG9iajsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21PcGVuSURBcmdzKCRvcGVuaWRfYXJncykKICAgIHsKICAgICAgICAvLyBUYWtlcyBhbiBhcnJheS4KCiAgICAgICAgLy8gQ29uc3RydWN0IGEgTWVzc2FnZSBmcm9tIGEgcGFyc2VkIEtWRm9ybSBtZXNzYWdlCiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9NZXNzYWdlKCk7CiAgICAgICAgaWYgKCRvYmotPl9mcm9tT3BlbklEQXJncygkb3BlbmlkX2FyZ3MpKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZnJvbU9wZW5JREFyZ3MoJG9wZW5pZF9hcmdzKQogICAgewogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfcmVnaXN0ZXJlZF9hbGlhc2VzOwoKICAgICAgICAvLyBUYWtlcyBhbiBBdXRoX09wZW5JRF9NYXBwaW5nIGluc3RhbmNlIE9SIGFuIGFycmF5LgoKICAgICAgICBpZiAoIUF1dGhfT3BlbklEX01hcHBpbmc6OmlzQSgkb3BlbmlkX2FyZ3MpKSB7CiAgICAgICAgICAgICRvcGVuaWRfYXJncyA9IG5ldyBBdXRoX09wZW5JRF9NYXBwaW5nKCRvcGVuaWRfYXJncyk7CiAgICAgICAgfQoKICAgICAgICAkbnNfYXJncyA9IGFycmF5KCk7CgogICAgICAgIC8vIFJlc29sdmUgbmFtZXNwYWNlcwogICAgICAgIGZvcmVhY2ggKCRvcGVuaWRfYXJncy0+aXRlbXMoKSBhcyAkcGFpcikgewogICAgICAgICAgICBsaXN0KCRyZXN0LCAkdmFsdWUpID0gJHBhaXI7CgogICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcuJywgJHJlc3QsIDIpOwoKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPT0gMikgewogICAgICAgICAgICAgICAgbGlzdCgkbnNfYWxpYXMsICRuc19rZXkpID0gJHBhcnRzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG5zX2FsaWFzID0gQXV0aF9PcGVuSURfTlVMTF9OQU1FU1BBQ0U7CiAgICAgICAgICAgICAgICAkbnNfa2V5ID0gJHJlc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkbnNfYWxpYXMgPT0gJ25zJykgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5uYW1lc3BhY2VzLT5hZGRBbGlhcygkdmFsdWUsICRuc19rZXkpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKCgkbnNfYWxpYXMgPT0gQXV0aF9PcGVuSURfTlVMTF9OQU1FU1BBQ0UpICYmCiAgICAgICAgICAgICAgICAgICAgICAgKCRuc19rZXkgPT0gJ25zJykpIHsKICAgICAgICAgICAgICAgIC8vIG51bGwgbmFtZXNwYWNlCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnNldE9wZW5JRE5hbWVzcGFjZSgkdmFsdWUsIGZhbHNlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbnNfYXJnc1tdID0gYXJyYXkoJG5zX2FsaWFzLCAkbnNfa2V5LCAkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISR0aGlzLT5nZXRPcGVuSUROYW1lc3BhY2UoKSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPnNldE9wZW5JRE5hbWVzcGFjZShBdXRoX09wZW5JRF9PUEVOSUQxX05TLCB0cnVlKSA9PT0KICAgICAgICAgICAgICAgIGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEFjdHVhbGx5IHB1dCB0aGUgcGFpcnMgaW50byB0aGUgYXBwcm9wcmlhdGUgbmFtZXNwYWNlcwogICAgICAgIGZvcmVhY2ggKCRuc19hcmdzIGFzICR0cmlwbGUpIHsKICAgICAgICAgICAgbGlzdCgkbnNfYWxpYXMsICRuc19rZXksICR2YWx1ZSkgPSAkdHJpcGxlOwogICAgICAgICAgICAkbnNfdXJpID0gJHRoaXMtPm5hbWVzcGFjZXMtPmdldE5hbWVzcGFjZVVSSSgkbnNfYWxpYXMpOwogICAgICAgICAgICBpZiAoJG5zX3VyaSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJG5zX3VyaSA9ICR0aGlzLT5fZ2V0RGVmYXVsdE5hbWVzcGFjZSgkbnNfYWxpYXMpOwogICAgICAgICAgICAgICAgaWYgKCRuc191cmkgPT09IG51bGwpIHsKCiAgICAgICAgICAgICAgICAgICAgJG5zX3VyaSA9IEF1dGhfT3BlbklEX09QRU5JRF9OUzsKICAgICAgICAgICAgICAgICAgICAkbnNfa2V5ID0gc3ByaW50ZignJXMuJXMnLCAkbnNfYWxpYXMsICRuc19rZXkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bmFtZXNwYWNlcy0+YWRkQWxpYXMoJG5zX3VyaSwgJG5zX2FsaWFzLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnNldEFyZygkbnNfdXJpLCAkbnNfa2V5LCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gX2dldERlZmF1bHROYW1lc3BhY2UoJG15c3RlcnlfYWxpYXMpCiAgICB7CiAgICAgICAgZ2xvYmFsICRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXM7CiAgICAgICAgaWYgKCR0aGlzLT5pc09wZW5JRDEoKSkgewogICAgICAgICAgICByZXR1cm4gQCRBdXRoX09wZW5JRF9yZWdpc3RlcmVkX2FsaWFzZXNbJG15c3RlcnlfYWxpYXNdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRPcGVuSUROYW1lc3BhY2UoJG9wZW5pZF9uc191cmksICRpbXBsaWNpdCkKICAgIHsKICAgICAgICBpZiAoIWluX2FycmF5KCRvcGVuaWRfbnNfdXJpLCAkdGhpcy0+YWxsb3dlZF9vcGVuaWRfbmFtZXNwYWNlcykpIHsKICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygnSW52YWxpZCBudWxsIG5hbWVzcGFjZTogIiVzIicsICRvcGVuaWRfbnNfdXJpKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHN1Y2NlZWRlZCA9ICR0aGlzLT5uYW1lc3BhY2VzLT5hZGRBbGlhcygkb3BlbmlkX25zX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX05VTExfTkFNRVNQQUNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0KTsKICAgICAgICBpZiAoJHN1Y2NlZWRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9vcGVuaWRfbnNfdXJpID0gJG9wZW5pZF9uc191cmk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE9wZW5JRE5hbWVzcGFjZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb3BlbmlkX25zX3VyaTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbUtWRm9ybSgka3Zmb3JtX3N0cmluZykKICAgIHsKICAgICAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIGZyb20gYSBLVkZvcm0gc3RyaW5nCiAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX01lc3NhZ2U6OmZyb21PcGVuSURBcmdzKAogICAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9LVkZvcm06OnRvQXJyYXkoJGt2Zm9ybV9zdHJpbmcpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgZnVuY3Rpb24gdG9Qb3N0QXJncygpCiAgICB7CiAgICAgICAgLy8gUmV0dXJuIGFsbCBhcmd1bWVudHMgd2l0aCBvcGVuaWQuIGluIGZyb250IG9mIG5hbWVzcGFjZWQKICAgICAgICAvLyBhcmd1bWVudHMuCgogICAgICAgICRhcmdzID0gYXJyYXkoKTsKCiAgICAgICAgLy8gQWRkIG5hbWVzcGFjZSBkZWZpbml0aW9ucyB0byB0aGUgb3V0cHV0CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPm5hbWVzcGFjZXMtPml0ZXJpdGVtcygpIGFzICRwYWlyKSB7CiAgICAgICAgICAgIGxpc3QoJG5zX3VyaSwgJGFsaWFzKSA9ICRwYWlyOwogICAgICAgICAgICBpZiAoJHRoaXMtPm5hbWVzcGFjZXMtPmlzSW1wbGljaXQoJG5zX3VyaSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkYWxpYXMgPT0gQXV0aF9PcGVuSURfTlVMTF9OQU1FU1BBQ0UpIHsKICAgICAgICAgICAgICAgICRuc19rZXkgPSAnb3BlbmlkLm5zJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuc19rZXkgPSAnb3BlbmlkLm5zLicgLiAkYWxpYXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFyZ3NbJG5zX2tleV0gPSAkbnNfdXJpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmFyZ3MtPml0ZW1zKCkgYXMgJHBhaXIpIHsKICAgICAgICAgICAgbGlzdCgkbnNfcGFydHMsICR2YWx1ZSkgPSAkcGFpcjsKICAgICAgICAgICAgbGlzdCgkbnNfdXJpLCAkbnNfa2V5KSA9ICRuc19wYXJ0czsKICAgICAgICAgICAgJGtleSA9ICR0aGlzLT5nZXRLZXkoJG5zX3VyaSwgJG5zX2tleSk7CiAgICAgICAgICAgICRhcmdzWyRrZXldID0gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcmdzOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvQXJncygpCiAgICB7CiAgICAgICAgLy8gUmV0dXJuIGFsbCBuYW1lc3BhY2VkIGFyZ3VtZW50cywgZmFpbGluZyBpZiBhbnkKICAgICAgICAvLyBub24tbmFtZXNwYWNlZCBhcmd1bWVudHMgZXhpc3QuCiAgICAgICAgJHBvc3RfYXJncyA9ICR0aGlzLT50b1Bvc3RBcmdzKCk7CiAgICAgICAgJGt2YXJncyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBvc3RfYXJncyBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrLCAnb3BlbmlkLicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAvLyByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgLy8gICAnVGhpcyBtZXNzYWdlIGNhbiBvbmx5IGJlIGVuY29kZWQgYXMgYSBQT1NULCBiZWNhdXNlIGl0ICcKICAgICAgICAgICAgICAgIC8vICAgJ2NvbnRhaW5zIGFyZ3VtZW50cyB0aGF0IGFyZSBub3QgcHJlZml4ZWQgd2l0aCAib3BlbmlkLiInKQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAka3ZhcmdzW3N1YnN0cigkaywgNyldID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAka3ZhcmdzOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvRm9ybU1hcmt1cCgkYWN0aW9uX3VybCwgJGZvcm1fdGFnX2F0dHJzID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAkc3VibWl0X3RleHQgPSAiQ29udGludWUiKQogICAgewogICAgICAgICRmb3JtID0gIjxmb3JtIGFjY2VwdC1jaGFyc2V0PVwiVVRGLThcIiAiLgogICAgICAgICAgICAiZW5jdHlwZT1cImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiIjsKCiAgICAgICAgaWYgKCEkZm9ybV90YWdfYXR0cnMpIHsKICAgICAgICAgICAgJGZvcm1fdGFnX2F0dHJzID0gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgICRmb3JtX3RhZ19hdHRyc1snYWN0aW9uJ10gPSAkYWN0aW9uX3VybDsKICAgICAgICAkZm9ybV90YWdfYXR0cnNbJ21ldGhvZCddID0gJ3Bvc3QnOwoKICAgICAgICB1bnNldCgkZm9ybV90YWdfYXR0cnNbJ2VuY3R5cGUnXSk7CiAgICAgICAgdW5zZXQoJGZvcm1fdGFnX2F0dHJzWydhY2NlcHQtY2hhcnNldCddKTsKCiAgICAgICAgaWYgKCRmb3JtX3RhZ19hdHRycykgewogICAgICAgICAgICBmb3JlYWNoICgkZm9ybV90YWdfYXR0cnMgYXMgJG5hbWUgPT4gJGF0dHIpIHsKICAgICAgICAgICAgICAgICRmb3JtIC49IHNwcmludGYoIiAlcz1cIiVzXCIiLCAkbmFtZSwgJGF0dHIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkZm9ybSAuPSAiPlxuIjsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnRvUG9zdEFyZ3MoKSBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGZvcm0gLj0gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiVzXCIgdmFsdWU9XCIlc1wiIC8+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAkbmFtZSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgICRmb3JtIC49IHNwcmludGYoIjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCIlc1wiIC8+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgJHN1Ym1pdF90ZXh0KTsKCiAgICAgICAgJGZvcm0gLj0gIjwvZm9ybT5cbiI7CgogICAgICAgIHJldHVybiAkZm9ybTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b1VSTCgkYmFzZV91cmwpCiAgICB7CiAgICAgICAgLy8gR2VuZXJhdGUgYSBHRVQgVVJMIHdpdGggdGhlIHBhcmFtZXRlcnMgaW4gdGhpcyBtZXNzYWdlCiAgICAgICAgLy8gYXR0YWNoZWQgYXMgcXVlcnkgcGFyYW1ldGVycy4KICAgICAgICByZXR1cm4gQXV0aF9PcGVuSUQ6OmFwcGVuZEFyZ3MoJGJhc2VfdXJsLCAkdGhpcy0+dG9Qb3N0QXJncygpKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0tWRm9ybSgpCiAgICB7CiAgICAgICAgLy8gR2VuZXJhdGUgYSBLVkZvcm0gc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHBhcmFtZXRlcnMgaW4KICAgICAgICAvLyB0aGlzIG1lc3NhZ2UuIFRoaXMgd2lsbCBmYWlsIGlmIHRoZSBtZXNzYWdlIGNvbnRhaW5zCiAgICAgICAgLy8gYXJndW1lbnRzIG91dHNpZGUgb2YgdGhlICdvcGVuaWQuJyBwcmVmaXguCiAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX0tWRm9ybTo6ZnJvbUFycmF5KCR0aGlzLT50b0FyZ3MoKSk7CiAgICB9CgogICAgZnVuY3Rpb24gdG9VUkxFbmNvZGVkKCkKICAgIHsKICAgICAgICAvLyBHZW5lcmF0ZSBhbiB4LXd3dy11cmxlbmNvZGVkIHN0cmluZwogICAgICAgICRhcmdzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnRvUG9zdEFyZ3MoKSBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkYXJnc1tdID0gYXJyYXkoJGssICR2KTsKICAgICAgICB9CgogICAgICAgIHNvcnQoJGFyZ3MpOwogICAgICAgIHJldHVybiBBdXRoX09wZW5JRDo6aHR0cEJ1aWxkUXVlcnkoJGFyZ3MpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9maXhOUygkbmFtZXNwYWNlKQogICAgewogICAgICAgIC8vIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgaW50byB0aGUgaW50ZXJuYWxseSB1c2VkIHZhbHVlcyBvZgogICAgICAgIC8vIHRoaXMgb2JqZWN0CgogICAgICAgIGlmICgkbmFtZXNwYWNlID09IEF1dGhfT3BlbklEX09QRU5JRF9OUykgewogICAgICAgICAgICBpZiAoJHRoaXMtPl9vcGVuaWRfbnNfdXJpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLAogICAgICAgICAgICAgICAgICAgICdPcGVuSUQgbmFtZXNwYWNlIG5vdCBzZXQnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuYW1lc3BhY2UgPSAkdGhpcy0+X29wZW5pZF9uc191cmk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgoJG5hbWVzcGFjZSAhPSBBdXRoX09wZW5JRF9CQVJFX05TKSAmJgogICAgICAgICAgICAgICghaXNfc3RyaW5nKCRuYW1lc3BhY2UpKSkgewogICAgICAgICAgICAvL1R5cGVFcnJvcgogICAgICAgICAgICAkZXJyX21zZyA9IHNwcmludGYoIk5hbWVzcGFjZSBtdXN0IGJlIEF1dGhfT3BlbklEX0JBUkVfTlMsICIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRoX09wZW5JRF9PUEVOSURfTlMgb3IgYSBzdHJpbmcuIGdvdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3IoJG5hbWVzcGFjZSwgdHJ1ZSkpOwogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0ZhaWx1cmVSZXNwb25zZShudWxsLCAkZXJyX21zZyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoKCRuYW1lc3BhY2UgIT0gQXV0aF9PcGVuSURfQkFSRV9OUykgJiYKICAgICAgICAgICAgKHN0cnBvcygkbmFtZXNwYWNlLCAnOicpID09PSBmYWxzZSkpIHsKICAgICAgICAgICAgLy8gZm10ID0gJ09wZW5JRCAyLjAgbmFtZXNwYWNlIGlkZW50aWZpZXJzIFNIT1VMRCBiZSBVUklzLiBHb3QgJXInCiAgICAgICAgICAgIC8vIHdhcm5pbmdzLndhcm4oZm10ICUgKG5hbWVzcGFjZSwpLCBEZXByZWNhdGlvbldhcm5pbmcpCgogICAgICAgICAgICBpZiAoJG5hbWVzcGFjZSA9PSAnc3JlZycpIHsKICAgICAgICAgICAgICAgIC8vIGZtdCA9ICdVc2luZyAlciBpbnN0ZWFkIG9mICJzcmVnIiBhcyBuYW1lc3BhY2UnCiAgICAgICAgICAgICAgICAvLyB3YXJuaW5ncy53YXJuKGZtdCAlIChTUkVHX1VSSSwpLCBEZXByZWNhdGlvbldhcm5pbmcsKQogICAgICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX1NSRUdfVVJJOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5hbWVzcGFjZTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYXNLZXkoJG5hbWVzcGFjZSwgJG5zX2tleSkKICAgIHsKICAgICAgICAkbmFtZXNwYWNlID0gJHRoaXMtPl9maXhOUygkbmFtZXNwYWNlKTsKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkbmFtZXNwYWNlKSkgewogICAgICAgICAgICAvLyBYWFggbG9nIG1lCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmFyZ3MtPmNvbnRhaW5zKGFycmF5KCRuYW1lc3BhY2UsICRuc19rZXkpKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0S2V5KCRuYW1lc3BhY2UsICRuc19rZXkpCiAgICB7CiAgICAgICAgLy8gR2V0IHRoZSBrZXkgZm9yIGEgcGFydGljdWxhciBuYW1lc3BhY2VkIGFyZ3VtZW50CiAgICAgICAgJG5hbWVzcGFjZSA9ICR0aGlzLT5fZml4TlMoJG5hbWVzcGFjZSk7CiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG5hbWVzcGFjZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRuYW1lc3BhY2U7CiAgICAgICAgfQogICAgICAgIGlmICgkbmFtZXNwYWNlID09IEF1dGhfT3BlbklEX0JBUkVfTlMpIHsKICAgICAgICAgICAgcmV0dXJuICRuc19rZXk7CiAgICAgICAgfQoKICAgICAgICAkbnNfYWxpYXMgPSAkdGhpcy0+bmFtZXNwYWNlcy0+Z2V0QWxpYXMoJG5hbWVzcGFjZSk7CgogICAgICAgIC8vIE5vIGFsaWFzIGlzIGRlZmluZWQsIHNvIG5vIGtleSBjYW4gZXhpc3QKICAgICAgICBpZiAoJG5zX2FsaWFzID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRuc19hbGlhcyA9PSBBdXRoX09wZW5JRF9OVUxMX05BTUVTUEFDRSkgewogICAgICAgICAgICAkdGFpbCA9ICRuc19rZXk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRhaWwgPSBzcHJpbnRmKCclcy4lcycsICRuc19hbGlhcywgJG5zX2tleSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJ29wZW5pZC4nIC4gJHRhaWw7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0QXJnKCRuYW1lc3BhY2UsICRrZXksICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBHZXQgYSB2YWx1ZSBmb3IgYSBuYW1lc3BhY2VkIGtleS4KICAgICAgICAkbmFtZXNwYWNlID0gJHRoaXMtPl9maXhOUygkbmFtZXNwYWNlKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG5hbWVzcGFjZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRuYW1lc3BhY2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCghJHRoaXMtPmFyZ3MtPmNvbnRhaW5zKGFycmF5KCRuYW1lc3BhY2UsICRrZXkpKSkgJiYKICAgICAgICAgICAgICAoJGRlZmF1bHQgPT0gQXV0aF9PcGVuSURfTk9fREVGQVVMVCkpIHsKICAgICAgICAgICAgICAgICRlcnJfbXNnID0gc3ByaW50ZigiTmFtZXNwYWNlICVzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGQgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lc3BhY2UsICRrZXkpOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9GYWlsdXJlUmVzcG9uc2UobnVsbCwgJGVycl9tc2cpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hcmdzLT5nZXQoYXJyYXkoJG5hbWVzcGFjZSwgJGtleSksICRkZWZhdWx0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcmdzKCRuYW1lc3BhY2UpCiAgICB7CiAgICAgICAgLy8gR2V0IHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgZGVmaW5lZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJCgogICAgICAgICRuYW1lc3BhY2UgPSAkdGhpcy0+X2ZpeE5TKCRuYW1lc3BhY2UpOwogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRuYW1lc3BhY2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkbmFtZXNwYWNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzdHVmZiA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5hcmdzLT5pdGVtcygpIGFzICRwYWlyKSB7CiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSAkcGFpcjsKICAgICAgICAgICAgICAgIGxpc3QoJHBhaXJfbnMsICRuc19rZXkpID0gJGtleTsKICAgICAgICAgICAgICAgIGlmICgkcGFpcl9ucyA9PSAkbmFtZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0dWZmWyRuc19rZXldID0gJHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHN0dWZmOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVBcmdzKCRuYW1lc3BhY2UsICR1cGRhdGVzKQogICAgewogICAgICAgIC8vIFNldCBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnMgaW4gb25lIGNhbGwKCiAgICAgICAgJG5hbWVzcGFjZSA9ICR0aGlzLT5fZml4TlMoJG5hbWVzcGFjZSk7CgogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRuYW1lc3BhY2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkbmFtZXNwYWNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR1cGRhdGVzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QXJnKCRuYW1lc3BhY2UsICRrLCAkdik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHNldEFyZygkbmFtZXNwYWNlLCAka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgLy8gU2V0IGEgc2luZ2xlIGFyZ3VtZW50IGluIHRoaXMgbmFtZXNwYWNlCiAgICAgICAgJG5hbWVzcGFjZSA9ICR0aGlzLT5fZml4TlMoJG5hbWVzcGFjZSk7CgogICAgICAgIGlmIChBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRuYW1lc3BhY2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkbmFtZXNwYWNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5hcmdzLT5zZXQoYXJyYXkoJG5hbWVzcGFjZSwgJGtleSksICR2YWx1ZSk7CiAgICAgICAgICAgIGlmICgkbmFtZXNwYWNlICE9PSBBdXRoX09wZW5JRF9CQVJFX05TKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bmFtZXNwYWNlcy0+YWRkKCRuYW1lc3BhY2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkZWxBcmcoJG5hbWVzcGFjZSwgJGtleSkKICAgIHsKICAgICAgICAkbmFtZXNwYWNlID0gJHRoaXMtPl9maXhOUygkbmFtZXNwYWNlKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG5hbWVzcGFjZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRuYW1lc3BhY2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hcmdzLT5kZWwoYXJyYXkoJG5hbWVzcGFjZSwgJGtleSkpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBbGlhc2VkQXJnKCRhbGlhc2VkX2tleSwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgIGlmICgkYWxpYXNlZF9rZXkgPT0gJ25zJykgewogICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5hbWVzcGFjZSBVUkkgZm9yIHRoZSBPcGVuSUQgbmFtZXNwYWNlCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0T3BlbklETmFtZXNwYWNlKCk7CiAgICAgICAgfQoKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcuJywgJGFsaWFzZWRfa2V5LCAyKTsKCiAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgIT0gMikgewogICAgICAgICAgICAkbnMgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpc3QoJGFsaWFzLCAka2V5KSA9ICRwYXJ0czsKCiAgICAgICAgICAgIGlmICgkYWxpYXMgPT0gJ25zJykgewogICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbmFtZXNwYWNlIFVSSSBmb3IgYSBuYW1lc3BhY2UgYWxpYXMKICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXIuCiAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uYW1lc3BhY2VzLT5nZXROYW1lc3BhY2VVUkkoJGtleSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJG5zID0gJHRoaXMtPm5hbWVzcGFjZXMtPmdldE5hbWVzcGFjZVVSSSgkYWxpYXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJG5zID09PSBudWxsKSB7CiAgICAgICAgICAgICRrZXkgPSAkYWxpYXNlZF9rZXk7CiAgICAgICAgICAgICRucyA9ICR0aGlzLT5nZXRPcGVuSUROYW1lc3BhY2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QXJnKCRucywgJGtleSwgJGRlZmF1bHQpOwogICAgfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/MySQLStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBIE15U1FMIHN0b3JlLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCgovKioKICogUmVxdWlyZSB0aGUgYmFzZSBjbGFzcyBmaWxlLgogKi8KcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9TUUxTdG9yZS5waHAiOwoKLyoqCiAqIEFuIFNRTCBzdG9yZSB0aGF0IHVzZXMgTXlTUUwgYXMgaXRzIGJhY2tlbmQuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfTXlTUUxTdG9yZSBleHRlbmRzIEF1dGhfT3BlbklEX1NRTFN0b3JlIHsKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFNRTCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNxbFsnbm9uY2VfdGFibGUnXSA9CiAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgJXMgKFxuIi4KICAgICAgICAgICAgIiAgc2VydmVyX3VybCBWQVJDSEFSKDIwNDcpIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgIiAgdGltZXN0YW1wIElOVEVHRVIgTk9UIE5VTEwsXG4iLgogICAgICAgICAgICAiICBzYWx0IENIQVIoNDApIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgIiAgVU5JUVVFIChzZXJ2ZXJfdXJsKDI1NSksIHRpbWVzdGFtcCwgc2FsdClcbiIuCiAgICAgICAgICAgICIpIEVOR0lORT1Jbm5vREIiOwoKICAgICAgICAkdGhpcy0+c3FsWydhc3NvY190YWJsZSddID0KICAgICAgICAgICAgIkNSRUFURSBUQUJMRSAlcyAoXG4iLgogICAgICAgICAgICAiICBzZXJ2ZXJfdXJsIEJMT0IgTk9UIE5VTEwsXG4iLgogICAgICAgICAgICAiICBoYW5kbGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgIiAgc2VjcmV0IFZBUkNIQVIoMjU1KSBOT1QgTlVMTCxcbiIuCiAgICAgICAgICAgICIgIGlzc3VlZCBJTlRFR0VSIE5PVCBOVUxMLFxuIi4KICAgICAgICAgICAgIiAgbGlmZXRpbWUgSU5URUdFUiBOT1QgTlVMTCxcbiIuCiAgICAgICAgICAgICIgIGFzc29jX3R5cGUgVkFSQ0hBUig2NCkgTk9UIE5VTEwsXG4iLgogICAgICAgICAgICAiICBQUklNQVJZIEtFWSAoc2VydmVyX3VybCgyNTUpLCBoYW5kbGUpXG4iLgogICAgICAgICAgICAiKSBFTkdJTkU9SW5ub0RCIjsKCiAgICAgICAgJHRoaXMtPnNxbFsnc2V0X2Fzc29jJ10gPQogICAgICAgICAgICAiUkVQTEFDRSBJTlRPICVzIChzZXJ2ZXJfdXJsLCBoYW5kbGUsIHNlY3JldCwgaXNzdWVkLFxuIi4KICAgICAgICAgICAgIiAgbGlmZXRpbWUsIGFzc29jX3R5cGUpIFZBTFVFUyAoPywgPywgPywgPywgPywgPykiOwoKICAgICAgICAkdGhpcy0+c3FsWydnZXRfYXNzb2NzJ10gPQogICAgICAgICAgICAiU0VMRUNUIGhhbmRsZSwgc2VjcmV0LCBpc3N1ZWQsIGxpZmV0aW1lLCBhc3NvY190eXBlIEZST00gJXMgIi4KICAgICAgICAgICAgIldIRVJFIHNlcnZlcl91cmwgPSA/IjsKCiAgICAgICAgJHRoaXMtPnNxbFsnZ2V0X2Fzc29jJ10gPQogICAgICAgICAgICAiU0VMRUNUIGhhbmRsZSwgc2VjcmV0LCBpc3N1ZWQsIGxpZmV0aW1lLCBhc3NvY190eXBlIEZST00gJXMgIi4KICAgICAgICAgICAgIldIRVJFIHNlcnZlcl91cmwgPSA/IEFORCBoYW5kbGUgPSA/IjsKCiAgICAgICAgJHRoaXMtPnNxbFsncmVtb3ZlX2Fzc29jJ10gPQogICAgICAgICAgICAiREVMRVRFIEZST00gJXMgV0hFUkUgc2VydmVyX3VybCA9ID8gQU5EIGhhbmRsZSA9ID8iOwoKICAgICAgICAkdGhpcy0+c3FsWydhZGRfbm9uY2UnXSA9CiAgICAgICAgICAgICJJTlNFUlQgSU5UTyAlcyAoc2VydmVyX3VybCwgdGltZXN0YW1wLCBzYWx0KSBWQUxVRVMgKD8sID8sID8pIjsKCiAgICAgICAgJHRoaXMtPnNxbFsnY2xlYW5fbm9uY2UnXSA9CiAgICAgICAgICAgICJERUxFVEUgRlJPTSAlcyBXSEVSRSB0aW1lc3RhbXAgPCA/IjsKCiAgICAgICAgJHRoaXMtPnNxbFsnY2xlYW5fYXNzb2MnXSA9CiAgICAgICAgICAgICJERUxFVEUgRlJPTSAlcyBXSEVSRSBpc3N1ZWQgKyBsaWZldGltZSA8ID8iOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGJsb2JFbmNvZGUoJGJsb2IpCiAgICB7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoJGJsb2IpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uICBibG9iRGVjb2RlKCRibG9iKSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJGJsb2IpOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Nonce.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBOb25jZS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KCi8qKgogKiBOZWVkIENyeXB0VXRpbCB0byBnZW5lcmF0ZSByYW5kb20gc3RyaW5ncy4KICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvQ3J5cHRVdGlsLnBocCc7CgovKioKICogVGhpcyBpcyB0aGUgY2hhcmFjdGVycyB0aGF0IHRoZSBub25jZXMgYXJlIG1hZGUgZnJvbS4KICovCmRlZmluZSgnQXV0aF9PcGVuSURfTm9uY2VfQ0hSUycsImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiAuCiAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5Iik7CgovLyBLZWVwIG5vbmNlcyBmb3IgZml2ZSBob3VycyAoYWxsb3cgZml2ZSBob3VycyBmb3IgdGhlIGNvbWJpbmF0aW9uIG9mCi8vIHJlcXVlc3QgdGltZSBhbmQgY2xvY2sgc2tldykuIFRoaXMgaXMgcHJvYmFibHkgd2F5IG1vcmUgdGhhbiBpcwovLyBuZWNlc3NhcnksIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBvdmVyaGVhZCBpbiBzdG9yaW5nIG5vbmNlcy4KZ2xvYmFsICRBdXRoX09wZW5JRF9TS0VXOwokQXV0aF9PcGVuSURfU0tFVyA9IDYwICogNjAgKiA1OwoKZGVmaW5lKCdBdXRoX09wZW5JRF9Ob25jZV9SRUdFWCcsCiAgICAgICAnLyhcZHs0fSktKFxkXGQpLShcZFxkKVQoXGRcZCk6KFxkXGQpOihcZFxkKVooLiopLycpOwoKZGVmaW5lKCdBdXRoX09wZW5JRF9Ob25jZV9USU1FX0ZNVCcsCiAgICAgICAnJVktJW0tJWRUJUg6JU06JVNaJyk7CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9zcGxpdE5vbmNlKCRub25jZV9zdHJpbmcpCnsKICAgIC8vIEV4dHJhY3QgYSB0aW1lc3RhbXAgZnJvbSB0aGUgZ2l2ZW4gbm9uY2Ugc3RyaW5nCiAgICAkcmVzdWx0ID0gcHJlZ19tYXRjaChBdXRoX09wZW5JRF9Ob25jZV9SRUdFWCwgJG5vbmNlX3N0cmluZywgJG1hdGNoZXMpOwogICAgaWYgKCRyZXN1bHQgIT0gMSB8fCBjb3VudCgkbWF0Y2hlcykgIT0gOCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGxpc3QoJHVudXNlZCwKICAgICAgICAgJHRtX3llYXIsCiAgICAgICAgICR0bV9tb24sCiAgICAgICAgICR0bV9tZGF5LAogICAgICAgICAkdG1faG91ciwKICAgICAgICAgJHRtX21pbiwKICAgICAgICAgJHRtX3NlYywKICAgICAgICAgJHVuaXF1aWZpZXIpID0gJG1hdGNoZXM7CgogICAgJHRpbWVzdGFtcCA9CiAgICAgICAgQGdtbWt0aW1lKCR0bV9ob3VyLCAkdG1fbWluLCAkdG1fc2VjLCAkdG1fbW9uLCAkdG1fbWRheSwgJHRtX3llYXIpOwoKICAgIGlmICgkdGltZXN0YW1wID09PSBmYWxzZSB8fCAkdGltZXN0YW1wIDwgMCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBhcnJheSgkdGltZXN0YW1wLCAkdW5pcXVpZmllcik7Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2NoZWNrVGltZXN0YW1wKCRub25jZV9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGxvd2VkX3NrZXcgPSBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbm93ID0gbnVsbCkKewogICAgLy8gSXMgdGhlIHRpbWVzdGFtcCB0aGF0IGlzIHBhcnQgb2YgdGhlIHNwZWNpZmllZCBub25jZSBzdHJpbmcKICAgIC8vIHdpdGhpbiB0aGUgYWxsb3dlZCBjbG9jay1za2V3IG9mIHRoZSBjdXJyZW50IHRpbWU/CiAgICBnbG9iYWwgJEF1dGhfT3BlbklEX1NLRVc7CgogICAgaWYgKCRhbGxvd2VkX3NrZXcgPT09IG51bGwpIHsKICAgICAgICAkYWxsb3dlZF9za2V3ID0gJEF1dGhfT3BlbklEX1NLRVc7CiAgICB9CgogICAgJHBhcnRzID0gQXV0aF9PcGVuSURfc3BsaXROb25jZSgkbm9uY2Vfc3RyaW5nKTsKICAgIGlmICgkcGFydHMgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoJG5vdyA9PT0gbnVsbCkgewogICAgICAgICRub3cgPSB0aW1lKCk7CiAgICB9CgogICAgJHN0YW1wID0gJHBhcnRzWzBdOwoKICAgIC8vIFRpbWUgYWZ0ZXIgd2hpY2ggd2Ugc2hvdWxkIG5vdCB1c2UgdGhlIG5vbmNlCiAgICAkcGFzdCA9ICRub3cgLSAkYWxsb3dlZF9za2V3OwoKICAgIC8vIFRpbWUgdGhhdCBpcyB0b28gZmFyIGluIHRoZSBmdXR1cmUgZm9yIHVzIHRvIGFsbG93CiAgICAkZnV0dXJlID0gJG5vdyArICRhbGxvd2VkX3NrZXc7CgogICAgLy8gdGhlIHN0YW1wIGlzIG5vdCB0b28gZmFyIGluIHRoZSBmdXR1cmUgYW5kIGlzIG5vdCB0b28gZmFyCiAgICAvLyBpbiB0aGUgcGFzdAogICAgcmV0dXJuICgoJHBhc3QgPD0gJHN0YW1wKSAmJiAoJHN0YW1wIDw9ICRmdXR1cmUpKTsKfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfbWtOb25jZSgkd2hlbiA9IG51bGwpCnsKICAgIC8vIEdlbmVyYXRlIGEgbm9uY2Ugd2l0aCB0aGUgY3VycmVudCB0aW1lc3RhbXAKICAgICRzYWx0ID0gQXV0aF9PcGVuSURfQ3J5cHRVdGlsOjpyYW5kb21TdHJpbmcoCiAgICAgICAgNiwgQXV0aF9PcGVuSURfTm9uY2VfQ0hSUyk7CiAgICBpZiAoJHdoZW4gPT09IG51bGwpIHsKICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2FsbCB0aW1lKCkgd2l0aCBubyBhcmd1bWVudHM7IGl0IHJldHVybnMgYQogICAgICAgIC8vIEdNVCB1bml4IHRpbWVzdGFtcCBvbiBQSFAgNCBhbmQgUEhQIDUuICBnbW1rdGltZSgpIHdpdGggbm8KICAgICAgICAvLyBhcmdzIHJldHVybnMgYSBsb2NhbCB1bml4IHRpbWVzdGFtcCBvbiBQSFAgNCwgc28gZG9uJ3QgdXNlCiAgICAgICAgLy8gdGhhdC4KICAgICAgICAkd2hlbiA9IHRpbWUoKTsKICAgIH0KICAgICR0aW1lX3N0ciA9IGdtc3RyZnRpbWUoQXV0aF9PcGVuSURfTm9uY2VfVElNRV9GTVQsICR3aGVuKTsKICAgIHJldHVybiAkdGltZV9zdHIgLiAkc2FsdDsKfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/PAPE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbklEIFByb3ZpZGVyIEF1dGhlbnRpY2F0aW9uIFBvbGljeQogKiAgRXh0ZW5zaW9uIDEuMAogKgogKiBTZWU6CiAqIGh0dHA6Ly9vcGVuaWQubmV0L2RldmVsb3BlcnMvc3BlY3MvCiAqLwoKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9FeHRlbnNpb24ucGhwIjsKCmRlZmluZSgnQXV0aF9PcGVuSURfUEFQRV9OU19VUkknLAogICAgICAgImh0dHA6Ly9zcGVjcy5vcGVuaWQubmV0L2V4dGVuc2lvbnMvcGFwZS8xLjAiKTsKCmRlZmluZSgnUEFQRV9BVVRIX01VTFRJX0ZBQ1RPUl9QSFlTSUNBTCcsCiAgICAgICAnaHR0cDovL3NjaGVtYXMub3BlbmlkLm5ldC9wYXBlL3BvbGljaWVzLzIwMDcvMDYvbXVsdGktZmFjdG9yLXBoeXNpY2FsJyk7CmRlZmluZSgnUEFQRV9BVVRIX01VTFRJX0ZBQ1RPUicsCiAgICAgICAnaHR0cDovL3NjaGVtYXMub3BlbmlkLm5ldC9wYXBlL3BvbGljaWVzLzIwMDcvMDYvbXVsdGktZmFjdG9yJyk7CmRlZmluZSgnUEFQRV9BVVRIX1BISVNISU5HX1JFU0lTVEFOVCcsCiAgICAgICAnaHR0cDovL3NjaGVtYXMub3BlbmlkLm5ldC9wYXBlL3BvbGljaWVzLzIwMDcvMDYvcGhpc2hpbmctcmVzaXN0YW50Jyk7CgpkZWZpbmUoJ1BBUEVfVElNRV9WQUxJREFUT1InLAogICAgICAnL15bMC05XXs0LDR9LVswLTldWzAtOV0tWzAtOV1bMC05XVRbMC05XVswLTldOlswLTldWzAtOV06WzAtOV1bMC05XVokLycpOwovKioKICogQSBQcm92aWRlciBBdXRoZW50aWNhdGlvbiBQb2xpY3kgcmVxdWVzdCwgc2VudCBmcm9tIGEgcmVseWluZyBwYXJ0eQogKiB0byBhIHByb3ZpZGVyCiAqCiAqIHByZWZlcnJlZF9hdXRoX3BvbGljaWVzOiBUaGUgYXV0aGVudGljYXRpb24gcG9saWNpZXMgdGhhdAogKiB0aGUgcmVseWluZyBwYXJ0eSBwcmVmZXJzCiAqCiAqIG1heF9hdXRoX2FnZTogVGhlIG1heGltdW0gdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgcmVseWluZyBwYXJ0eQogKiB3YW50cyB0byBhbGxvdyB0byBoYXZlIGVsYXBzZWQgYmVmb3JlIHRoZSB1c2VyIG11c3QgcmUtYXV0aGVudGljYXRlCiAqLwpjbGFzcyBBdXRoX09wZW5JRF9QQVBFX1JlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9FeHRlbnNpb24gewoKICAgIHZhciAkbnNfYWxpYXMgPSAncGFwZSc7CiAgICB2YXIgJG5zX3VyaSA9IEF1dGhfT3BlbklEX1BBUEVfTlNfVVJJOwoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1BBUEVfUmVxdWVzdCgkcHJlZmVycmVkX2F1dGhfcG9saWNpZXM9bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF4X2F1dGhfYWdlPW51bGwpCiAgICB7CiAgICAgICAgaWYgKCRwcmVmZXJyZWRfYXV0aF9wb2xpY2llcyA9PT0gbnVsbCkgewogICAgICAgICAgICAkcHJlZmVycmVkX2F1dGhfcG9saWNpZXMgPSBhcnJheSgpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnByZWZlcnJlZF9hdXRoX3BvbGljaWVzID0gJHByZWZlcnJlZF9hdXRoX3BvbGljaWVzOwogICAgICAgICR0aGlzLT5tYXhfYXV0aF9hZ2UgPSAkbWF4X2F1dGhfYWdlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGFjY2VwdGFibGUgYXV0aGVudGljYXRpb24gcG9saWN5IFVSSSB0byB0aGlzIHJlcXVlc3QKICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSByZWx5aW5nIHBhcnR5IHRvIGFkZAogICAgICogYWNjZXB0YWJsZSBhdXRoZW50aWNhdGlvbiB0eXBlcyB0byB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBwb2xpY3lfdXJpOiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHByZWZlcnJlZCB0eXBlIG9mCiAgICAgKiBhdXRoZW50aWNhdGlvbi4KICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9saWN5VVJJKCRwb2xpY3lfdXJpKQogICAgewogICAgICAgIGlmICghaW5fYXJyYXkoJHBvbGljeV91cmksICR0aGlzLT5wcmVmZXJyZWRfYXV0aF9wb2xpY2llcykpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZlcnJlZF9hdXRoX3BvbGljaWVzW10gPSAkcG9saWN5X3VyaTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQXJncygpCiAgICB7CiAgICAgICAgJG5zX2FyZ3MgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICdwcmVmZXJyZWRfYXV0aF9wb2xpY2llcycgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbG9kZSgnICcsICR0aGlzLT5wcmVmZXJyZWRfYXV0aF9wb2xpY2llcykKICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgIGlmICgkdGhpcy0+bWF4X2F1dGhfYWdlICE9PSBudWxsKSB7CiAgICAgICAgICAgICRuc19hcmdzWydtYXhfYXV0aF9hZ2UnXSA9IHN0cnZhbCgkdGhpcy0+bWF4X2F1dGhfYWdlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnNfYXJnczsKICAgIH0KCiAgICAvKioKICAgICAqIEluc3RhbnRpYXRlIGEgUmVxdWVzdCBvYmplY3QgZnJvbSB0aGUgYXJndW1lbnRzIGluIGEgY2hlY2tpZF8qCiAgICAgKiBPcGVuSUQgbWVzc2FnZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbU9wZW5JRFJlcXVlc3QoJHJlcXVlc3QpCiAgICB7CiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9QQVBFX1JlcXVlc3QoKTsKICAgICAgICAkYXJncyA9ICRyZXF1ZXN0LT5tZXNzYWdlLT5nZXRBcmdzKEF1dGhfT3BlbklEX1BBUEVfTlNfVVJJKTsKCiAgICAgICAgaWYgKCRhcmdzID09PSBudWxsIHx8ICRhcmdzID09PSBhcnJheSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJG9iai0+cGFyc2VFeHRlbnNpb25BcmdzKCRhcmdzKTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgc3RhdGUgb2YgdGhpcyByZXF1ZXN0IHRvIGJlIHRoYXQgZXhwcmVzc2VkIGluIHRoZXNlCiAgICAgKiBQQVBFIGFyZ3VtZW50cwogICAgICoKICAgICAqIEBwYXJhbSBhcmdzOiBUaGUgUEFQRSBhcmd1bWVudHMgd2l0aG91dCBhIG5hbWVzcGFjZQogICAgICovCiAgICBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbkFyZ3MoJGFyZ3MpCiAgICB7CiAgICAgICAgLy8gcHJlZmVycmVkX2F1dGhfcG9saWNpZXMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBwb2xpY3kKICAgICAgICAvLyBVUklzCiAgICAgICAgJHRoaXMtPnByZWZlcnJlZF9hdXRoX3BvbGljaWVzID0gYXJyYXkoKTsKCiAgICAgICAgJHBvbGljaWVzX3N0ciA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkYXJncywgJ3ByZWZlcnJlZF9hdXRoX3BvbGljaWVzJyk7CiAgICAgICAgaWYgKCRwb2xpY2llc19zdHIpIHsKICAgICAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnICcsICRwb2xpY2llc19zdHIpIGFzICR1cmkpIHsKICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJHVyaSwgJHRoaXMtPnByZWZlcnJlZF9hdXRoX3BvbGljaWVzKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmZXJyZWRfYXV0aF9wb2xpY2llc1tdID0gJHVyaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gbWF4X2F1dGhfYWdlIGlzIGJhc2UtMTAgaW50ZWdlciBudW1iZXIgb2Ygc2Vjb25kcwogICAgICAgICRtYXhfYXV0aF9hZ2Vfc3RyID0gQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRhcmdzLCAnbWF4X2F1dGhfYWdlJyk7CiAgICAgICAgaWYgKCRtYXhfYXV0aF9hZ2Vfc3RyKSB7CiAgICAgICAgICAgICR0aGlzLT5tYXhfYXV0aF9hZ2UgPSBBdXRoX09wZW5JRDo6aW50dmFsKCRtYXhfYXV0aF9hZ2Vfc3RyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+bWF4X2F1dGhfYWdlID0gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGxpc3Qgb2YgYXV0aGVudGljYXRpb24gcG9saWN5IFVSSXMgdGhhdCBhIHByb3ZpZGVyCiAgICAgKiBzdXBwb3J0cywgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3Vic2VxdWVuY2Ugb2YgdGhvc2UgdHlwZXMKICAgICAqIHRoYXQgYXJlIHByZWZlcnJlZCBieSB0aGUgcmVseWluZyBwYXJ0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3VwcG9ydGVkX3R5cGVzOiBBIHNlcXVlbmNlIG9mIGF1dGhlbnRpY2F0aW9uIHBvbGljeQogICAgICogdHlwZSBVUklzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBhIHByb3ZpZGVyCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgc3ViLXNlcXVlbmNlIG9mIHRoZSBzdXBwb3J0ZWQgdHlwZXMgdGhhdCBhcmUKICAgICAqIHByZWZlcnJlZCBieSB0aGUgcmVseWluZyBwYXJ0eS4gVGhpcyBsaXN0IHdpbGwgYmUgb3JkZXJlZCBpbgogICAgICogdGhlIG9yZGVyIHRoYXQgdGhlIHR5cGVzIGFwcGVhciBpbiB0aGUgc3VwcG9ydGVkX3R5cGVzCiAgICAgKiBzZXF1ZW5jZSwgYW5kIG1heSBiZSBlbXB0eSBpZiB0aGUgcHJvdmlkZXIgZG9lcyBub3QgcHJlZmVyIGFueQogICAgICogb2YgdGhlIHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiB0eXBlcy4KICAgICAqLwogICAgZnVuY3Rpb24gcHJlZmVycmVkVHlwZXMoJHN1cHBvcnRlZF90eXBlcykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHN1cHBvcnRlZF90eXBlcyBhcyAkc3QpIHsKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRzdCwgJHRoaXMtPnByZWZlcnJlZF9hdXRoX3BvbGljaWVzKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9CgovKioKICogQSBQcm92aWRlciBBdXRoZW50aWNhdGlvbiBQb2xpY3kgcmVzcG9uc2UsIHNlbnQgZnJvbSBhIHByb3ZpZGVyIHRvCiAqIGEgcmVseWluZyBwYXJ0eQogKi8KY2xhc3MgQXV0aF9PcGVuSURfUEFQRV9SZXNwb25zZSBleHRlbmRzIEF1dGhfT3BlbklEX0V4dGVuc2lvbiB7CgogICAgdmFyICRuc19hbGlhcyA9ICdwYXBlJzsKICAgIHZhciAkbnNfdXJpID0gQXV0aF9PcGVuSURfUEFQRV9OU19VUkk7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfUEFQRV9SZXNwb25zZSgkYXV0aF9wb2xpY2llcz1udWxsLCAkYXV0aF90aW1lPW51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuaXN0X2F1dGhfbGV2ZWw9bnVsbCkKICAgIHsKICAgICAgICBpZiAoJGF1dGhfcG9saWNpZXMpIHsKICAgICAgICAgICAgJHRoaXMtPmF1dGhfcG9saWNpZXMgPSAkYXV0aF9wb2xpY2llczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+YXV0aF9wb2xpY2llcyA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+YXV0aF90aW1lID0gJGF1dGhfdGltZTsKICAgICAgICAkdGhpcy0+bmlzdF9hdXRoX2xldmVsID0gJG5pc3RfYXV0aF9sZXZlbDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIGF1dGhlbnRpY2F0aW9uIHBvbGljeSB0byB0aGlzIHJlc3BvbnNlCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgcHJvdmlkZXIgdG8gYWRkIGEKICAgICAqIHBvbGljeSB0aGF0IHRoZSBwcm92aWRlciBjb25mb3JtZWQgdG8gd2hlbiBhdXRoZW50aWNhdGluZyB0aGUKICAgICAqIHVzZXIuCiAgICAgKgogICAgICogQHBhcmFtIHBvbGljeV91cmk6IFRoZSBpZGVudGlmaWVyIGZvciB0aGUgcHJlZmVycmVkIHR5cGUgb2YKICAgICAqIGF1dGhlbnRpY2F0aW9uLgogICAgICovCiAgICBmdW5jdGlvbiBhZGRQb2xpY3lVUkkoJHBvbGljeV91cmkpCiAgICB7CiAgICAgICAgaWYgKCFpbl9hcnJheSgkcG9saWN5X3VyaSwgJHRoaXMtPmF1dGhfcG9saWNpZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5hdXRoX3BvbGljaWVzW10gPSAkcG9saWN5X3VyaTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gQXV0aF9PcGVuSURfUEFQRV9SZXNwb25zZSBvYmplY3QgZnJvbSBhIHN1Y2Nlc3NmdWwKICAgICAqIE9wZW5JRCBsaWJyYXJ5IHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdWNjZXNzX3Jlc3BvbnNlICRzdWNjZXNzX3Jlc3BvbnNlIEEgU3VjY2Vzc1Jlc3BvbnNlCiAgICAgKiBmcm9tIEF1dGhfT3BlbklEX0NvbnN1bWVyOjpjb21wbGV0ZSgpCiAgICAgKgogICAgICogQHJldHVybnM6IEEgcHJvdmlkZXIgYXV0aGVudGljYXRpb24gcG9saWN5IHJlc3BvbnNlIGZyb20gdGhlCiAgICAgKiBkYXRhIHRoYXQgd2FzIHN1cHBsaWVkIHdpdGggdGhlIGlkX3JlcyByZXNwb25zZS4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21TdWNjZXNzUmVzcG9uc2UoJHN1Y2Nlc3NfcmVzcG9uc2UpCiAgICB7CiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9QQVBFX1Jlc3BvbnNlKCk7CgogICAgICAgIC8vIFBBUEUgcmVxdWlyZXMgdGhhdCB0aGUgYXJncyBiZSBzaWduZWQuCiAgICAgICAgJGFyZ3MgPSAkc3VjY2Vzc19yZXNwb25zZS0+Z2V0U2lnbmVkTlMoQXV0aF9PcGVuSURfUEFQRV9OU19VUkkpOwoKICAgICAgICBpZiAoJGFyZ3MgPT09IG51bGwgfHwgJGFyZ3MgPT09IGFycmF5KCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJG9iai0+cGFyc2VFeHRlbnNpb25BcmdzKCRhcmdzKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIHRoZSBwcm92aWRlciBhdXRoZW50aWNhdGlvbiBwb2xpY3kgYXJndW1lbnRzIGludG8gdGhlCiAgICAgKiAgaW50ZXJuYWwgc3RhdGUgb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gYXJnczogdW5xdWFsaWZpZWQgcHJvdmlkZXIgYXV0aGVudGljYXRpb24gcG9saWN5CiAgICAgKiBhcmd1bWVudHMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaWN0OiBXaGV0aGVyIHRvIHJldHVybiBmYWxzZSB3aGVuIGJhZCBkYXRhIGlzCiAgICAgKiBlbmNvdW50ZXJlZAogICAgICoKICAgICAqIEByZXR1cm4gbnVsbCBUaGUgZGF0YSBpcyBwYXJzZWQgaW50byB0aGUgaW50ZXJuYWwgZmllbGRzIG9mCiAgICAgKiB0aGlzIG9iamVjdC4KICAgICovCiAgICBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbkFyZ3MoJGFyZ3MsICRzdHJpY3Q9ZmFsc2UpCiAgICB7CiAgICAgICAgJHBvbGljaWVzX3N0ciA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkYXJncywgJ2F1dGhfcG9saWNpZXMnKTsKICAgICAgICBpZiAoJHBvbGljaWVzX3N0ciAmJiAkcG9saWNpZXNfc3RyICE9ICJub25lIikgewogICAgICAgICAgICAkdGhpcy0+YXV0aF9wb2xpY2llcyA9IGV4cGxvZGUoIiAiLCAkcG9saWNpZXNfc3RyKTsKICAgICAgICB9CgogICAgICAgICRuaXN0X2xldmVsX3N0ciA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkYXJncywgJ25pc3RfYXV0aF9sZXZlbCcpOwogICAgICAgIGlmICgkbmlzdF9sZXZlbF9zdHIgIT09IG51bGwpIHsKICAgICAgICAgICAgJG5pc3RfbGV2ZWwgPSBBdXRoX09wZW5JRDo6aW50dmFsKCRuaXN0X2xldmVsX3N0cik7CgogICAgICAgICAgICBpZiAoJG5pc3RfbGV2ZWwgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJHN0cmljdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG5pc3RfbGV2ZWwgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoMCA8PSAkbmlzdF9sZXZlbCAmJiAkbmlzdF9sZXZlbCA8IDUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5uaXN0X2F1dGhfbGV2ZWwgPSAkbmlzdF9sZXZlbDsKICAgICAgICAgICAgfSBlbHNlIGlmICgkc3RyaWN0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRhdXRoX3RpbWUgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGFyZ3MsICdhdXRoX3RpbWUnKTsKICAgICAgICBpZiAoJGF1dGhfdGltZSAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAocHJlZ19tYXRjaChQQVBFX1RJTUVfVkFMSURBVE9SLCAkYXV0aF90aW1lKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmF1dGhfdGltZSA9ICRhdXRoX3RpbWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHN0cmljdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKQogICAgewogICAgICAgICRuc19hcmdzID0gYXJyYXkoKTsKICAgICAgICBpZiAoY291bnQoJHRoaXMtPmF1dGhfcG9saWNpZXMpID4gMCkgewogICAgICAgICAgICAkbnNfYXJnc1snYXV0aF9wb2xpY2llcyddID0gaW1wbG9kZSgnICcsICR0aGlzLT5hdXRoX3BvbGljaWVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbnNfYXJnc1snYXV0aF9wb2xpY2llcyddID0gJ25vbmUnOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5uaXN0X2F1dGhfbGV2ZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdGhpcy0+bmlzdF9hdXRoX2xldmVsLCByYW5nZSgwLCA0KSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbnNfYXJnc1snbmlzdF9hdXRoX2xldmVsJ10gPSBzdHJ2YWwoJHRoaXMtPm5pc3RfYXV0aF9sZXZlbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmF1dGhfdGltZSAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goUEFQRV9USU1FX1ZBTElEQVRPUiwgJHRoaXMtPmF1dGhfdGltZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5zX2FyZ3NbJ2F1dGhfdGltZSddID0gJHRoaXMtPmF1dGhfdGltZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnNfYXJnczsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Parse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgVkVSWSBsaW1pdGVkIHBhcnNlciB0aGF0IGZpbmRzIDxsaW5rPiB0YWdzCiAqIGluIHRoZSBoZWFkIG9mIEhUTUwgb3IgWEhUTUwgZG9jdW1lbnRzIGFuZCBwYXJzZXMgb3V0IHRoZWlyCiAqIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuSUQgc3BlYy4gSXQgaXMgYSBsaWJlcmFsIHBhcnNlciwKICogYnV0IGl0IHJlcXVpcmVzIHRoZXNlIHRoaW5ncyBmcm9tIHRoZSBkYXRhIGluIG9yZGVyIHRvIHdvcms6CiAqCiAqIC0gVGhlcmUgbXVzdCBiZSBhbiBvcGVuIDxodG1sPiB0YWcKICoKICogLSBUaGVyZSBtdXN0IGJlIGFuIG9wZW4gPGhlYWQ+IHRhZyBpbnNpZGUgb2YgdGhlIDxodG1sPiB0YWcKICoKICogLSBPbmx5IDxsaW5rPnMgdGhhdCBhcmUgZm91bmQgaW5zaWRlIG9mIHRoZSA8aGVhZD4gdGFnIGFyZSBwYXJzZWQKICogICAodGhpcyBpcyBieSBkZXNpZ24pCiAqCiAqIC0gVGhlIHBhcnNlciBmb2xsb3dzIHRoZSBPcGVuSUQgc3BlY2lmaWNhdGlvbiBpbiByZXNvbHZpbmcgdGhlCiAqICAgYXR0cmlidXRlcyBvZiB0aGUgbGluayB0YWdzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGF0dHJpYnV0ZXMgRE8KICogICBOT1QgZ2V0IHJlc29sdmVkIGFzIHRoZXkgd291bGQgYnkgYW4gWE1MIG9yIEhUTUwgcGFyc2VyLiBJbgogKiAgIHBhcnRpY3VsYXIsIG9ubHkgY2VydGFpbiBlbnRpdGllcyBnZXQgcmVwbGFjZWQsIGFuZCBocmVmCiAqICAgYXR0cmlidXRlcyBkbyBub3QgZ2V0IHJlc29sdmVkIHJlbGF0aXZlIHRvIGEgYmFzZSBVUkwuCiAqCiAqIEZyb20gaHR0cDovL29wZW5pZC5uZXQvc3BlY3MuYm1sOgogKgogKiAtIFRoZSBvcGVuaWQuc2VydmVyIFVSTCBNVVNUIGJlIGFuIGFic29sdXRlIFVSTC4gT3BlbklEIGNvbnN1bWVycwogKiAgIE1VU1QgTk9UIGF0dGVtcHQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBVUkxzLgogKgogKiAtIFRoZSBvcGVuaWQuc2VydmVyIFVSTCBNVVNUIE5PVCBpbmNsdWRlIGVudGl0aWVzIG90aGVyIHRoYW4gJmFtcDssCiAqICAgJmx0OywgJmd0OywgYW5kICZxdW90Oy4KICoKICogVGhlIHBhcnNlciBpZ25vcmVzIFNHTUwgY29tbWVudHMgYW5kIDwhW0NEQVRBW2Jsb2Nrc11dPi4gQm90aCBraW5kcwogKiBvZiBxdW90aW5nIGFyZSBhbGxvd2VkIGZvciBhdHRyaWJ1dGVzLgogKgogKiBUaGUgcGFyc2VyIGRlYWxzIHdpdGggaW52YWxpZCBtYXJrdXAgaW4gdGhlc2Ugd2F5czoKICoKICogLSBUYWcgbmFtZXMgYXJlIG5vdCBjYXNlLXNlbnNpdGl2ZQogKgogKiAtIFRoZSA8aHRtbD4gdGFnIGlzIGFjY2VwdGVkIGV2ZW4gd2hlbiBpdCBpcyBub3QgYXQgdGhlIHRvcCBsZXZlbAogKgogKiAtIFRoZSA8aGVhZD4gdGFnIGlzIGFjY2VwdGVkIGV2ZW4gd2hlbiBpdCBpcyBub3QgYSBkaXJlY3QgY2hpbGQgb2YKICogICB0aGUgPGh0bWw+IHRhZywgYnV0IGEgPGh0bWw+IHRhZyBtdXN0IGJlIGFuIGFuY2VzdG9yIG9mIHRoZQogKiAgIDxoZWFkPiB0YWcKICoKICogLSA8bGluaz4gdGFncyBhcmUgYWNjZXB0ZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBkaXJlY3QgY2hpbGRyZW4KICogICBvZiB0aGUgPGhlYWQ+IHRhZywgYnV0IGEgPGhlYWQ+IHRhZyBtdXN0IGJlIGFuIGFuY2VzdG9yIG9mIHRoZQogKiAgIDxsaW5rPiB0YWcKICoKICogLSBJZiB0aGVyZSBpcyBubyBjbG9zaW5nIHRhZyBmb3IgYW4gb3BlbiA8aHRtbD4gb3IgPGhlYWQ+IHRhZywgdGhlCiAqICAgcmVtYWluZGVyIG9mIHRoZSBkb2N1bWVudCBpcyB2aWV3ZWQgYXMgYmVpbmcgaW5zaWRlIG9mIHRoZQogKiAgIHRhZy4gSWYgdGhlcmUgaXMgbm8gY2xvc2luZyB0YWcgZm9yIGEgPGxpbms+IHRhZywgdGhlIGxpbmsgdGFnIGlzCiAqICAgdHJlYXRlZCBhcyBhIHNob3J0IHRhZy4gRXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUgYXJlIHRoYXQgPGh0bWw+CiAqICAgY2xvc2VzIDxodG1sPiBhbmQgPGJvZHk+IG9yIDxoZWFkPiBjbG9zZXMgPGhlYWQ+CiAqCiAqIC0gQXR0cmlidXRlcyBvZiB0aGUgPGxpbms+IHRhZyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIHF1b3RlZC4KICoKICogLSBJbiB0aGUgY2FzZSBvZiBkdXBsaWNhdGVkIGF0dHJpYnV0ZSBuYW1lcywgdGhlIGF0dHJpYnV0ZSBjb21pbmcKICogICBsYXN0IGluIHRoZSB0YWcgd2lsbCBiZSB0aGUgdmFsdWUgcmV0dXJuZWQuCiAqCiAqIC0gQW55IHRleHQgdGhhdCBkb2VzIG5vdCBwYXJzZSBhcyBhbiBhdHRyaWJ1dGUgd2l0aGluIGEgbGluayB0YWcKICogICB3aWxsIGJlIGlnbm9yZWQuIChlLmcuIDxsaW5rIHB1bXBraW4gcmVsPSdvcGVuaWQuc2VydmVyJyAvPiB3aWxsCiAqICAgaWdub3JlIHB1bXBraW4pCiAqCiAqIC0gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgPGh0bWw+IG9yIDxoZWFkPiB0YWcsIHRoZSBwYXJzZXIgb25seQogKiAgIGxvb2tzIGluc2lkZSBvZiB0aGUgZmlyc3Qgb25lLgogKgogKiAtIFRoZSBjb250ZW50cyBvZiA8c2NyaXB0PiB0YWdzIGFyZSBpZ25vcmVkIGVudGlyZWx5LCBleGNlcHQKICogICB1bmNsb3NlZCA8c2NyaXB0PiB0YWdzLiBVbmNsb3NlZCA8c2NyaXB0PiB0YWdzIGFyZSBpZ25vcmVkLgogKgogKiAtIEFueSBvdGhlciBpbnZhbGlkIG1hcmt1cCBpcyBpZ25vcmVkLCBpbmNsdWRpbmcgdW5jbG9zZWQgU0dNTAogKiAgIGNvbW1lbnRzIGFuZCB1bmNsb3NlZCA8IVtDREFUQVtibG9ja3MuCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAYWNjZXNzIHByaXZhdGUKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogUmVxdWlyZSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoKS4KICovCnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQucGhwIjsKCmNsYXNzIEF1dGhfT3BlbklEX1BhcnNlIHsKCiAgICAvKioKICAgICAqIFNwZWNpZnkgc29tZSBmbGFncyBmb3IgdXNlIHdpdGggcmVnZXggbWF0Y2hpbmcuCiAgICAgKi8KICAgIHZhciAkX3JlX2ZsYWdzID0gInNpIjsKCiAgICAvKioKICAgICAqIFN0dWZmIHRvIHJlbW92ZSBiZWZvcmUgd2Ugc3RhcnQgbG9va2luZyBmb3IgdGFncwogICAgICovCiAgICB2YXIgJF9yZW1vdmVkX3JlID0KICAgICAgICAgICAiPCEtLS4qPy0tPnw8IVxbQ0RBVEFcWy4qP1xdXF0+fDxzY3JpcHRcYig/ITopW14+XSo+Lio/PFwvc2NyaXB0PiI7CgogICAgLyoqCiAgICAgKiBTdGFydHMgd2l0aCB0aGUgdGFnIG5hbWUgYXQgYSB3b3JkIGJvdW5kYXJ5LCB3aGVyZSB0aGUgdGFnIG5hbWUKICAgICAqIGlzIG5vdCBhIG5hbWVzcGFjZQogICAgICovCiAgICB2YXIgJF90YWdfZXhwciA9ICI8JXNcYig/ITopKFtePl0qPykoPzpcLz58PiguKikoPzo8XC8/JXNccyo+fFxaKSkiOwoKICAgIHZhciAkX2F0dHJfZmluZCA9ICdcYihcdyspPSgiW14iXSoifFwnW15cJ10qXCd8W15cJyJcc1wvPD5dKyknOwoKICAgIHZhciAkX29wZW5fdGFnX2V4cHIgPSAiPCVzXGIiOwogICAgdmFyICRfY2xvc2VfdGFnX2V4cHIgPSAiPCgoXC8lc1xiKXwoJXNbXj5cL10qXC8pKT4iOwoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1BhcnNlKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xpbmtfZmluZCA9IHNwcmludGYoIi88bGlua1xiKD8hOikoW14+XSopKD8hPCk+LyVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZV9mbGFncyk7CgogICAgICAgICR0aGlzLT5fZW50aXR5X3JlcGxhY2VtZW50cyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbXAnID0+ICcmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHQnID0+ICc8JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3QnID0+ICc+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVvdCcgPT4gJyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPl9hdHRyX2ZpbmQgPSBzcHJpbnRmKCIvJXMvJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2F0dHJfZmluZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZV9mbGFncyk7CgogICAgICAgICR0aGlzLT5fcmVtb3ZlZF9yZSA9IHNwcmludGYoIi8lcy8lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3JlbW92ZWRfcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3JlX2ZsYWdzKTsKCiAgICAgICAgJHRoaXMtPl9lbnRfcmVwbGFjZSA9CiAgICAgICAgICAgIHNwcmludGYoIiYoJXMpOyIsIGltcGxvZGUoInwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fZW50aXR5X3JlcGxhY2VtZW50cykpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHdpbGwgbWF0Y2ggYSBnaXZlbiB0YWcgaW4gYW4KICAgICAqIFNHTUwgc3RyaW5nLgogICAgICovCiAgICBmdW5jdGlvbiB0YWdNYXRjaGVyKCR0YWdfbmFtZSwgJGNsb3NlX3RhZ3MgPSBudWxsKQogICAgewogICAgICAgICRleHByID0gJHRoaXMtPl90YWdfZXhwcjsKCiAgICAgICAgaWYgKCRjbG9zZV90YWdzKSB7CiAgICAgICAgICAgICRvcHRpb25zID0gaW1wbG9kZSgifCIsIGFycmF5X21lcmdlKGFycmF5KCR0YWdfbmFtZSksICRjbG9zZV90YWdzKSk7CiAgICAgICAgICAgICRjbG9zZXIgPSBzcHJpbnRmKCIoPzolcykiLCAkb3B0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNsb3NlciA9ICR0YWdfbmFtZTsKICAgICAgICB9CgogICAgICAgICRleHByID0gc3ByaW50ZigkZXhwciwgJHRhZ19uYW1lLCAkY2xvc2VyKTsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLyVzLyVzIiwgJGV4cHIsICR0aGlzLT5fcmVfZmxhZ3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9wZW5UYWcoJHRhZ19uYW1lKQogICAgewogICAgICAgICRleHByID0gc3ByaW50ZigkdGhpcy0+X29wZW5fdGFnX2V4cHIsICR0YWdfbmFtZSk7CiAgICAgICAgcmV0dXJuIHNwcmludGYoIi8lcy8lcyIsICRleHByLCAkdGhpcy0+X3JlX2ZsYWdzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbG9zZVRhZygkdGFnX25hbWUpCiAgICB7CiAgICAgICAgJGV4cHIgPSBzcHJpbnRmKCR0aGlzLT5fY2xvc2VfdGFnX2V4cHIsICR0YWdfbmFtZSwgJHRhZ19uYW1lKTsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLyVzLyVzIiwgJGV4cHIsICR0aGlzLT5fcmVfZmxhZ3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIGh0bWxCZWdpbigkcykKICAgIHsKICAgICAgICAkbWF0Y2hlcyA9IGFycmF5KCk7CiAgICAgICAgJHJlc3VsdCA9IHByZWdfbWF0Y2goJHRoaXMtPm9wZW5UYWcoJ2h0bWwnKSwgJHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSB8fCAhJG1hdGNoZXMpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2guCiAgICAgICAgcmV0dXJuICRtYXRjaGVzWzBdWzFdOwogICAgfQoKICAgIGZ1bmN0aW9uIGh0bWxFbmQoJHMpCiAgICB7CiAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgICAgICRyZXN1bHQgPSBwcmVnX21hdGNoKCR0aGlzLT5jbG9zZVRhZygnaHRtbCcpLCAkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlIHx8ICEkbWF0Y2hlcykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBtYXRjaC4KICAgICAgICByZXR1cm4gJG1hdGNoZXNbY291bnQoJG1hdGNoZXMpIC0gMV1bMV07CiAgICB9CgogICAgZnVuY3Rpb24gaGVhZEZpbmQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGFnTWF0Y2hlcignaGVhZCcsIGFycmF5KCdib2R5JywgJ2h0bWwnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzKCRzdHIpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9lbnRpdHlfcmVwbGFjZW1lbnRzIGFzICRvbGQgPT4gJG5ldykgewogICAgICAgICAgICAkc3RyID0gcHJlZ19yZXBsYWNlKHNwcmludGYoIi8mJXM7LyIsICRvbGQpLCAkbmV3LCAkc3RyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdHI7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlUXVvdGVzKCRzdHIpCiAgICB7CiAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgICAgICRkb3VibGUgPSAnL14iKC4qKSIkLyc7CiAgICAgICAgJHNpbmdsZSA9ICIvXlwnKC4qKVwnJC8iOwoKICAgICAgICBpZiAocHJlZ19tYXRjaCgkZG91YmxlLCAkc3RyLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgcmV0dXJuICRtYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSBpZiAocHJlZ19tYXRjaCgkc2luZ2xlLCAkc3RyLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgcmV0dXJuICRtYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gbWF0Y2goJHJlZ2V4cCwgJHRleHQsICYkbWF0Y2gpCiAgICB7CiAgICAgICAgaWYgKCFpc19jYWxsYWJsZSgnbWJfZXJlZ19zZWFyY2hfaW5pdCcpKSB7CiAgICAgICAgICAgIHJldHVybiBwcmVnX21hdGNoKCRyZWdleHAsICR0ZXh0LCAkbWF0Y2gpOwogICAgICAgIH0KCiAgICAgICAgJHJlZ2V4cCA9IHN1YnN0cigkcmVnZXhwLCAxLCBzdHJsZW4oJHJlZ2V4cCkgLSAyIC0gc3RybGVuKCR0aGlzLT5fcmVfZmxhZ3MpKTsKICAgICAgICBtYl9lcmVnX3NlYXJjaF9pbml0KCR0ZXh0KTsKICAgICAgICBpZiAoIW1iX2VyZWdfc2VhcmNoKCRyZWdleHApKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbGlzdCgkbWF0Y2gpID0gbWJfZXJlZ19zZWFyY2hfZ2V0cmVncygpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCBhbGwgbGluayB0YWdzIGluIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIEhUTUwgZG9jdW1lbnQgYW5kCiAgICAgKiByZXR1cm4gYSBsaXN0IG9mIHRoZWlyIGF0dHJpYnV0ZXMuCiAgICAgKgogICAgICogQHRvZG8gVGhpcyBpcyBxdWl0ZSBpbmVmZmVjdGl2ZSBhbmQgbWF5IGZhaWwgd2l0aCB0aGUgZGVmYXVsdAogICAgICogICAgICAgcGNyZS5iYWNrdHJhY2tfbGltaXQgb2YgMTAwMDAwIGluIFBIUCA1LjIsIGlmICRodG1sIGlzIGJpZy4KICAgICAqICAgICAgIEl0IHNob3VsZCByYXRoZXIgdXNlIHN0cmlwb3MgKGluIFBIUDUpIG9yIHN0cnBvcygpK3N0cnRvdXBwZXIoKQogICAgICogICAgICAgaW4gUEhQNCB0byBtYW5hZ2UgdGhpcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sIFRoZSB0ZXh0IHRvIHBhcnNlCiAgICAgKiBAcmV0dXJuIGFycmF5ICRsaXN0IEFuIGFycmF5IG9mIGFycmF5cyBvZiBhdHRyaWJ1dGVzLCBvbmUgZm9yIGVhY2gKICAgICAqIGxpbmsgdGFnCiAgICAgKi8KICAgIGZ1bmN0aW9uIHBhcnNlTGlua0F0dHJzKCRodG1sKQogICAgewogICAgICAgICRzdHJpcHBlZCA9IHByZWdfcmVwbGFjZSgkdGhpcy0+X3JlbW92ZWRfcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHRtbCk7CgogICAgICAgICRodG1sX2JlZ2luID0gJHRoaXMtPmh0bWxCZWdpbigkc3RyaXBwZWQpOwogICAgICAgICRodG1sX2VuZCA9ICR0aGlzLT5odG1sRW5kKCRzdHJpcHBlZCk7CgogICAgICAgIGlmICgkaHRtbF9iZWdpbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGh0bWxfZW5kID09PSBmYWxzZSkgewogICAgICAgICAgICAkaHRtbF9lbmQgPSBzdHJsZW4oJHN0cmlwcGVkKTsKICAgICAgICB9CgogICAgICAgICRzdHJpcHBlZCA9IHN1YnN0cigkc3RyaXBwZWQsICRodG1sX2JlZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9lbmQgLSAkaHRtbF9iZWdpbik7CgogICAgICAgIC8vIFdvcmthcm91bmQgdG8gcHJldmVudCBQUkVHX0JBQ0tUUkFDS19MSU1JVF9FUlJPUjoKICAgICAgICAkb2xkX2J0bGltaXQgPSBpbmlfc2V0KCAncGNyZS5iYWNrdHJhY2tfbGltaXQnLCAtMSApOwoKICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgPEhFQUQ+IHRhZy4KICAgICAgICAkaGVhZF9yZSA9ICR0aGlzLT5oZWFkRmluZCgpOwogICAgICAgICRoZWFkX21hdGNoID0gJyc7CiAgICAgICAgaWYgKCEkdGhpcy0+bWF0Y2goJGhlYWRfcmUsICRzdHJpcHBlZCwgJGhlYWRfbWF0Y2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluaV9zZXQoICdwY3JlLmJhY2t0cmFja19saW1pdCcsICRvbGRfYnRsaW1pdCApOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgICRsaW5rX2RhdGEgPSBhcnJheSgpOwogICAgICAgICRsaW5rX21hdGNoZXMgPSBhcnJheSgpOwoKICAgICAgICBpZiAoIXByZWdfbWF0Y2hfYWxsKCR0aGlzLT5fbGlua19maW5kLCAkaGVhZF9tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX21hdGNoZXMpKSB7CiAgICAgICAgICAgIGluaV9zZXQoICdwY3JlLmJhY2t0cmFja19saW1pdCcsICRvbGRfYnRsaW1pdCApOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRsaW5rX21hdGNoZXNbMF0gYXMgJGxpbmspIHsKICAgICAgICAgICAgJGF0dHJfbWF0Y2hlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCR0aGlzLT5fYXR0cl9maW5kLCAkbGluaywgJGF0dHJfbWF0Y2hlcyk7CiAgICAgICAgICAgICRsaW5rX2F0dHJzID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGF0dHJfbWF0Y2hlc1swXSBhcyAkaW5kZXggPT4gJGZ1bGxfbWF0Y2gpIHsKICAgICAgICAgICAgICAgICRuYW1lID0gJGF0dHJfbWF0Y2hlc1sxXVskaW5kZXhdOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPnJlcGxhY2VFbnRpdGllcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlbW92ZVF1b3RlcygkYXR0cl9tYXRjaGVzWzJdWyRpbmRleF0pKTsKCiAgICAgICAgICAgICAgICAkbGlua19hdHRyc1tzdHJ0b2xvd2VyKCRuYW1lKV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxpbmtfZGF0YVtdID0gJGxpbmtfYXR0cnM7CiAgICAgICAgfQoKICAgICAgICBpbmlfc2V0KCAncGNyZS5iYWNrdHJhY2tfbGltaXQnLCAkb2xkX2J0bGltaXQgKTsKICAgICAgICByZXR1cm4gJGxpbmtfZGF0YTsKICAgIH0KCiAgICBmdW5jdGlvbiByZWxNYXRjaGVzKCRyZWxfYXR0ciwgJHRhcmdldF9yZWwpCiAgICB7CiAgICAgICAgLy8gRG9lcyB0aGlzIHRhcmdldF9yZWwgYXBwZWFyIGluIHRoZSByZWxfc3RyPwogICAgICAgIC8vIFhYWDogVEVTVE1FCiAgICAgICAgJHJlbHMgPSBwcmVnX3NwbGl0KCIvXHMrLyIsIHRyaW0oJHJlbF9hdHRyKSk7CiAgICAgICAgZm9yZWFjaCAoJHJlbHMgYXMgJHJlbCkgewogICAgICAgICAgICAkcmVsID0gc3RydG9sb3dlcigkcmVsKTsKICAgICAgICAgICAgaWYgKCRyZWwgPT0gJHRhcmdldF9yZWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5rSGFzUmVsKCRsaW5rX2F0dHJzLCAkdGFyZ2V0X3JlbCkKICAgIHsKICAgICAgICAvLyBEb2VzIHRoaXMgbGluayBoYXZlIHRhcmdldF9yZWwgYXMgYSByZWxhdGlvbnNoaXA/CiAgICAgICAgLy8gWFhYOiBURVNUTUUKICAgICAgICAkcmVsX2F0dHIgPSBBdXRoX09wZW5pRDo6YXJyYXlHZXQoJGxpbmtfYXR0cnMsICdyZWwnLCBudWxsKTsKICAgICAgICByZXR1cm4gKCRyZWxfYXR0ciAmJiAkdGhpcy0+cmVsTWF0Y2hlcygkcmVsX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldF9yZWwpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kTGlua3NSZWwoJGxpbmtfYXR0cnNfbGlzdCwgJHRhcmdldF9yZWwpCiAgICB7CiAgICAgICAgLy8gRmlsdGVyIHRoZSBsaXN0IG9mIGxpbmsgYXR0cmlidXRlcyBvbiB3aGV0aGVyIGl0IGhhcwogICAgICAgIC8vIHRhcmdldF9yZWwgYXMgYSByZWxhdGlvbnNoaXAuCiAgICAgICAgLy8gWFhYOiBURVNUTUUKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkbGlua19hdHRyc19saXN0IGFzICRhdHRyKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bGlua0hhc1JlbCgkYXR0ciwgJHRhcmdldF9yZWwpKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSAkYXR0cjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gZmluZEZpcnN0SHJlZigkbGlua19hdHRyc19saXN0LCAkdGFyZ2V0X3JlbCkKICAgIHsKICAgICAgICAvLyBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBocmVmIGF0dHJpYnV0ZSBmb3IgdGhlIGZpcnN0IGxpbmsKICAgICAgICAvLyB0YWcgaW4gdGhlIGxpc3QgdGhhdCBoYXMgdGFyZ2V0X3JlbCBhcyBhIHJlbGF0aW9uc2hpcC4KICAgICAgICAvLyBYWFg6IFRFU1RNRQogICAgICAgICRtYXRjaGVzID0gJHRoaXMtPmZpbmRMaW5rc1JlbCgkbGlua19hdHRyc19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0X3JlbCk7CiAgICAgICAgaWYgKCEkbWF0Y2hlcykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGZpcnN0ID0gJG1hdGNoZXNbMF07CiAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEOjphcnJheUdldCgkZmlyc3QsICdocmVmJywgbnVsbCk7CiAgICB9Cn0KCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2xlZ2FjeV9kaXNjb3ZlcigkaHRtbF90ZXh0LCAkc2VydmVyX3JlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZWxlZ2F0ZV9yZWwpCnsKICAgICRwID0gbmV3IEF1dGhfT3BlbklEX1BhcnNlKCk7CgogICAgJGxpbmtfYXR0cnMgPSAkcC0+cGFyc2VMaW5rQXR0cnMoJGh0bWxfdGV4dCk7CgogICAgJHNlcnZlcl91cmwgPSAkcC0+ZmluZEZpcnN0SHJlZigkbGlua19hdHRycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcnZlcl9yZWwpOwoKICAgIGlmICgkc2VydmVyX3VybCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGRlbGVnYXRlX3VybCA9ICRwLT5maW5kRmlyc3RIcmVmKCRsaW5rX2F0dHJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVsZWdhdGVfcmVsKTsKICAgICAgICByZXR1cm4gYXJyYXkoJGRlbGVnYXRlX3VybCwgJHNlcnZlcl91cmwpOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/PostgreSQLStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBIFBvc3RncmVTUUwgc3RvcmUuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KCi8qKgogKiBSZXF1aXJlIHRoZSBiYXNlIGNsYXNzIGZpbGUuCiAqLwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1NRTFN0b3JlLnBocCI7CgovKioKICogQW4gU1FMIHN0b3JlIHRoYXQgdXNlcyBQb3N0Z3JlU1FMIGFzIGl0cyBiYWNrZW5kLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1Bvc3RncmVTUUxTdG9yZSBleHRlbmRzIEF1dGhfT3BlbklEX1NRTFN0b3JlIHsKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFNRTCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNxbFsnbm9uY2VfdGFibGUnXSA9CiAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgJXMgKHNlcnZlcl91cmwgVkFSQ0hBUigyMDQ3KSBOT1QgTlVMTCwgIi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIElOVEVHRVIgTk9UIE5VTEwsICIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbHQgQ0hBUig0MCkgTk9UIE5VTEwsICIuCiAgICAgICAgICAgICAgICAiVU5JUVVFIChzZXJ2ZXJfdXJsLCB0aW1lc3RhbXAsIHNhbHQpKSI7CgogICAgICAgICR0aGlzLT5zcWxbJ2Fzc29jX3RhYmxlJ10gPQogICAgICAgICAgICAiQ1JFQVRFIFRBQkxFICVzIChzZXJ2ZXJfdXJsIFZBUkNIQVIoMjA0NykgTk9UIE5VTEwsICIuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLCAiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNyZXQgQllURUEgTk9UIE5VTEwsICIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzc3VlZCBJTlRFR0VSIE5PVCBOVUxMLCAiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWZldGltZSBJTlRFR0VSIE5PVCBOVUxMLCAiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc3NvY190eXBlIFZBUkNIQVIoNjQpIE5PVCBOVUxMLCAiLgogICAgICAgICAgICAiUFJJTUFSWSBLRVkgKHNlcnZlcl91cmwsIGhhbmRsZSksICIuCiAgICAgICAgICAgICJDT05TVFJBSU5UIHNlY3JldF9sZW5ndGhfY29uc3RyYWludCBDSEVDSyAiLgogICAgICAgICAgICAiKExFTkdUSChzZWNyZXQpIDw9IDEyOCkpIjsKCiAgICAgICAgJHRoaXMtPnNxbFsnc2V0X2Fzc29jJ10gPQogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgJ2luc2VydF9hc3NvYycgPT4gIklOU0VSVCBJTlRPICVzIChzZXJ2ZXJfdXJsLCBoYW5kbGUsICIuCiAgICAgICAgICAgICAgICAgICJzZWNyZXQsIGlzc3VlZCwgbGlmZXRpbWUsIGFzc29jX3R5cGUpIFZBTFVFUyAiLgogICAgICAgICAgICAgICAgICAiKD8sID8sICchJywgPywgPywgPykiLAogICAgICAgICAgICAgICAgICAndXBkYXRlX2Fzc29jJyA9PiAiVVBEQVRFICVzIFNFVCBzZWNyZXQgPSAnIScsIGlzc3VlZCA9ID8sICIuCiAgICAgICAgICAgICAgICAgICJsaWZldGltZSA9ID8sIGFzc29jX3R5cGUgPSA/IFdIRVJFIHNlcnZlcl91cmwgPSA/IEFORCAiLgogICAgICAgICAgICAgICAgICAiaGFuZGxlID0gPyIKICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPnNxbFsnZ2V0X2Fzc29jcyddID0KICAgICAgICAgICAgIlNFTEVDVCBoYW5kbGUsIHNlY3JldCwgaXNzdWVkLCBsaWZldGltZSwgYXNzb2NfdHlwZSBGUk9NICVzICIuCiAgICAgICAgICAgICJXSEVSRSBzZXJ2ZXJfdXJsID0gPyI7CgogICAgICAgICR0aGlzLT5zcWxbJ2dldF9hc3NvYyddID0KICAgICAgICAgICAgIlNFTEVDVCBoYW5kbGUsIHNlY3JldCwgaXNzdWVkLCBsaWZldGltZSwgYXNzb2NfdHlwZSBGUk9NICVzICIuCiAgICAgICAgICAgICJXSEVSRSBzZXJ2ZXJfdXJsID0gPyBBTkQgaGFuZGxlID0gPyI7CgogICAgICAgICR0aGlzLT5zcWxbJ3JlbW92ZV9hc3NvYyddID0KICAgICAgICAgICAgIkRFTEVURSBGUk9NICVzIFdIRVJFIHNlcnZlcl91cmwgPSA/IEFORCBoYW5kbGUgPSA/IjsKCiAgICAgICAgJHRoaXMtPnNxbFsnYWRkX25vbmNlJ10gPQogICAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gJXMgKHNlcnZlcl91cmwsIHRpbWVzdGFtcCwgc2FsdCkgVkFMVUVTICIuCiAgICAgICAgICAgICAgICAgICIoPywgPywgPykiCiAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgJHRoaXMtPnNxbFsnY2xlYW5fbm9uY2UnXSA9CiAgICAgICAgICAgICJERUxFVEUgRlJPTSAlcyBXSEVSRSB0aW1lc3RhbXAgPCA/IjsKCiAgICAgICAgJHRoaXMtPnNxbFsnY2xlYW5fYXNzb2MnXSA9CiAgICAgICAgICAgICJERUxFVEUgRlJPTSAlcyBXSEVSRSBpc3N1ZWQgKyBsaWZldGltZSA8ID8iOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9zZXRfYXNzb2MoJHNlcnZlcl91cmwsICRoYW5kbGUsICRzZWNyZXQsICRpc3N1ZWQsICRsaWZldGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX3R5cGUpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5fZ2V0X2Fzc29jKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKTsKICAgICAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRhYmxlIHNpbmNlIHRoaXMgYXNzb2NpYXRpb25zIGFscmVhZHkgZXhpc3RzLgogICAgICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoJHRoaXMtPnNxbFsnc2V0X2Fzc29jJ11bJ3VwZGF0ZV9hc3NvYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJHNlY3JldCwgJGlzc3VlZCwgJGxpZmV0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX3R5cGUsICRzZXJ2ZXJfdXJsLCAkaGFuZGxlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSW5zZXJ0IGEgbmV3IHJlY29yZCBiZWNhdXNlIHRoaXMgYXNzb2NpYXRpb24gd2Fzbid0CiAgICAgICAgICAgIC8vIGZvdW5kLgogICAgICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoJHRoaXMtPnNxbFsnc2V0X2Fzc29jJ11bJ2luc2VydF9hc3NvYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJHNlcnZlcl91cmwsICRoYW5kbGUsICRzZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNzdWVkLCAkbGlmZXRpbWUsICRhc3NvY190eXBlKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGJsb2JFbmNvZGUoJGJsb2IpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb2N0aWZ5KCRibG9iKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBibG9iRGVjb2RlKCRibG9iKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Vub2N0aWZ5KCRibG9iKTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/Server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBPcGVuSUQgc2VydmVyIHByb3RvY29sIGFuZCBsb2dpYy4KICogCiAqIE92ZXJ2aWV3CiAqCiAqIEFuIE9wZW5JRCBzZXJ2ZXIgbXVzdCBwZXJmb3JtIHRocmVlIHRhc2tzOgogKgogKiAgMS4gRXhhbWluZSB0aGUgaW5jb21pbmcgcmVxdWVzdCB0byBkZXRlcm1pbmUgaXRzIG5hdHVyZSBhbmQgdmFsaWRpdHkuCiAqICAyLiBNYWtlIGEgZGVjaXNpb24gYWJvdXQgaG93IHRvIHJlc3BvbmQgdG8gdGhpcyByZXF1ZXN0LgogKiAgMy4gRm9ybWF0IHRoZSByZXNwb25zZSBhY2NvcmRpbmcgdG8gdGhlIHByb3RvY29sLgogKiAKICogVGhlIGZpcnN0IGFuZCBsYXN0IG9mIHRoZXNlIHRhc2tzIG1heSBwZXJmb3JtZWQgYnkgdGhlIHtAbGluawogKiBBdXRoX09wZW5JRF9TZXJ2ZXI6OmRlY29kZVJlcXVlc3QoKX0gYW5kIHtAbGluawogKiBBdXRoX09wZW5JRF9TZXJ2ZXI6OmVuY29kZVJlc3BvbnNlfSBtZXRob2RzLiAgV2hvIGdldHMgdG8gZG8gdGhlCiAqIGludGVybWVkaWF0ZSB0YXNrIC0tIGRlY2lkaW5nIGhvdyB0byByZXNwb25kIHRvIHRoZSByZXF1ZXN0IC0tIHdpbGwKICogZGVwZW5kIG9uIHdoYXQgdHlwZSBvZiByZXF1ZXN0IGl0IGlzLgogKgogKiBJZiBpdCdzIGEgcmVxdWVzdCB0byBhdXRoZW50aWNhdGUgYSB1c2VyIChhICdjaGVja2lkX3NldHVwJyBvcgogKiAnY2hlY2tpZF9pbW1lZGlhdGUnIHJlcXVlc3QpLCB5b3UgbmVlZCB0byBkZWNpZGUgaWYgeW91IHdpbGwgYXNzZXJ0CiAqIHRoYXQgdGhpcyB1c2VyIG1heSBjbGFpbSB0aGUgaWRlbnRpdHkgaW4gcXVlc3Rpb24uICBFeGFjdGx5IGhvdyB5b3UKICogZG8gdGhhdCBpcyBhIG1hdHRlciBvZiBhcHBsaWNhdGlvbiBwb2xpY3ksIGJ1dCBpdCBnZW5lcmFsbHkKICogaW52b2x2ZXMgbWFraW5nIHN1cmUgdGhlIHVzZXIgaGFzIGFuIGFjY291bnQgd2l0aCB5b3VyIHN5c3RlbSBhbmQKICogaXMgbG9nZ2VkIGluLCBjaGVja2luZyB0byBzZWUgaWYgdGhhdCBpZGVudGl0eSBpcyBoZXJzIHRvIGNsYWltLAogKiBhbmQgdmVyaWZ5aW5nIHdpdGggdGhlIHVzZXIgdGhhdCBzaGUgZG9lcyBjb25zZW50IHRvIHJlbGVhc2luZyB0aGF0CiAqIGluZm9ybWF0aW9uIHRvIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIHJlcXVlc3QuCiAqCiAqIEV4YW1pbmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHtAbGluayBBdXRoX09wZW5JRF9DaGVja0lEUmVxdWVzdH0KICogb2JqZWN0LCBhbmQgaWYgYW5kIHdoZW4geW91J3ZlIGNvbWUgdG8gYSBkZWNpc2lvbiwgZm9ybSBhIHJlc3BvbnNlCiAqIGJ5IGNhbGxpbmcge0BsaW5rIEF1dGhfT3BlbklEX0NoZWNrSURSZXF1ZXN0OjphbnN3ZXIoKX0uCiAqCiAqIE90aGVyIHR5cGVzIG9mIHJlcXVlc3RzIHJlbGF0ZSB0byBlc3RhYmxpc2hpbmcgYXNzb2NpYXRpb25zIGJldHdlZW4KICogY2xpZW50IGFuZCBzZXJ2ZXIgYW5kIHZlcmlmaW5nIHRoZSBhdXRoZW50aWNpdHkgb2YgcHJldmlvdXMKICogY29tbXVuaWNhdGlvbnMuICB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyfSBjb250YWlucyBhbGwgdGhlIGxvZ2ljCiAqIGFuZCBkYXRhIG5lY2Vzc2FyeSB0byByZXNwb25kIHRvIHN1Y2ggcmVxdWVzdHM7IGp1c3QgcGFzcyBpdCB0bwogKiB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyOjpoYW5kbGVSZXF1ZXN0KCl9LgogKgogKiBPcGVuSUQgRXh0ZW5zaW9ucwogKiAKICogRG8geW91IHdhbnQgdG8gcHJvdmlkZSBvdGhlciBpbmZvcm1hdGlvbiBmb3IgeW91ciB1c2VycyBpbiBhZGRpdGlvbgogKiB0byBhdXRoZW50aWNhdGlvbj8gIFZlcnNpb24gMS4yIG9mIHRoZSBPcGVuSUQgcHJvdG9jb2wgYWxsb3dzCiAqIGNvbnN1bWVycyB0byBhZGQgZXh0ZW5zaW9ucyB0byB0aGVpciByZXF1ZXN0cy4gIEZvciBleGFtcGxlLCB3aXRoCiAqIHNpdGVzIHVzaW5nIHRoZSBTaW1wbGUgUmVnaXN0cmF0aW9uCiAqIEV4dGVuc2lvbgogKiAoaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLXNpbXBsZS1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLTFfMC5odG1sKSwKICogYSB1c2VyIGNhbiBhZ3JlZSB0byBoYXZlIHRoZWlyIG5pY2tuYW1lIGFuZCBlLW1haWwgYWRkcmVzcyBzZW50IHRvCiAqIGEgc2l0ZSB3aGVuIHRoZXkgc2lnbiB1cC4KICoKICogU2luY2UgZXh0ZW5zaW9ucyBkbyBub3QgY2hhbmdlIHRoZSB3YXkgT3BlbklEIGF1dGhlbnRpY2F0aW9uIHdvcmtzLAogKiBjb2RlIHRvIGhhbmRsZSBleHRlbnNpb24gcmVxdWVzdHMgbWF5IGJlIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbQogKiB0aGUge0BsaW5rIEF1dGhfT3BlbklEX1JlcXVlc3R9IGNsYXNzIGhlcmUuICBCdXQgeW91J2xsIGxpa2VseSB3YW50CiAqIGRhdGEgc2VudCBiYWNrIGJ5IHlvdXIgZXh0ZW5zaW9uIHRvIGJlIHNpZ25lZC4gIHtAbGluawogKiBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZX0gcHJvdmlkZXMgbWV0aG9kcyB3aXRoIHdoaWNoIHlvdSBjYW4gYWRkCiAqIGRhdGEgdG8gaXQgd2hpY2ggY2FuIGJlIHNpZ25lZCB3aXRoIHRoZSBvdGhlciBkYXRhIGluIHRoZSBPcGVuSUQKICogc2lnbmF0dXJlLgogKgogKiBGb3IgZXhhbXBsZToKICoKICogPHByZT4gIC8vIHdoZW4gcmVxdWVzdCBpcyBhIGNoZWNraWRfKiByZXF1ZXN0CiAqICAkcmVzcG9uc2UgPSAkcmVxdWVzdC0+YW5zd2VyKHRydWUpOwogKiAgLy8gdGhpcyB3aWxsIGEgc2lnbmVkICdvcGVuaWQuc3JlZy50aW1lem9uZScgcGFyYW1ldGVyIHRvIHRoZSByZXNwb25zZQogKiAgcmVzcG9uc2UuYWRkRmllbGQoJ3NyZWcnLCAndGltZXpvbmUnLCAnQW1lcmljYS9Mb3NfQW5nZWxlcycpPC9wcmU+CiAqCiAqIFN0b3JlcwogKgogKiBUaGUgT3BlbklEIHNlcnZlciBuZWVkcyB0byBtYWludGFpbiBzdGF0ZSBiZXR3ZWVuIHJlcXVlc3RzIGluIG9yZGVyCiAqIHRvIGZ1bmN0aW9uLiAgSXRzIG1lY2hhbmlzbSBmb3IgZG9pbmcgdGhpcyBpcyBjYWxsZWQgYSBzdG9yZS4gIFRoZQogKiBzdG9yZSBpbnRlcmZhY2UgaXMgZGVmaW5lZCBpbiBJbnRlcmZhY2UucGhwLiAgQWRkaXRpb25hbGx5LCBzZXZlcmFsCiAqIGNvbmNyZXRlIHN0b3JlIGltcGxlbWVudGF0aW9ucyBhcmUgcHJvdmlkZWQsIHNvIHRoYXQgbW9zdCBzaXRlcwogKiB3b24ndCBuZWVkIHRvIGltcGxlbWVudCBhIGN1c3RvbSBzdG9yZS4gIEZvciBhIHN0b3JlIGJhY2tlZCBieSBmbGF0CiAqIGZpbGVzIG9uIGRpc2ssIHNlZSB7QGxpbmsgQXV0aF9PcGVuSURfRmlsZVN0b3JlfS4gIEZvciBzdG9yZXMgYmFzZWQKICogb24gTXlTUUwsIFNRTGl0ZSwgb3IgUG9zdGdyZVNRTCwgc2VlIHRoZSB7QGxpbmsKICogQXV0aF9PcGVuSURfU1FMU3RvcmV9IHN1YmNsYXNzZXMuCiAqCiAqIFVwZ3JhZGluZwogKgogKiBUaGUga2V5cyBieSB3aGljaCBhIHNlcnZlciBsb29rcyB1cCBhc3NvY2lhdGlvbnMgaW4gaXRzIHN0b3JlIGhhdmUKICogY2hhbmdlZCBpbiB2ZXJzaW9uIDEuMiBvZiB0aGlzIGxpYnJhcnkuICBJZiB5b3VyIHN0b3JlIGhhcyBlbnRyaWVzCiAqIGNyZWF0ZWQgZnJvbSB2ZXJzaW9uIDEuMCBjb2RlLCB5b3Ugc2hvdWxkIGVtcHR5IGl0LgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogUmVxdWlyZWQgaW1wb3J0cwogKi8KcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL0Fzc29jaWF0aW9uLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvQ3J5cHRVdGlsLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvQmlnTWF0aC5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL0RpZmZpZUhlbGxtYW4ucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9LVkZvcm0ucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9UcnVzdFJvb3QucGhwIjsKcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC9TZXJ2ZXJSZXF1ZXN0LnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQvTWVzc2FnZS5waHAiOwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL05vbmNlLnBocCI7CgpkZWZpbmUoJ0FVVEhfT1BFTklEX0hUVFBfT0snLCAyMDApOwpkZWZpbmUoJ0FVVEhfT1BFTklEX0hUVFBfUkVESVJFQ1QnLCAzMDIpOwpkZWZpbmUoJ0FVVEhfT1BFTklEX0hUVFBfRVJST1InLCA0MDApOwoKLyoqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KZ2xvYmFsICRfQXV0aF9PcGVuSURfUmVxdWVzdF9Nb2RlczsKJF9BdXRoX09wZW5JRF9SZXF1ZXN0X01vZGVzID0gYXJyYXkoJ2NoZWNraWRfc2V0dXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hlY2tpZF9pbW1lZGlhdGUnKTsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCmRlZmluZSgnQXV0aF9PcGVuSURfRU5DT0RFX0tWRk9STScsICdrZnZvcm0nKTsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCmRlZmluZSgnQXV0aF9PcGVuSURfRU5DT0RFX1VSTCcsICdVUkwvcmVkaXJlY3QnKTsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCmRlZmluZSgnQXV0aF9PcGVuSURfRU5DT0RFX0hUTUxfRk9STScsICdIVE1MIGZvcm0nKTsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2lzRXJyb3IoJG9iaiwgJGNscyA9ICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcicpCnsKICAgIHJldHVybiBpc19hKCRvYmosICRjbHMpOwp9CgovKioKICogQW4gZXJyb3IgY2xhc3Mgd2hpY2ggZ2V0cyBpbnN0YW50aWF0ZWQgYW5kIHJldHVybmVkIHdoZW5ldmVyIGFuCiAqIE9wZW5JRCBwcm90b2NvbCBlcnJvciBvY2N1cnMuICBCZSBwcmVwYXJlZCB0byB1c2UgdGhpcyBpbiBwbGFjZSBvZgogKiBhbiBvcmRpbmFyeSBzZXJ2ZXIgcmVzcG9uc2UuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IgewogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UgPSBudWxsLCAkdGV4dCA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVmZXJlbmNlID0gbnVsbCwgJGNvbnRhY3QgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5tZXNzYWdlID0gJG1lc3NhZ2U7CiAgICAgICAgJHRoaXMtPnRleHQgPSAkdGV4dDsKICAgICAgICAkdGhpcy0+Y29udGFjdCA9ICRjb250YWN0OwogICAgICAgICR0aGlzLT5yZWZlcmVuY2UgPSAkcmVmZXJlbmNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJldHVyblRvKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm1lc3NhZ2UgJiYKICAgICAgICAgICAgJHRoaXMtPm1lc3NhZ2UtPmhhc0tleShBdXRoX09wZW5JRF9PUEVOSURfTlMsICdyZXR1cm5fdG8nKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5fdG8nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXR1cm5fdG8gVVJMIGZvciB0aGUgcmVxdWVzdCB3aGljaCBjYXVzZWQgdGhpcwogICAgICogZXJyb3IuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhc1JldHVyblRvKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFJldHVyblRvKCkgIT09IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGVzIHRoaXMgZXJyb3IncyByZXNwb25zZSBhcyBhIFVSTCBzdWl0YWJsZSBmb3IKICAgICAqIHJlZGlyZWN0aW9uLiAgSWYgdGhlIHJlc3BvbnNlIGhhcyBubyByZXR1cm5fdG8sIGFub3RoZXIKICAgICAqIEF1dGhfT3BlbklEX1NlcnZlckVycm9yIGlzIHJldHVybmVkLgogICAgICovCiAgICBmdW5jdGlvbiBlbmNvZGVUb1VSTCgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+bWVzc2FnZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRtc2cgPSAkdGhpcy0+dG9NZXNzYWdlKCk7CiAgICAgICAgcmV0dXJuICRtc2ctPnRvVVJMKCR0aGlzLT5nZXRSZXR1cm5UbygpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZXMgdGhlIHJlc3BvbnNlIHRvIGtleS12YWx1ZSBmb3JtLiAgVGhpcyBpcyBhCiAgICAgKiBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB1c2VkIHRvIHJlc3BvbmQgdG8gbWVzc2FnZXMgd2hpY2ggY2FtZQogICAgICogZGlyZWN0bHkgZnJvbSB0aGUgY29uc3VtZXIgYW5kIG5vdCB0aHJvdWdoIHRoZSB1c2VyLWFnZW50LiAgU2VlCiAgICAgKiB0aGUgT3BlbklEIHNwZWNpZmljYXRpb24uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuY29kZVRvS1ZGb3JtKCkKICAgIHsKICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfS1ZGb3JtOjpmcm9tQXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ21vZGUnID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkdGhpcy0+dG9TdHJpbmcoKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvRm9ybU1hcmt1cCgkZm9ybV90YWdfYXR0cnM9bnVsbCkKICAgIHsKICAgICAgICAkbXNnID0gJHRoaXMtPnRvTWVzc2FnZSgpOwogICAgICAgIHJldHVybiAkbXNnLT50b0Zvcm1NYXJrdXAoJHRoaXMtPmdldFJldHVyblRvKCksICRmb3JtX3RhZ19hdHRycyk7CiAgICB9CgogICAgZnVuY3Rpb24gdG9IVE1MKCRmb3JtX3RhZ19hdHRycz1udWxsKQogICAgewogICAgICAgIHJldHVybiBBdXRoX09wZW5JRDo6YXV0b1N1Ym1pdEhUTUwoCiAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9Gb3JtTWFya3VwKCRmb3JtX3RhZ19hdHRycykpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTWVzc2FnZSgpCiAgICB7CiAgICAgICAgLy8gR2VuZXJhdGUgYSBNZXNzYWdlIG9iamVjdCBmb3Igc2VuZGluZyB0byB0aGUgcmVseWluZyBwYXJ0eSwKICAgICAgICAvLyBhZnRlciBlbmNvZGluZy4KICAgICAgICAkbmFtZXNwYWNlID0gJHRoaXMtPm1lc3NhZ2UtPmdldE9wZW5JRE5hbWVzcGFjZSgpOwogICAgICAgICRyZXBseSA9IG5ldyBBdXRoX09wZW5JRF9NZXNzYWdlKCRuYW1lc3BhY2UpOwogICAgICAgICRyZXBseS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ21vZGUnLCAnZXJyb3InKTsKICAgICAgICAkcmVwbHktPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdlcnJvcicsICR0aGlzLT50b1N0cmluZygpKTsKCiAgICAgICAgaWYgKCR0aGlzLT5jb250YWN0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRyZXBseS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2NvbnRhY3QnLCAkdGhpcy0+Y29udGFjdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnJlZmVyZW5jZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVwbHktPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdyZWZlcmVuY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVmZXJlbmNlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVwbHk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIG9uZSBvZiBBdXRoX09wZW5JRF9FTkNPREVfVVJMLAogICAgICogQXV0aF9PcGVuSURfRU5DT0RFX0tWRk9STSwgb3IgbnVsbCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mCiAgICAgKiBlbmNvZGluZyBleHBlY3RlZCBmb3IgdGhpcyBlcnJvcidzIHBheWxvYWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHdoaWNoRW5jb2RpbmcoKQogICAgewogICAgICAgIGdsb2JhbCAkX0F1dGhfT3BlbklEX1JlcXVlc3RfTW9kZXM7CgogICAgICAgIGlmICgkdGhpcy0+aGFzUmV0dXJuVG8oKSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPm1lc3NhZ2UtPmlzT3BlbklEMigpICYmCiAgICAgICAgICAgICAgICAoc3RybGVuKCR0aGlzLT5lbmNvZGVUb1VSTCgpKSA+CiAgICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9PUEVOSUQxX1VSTF9MSU1JVCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9FTkNPREVfSFRNTF9GT1JNOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX0VOQ09ERV9VUkw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPm1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkbW9kZSA9ICR0aGlzLT5tZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kZScpOwoKICAgICAgICBpZiAoJG1vZGUpIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkbW9kZSwgJF9BdXRoX09wZW5JRF9SZXF1ZXN0X01vZGVzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX0VOQ09ERV9LVkZPUk07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoaXMgZXJyb3IgbWVzc2FnZS4KICAgICAqLwogICAgZnVuY3Rpb24gdG9TdHJpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+dGV4dCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnRleHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGdldF9jbGFzcygkdGhpcykgLiAiIGVycm9yIjsKICAgICAgICB9CiAgICB9Cn0KCi8qKgogKiBFcnJvciByZXR1cm5lZCBieSB0aGUgc2VydmVyIGNvZGUgd2hlbiBhIHJldHVybl90byBpcyBhYnNlbnQgZnJvbSBhCiAqIHJlcXVlc3QuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfTm9SZXR1cm5Ub0Vycm9yIGV4dGVuZHMgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IgewogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfTm9SZXR1cm5Ub0Vycm9yKCRtZXNzYWdlID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCA9ICJObyByZXR1cm5fdG8gVVJMIGF2YWlsYWJsZSIpCiAgICB7CiAgICAgICAgcGFyZW50OjpBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwgJHRleHQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gIk5vIHJldHVybl90byBhdmFpbGFibGUiOwogICAgfQp9CgovKioKICogQW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoZSByZXR1cm5fdG8gVVJMIGlzIG1hbGZvcm1lZC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9NYWxmb3JtZWRSZXR1cm5VUkwgZXh0ZW5kcyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvciB7CiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9NYWxmb3JtZWRSZXR1cm5VUkwoJG1lc3NhZ2UsICRyZXR1cm5fdG8pCiAgICB7CiAgICAgICAgJHRoaXMtPnJldHVybl90byA9ICRyZXR1cm5fdG87CiAgICAgICAgcGFyZW50OjpBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwgIm1hbGZvcm1lZCByZXR1cm5fdG8gVVJMIik7CiAgICB9Cn0KCi8qKgogKiBUaGlzIGVycm9yIGlzIHJldHVybmVkIHdoZW4gdGhlIHRydXN0X3Jvb3QgdmFsdWUgaXMgbWFsZm9ybWVkLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX01hbGZvcm1lZFRydXN0Um9vdCBleHRlbmRzIEF1dGhfT3BlbklEX1NlcnZlckVycm9yIHsKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX01hbGZvcm1lZFRydXN0Um9vdCgkbWVzc2FnZSA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgPSAiTWFsZm9ybWVkIHRydXN0IHJvb3QiKQogICAgewogICAgICAgIHBhcmVudDo6QXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsICR0ZXh0KTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICJNYWxmb3JtZWQgdHJ1c3Qgcm9vdCI7CiAgICB9Cn0KCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHNlcnZlciByZXF1ZXN0IGNsYXNzZXMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfUmVxdWVzdCB7CiAgICB2YXIgJG1vZGUgPSBudWxsOwp9CgovKioKICogQSByZXF1ZXN0IHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgYSBwcmV2aW91cyByZXNwb25zZS4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9DaGVja0F1dGhSZXF1ZXN0IGV4dGVuZHMgQXV0aF9PcGVuSURfUmVxdWVzdCB7CiAgICB2YXIgJG1vZGUgPSAiY2hlY2tfYXV0aGVudGljYXRpb24iOwogICAgdmFyICRpbnZhbGlkYXRlX2hhbmRsZSA9IG51bGw7CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQ2hlY2tBdXRoUmVxdWVzdCgkYXNzb2NfaGFuZGxlLCAkc2lnbmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW52YWxpZGF0ZV9oYW5kbGUgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5hc3NvY19oYW5kbGUgPSAkYXNzb2NfaGFuZGxlOwogICAgICAgICR0aGlzLT5zaWduZWQgPSAkc2lnbmVkOwogICAgICAgIGlmICgkaW52YWxpZGF0ZV9oYW5kbGUgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPmludmFsaWRhdGVfaGFuZGxlID0gJGludmFsaWRhdGVfaGFuZGxlOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+bmFtZXNwYWNlID0gQXV0aF9PcGVuSURfT1BFTklEMl9OUzsKICAgICAgICAkdGhpcy0+bWVzc2FnZSA9IG51bGw7CiAgICB9CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21NZXNzYWdlKCRtZXNzYWdlLCAkc2VydmVyPW51bGwpCiAgICB7CiAgICAgICAgJHJlcXVpcmVkX2tleXMgPSBhcnJheSgnYXNzb2NfaGFuZGxlJywgJ3NpZycsICdzaWduZWQnKTsKCiAgICAgICAgZm9yZWFjaCAoJHJlcXVpcmVkX2tleXMgYXMgJGspIHsKICAgICAgICAgICAgaWYgKCEkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJGspKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgIHNwcmludGYoIiVzIHJlcXVlc3QgbWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgJXMgZnJvbSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSIsICJjaGVja19hdXRoZW50aWNhdGlvbiIsICRrKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRhc3NvY19oYW5kbGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2Fzc29jX2hhbmRsZScpOwogICAgICAgICRzaWcgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZycpOwoKICAgICAgICAkc2lnbmVkX2xpc3QgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ3NpZ25lZCcpOwogICAgICAgICRzaWduZWRfbGlzdCA9IGV4cGxvZGUoIiwiLCAkc2lnbmVkX2xpc3QpOwoKICAgICAgICAkc2lnbmVkID0gJG1lc3NhZ2U7CiAgICAgICAgaWYgKCRzaWduZWQtPmhhc0tleShBdXRoX09wZW5JRF9PUEVOSURfTlMsICdtb2RlJykpIHsKICAgICAgICAgICAgJHNpZ25lZC0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ21vZGUnLCAnaWRfcmVzJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gbmV3IEF1dGhfT3BlbklEX0NoZWNrQXV0aFJlcXVlc3QoJGFzc29jX2hhbmRsZSwgJHNpZ25lZCk7CiAgICAgICAgJHJlc3VsdC0+bWVzc2FnZSA9ICRtZXNzYWdlOwogICAgICAgICRyZXN1bHQtPnNpZyA9ICRzaWc7CiAgICAgICAgJHJlc3VsdC0+aW52YWxpZGF0ZV9oYW5kbGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWRhdGVfaGFuZGxlJyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gYW5zd2VyKCRzaWduYXRvcnkpCiAgICB7CiAgICAgICAgJGlzX3ZhbGlkID0gJHNpZ25hdG9yeS0+dmVyaWZ5KCR0aGlzLT5hc3NvY19oYW5kbGUsICR0aGlzLT5zaWduZWQpOwoKICAgICAgICAvLyBOb3cgaW52YWxpZGF0ZSB0aGF0IGFzc29jX2hhbmRsZSBzbyBpdCB0aGlzIGNoZWNrQXV0aAogICAgICAgIC8vIG1lc3NhZ2UgY2Fubm90IGJlIHJlcGxheWVkLgogICAgICAgICRzaWduYXRvcnktPmludmFsaWRhdGUoJHRoaXMtPmFzc29jX2hhbmRsZSwgdHJ1ZSk7CiAgICAgICAgJHJlc3BvbnNlID0gbmV3IEF1dGhfT3BlbklEX1NlcnZlclJlc3BvbnNlKCR0aGlzKTsKCiAgICAgICAgJHJlc3BvbnNlLT5maWVsZHMtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfdmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRpc192YWxpZCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKCiAgICAgICAgaWYgKCR0aGlzLT5pbnZhbGlkYXRlX2hhbmRsZSkgewogICAgICAgICAgICAkYXNzb2MgPSAkc2lnbmF0b3J5LT5nZXRBc3NvY2lhdGlvbigkdGhpcy0+aW52YWxpZGF0ZV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICAgaWYgKCEkYXNzb2MpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW52YWxpZGF0ZV9oYW5kbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW52YWxpZGF0ZV9oYW5kbGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9Cn0KCi8qKgogKiBBIGNsYXNzIGltcGxlbWVudGluZyBwbGFpbnRleHQgc2VydmVyIHNlc3Npb25zLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1BsYWluVGV4dFNlcnZlclNlc3Npb24gewogICAgLyoqCiAgICAgKiBBbiBvYmplY3QgdGhhdCBrbm93cyBob3cgdG8gaGFuZGxlIGFzc29jaWF0aW9uIHJlcXVlc3RzIHdpdGggbm8KICAgICAqIHNlc3Npb24gdHlwZS4KICAgICAqLwogICAgdmFyICRzZXNzaW9uX3R5cGUgPSAnbm8tZW5jcnlwdGlvbic7CiAgICB2YXIgJG5lZWRzX21hdGggPSBmYWxzZTsKICAgIHZhciAkYWxsb3dlZF9hc3NvY190eXBlcyA9IGFycmF5KCdITUFDLVNIQTEnLCAnSE1BQy1TSEEyNTYnKTsKCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbU1lc3NhZ2UoJHVudXNlZF9yZXF1ZXN0KQogICAgewogICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfUGxhaW5UZXh0U2VydmVyU2Vzc2lvbigpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFuc3dlcigkc2VjcmV0KQogICAgewogICAgICAgIHJldHVybiBhcnJheSgnbWFjX2tleScgPT4gYmFzZTY0X2VuY29kZSgkc2VjcmV0KSk7CiAgICB9Cn0KCi8qKgogKiBBIGNsYXNzIGltcGxlbWVudGluZyBESC1TSEExIHNlcnZlciBzZXNzaW9ucy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb24gewogICAgLyoqCiAgICAgKiBBbiBvYmplY3QgdGhhdCBrbm93cyBob3cgdG8gaGFuZGxlIGFzc29jaWF0aW9uIHJlcXVlc3RzIHdpdGgKICAgICAqIHRoZSBEaWZmaWUtSGVsbG1hbiBzZXNzaW9uIHR5cGUuCiAgICAgKi8KCiAgICB2YXIgJHNlc3Npb25fdHlwZSA9ICdESC1TSEExJzsKICAgIHZhciAkbmVlZHNfbWF0aCA9IHRydWU7CiAgICB2YXIgJGFsbG93ZWRfYXNzb2NfdHlwZXMgPSBhcnJheSgnSE1BQy1TSEExJyk7CiAgICB2YXIgJGhhc2hfZnVuYyA9ICdBdXRoX09wZW5JRF9TSEExJzsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb24oJGRoLCAkY29uc3VtZXJfcHVia2V5KQogICAgewogICAgICAgICR0aGlzLT5kaCA9ICRkaDsKICAgICAgICAkdGhpcy0+Y29uc3VtZXJfcHVia2V5ID0gJGNvbnN1bWVyX3B1YmtleTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gZ2V0REgoJG1lc3NhZ2UpCiAgICB7CiAgICAgICAgJGRoX21vZHVsdXMgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2RoX21vZHVsdXMnKTsKICAgICAgICAkZGhfZ2VuID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsICdkaF9nZW4nKTsKCiAgICAgICAgaWYgKCgoJGRoX21vZHVsdXMgPT09IG51bGwpICYmICgkZGhfZ2VuICE9PSBudWxsKSkgfHwKICAgICAgICAgICAgKCgkZGhfZ2VuID09PSBudWxsKSAmJiAoJGRoX21vZHVsdXMgIT09IG51bGwpKSkgewoKICAgICAgICAgICAgaWYgKCRkaF9tb2R1bHVzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbWlzc2luZyA9ICdtb2R1bHVzJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRtaXNzaW5nID0gJ2dlbmVyYXRvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lmIG5vbi1kZWZhdWx0IG1vZHVsdXMgb3IgZ2VuZXJhdG9yIGlzICcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBsaWVkLCBib3RoIG11c3QgYmUgc3VwcGxpZWQuICBNaXNzaW5nICcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1pc3NpbmcpOwogICAgICAgIH0KCiAgICAgICAgJGxpYiA9IEF1dGhfT3BlbklEX2dldE1hdGhMaWIoKTsKCiAgICAgICAgaWYgKCRkaF9tb2R1bHVzIHx8ICRkaF9nZW4pIHsKICAgICAgICAgICAgJGRoX21vZHVsdXMgPSAkbGliLT5iYXNlNjRUb0xvbmcoJGRoX21vZHVsdXMpOwogICAgICAgICAgICAkZGhfZ2VuID0gJGxpYi0+YmFzZTY0VG9Mb25nKCRkaF9nZW4pOwogICAgICAgICAgICBpZiAoJGxpYi0+Y21wKCRkaF9tb2R1bHVzLCAwKSA9PSAwIHx8CiAgICAgICAgICAgICAgICAkbGliLT5jbXAoJGRoX2dlbiwgMCkgPT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigKICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UsICJGYWlsZWQgdG8gcGFyc2UgZGhfbW9kIG9yIGRoX2dlbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkaCA9IG5ldyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuKCRkaF9tb2R1bHVzLCAkZGhfZ2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGggPSBuZXcgQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hbigpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnN1bWVyX3B1YmtleSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaF9jb25zdW1lcl9wdWJsaWMnKTsKICAgICAgICBpZiAoJGNvbnN1bWVyX3B1YmtleSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1YmxpYyBrZXkgZm9yIERILVNIQTEgc2Vzc2lvbiAnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBmb3VuZCBpbiBxdWVyeScpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnN1bWVyX3B1YmtleSA9CiAgICAgICAgICAgICRsaWItPmJhc2U2NFRvTG9uZygkY29uc3VtZXJfcHVia2V5KTsKCiAgICAgICAgaWYgKCRjb25zdW1lcl9wdWJrZXkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaF9jb25zdW1lcl9wdWJsaWMgaXMgbm90IGJhc2U2NCIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5KCRkaCwgJGNvbnN1bWVyX3B1YmtleSk7CiAgICB9CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21NZXNzYWdlKCRtZXNzYWdlKQogICAgewogICAgICAgICRyZXN1bHQgPSBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb246OmdldERIKCRtZXNzYWdlKTsKCiAgICAgICAgaWYgKGlzX2EoJHJlc3VsdCwgJ0F1dGhfT3BlbklEX1NlcnZlckVycm9yJykpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGlzdCgkZGgsICRjb25zdW1lcl9wdWJrZXkpID0gJHJlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb24oJGRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnN1bWVyX3B1YmtleSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFuc3dlcigkc2VjcmV0KQogICAgewogICAgICAgICRsaWIgPSBBdXRoX09wZW5JRF9nZXRNYXRoTGliKCk7CiAgICAgICAgJG1hY19rZXkgPSAkdGhpcy0+ZGgtPnhvclNlY3JldCgkdGhpcy0+Y29uc3VtZXJfcHVia2V5LCAkc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmhhc2hfZnVuYyk7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICdkaF9zZXJ2ZXJfcHVibGljJyA9PgogICAgICAgICAgICAgICAgJGxpYi0+bG9uZ1RvQmFzZTY0KCR0aGlzLT5kaC0+cHVibGljKSwKICAgICAgICAgICAnZW5jX21hY19rZXknID0+IGJhc2U2NF9lbmNvZGUoJG1hY19rZXkpKTsKICAgIH0KfQoKLyoqCiAqIEEgY2xhc3MgaW1wbGVtZW50aW5nIERILVNIQTI1NiBzZXJ2ZXIgc2Vzc2lvbnMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hblNIQTI1NlNlcnZlclNlc3Npb24KICAgICAgZXh0ZW5kcyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb24gewoKICAgIHZhciAkc2Vzc2lvbl90eXBlID0gJ0RILVNIQTI1Nic7CiAgICB2YXIgJGhhc2hfZnVuYyA9ICdBdXRoX09wZW5JRF9TSEEyNTYnOwogICAgdmFyICRhbGxvd2VkX2Fzc29jX3R5cGVzID0gYXJyYXkoJ0hNQUMtU0hBMjU2Jyk7CgogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21NZXNzYWdlKCRtZXNzYWdlKQogICAgewogICAgICAgICRyZXN1bHQgPSBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMVNlcnZlclNlc3Npb246OmdldERIKCRtZXNzYWdlKTsKCiAgICAgICAgaWYgKGlzX2EoJHJlc3VsdCwgJ0F1dGhfT3BlbklEX1NlcnZlckVycm9yJykpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGlzdCgkZGgsICRjb25zdW1lcl9wdWJrZXkpID0gJHJlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMjU2U2VydmVyU2Vzc2lvbigkZGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25zdW1lcl9wdWJrZXkpOwogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIEEgcmVxdWVzdCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmVyLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0Fzc29jaWF0ZVJlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9SZXF1ZXN0IHsKICAgIHZhciAkbW9kZSA9ICJhc3NvY2lhdGUiOwoKICAgIHN0YXRpYyBmdW5jdGlvbiBnZXRTZXNzaW9uQ2xhc3NlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgJ25vLWVuY3J5cHRpb24nID0+ICdBdXRoX09wZW5JRF9QbGFpblRleHRTZXJ2ZXJTZXNzaW9uJywKICAgICAgICAgICdESC1TSEExJyA9PiAnQXV0aF9PcGVuSURfRGlmZmllSGVsbG1hblNIQTFTZXJ2ZXJTZXNzaW9uJywKICAgICAgICAgICdESC1TSEEyNTYnID0+ICdBdXRoX09wZW5JRF9EaWZmaWVIZWxsbWFuU0hBMjU2U2VydmVyU2Vzc2lvbicpOwogICAgfQoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0Fzc29jaWF0ZVJlcXVlc3QoJHNlc3Npb24sICRhc3NvY190eXBlKQogICAgewogICAgICAgICR0aGlzLT5zZXNzaW9uID0gJHNlc3Npb247CiAgICAgICAgJHRoaXMtPm5hbWVzcGFjZSA9IEF1dGhfT3BlbklEX09QRU5JRDJfTlM7CiAgICAgICAgJHRoaXMtPmFzc29jX3R5cGUgPSAkYXNzb2NfdHlwZTsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gZnJvbU1lc3NhZ2UoJG1lc3NhZ2UsICRzZXJ2ZXI9bnVsbCkKICAgIHsKICAgICAgICBpZiAoJG1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgICRzZXNzaW9uX3R5cGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nlc3Npb25fdHlwZScpOwoKICAgICAgICAgICAgaWYgKCRzZXNzaW9uX3R5cGUgPT0gJ25vLWVuY3J5cHRpb24nKSB7CiAgICAgICAgICAgICAgICAvLyBvaWR1dGlsLmxvZygnUmVjZWl2ZWQgT3BlbklEIDEgcmVxdWVzdCB3aXRoIGEgbm8tZW5jcnlwdGlvbiAnCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAnYXNzb2NhaXRpb24gc2Vzc2lvbiB0eXBlLiBDb250aW51aW5nIGFueXdheS4nKQogICAgICAgICAgICB9IGVsc2UgaWYgKCEkc2Vzc2lvbl90eXBlKSB7CiAgICAgICAgICAgICAgICAkc2Vzc2lvbl90eXBlID0gJ25vLWVuY3J5cHRpb24nOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNlc3Npb25fdHlwZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2Vzc2lvbl90eXBlJyk7CiAgICAgICAgICAgIGlmICgkc2Vzc2lvbl90eXBlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLAogICAgICAgICAgICAgICAgICAic2Vzc2lvbl90eXBlIG1pc3NpbmcgZnJvbSByZXF1ZXN0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRzZXNzaW9uX2NsYXNzID0gQXV0aF9PcGVuSUQ6OmFycmF5R2V0KAogICAgICAgICAgIEF1dGhfT3BlbklEX0Fzc29jaWF0ZVJlcXVlc3Q6OmdldFNlc3Npb25DbGFzc2VzKCksCiAgICAgICAgICAgJHNlc3Npb25fdHlwZSk7CgogICAgICAgIGlmICgkc2Vzc2lvbl9jbGFzcyA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIHNlc3Npb24gdHlwZSAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vzc2lvbl90eXBlKTsKICAgICAgICB9CgogICAgICAgICRzZXNzaW9uID0gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHNlc3Npb25fY2xhc3MsICdmcm9tTWVzc2FnZScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UpOwogICAgICAgIGlmIChpc19hKCRzZXNzaW9uLCAnQXV0aF9PcGVuSURfU2VydmVyRXJyb3InKSkgewogICAgICAgICAgICByZXR1cm4gJHNlc3Npb247CiAgICAgICAgfQoKICAgICAgICAkYXNzb2NfdHlwZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzb2NfdHlwZScsICdITUFDLVNIQTEnKTsKCiAgICAgICAgaWYgKCFpbl9hcnJheSgkYXNzb2NfdHlwZSwgJHNlc3Npb24tPmFsbG93ZWRfYXNzb2NfdHlwZXMpKSB7CiAgICAgICAgICAgICRmbXQgPSAiU2Vzc2lvbiB0eXBlICVzIGRvZXMgbm90IHN1cHBvcnQgYXNzb2NpYXRpb24gdHlwZSAlcyI7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsCiAgICAgICAgICAgICAgc3ByaW50ZigkZm10LCAkc2Vzc2lvbl90eXBlLCAkYXNzb2NfdHlwZSkpOwogICAgICAgIH0KCiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9Bc3NvY2lhdGVSZXF1ZXN0KCRzZXNzaW9uLCAkYXNzb2NfdHlwZSk7CiAgICAgICAgJG9iai0+bWVzc2FnZSA9ICRtZXNzYWdlOwogICAgICAgICRvYmotPm5hbWVzcGFjZSA9ICRtZXNzYWdlLT5nZXRPcGVuSUROYW1lc3BhY2UoKTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICBmdW5jdGlvbiBhbnN3ZXIoJGFzc29jKQogICAgewogICAgICAgICRyZXNwb25zZSA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZSgkdGhpcyk7CiAgICAgICAgJHJlc3BvbnNlLT5maWVsZHMtPnVwZGF0ZUFyZ3MoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICdleHBpcmVzX2luJyA9PiBzcHJpbnRmKCclZCcsICRhc3NvYy0+Z2V0RXhwaXJlc0luKCkpLAogICAgICAgICAgICAgICAgICdhc3NvY190eXBlJyA9PiAkdGhpcy0+YXNzb2NfdHlwZSwKICAgICAgICAgICAgICAgICAnYXNzb2NfaGFuZGxlJyA9PiAkYXNzb2MtPmhhbmRsZSkpOwoKICAgICAgICAkcmVzcG9uc2UtPmZpZWxkcy0+dXBkYXRlQXJncyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgJHRoaXMtPnNlc3Npb24tPmFuc3dlcigkYXNzb2MtPnNlY3JldCkpOwoKICAgICAgICBpZiAoISAoJHRoaXMtPnNlc3Npb24tPnNlc3Npb25fdHlwZSA9PSAnbm8tZW5jcnlwdGlvbicgCiAgICAgICAgICAgICAgICYmICR0aGlzLT5tZXNzYWdlLT5pc09wZW5JRDEoKSkpIHsKICAgICAgICAgICAgJHJlc3BvbnNlLT5maWVsZHMtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nlc3Npb25fdHlwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNlc3Npb25fdHlwZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGFuc3dlclVuc3VwcG9ydGVkKCR0ZXh0X21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJlZmVycmVkX2Fzc29jaWF0aW9uX3R5cGU9bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmVmZXJyZWRfc2Vzc2lvbl90eXBlPW51bGwpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5tZXNzYWdlLT5pc09wZW5JRDEoKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCR0aGlzLT5tZXNzYWdlKTsKICAgICAgICB9CgogICAgICAgICRyZXNwb25zZSA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZSgkdGhpcyk7CiAgICAgICAgJHJlc3BvbnNlLT5maWVsZHMtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3JfY29kZScsICd1bnN1cHBvcnRlZC10eXBlJyk7CiAgICAgICAgJHJlc3BvbnNlLT5maWVsZHMtPnNldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLCAkdGV4dF9tZXNzYWdlKTsKCiAgICAgICAgaWYgKCRwcmVmZXJyZWRfYXNzb2NpYXRpb25fdHlwZSkgewogICAgICAgICAgICAkcmVzcG9uc2UtPmZpZWxkcy0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzb2NfdHlwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZlcnJlZF9hc3NvY2lhdGlvbl90eXBlKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJlZmVycmVkX3Nlc3Npb25fdHlwZSkgewogICAgICAgICAgICAkcmVzcG9uc2UtPmZpZWxkcy0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2Vzc2lvbl90eXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJlZmVycmVkX3Nlc3Npb25fdHlwZSk7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZS0+Y29kZSA9IEFVVEhfT1BFTklEX0hUVFBfRVJST1I7CiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KfQoKLyoqCiAqIEEgcmVxdWVzdCB0byBjb25maXJtIHRoZSBpZGVudGl0eSBvZiBhIHVzZXIuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfQ2hlY2tJRFJlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9SZXF1ZXN0IHsKICAgIC8qKgogICAgICogUmV0dXJuLXRvIHZlcmlmaWNhdGlvbiBjYWxsYmFjay4gIERlZmF1bHQgaXMKICAgICAqIEF1dGhfT3BlbklEX3ZlcmlmeVJldHVyblRvIGZyb20gVHJ1c3RSb290LnBocC4KICAgICAqLwogICAgdmFyICR2ZXJpZnlSZXR1cm5UbyA9ICdBdXRoX09wZW5JRF92ZXJpZnlSZXR1cm5Ubyc7CgogICAgLyoqCiAgICAgKiBUaGUgbW9kZSBvZiB0aGlzIHJlcXVlc3QuCiAgICAgKi8KICAgIHZhciAkbW9kZSA9ICJjaGVja2lkX3NldHVwIjsgLy8gb3IgImNoZWNraWRfaW1tZWRpYXRlIgoKICAgIC8qKgogICAgICogV2hldGhlciB0aGlzIHJlcXVlc3QgaXMgZm9yIGltbWVkaWF0ZSBtb2RlLgogICAgICovCiAgICB2YXIgJGltbWVkaWF0ZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogVGhlIHRydXN0X3Jvb3QgdmFsdWUgZm9yIHRoaXMgcmVxdWVzdC4KICAgICAqLwogICAgdmFyICR0cnVzdF9yb290ID0gbnVsbDsKCiAgICAvKioKICAgICAqIFRoZSBPcGVuSUQgbmFtZXNwYWNlIGZvciB0aGlzIHJlcXVlc3QuCiAgICAgKiBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4wLjIKICAgICAqLwogICAgdmFyICRuYW1lc3BhY2U7CiAgICAKICAgIHN0YXRpYyBmdW5jdGlvbiBtYWtlKCRtZXNzYWdlLCAkaWRlbnRpdHksICRyZXR1cm5fdG8sICR0cnVzdF9yb290ID0gbnVsbCwKICAgICAgICAgICAgICAgICAgJGltbWVkaWF0ZSA9IGZhbHNlLCAkYXNzb2NfaGFuZGxlID0gbnVsbCwgJHNlcnZlciA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRzZXJ2ZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyIG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmV0dXJuX3RvICYmCiAgICAgICAgICAgICFBdXRoX09wZW5JRF9UcnVzdFJvb3Q6Ol9wYXJzZSgkcmV0dXJuX3RvKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX01hbGZvcm1lZFJldHVyblVSTCgkbWVzc2FnZSwgJHJldHVybl90byk7CiAgICAgICAgfQoKICAgICAgICAkciA9IG5ldyBBdXRoX09wZW5JRF9DaGVja0lEUmVxdWVzdCgkaWRlbnRpdHksICRyZXR1cm5fdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRydXN0X3Jvb3QsICRpbW1lZGlhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX2hhbmRsZSwgJHNlcnZlcik7CgogICAgICAgICRyLT5uYW1lc3BhY2UgPSAkbWVzc2FnZS0+Z2V0T3BlbklETmFtZXNwYWNlKCk7CiAgICAgICAgJHItPm1lc3NhZ2UgPSAkbWVzc2FnZTsKCiAgICAgICAgaWYgKCEkci0+dHJ1c3RSb290VmFsaWQoKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1VudHJ1c3RlZFJldHVyblVSTCgkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybl90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRydXN0X3Jvb3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkcjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfQ2hlY2tJRFJlcXVlc3QoJGlkZW50aXR5LCAkcmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRydXN0X3Jvb3QgPSBudWxsLCAkaW1tZWRpYXRlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NfaGFuZGxlID0gbnVsbCwgJHNlcnZlciA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhaW1lZF9pZCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm5hbWVzcGFjZSA9IEF1dGhfT3BlbklEX09QRU5JRDJfTlM7CiAgICAgICAgJHRoaXMtPmFzc29jX2hhbmRsZSA9ICRhc3NvY19oYW5kbGU7CiAgICAgICAgJHRoaXMtPmlkZW50aXR5ID0gJGlkZW50aXR5OwogICAgICAgIGlmICgkY2xhaW1lZF9pZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+Y2xhaW1lZF9pZCA9ICRpZGVudGl0eTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y2xhaW1lZF9pZCA9ICRjbGFpbWVkX2lkOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+cmV0dXJuX3RvID0gJHJldHVybl90bzsKICAgICAgICAkdGhpcy0+dHJ1c3Rfcm9vdCA9ICR0cnVzdF9yb290OwogICAgICAgICR0aGlzLT5zZXJ2ZXIgPSAkc2VydmVyOwoKICAgICAgICBpZiAoJGltbWVkaWF0ZSkgewogICAgICAgICAgICAkdGhpcy0+aW1tZWRpYXRlID0gdHJ1ZTsKICAgICAgICAgICAgJHRoaXMtPm1vZGUgPSAiY2hlY2tpZF9pbW1lZGlhdGUiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5pbW1lZGlhdGUgPSBmYWxzZTsKICAgICAgICAgICAgJHRoaXMtPm1vZGUgPSAiY2hlY2tpZF9zZXR1cCI7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGVxdWFscygkb3RoZXIpCiAgICB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgIChpc19hKCRvdGhlciwgJ0F1dGhfT3BlbklEX0NoZWNrSURSZXF1ZXN0JykpICYmCiAgICAgICAgICAgICAgICAoJHRoaXMtPm5hbWVzcGFjZSA9PSAkb3RoZXItPm5hbWVzcGFjZSkgJiYKICAgICAgICAgICAgICAgICgkdGhpcy0+YXNzb2NfaGFuZGxlID09ICRvdGhlci0+YXNzb2NfaGFuZGxlKSAmJgogICAgICAgICAgICAgICAgKCR0aGlzLT5pZGVudGl0eSA9PSAkb3RoZXItPmlkZW50aXR5KSAmJgogICAgICAgICAgICAgICAgKCR0aGlzLT5jbGFpbWVkX2lkID09ICRvdGhlci0+Y2xhaW1lZF9pZCkgJiYKICAgICAgICAgICAgICAgICgkdGhpcy0+cmV0dXJuX3RvID09ICRvdGhlci0+cmV0dXJuX3RvKSAmJgogICAgICAgICAgICAgICAgKCR0aGlzLT50cnVzdF9yb290ID09ICRvdGhlci0+dHJ1c3Rfcm9vdCkpOwogICAgfQoKICAgIC8qCiAgICAgKiBEb2VzIHRoZSByZWx5aW5nIHBhcnR5IHB1Ymxpc2ggdGhlIHJldHVybl90byBVUkwgZm9yIHRoaXMKICAgICAqIHJlc3BvbnNlIHVuZGVyIHRoZSByZWFsbT8gSXQgaXMgdXAgdG8gdGhlIHByb3ZpZGVyIHRvIHNldCBhCiAgICAgKiBwb2xpY3kgZm9yIHdoYXQga2luZHMgb2YgcmVhbG1zIHNob3VsZCBiZSBhbGxvd2VkLiBUaGlzCiAgICAgKiByZXR1cm5fdG8gVVJMIHZlcmlmaWNhdGlvbiByZWR1Y2VzIHZ1bG5lcmFiaWxpdHkgdG8gZGF0YS10aGVmdAogICAgICogYXR0YWNrcyBiYXNlZCBvbiBvcGVuIHByb3hpZXMsIGNvcnNzLXNpdGUtc2NyaXB0aW5nLCBvciBvcGVuCiAgICAgKiByZWRpcmVjdG9ycy4KICAgICAqCiAgICAgKiBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBhZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZQogICAgICogcmV0dXJuX3RvIFVSTCBtYXRjaGVzIHRoZSByZWFsbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlYWxtIHB1Ymxpc2hlcyBhIGRvY3VtZW50IHdpdGggdGhlCiAgICAgKiByZXR1cm5fdG8gVVJMIGxpc3RlZCwgZmFsc2UgaWYgbm90IG9yIGlmIGRpc2NvdmVyeSBmYWlscwogICAgICovCiAgICBmdW5jdGlvbiByZXR1cm5Ub1ZlcmlmaWVkKCkKICAgIHsKICAgIAkkZmV0Y2hlciA9IEF1dGhfWWFkaXNfWWFkaXM6OmdldEhUVFBGZXRjaGVyKCk7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCR0aGlzLT52ZXJpZnlSZXR1cm5UbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJHRoaXMtPnRydXN0X3Jvb3QsICR0aGlzLT5yZXR1cm5fdG8sICRmZXRjaGVyKSk7CiAgICB9CiAgICAKICAgIHN0YXRpYyBmdW5jdGlvbiBmcm9tTWVzc2FnZSgkbWVzc2FnZSwgJHNlcnZlcikKICAgIHsKICAgICAgICAkbW9kZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnbW9kZScpOwogICAgICAgICRpbW1lZGlhdGUgPSBudWxsOwoKICAgICAgICBpZiAoJG1vZGUgPT0gImNoZWNraWRfaW1tZWRpYXRlIikgewogICAgICAgICAgICAkaW1tZWRpYXRlID0gdHJ1ZTsKICAgICAgICAgICAgJG1vZGUgPSAiY2hlY2tpZF9pbW1lZGlhdGUiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpbW1lZGlhdGUgPSBmYWxzZTsKICAgICAgICAgICAgJG1vZGUgPSAiY2hlY2tpZF9zZXR1cCI7CiAgICAgICAgfQoKICAgICAgICAkcmV0dXJuX3RvID0gJG1lc3NhZ2UtPmdldEFyZyhBdXRoX09wZW5JRF9PUEVOSURfTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybl90bycpOwoKICAgICAgICBpZiAoKCRtZXNzYWdlLT5pc09wZW5JRDEoKSkgJiYKICAgICAgICAgICAgKCEkcmV0dXJuX3RvKSkgewogICAgICAgICAgICAkZm10ID0gIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgJ3JldHVybl90bycgZnJvbSBjaGVja2lkIHJlcXVlc3QiOwogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLCAkZm10KTsKICAgICAgICB9CgogICAgICAgICRpZGVudGl0eSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkZW50aXR5Jyk7CiAgICAgICAgJGNsYWltZWRfaWQgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ2NsYWltZWRfaWQnKTsKICAgICAgICBpZiAoJG1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgIGlmICgkaWRlbnRpdHkgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRzID0gIk9wZW5JRCAxIG1lc3NhZ2UgZGlkIG5vdCBjb250YWluIG9wZW5pZC5pZGVudGl0eSI7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKCRtZXNzYWdlLCAkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJGlkZW50aXR5ICYmICEkY2xhaW1lZF9pZCkgewogICAgICAgICAgICAgICAgJHMgPSAiT3BlbklEIDIuMCBtZXNzYWdlIGNvbnRhaW5lZCBvcGVuaWQuaWRlbnRpdHkgYnV0IG5vdCAiIC4KICAgICAgICAgICAgICAgICAgImNsYWltZWRfaWQiOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwgJHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCRjbGFpbWVkX2lkICYmICEkaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICRzID0gIk9wZW5JRCAyLjAgbWVzc2FnZSBjb250YWluZWQgb3BlbmlkLmNsYWltZWRfaWQgIiAuCiAgICAgICAgICAgICAgICAgICJidXQgbm90IGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsICRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVGhlcmUncyBhIGNhc2UgZm9yIG1ha2luZyBzZWxmLnRydXN0X3Jvb3QgYmUgYSBUcnVzdFJvb3QKICAgICAgICAvLyBoZXJlLiAgQnV0IGlmIFRydXN0Um9vdCBpc24ndCBjdXJyZW50bHkgcGFydCBvZiB0aGUKICAgICAgICAvLyAicHVibGljIiBBUEksIEknbSBub3Qgc3VyZSBpdCdzIHdvcnRoIGRvaW5nLgogICAgICAgIGlmICgkbWVzc2FnZS0+aXNPcGVuSUQxKCkpIHsKICAgICAgICAgICAgJHRydXN0X3Jvb3RfcGFyYW0gPSAndHJ1c3Rfcm9vdCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRydXN0X3Jvb3RfcGFyYW0gPSAncmVhbG0nOwogICAgICAgIH0KICAgICAgICAkdHJ1c3Rfcm9vdCA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRydXN0X3Jvb3RfcGFyYW0pOwogICAgICAgIGlmICghICR0cnVzdF9yb290KSB7CiAgICAgICAgICAgICR0cnVzdF9yb290ID0gJHJldHVybl90bzsKICAgICAgICB9CgogICAgICAgIGlmICghICRtZXNzYWdlLT5pc09wZW5JRDEoKSAmJiAKICAgICAgICAgICAgKCRyZXR1cm5fdG8gPT09IG51bGwpICYmCiAgICAgICAgICAgICgkdHJ1c3Rfcm9vdCA9PT0gbnVsbCkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwKICAgICAgICAgICAgICAib3BlbmlkLnJlYWxtIHJlcXVpcmVkIHdoZW4gb3BlbmlkLnJldHVybl90byBhYnNlbnQiKTsKICAgICAgICB9CgogICAgICAgICRhc3NvY19oYW5kbGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzb2NfaGFuZGxlJyk7CgogICAgICAgICRvYmogPSBBdXRoX09wZW5JRF9DaGVja0lEUmVxdWVzdDo6bWFrZSgkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkZW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJ1c3Rfcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltbWVkaWF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcnZlcik7CgogICAgICAgIGlmIChpc19hKCRvYmosICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcicpKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqOwogICAgICAgIH0KCiAgICAgICAgJG9iai0+Y2xhaW1lZF9pZCA9ICRjbGFpbWVkX2lkOwoKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICBmdW5jdGlvbiBpZFNlbGVjdCgpCiAgICB7CiAgICAgICAgLy8gSXMgdGhlIGlkZW50aWZpZXIgdG8gYmUgc2VsZWN0ZWQgYnkgdGhlIElEUD8KICAgICAgICAvLyBTbyBJRFBzIGRvbid0IGhhdmUgdG8gaW1wb3J0IHRoZSBjb25zdGFudAogICAgICAgIHJldHVybiAkdGhpcy0+aWRlbnRpdHkgPT0gQXV0aF9PcGVuSURfSURFTlRJRklFUl9TRUxFQ1Q7CiAgICB9CgogICAgZnVuY3Rpb24gdHJ1c3RSb290VmFsaWQoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnRydXN0X3Jvb3QpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdHIgPSBBdXRoX09wZW5JRF9UcnVzdFJvb3Q6Ol9wYXJzZSgkdGhpcy0+dHJ1c3Rfcm9vdCk7CiAgICAgICAgaWYgKCR0ciA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9NYWxmb3JtZWRUcnVzdFJvb3QoJHRoaXMtPm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50cnVzdF9yb290KTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cmV0dXJuX3RvICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9UcnVzdFJvb3Q6Om1hdGNoKCR0aGlzLT50cnVzdF9yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmV0dXJuX3RvKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNwb25kIHRvIHRoaXMgcmVxdWVzdC4gIFJldHVybiBlaXRoZXIgYW4KICAgICAqIHtAbGluayBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZX0gb3IKICAgICAqIHtAbGluayBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcn0uCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGFsbG93IEFsbG93IHRoaXMgdXNlciB0byBjbGFpbSB0aGlzIGlkZW50aXR5LCBhbmQKICAgICAqIGFsbG93IHRoZSBjb25zdW1lciB0byBoYXZlIHRoaXMgaW5mb3JtYXRpb24/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX3VybCBERVBSRUNBVEVELiAgUGFzc2luZyAkb3BfZW5kcG9pbnQgdG8KICAgICAqIHRoZSB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyfSBjb25zdHJ1Y3RvciBtYWtlcyB0aGlzIG9wdGlvbmFsLgogICAgICoKICAgICAqIFdoZW4gYW4gT3BlbklEIDEueCBpbW1lZGlhdGUgbW9kZSByZXF1ZXN0IGRvZXMgbm90IHN1Y2NlZWQsIGl0CiAgICAgKiBnZXRzIGJhY2sgYSBVUkwgd2hlcmUgdGhlIHJlcXVlc3QgbWF5IGJlIGNhcnJpZWQgb3V0IGluIGEKICAgICAqIG5vdC1zby1pbW1lZGlhdGUgZmFzaGlvbi4gIFBhc3MgbXkgVVJMIGluIGhlcmUgKHRoZSBmdWxseQogICAgICogcXVhbGlmaWVkIGFkZHJlc3Mgb2YgdGhpcyBzZXJ2ZXIncyBlbmRwb2ludCwgaS5lLgogICAgICogaHR0cDovL2V4YW1wbGUuY29tL3NlcnZlciksIGFuZCBJIHdpbGwgdXNlIGl0IGFzIGEgYmFzZSBmb3IgdGhlCiAgICAgKiBVUkwgZm9yIGEgbmV3IHJlcXVlc3QuCiAgICAgKgogICAgICogT3B0aW9uYWwgZm9yIHJlcXVlc3RzIHdoZXJlIHtAbGluayAkaW1tZWRpYXRlfSBpcyBmYWxzZSBvcgogICAgICogJGFsbG93IGlzIHRydWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWRlbnRpdHkgVGhlIE9QLWxvY2FsIGlkZW50aWZpZXIgdG8gYW5zd2VyIHdpdGguCiAgICAgKiBPbmx5IGZvciB1c2Ugd2hlbiB0aGUgcmVseWluZyBwYXJ0eSByZXF1ZXN0ZWQgaWRlbnRpZmllcgogICAgICogc2VsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYWltZWRfaWQgVGhlIGNsYWltZWQgaWRlbnRpZmllciB0byBhbnN3ZXIKICAgICAqIHdpdGgsIGZvciB1c2Ugd2l0aCBpZGVudGlmaWVyIHNlbGVjdGlvbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKICAgICAqIGNsYWltZWQgaWRlbnRpZmllciBhbmQgdGhlIE9QLWxvY2FsIGlkZW50aWZpZXIgZGlmZmVyLAogICAgICogaS5lLiB3aGVuIHRoZSBjbGFpbWVkX2lkIHVzZXMgZGVsZWdhdGlvbi4KICAgICAqCiAgICAgKiBJZiAkaWRlbnRpdHkgaXMgcHJvdmlkZWQgYnV0IHRoaXMgaXMgbm90LCAkY2xhaW1lZF9pZCB3aWxsCiAgICAgKiBkZWZhdWx0IHRvIHRoZSB2YWx1ZSBvZiAkaWRlbnRpdHkuICBXaGVuIGFuc3dlcmluZyByZXF1ZXN0cwogICAgICogdGhhdCBkaWQgbm90IGFzayBmb3IgaWRlbnRpZmllciBzZWxlY3Rpb24sIHRoZSByZXNwb25zZQogICAgICogJGNsYWltZWRfaWQgd2lsbCBkZWZhdWx0IHRvIHRoYXQgb2YgdGhlIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgbmV3IGluIE9wZW5JRCAyLjAuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBmdW5jdGlvbiBhbnN3ZXIoJGFsbG93LCAkc2VydmVyX3VybCA9IG51bGwsICRpZGVudGl0eSA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJGNsYWltZWRfaWQgPSBudWxsKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnJldHVybl90bykgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX05vUmV0dXJuVG9FcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkc2VydmVyX3VybCkgewogICAgICAgICAgICBpZiAoKCEkdGhpcy0+bWVzc2FnZS0+aXNPcGVuSUQxKCkpICYmCiAgICAgICAgICAgICAgICAoISR0aGlzLT5zZXJ2ZXItPm9wX2VuZHBvaW50KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcihudWxsLAogICAgICAgICAgICAgICAgICAic2VydmVyIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9wX2VuZHBvaW50IHRvICIgLgogICAgICAgICAgICAgICAgICAicmVzcG9uZCB0byBPcGVuSUQgMi4wIG1lc3NhZ2VzLiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2VydmVyX3VybCA9ICR0aGlzLT5zZXJ2ZXItPm9wX2VuZHBvaW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhbGxvdykgewogICAgICAgICAgICAkbW9kZSA9ICdpZF9yZXMnOwogICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICAkbW9kZSA9ICdpZF9yZXMnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZGUgPSAnY2FuY2VsJzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICAkbW9kZSA9ICdzZXR1cF9uZWVkZWQnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZGUgPSAnY2FuY2VsJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEkdGhpcy0+dHJ1c3RSb290VmFsaWQoKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1VudHJ1c3RlZFJldHVyblVSTChudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dHJ1c3Rfcm9vdCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSBuZXcgQXV0aF9PcGVuSURfU2VydmVyUmVzcG9uc2UoJHRoaXMpOwoKICAgICAgICBpZiAoJGNsYWltZWRfaWQgJiYKICAgICAgICAgICAgKCR0aGlzLT5tZXNzYWdlLT5pc09wZW5JRDEoKSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcihudWxsLAogICAgICAgICAgICAgICJjbGFpbWVkX2lkIGlzIG5ldyBpbiBPcGVuSUQgMi4wIGFuZCBub3QgIiAuCiAgICAgICAgICAgICAgImF2YWlsYWJsZSBmb3IgIi4kdGhpcy0+bmFtZXNwYWNlKTsKICAgICAgICB9CgogICAgICAgIGlmICgkaWRlbnRpdHkgJiYgISRjbGFpbWVkX2lkKSB7CiAgICAgICAgICAgICRjbGFpbWVkX2lkID0gJGlkZW50aXR5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhbGxvdykgewoKICAgICAgICAgICAgaWYgKCR0aGlzLT5pZGVudGl0eSA9PSBBdXRoX09wZW5JRF9JREVOVElGSUVSX1NFTEVDVCkgewogICAgICAgICAgICAgICAgaWYgKCEkaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAiVGhpcyByZXF1ZXN0IHVzZXMgSWRQLWRyaXZlbiBpZGVudGlmaWVyIHNlbGVjdGlvbi4gICIgLgogICAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHN1cHBseSBhbiBpZGVudGlmaWVyIGluIHRoZSByZXNwb25zZS4iKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcmVzcG9uc2VfaWRlbnRpdHkgPSAkaWRlbnRpdHk7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2VfY2xhaW1lZF9pZCA9ICRjbGFpbWVkX2lkOwoKICAgICAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+aWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgIGlmICgkaWRlbnRpdHkgJiYKICAgICAgICAgICAgICAgICAgICAoJHRoaXMtPmlkZW50aXR5ICE9ICRpZGVudGl0eSkpIHsKICAgICAgICAgICAgICAgICAgICAkZm10ID0gIlJlcXVlc3Qgd2FzIGZvciAlcywgY2Fubm90IHJlcGx5IHdpdGggaWRlbnRpdHkgJXMiOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IobnVsbCwKICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoJGZtdCwgJHRoaXMtPmlkZW50aXR5LCAkaWRlbnRpdHkpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcmVzcG9uc2VfaWRlbnRpdHkgPSAkdGhpcy0+aWRlbnRpdHk7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2VfY2xhaW1lZF9pZCA9ICR0aGlzLT5jbGFpbWVkX2lkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCRpZGVudGl0eSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IobnVsbCwKICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHJlcXVlc3Qgc3BlY2lmaWVkIG5vIGlkZW50aXR5IGFuZCAiIC4KICAgICAgICAgICAgICAgICAgICAgICJ5b3Ugc3VwcGxpZWQgIi4kaWRlbnRpdHkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXNwb25zZV9pZGVudGl0eSA9IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgoJHRoaXMtPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSAmJgogICAgICAgICAgICAgICAgKCRyZXNwb25zZV9pZGVudGl0eSA9PT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IobnVsbCwKICAgICAgICAgICAgICAgICAgIlJlcXVlc3Qgd2FzIGFuIE9wZW5JRCAxIHJlcXVlc3QsIHNvIHJlc3BvbnNlIG11c3QgIiAuCiAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGFuIGlkZW50aWZpZXIuIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT51cGRhdGVBcmdzKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgIGFycmF5KCdtb2RlJyA9PiAkbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5fdG8nID0+ICR0aGlzLT5yZXR1cm5fdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2Vfbm9uY2UnID0+IEF1dGhfT3BlbklEX21rTm9uY2UoKSkpOwoKICAgICAgICAgICAgaWYgKCEkdGhpcy0+bWVzc2FnZS0+aXNPcGVuSUQxKCkpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BfZW5kcG9pbnQnLCAkc2VydmVyX3VybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VfaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkZW50aXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlX2lkZW50aXR5KTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+bWVzc2FnZS0+aXNPcGVuSUQyKCkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmZpZWxkcy0+c2V0QXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYWltZWRfaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlX2NsYWltZWRfaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RlJywgJG1vZGUpOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5pbW1lZGlhdGUpIHsKICAgICAgICAgICAgICAgIGlmICgoJHRoaXMtPm1lc3NhZ2UtPmlzT3BlbklEMSgpKSAmJgogICAgICAgICAgICAgICAgICAgICghJHNlcnZlcl91cmwpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcihudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXBfdXJsIGlzIHJlcXVpcmVkIGZvciAkYWxsb3c9ZmFsc2UgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gT3BlbklEIDEueCBpbW1lZGlhdGUgbW9kZS4nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc2V0dXBfcmVxdWVzdCA9IG5ldyBBdXRoX09wZW5JRF9DaGVja0lEUmVxdWVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlkZW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dHJ1c3Rfcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jbGFpbWVkX2lkKTsKICAgICAgICAgICAgICAgICRzZXR1cF9yZXF1ZXN0LT5tZXNzYWdlID0gJHRoaXMtPm1lc3NhZ2U7CgogICAgICAgICAgICAgICAgJHNldHVwX3VybCA9ICRzZXR1cF9yZXF1ZXN0LT5lbmNvZGVUb1VSTCgkc2VydmVyX3VybCk7CgogICAgICAgICAgICAgICAgaWYgKCRzZXR1cF91cmwgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX05vUmV0dXJuVG9FcnJvcigpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9zZXR1cF91cmwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2V0dXBfdXJsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbmNvZGVUb1VSTCgkc2VydmVyX3VybCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5yZXR1cm5fdG8pIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9Ob1JldHVyblRvRXJyb3IoKTsKICAgICAgICB9CgogICAgICAgIC8vIEltcG9ydGVkIGZyb20gdGhlIGFsdGVybmF0ZSByZWFsaXR5IHdoZXJlIHRoZXNlIGNsYXNzZXMgYXJlCiAgICAgICAgLy8gdXNlZCBpbiBib3RoIHRoZSBjbGllbnQgYW5kIHNlcnZlciBjb2RlLCBzbyBSZXF1ZXN0cyBhcmUKICAgICAgICAvLyBFbmNvZGFibGUgdG9vLiAgVGhhdCdzIHJpZ2h0LCBjb2RlIGltcG9ydGVkIGZyb20gYWx0ZXJuYXRlCiAgICAgICAgLy8gcmVhbGl0aWVzIGFsbCBmb3IgdGhlIGxvdmUgb2YgeW91LCBpZF9yZXMvdXNlcl9zZXR1cF91cmwuCgogICAgICAgICRxID0gYXJyYXkoJ21vZGUnID0+ICR0aGlzLT5tb2RlLAogICAgICAgICAgICAgICAgICAgJ2lkZW50aXR5JyA9PiAkdGhpcy0+aWRlbnRpdHksCiAgICAgICAgICAgICAgICAgICAnY2xhaW1lZF9pZCcgPT4gJHRoaXMtPmNsYWltZWRfaWQsCiAgICAgICAgICAgICAgICAgICAncmV0dXJuX3RvJyA9PiAkdGhpcy0+cmV0dXJuX3RvKTsKCiAgICAgICAgaWYgKCR0aGlzLT50cnVzdF9yb290KSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bWVzc2FnZS0+aXNPcGVuSUQxKCkpIHsKICAgICAgICAgICAgICAgICRxWyd0cnVzdF9yb290J10gPSAkdGhpcy0+dHJ1c3Rfcm9vdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRxWydyZWFsbSddID0gJHRoaXMtPnRydXN0X3Jvb3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+YXNzb2NfaGFuZGxlKSB7CiAgICAgICAgICAgICRxWydhc3NvY19oYW5kbGUnXSA9ICR0aGlzLT5hc3NvY19oYW5kbGU7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSBuZXcgQXV0aF9PcGVuSURfTWVzc2FnZSgKICAgICAgICAgICAgJHRoaXMtPm1lc3NhZ2UtPmdldE9wZW5JRE5hbWVzcGFjZSgpKTsKICAgICAgICAkcmVzcG9uc2UtPnVwZGF0ZUFyZ3MoQXV0aF9PcGVuSURfT1BFTklEX05TLCAkcSk7CiAgICAgICAgcmV0dXJuICRyZXNwb25zZS0+dG9VUkwoJHNlcnZlcl91cmwpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENhbmNlbFVSTCgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+cmV0dXJuX3RvKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfTm9SZXR1cm5Ub0Vycm9yKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmltbWVkaWF0ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCBpcyBub3QgYW4gYXBwcm9wcmlhdGUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIGltbWVkaWF0ZSBtb2RlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy4iKTsKICAgICAgICB9CgogICAgICAgICRyZXNwb25zZSA9IG5ldyBBdXRoX09wZW5JRF9NZXNzYWdlKAogICAgICAgICAgICAkdGhpcy0+bWVzc2FnZS0+Z2V0T3BlbklETmFtZXNwYWNlKCkpOwogICAgICAgICRyZXNwb25zZS0+c2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ21vZGUnLCAnY2FuY2VsJyk7CiAgICAgICAgcmV0dXJuICRyZXNwb25zZS0+dG9VUkwoJHRoaXMtPnJldHVybl90byk7CiAgICB9Cn0KCi8qKgogKiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgcmVzcG9uc2UgdG8gYW4gT3BlbklEIHNlcnZlciByZXF1ZXN0LgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1NlcnZlclJlc3BvbnNlIHsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZSgkcmVxdWVzdCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5maWVsZHMgPSBuZXcgQXV0aF9PcGVuSURfTWVzc2FnZSgkdGhpcy0+cmVxdWVzdC0+bmFtZXNwYWNlKTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aGljaEVuY29kaW5nKCkKICAgIHsKICAgICAgZ2xvYmFsICRfQXV0aF9PcGVuSURfUmVxdWVzdF9Nb2RlczsKCiAgICAgICAgaWYgKGluX2FycmF5KCR0aGlzLT5yZXF1ZXN0LT5tb2RlLCAkX0F1dGhfT3BlbklEX1JlcXVlc3RfTW9kZXMpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+ZmllbGRzLT5pc09wZW5JRDIoKSAmJgogICAgICAgICAgICAgICAgKHN0cmxlbigkdGhpcy0+ZW5jb2RlVG9VUkwoKSkgPgogICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfT1BFTklEMV9VUkxfTElNSVQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQXV0aF9PcGVuSURfRU5DT0RFX0hUTUxfRk9STTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBBdXRoX09wZW5JRF9FTkNPREVfVVJMOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEX0VOQ09ERV9LVkZPUk07CiAgICAgICAgfQogICAgfQoKICAgIC8qCiAgICAgKiBSZXR1cm5zIHRoZSBmb3JtIG1hcmt1cCBmb3IgdGhpcyByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cgogICAgICovCiAgICBmdW5jdGlvbiB0b0Zvcm1NYXJrdXAoJGZvcm1fdGFnX2F0dHJzPW51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPnRvRm9ybU1hcmt1cCgkdGhpcy0+cmVxdWVzdC0+cmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvcm1fdGFnX2F0dHJzKTsKICAgIH0KCiAgICAvKgogICAgICogUmV0dXJucyBhbiBIVE1MIGRvY3VtZW50IGNvbnRhaW5pbmcgdGhlIGZvcm0gbWFya3VwIGZvciB0aGlzCiAgICAgKiByZXNwb25zZSB0aGF0IGF1dG9zdWJtaXRzIHdpdGggamF2YXNjcmlwdC4KICAgICAqLwogICAgZnVuY3Rpb24gdG9IVE1MKCkKICAgIHsKICAgICAgICByZXR1cm4gQXV0aF9PcGVuSUQ6OmF1dG9TdWJtaXRIVE1MKCR0aGlzLT50b0Zvcm1NYXJrdXAoKSk7CiAgICB9CgogICAgLyoKICAgICAqIFJldHVybnMgVHJ1ZSBpZiB0aGlzIHJlc3BvbnNlJ3MgZW5jb2RpbmcgaXMgRU5DT0RFX0hUTUxfRk9STS4KICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igc2VydmVyIGF1dGhvcnMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlbmRlckFzRm9ybSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53aGljaEVuY29kaW5nKCkgPT0gQXV0aF9PcGVuSURfRU5DT0RFX0hUTUxfRk9STTsKICAgIH0KCgogICAgZnVuY3Rpb24gZW5jb2RlVG9VUkwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT50b1VSTCgkdGhpcy0+cmVxdWVzdC0+cmV0dXJuX3RvKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRFeHRlbnNpb24oJGV4dGVuc2lvbl9yZXNwb25zZSkKICAgIHsKICAgICAgICAkZXh0ZW5zaW9uX3Jlc3BvbnNlLT50b01lc3NhZ2UoJHRoaXMtPmZpZWxkcyk7CiAgICB9CgogICAgZnVuY3Rpb24gbmVlZHNTaWduaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkcy0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RlJykgPT0gJ2lkX3Jlcyc7CiAgICB9CgogICAgZnVuY3Rpb24gZW5jb2RlVG9LVkZvcm0oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT50b0tWRm9ybSgpOwogICAgfQp9CgovKioKICogQSB3ZWItY2FwYWJsZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggeW91IGNhbiB1c2UgdG8gZ2VuZXJhdGUgYQogKiB1c2VyLWFnZW50IHJlc3BvbnNlLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1dlYlJlc3BvbnNlIHsKICAgIHZhciAkY29kZSA9IEFVVEhfT1BFTklEX0hUVFBfT0s7CiAgICB2YXIgJGJvZHkgPSAiIjsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9XZWJSZXNwb25zZSgkY29kZSA9IG51bGwsICRoZWFkZXJzID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRib2R5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGNvZGUpIHsKICAgICAgICAgICAgJHRoaXMtPmNvZGUgPSAkY29kZTsKICAgICAgICB9CgogICAgICAgIGlmICgkaGVhZGVycyAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+aGVhZGVycyA9ICRoZWFkZXJzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5oZWFkZXJzID0gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYm9keSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+Ym9keSA9ICRib2R5OwogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFJlc3BvbnNpYmxlIGZvciB0aGUgc2lnbmF0dXJlIG9mIHF1ZXJ5IGRhdGEgYW5kIHRoZSB2ZXJpZmljYXRpb24gb2YKICogT3BlbklEIHNpZ25hdHVyZSB2YWx1ZXMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU2lnbmF0b3J5IHsKCiAgICAvLyA9IDE0ICogMjQgKiA2MCAqIDYwOyAjIDE0IGRheXMsIGluIHNlY29uZHMKICAgIHZhciAkU0VDUkVUX0xJRkVUSU1FID0gMTIwOTYwMDsKCiAgICAvLyBrZXlzIGhhdmUgYSBib2d1cyBzZXJ2ZXIgVVJMIGluIHRoZW0gYmVjYXVzZSB0aGUgZmlsZXN0b3JlCiAgICAvLyByZWFsbHkgZG9lcyBleHBlY3QgdGhhdCBrZXkgdG8gYmUgYSBVUkwuICBUaGlzIHNlZW1zIGEgbGl0dGxlCiAgICAvLyBzaWxseSBmb3IgdGhlIHNlcnZlciBzdG9yZSwgc2luY2UgSSBleHBlY3QgdGhlcmUgdG8gYmUgb25seSBvbmUKICAgIC8vIHNlcnZlciBVUkwuCiAgICB2YXIgJG5vcm1hbF9rZXkgPSAnaHR0cDovL2xvY2FsaG9zdC98bm9ybWFsJzsKICAgIHZhciAkZHVtYl9rZXkgPSAnaHR0cDovL2xvY2FsaG9zdC98ZHVtYic7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc2lnbmF0b3J5IHVzaW5nIGEgZ2l2ZW4gc3RvcmUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1NpZ25hdG9yeSgkc3RvcmUpCiAgICB7CiAgICAgICAgLy8gYXNzZXJ0IHN0b3JlIGlzIG5vdCBOb25lCiAgICAgICAgJHRoaXMtPnN0b3JlID0gJHN0b3JlOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZ5LCB1c2luZyBhIGdpdmVuIGFzc29jaWF0aW9uIGhhbmRsZSwgYSBzaWduYXR1cmUgd2l0aAogICAgICogc2lnbmVkIGtleS12YWx1ZSBwYWlycyBmcm9tIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqLwogICAgZnVuY3Rpb24gdmVyaWZ5KCRhc3NvY19oYW5kbGUsICRtZXNzYWdlKQogICAgewogICAgICAgICRhc3NvYyA9ICR0aGlzLT5nZXRBc3NvY2lhdGlvbigkYXNzb2NfaGFuZGxlLCB0cnVlKTsKICAgICAgICBpZiAoISRhc3NvYykgewogICAgICAgICAgICAvLyBvaWR1dGlsLmxvZygiZmFpbGVkIHRvIGdldCBhc3NvYyB3aXRoIGhhbmRsZSAlciB0byB2ZXJpZnkgc2lnICVyIgogICAgICAgICAgICAvLyAgICAgICAgICAgICAlIChhc3NvY19oYW5kbGUsIHNpZykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXNzb2MtPmNoZWNrTWVzc2FnZVNpZ25hdHVyZSgkbWVzc2FnZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHJlc3BvbnNlLCBzaWduIHRoZSBmaWVsZHMgaW4gdGhlIHJlc3BvbnNlJ3MgJ3NpZ25lZCcKICAgICAqIGxpc3QsIGFuZCBpbnNlcnQgdGhlIHNpZ25hdHVyZSBpbnRvIHRoZSByZXNwb25zZS4KICAgICAqLwogICAgZnVuY3Rpb24gc2lnbigkcmVzcG9uc2UpCiAgICB7CiAgICAgICAgJHNpZ25lZF9yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkYXNzb2NfaGFuZGxlID0gJHJlc3BvbnNlLT5yZXF1ZXN0LT5hc3NvY19oYW5kbGU7CgogICAgICAgIGlmICgkYXNzb2NfaGFuZGxlKSB7CiAgICAgICAgICAgIC8vIG5vcm1hbCBtb2RlCiAgICAgICAgICAgICRhc3NvYyA9ICR0aGlzLT5nZXRBc3NvY2lhdGlvbigkYXNzb2NfaGFuZGxlLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICBpZiAoISRhc3NvYyB8fCAoJGFzc29jLT5nZXRFeHBpcmVzSW4oKSA8PSAwKSkgewogICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGR1bWIgbW9kZQogICAgICAgICAgICAgICAgJHNpZ25lZF9yZXNwb25zZS0+ZmllbGRzLT5zZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnZhbGlkYXRlX2hhbmRsZScsICRhc3NvY19oYW5kbGUpOwogICAgICAgICAgICAgICAgJGFzc29jX3R5cGUgPSAoJGFzc29jID8gJGFzc29jLT5hc3NvY190eXBlIDogJ0hNQUMtU0hBMScpOwoKICAgICAgICAgICAgICAgIGlmICgkYXNzb2MgJiYgKCRhc3NvYy0+Z2V0RXhwaXJlc0luKCkgPD0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW52YWxpZGF0ZSgkYXNzb2NfaGFuZGxlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGFzc29jID0gJHRoaXMtPmNyZWF0ZUFzc29jaWF0aW9uKHRydWUsICRhc3NvY190eXBlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGR1bWIgbW9kZS4KICAgICAgICAgICAgJGFzc29jID0gJHRoaXMtPmNyZWF0ZUFzc29jaWF0aW9uKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgJHNpZ25lZF9yZXNwb25zZS0+ZmllbGRzID0gJGFzc29jLT5zaWduTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2lnbmVkX3Jlc3BvbnNlLT5maWVsZHMpOwogICAgICAgIHJldHVybiAkc2lnbmVkX3Jlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogTWFrZSBhIG5ldyBhc3NvY2lhdGlvbi4KICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlQXNzb2NpYXRpb24oJGR1bWIgPSB0cnVlLCAkYXNzb2NfdHlwZSA9ICdITUFDLVNIQTEnKQogICAgewogICAgICAgICRzZWNyZXQgPSBBdXRoX09wZW5JRF9DcnlwdFV0aWw6OmdldEJ5dGVzKAogICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX2dldFNlY3JldFNpemUoJGFzc29jX3R5cGUpKTsKCiAgICAgICAgJHVuaXEgPSBiYXNlNjRfZW5jb2RlKEF1dGhfT3BlbklEX0NyeXB0VXRpbDo6Z2V0Qnl0ZXMoNCkpOwogICAgICAgICRoYW5kbGUgPSBzcHJpbnRmKCd7JXN9eyV4fXslc30nLCAkYXNzb2NfdHlwZSwgaW50dmFsKHRpbWUoKSksICR1bmlxKTsKCiAgICAgICAgJGFzc29jID0gQXV0aF9PcGVuSURfQXNzb2NpYXRpb246OmZyb21FeHBpcmVzSW4oCiAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+U0VDUkVUX0xJRkVUSU1FLCAkaGFuZGxlLCAkc2VjcmV0LCAkYXNzb2NfdHlwZSk7CgogICAgICAgIGlmICgkZHVtYikgewogICAgICAgICAgICAka2V5ID0gJHRoaXMtPmR1bWJfa2V5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+bm9ybWFsX2tleTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdG9yZS0+c3RvcmVBc3NvY2lhdGlvbigka2V5LCAkYXNzb2MpOwogICAgICAgIHJldHVybiAkYXNzb2M7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhc3NvY2lhdGlvbiBoYW5kbGUsIGdldCB0aGUgYXNzb2NpYXRpb24gZnJvbSB0aGUKICAgICAqIHN0b3JlLCBvciByZXR1cm4gYSBTZXJ2ZXJFcnJvciBvciBudWxsIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRBc3NvY2lhdGlvbigkYXNzb2NfaGFuZGxlLCAkZHVtYiwgJGNoZWNrX2V4cGlyYXRpb249dHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJGFzc29jX2hhbmRsZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNzb2NfaGFuZGxlIG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZHVtYikgewogICAgICAgICAgICAka2V5ID0gJHRoaXMtPmR1bWJfa2V5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+bm9ybWFsX2tleTsKICAgICAgICB9CgogICAgICAgICRhc3NvYyA9ICR0aGlzLT5zdG9yZS0+Z2V0QXNzb2NpYXRpb24oJGtleSwgJGFzc29jX2hhbmRsZSk7CgogICAgICAgIGlmICgoJGFzc29jICE9PSBudWxsKSAmJiAoJGFzc29jLT5nZXRFeHBpcmVzSW4oKSA8PSAwKSkgewogICAgICAgICAgICBpZiAoJGNoZWNrX2V4cGlyYXRpb24pIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zdG9yZS0+cmVtb3ZlQXNzb2NpYXRpb24oJGtleSwgJGFzc29jX2hhbmRsZSk7CiAgICAgICAgICAgICAgICAkYXNzb2MgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFzc29jOwogICAgfQoKICAgIC8qKgogICAgICogSW52YWxpZGF0ZSBhIGdpdmVuIGFzc29jaWF0aW9uIGhhbmRsZS4KICAgICAqLwogICAgZnVuY3Rpb24gaW52YWxpZGF0ZSgkYXNzb2NfaGFuZGxlLCAkZHVtYikKICAgIHsKICAgICAgICBpZiAoJGR1bWIpIHsKICAgICAgICAgICAgJGtleSA9ICR0aGlzLT5kdW1iX2tleTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAka2V5ID0gJHRoaXMtPm5vcm1hbF9rZXk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zdG9yZS0+cmVtb3ZlQXNzb2NpYXRpb24oJGtleSwgJGFzc29jX2hhbmRsZSk7CiAgICB9Cn0KCi8qKgogKiBFbmNvZGUgYW4ge0BsaW5rIEF1dGhfT3BlbklEX1NlcnZlclJlc3BvbnNlfSB0byBhbgogKiB7QGxpbmsgQXV0aF9PcGVuSURfV2ViUmVzcG9uc2V9LgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX0VuY29kZXIgewoKICAgIHZhciAkcmVzcG9uc2VGYWN0b3J5ID0gJ0F1dGhfT3BlbklEX1dlYlJlc3BvbnNlJzsKCiAgICAvKioKICAgICAqIEVuY29kZSBhbiB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyUmVzcG9uc2V9IGFuZCByZXR1cm4gYW4KICAgICAqIHtAbGluayBBdXRoX09wZW5JRF9XZWJSZXNwb25zZX0uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuY29kZSgkcmVzcG9uc2UpCiAgICB7CiAgICAgICAgJGNscyA9ICR0aGlzLT5yZXNwb25zZUZhY3Rvcnk7CgogICAgICAgICRlbmNvZGVfYXMgPSAkcmVzcG9uc2UtPndoaWNoRW5jb2RpbmcoKTsKICAgICAgICBpZiAoJGVuY29kZV9hcyA9PSBBdXRoX09wZW5JRF9FTkNPREVfS1ZGT1JNKSB7CiAgICAgICAgICAgICR3ciA9IG5ldyAkY2xzKG51bGwsIG51bGwsICRyZXNwb25zZS0+ZW5jb2RlVG9LVkZvcm0oKSk7CiAgICAgICAgICAgIGlmIChpc19hKCRyZXNwb25zZSwgJ0F1dGhfT3BlbklEX1NlcnZlckVycm9yJykpIHsKICAgICAgICAgICAgICAgICR3ci0+Y29kZSA9IEFVVEhfT1BFTklEX0hUVFBfRVJST1I7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCRlbmNvZGVfYXMgPT0gQXV0aF9PcGVuSURfRU5DT0RFX1VSTCkgewogICAgICAgICAgICAkbG9jYXRpb24gPSAkcmVzcG9uc2UtPmVuY29kZVRvVVJMKCk7CiAgICAgICAgICAgICR3ciA9IG5ldyAkY2xzKEFVVEhfT1BFTklEX0hUVFBfUkVESVJFQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdsb2NhdGlvbicgPT4gJGxvY2F0aW9uKSk7CiAgICAgICAgfSBlbHNlIGlmICgkZW5jb2RlX2FzID09IEF1dGhfT3BlbklEX0VOQ09ERV9IVE1MX0ZPUk0pIHsKICAgICAgICAgICR3ciA9IG5ldyAkY2xzKEFVVEhfT1BFTklEX0hUVFBfT0ssIGFycmF5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPnRvSFRNTCgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX0VuY29kaW5nRXJyb3IoJHJlc3BvbnNlKTsKICAgICAgICB9CiAgICAgICAgLyogQWxsb3cgdGhlIHJlc3BvbnNlIHRvIGNhcnJ5IGEgY3VzdG9tIGVycm9yIGNvZGUgKGV4OiBmb3IgQXNzb2NpYXRpb24gZXJyb3JzKSAqLwogICAgICAgIGlmKGlzc2V0KCRyZXNwb25zZS0+Y29kZSkpIHsKICAgICAgICAgICAgJHdyLT5jb2RlID0gJHJlc3BvbnNlLT5jb2RlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHdyOwogICAgfQp9CgovKioKICogQW4gZW5jb2RlciB3aGljaCBhbHNvIHRha2VzIGNhcmUgb2Ygc2lnbmluZyBmaWVsZHMgd2hlbiByZXF1aXJlZC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9TaWduaW5nRW5jb2RlciBleHRlbmRzIEF1dGhfT3BlbklEX0VuY29kZXIgewoKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX1NpZ25pbmdFbmNvZGVyKCRzaWduYXRvcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPnNpZ25hdG9yeSA9ICRzaWduYXRvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaWduIGFuIHtAbGluayBBdXRoX09wZW5JRF9TZXJ2ZXJSZXNwb25zZX0gYW5kIHJldHVybiBhbgogICAgICoge0BsaW5rIEF1dGhfT3BlbklEX1dlYlJlc3BvbnNlfS4KICAgICAqLwogICAgZnVuY3Rpb24gZW5jb2RlKCRyZXNwb25zZSkKICAgIHsKICAgICAgICAvLyB0aGUgaXNpbnN0YW5jZSBpcyBhIGJpdCBvZiBhIGtsdWRnZS4uLiBpdCBtZWFucyB0aGVyZSBpc24ndAogICAgICAgIC8vIHJlYWxseSBhbiBhZGFwdGVyIHRvIG1ha2UgdGhlIGludGVyZmFjZXMgcXVpdGUgbWF0Y2guCiAgICAgICAgaWYgKCFpc19hKCRyZXNwb25zZSwgJ0F1dGhfT3BlbklEX1NlcnZlckVycm9yJykgJiYKICAgICAgICAgICAgJHJlc3BvbnNlLT5uZWVkc1NpZ25pbmcoKSkgewoKICAgICAgICAgICAgaWYgKCEkdGhpcy0+c2lnbmF0b3J5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXN0IGhhdmUgYSBzdG9yZSB0byBzaWduIHJlcXVlc3QiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRyZXNwb25zZS0+ZmllbGRzLT5oYXNLZXkoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnc2lnJykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfQWxyZWFkeVNpZ25lZCgkcmVzcG9uc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5zaWduYXRvcnktPnNpZ24oJHJlc3BvbnNlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwYXJlbnQ6OmVuY29kZSgkcmVzcG9uc2UpOwogICAgfQp9CgovKioKICogRGVjb2RlIGFuIGluY29taW5nIHF1ZXJ5IGludG8gYW4gQXV0aF9PcGVuSURfUmVxdWVzdC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9EZWNvZGVyIHsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9EZWNvZGVyKCRzZXJ2ZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlcnZlciA9ICRzZXJ2ZXI7CgogICAgICAgICR0aGlzLT5oYW5kbGVycyA9IGFycmF5KAogICAgICAgICAgICAnY2hlY2tpZF9zZXR1cCcgPT4gJ0F1dGhfT3BlbklEX0NoZWNrSURSZXF1ZXN0JywKICAgICAgICAgICAgJ2NoZWNraWRfaW1tZWRpYXRlJyA9PiAnQXV0aF9PcGVuSURfQ2hlY2tJRFJlcXVlc3QnLAogICAgICAgICAgICAnY2hlY2tfYXV0aGVudGljYXRpb24nID0+ICdBdXRoX09wZW5JRF9DaGVja0F1dGhSZXF1ZXN0JywKICAgICAgICAgICAgJ2Fzc29jaWF0ZScgPT4gJ0F1dGhfT3BlbklEX0Fzc29jaWF0ZVJlcXVlc3QnCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBIVFRQIHF1ZXJ5IGluIGFuIGFycmF5IChrZXktdmFsdWUgcGFpcnMpLCBkZWNvZGUgaXQKICAgICAqIGludG8gYW4gQXV0aF9PcGVuSURfUmVxdWVzdCBvYmplY3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRlY29kZSgkcXVlcnkpCiAgICB7CiAgICAgICAgaWYgKCEkcXVlcnkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9IEF1dGhfT3BlbklEX01lc3NhZ2U6OmZyb21Qb3N0QXJncygkcXVlcnkpOwoKICAgICAgICBpZiAoJG1lc3NhZ2UgPT09IG51bGwpIHsKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogSXQncyB1c2VmdWwgdG8gaGF2ZSBhIE1lc3NhZ2UgYXR0YWNoZWQgdG8gYQogICAgICAgICAgICAgKiBQcm90b2NvbEVycm9yLCBzbyB3ZSBvdmVycmlkZSB0aGUgYmFkIG5zIHZhbHVlIHRvIGJ1aWxkCiAgICAgICAgICAgICAqIGEgTWVzc2FnZSBvdXQgb2YgaXQuICBLaW5kYSBrbHVkZ3ksIHNpbmNlIGl0J3MgbWFkZSBvZgogICAgICAgICAgICAgKiBsaWVzLCBidXQgdGhlIHBhcnRzIHRoYXQgYXJlbid0IGxpZXMgYXJlIG1vcmUgdXNlZnVsCiAgICAgICAgICAgICAqIHRoYW4gYSAnTm9uZScuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkb2xkX25zID0gJHF1ZXJ5WydvcGVuaWQubnMnXTsKCiAgICAgICAgICAgICRxdWVyeVsnb3BlbmlkLm5zJ10gPSBBdXRoX09wZW5JRF9PUEVOSUQyX05TOwogICAgICAgICAgICAkbWVzc2FnZSA9IEF1dGhfT3BlbklEX01lc3NhZ2U6OmZyb21Qb3N0QXJncygkcXVlcnkpOwogICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfT3BlbklEX1NlcnZlckVycm9yKAogICAgICAgICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgc3ByaW50ZigiSW52YWxpZCBPcGVuSUQgbmFtZXNwYWNlIFVSSTogJXMiLCAkb2xkX25zKSk7CiAgICAgICAgfQoKICAgICAgICAkbW9kZSA9ICRtZXNzYWdlLT5nZXRBcmcoQXV0aF9PcGVuSURfT1BFTklEX05TLCAnbW9kZScpOwogICAgICAgIGlmICghJG1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gbW9kZSB2YWx1ZSBpbiBtZXNzYWdlIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoQXV0aF9PcGVuSUQ6OmlzRmFpbHVyZSgkbW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kZS0+bWVzc2FnZSk7CiAgICAgICAgfQoKICAgICAgICAkaGFuZGxlckNscyA9IEF1dGhfT3BlbklEOjphcnJheUdldCgkdGhpcy0+aGFuZGxlcnMsICRtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kZWZhdWx0RGVjb2RlcigkbWVzc2FnZSkpOwoKICAgICAgICBpZiAoIWlzX2EoJGhhbmRsZXJDbHMsICdBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcicpKSB7CiAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkaGFuZGxlckNscywgJ2Zyb21NZXNzYWdlJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkbWVzc2FnZSwgJHRoaXMtPnNlcnZlcikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkaGFuZGxlckNsczsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGVmYXVsdERlY29kZXIoJG1lc3NhZ2UpCiAgICB7CiAgICAgICAgJG1vZGUgPSAkbWVzc2FnZS0+Z2V0QXJnKEF1dGhfT3BlbklEX09QRU5JRF9OUywgJ21vZGUnKTsKCiAgICAgICAgaWYgKEF1dGhfT3BlbklEOjppc0ZhaWx1cmUoJG1vZGUpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vZGUtPm1lc3NhZ2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX09wZW5JRF9TZXJ2ZXJFcnJvcigkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJVbnJlY29nbml6ZWQgT3BlbklEIG1vZGUgJXMiLCAkbW9kZSkpOwogICAgfQp9CgovKioKICogQW4gZXJyb3IgdGhhdCBpbmRpY2F0ZXMgYW4gZW5jb2RpbmcgcHJvYmxlbSBvY2N1cnJlZC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9FbmNvZGluZ0Vycm9yIHsKICAgIGZ1bmN0aW9uIEF1dGhfT3BlbklEX0VuY29kaW5nRXJyb3IoJHJlc3BvbnNlKQogICAgewogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgIH0KfQoKLyoqCiAqIEFuIGVycm9yIHRoYXQgaW5kaWNhdGVzIHRoYXQgYSByZXNwb25zZSB3YXMgYWxyZWFkeSBzaWduZWQuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfQWxyZWFkeVNpZ25lZCBleHRlbmRzIEF1dGhfT3BlbklEX0VuY29kaW5nRXJyb3IgewogICAgLy8gVGhpcyByZXNwb25zZSBpcyBhbHJlYWR5IHNpZ25lZC4KfQoKLyoqCiAqIEFuIGVycm9yIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGdpdmVuIHJldHVybl90byBpcyBub3QgdW5kZXIgdGhlCiAqIGdpdmVuIHRydXN0X3Jvb3QuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfVW50cnVzdGVkUmV0dXJuVVJMIGV4dGVuZHMgQXV0aF9PcGVuSURfU2VydmVyRXJyb3IgewogICAgZnVuY3Rpb24gQXV0aF9PcGVuSURfVW50cnVzdGVkUmV0dXJuVVJMKCRtZXNzYWdlLCAkcmV0dXJuX3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cnVzdF9yb290KQogICAgewogICAgICAgIHBhcmVudDo6QXV0aF9PcGVuSURfU2VydmVyRXJyb3IoJG1lc3NhZ2UsICJVbnRydXN0ZWQgcmV0dXJuX3RvIFVSTCIpOwogICAgICAgICR0aGlzLT5yZXR1cm5fdG8gPSAkcmV0dXJuX3RvOwogICAgICAgICR0aGlzLT50cnVzdF9yb290ID0gJHRydXN0X3Jvb3Q7CiAgICB9CgogICAgZnVuY3Rpb24gdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBzcHJpbnRmKCJyZXR1cm5fdG8gJXMgbm90IHVuZGVyIHRydXN0X3Jvb3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXR1cm5fdG8sICR0aGlzLT50cnVzdF9yb290KTsKICAgIH0KfQoKLyoqCiAqIEkgaGFuZGxlIHJlcXVlc3RzIGZvciBhbiBPcGVuSUQgc2VydmVyLgogKgogKiBTb21lIHR5cGVzIG9mIHJlcXVlc3RzICh0aG9zZSB3aGljaCBhcmUgbm90IGNoZWNraWQgcmVxdWVzdHMpIG1heQogKiBiZSBoYW5kZWQgdG8gbXkge0BsaW5rIGhhbmRsZVJlcXVlc3R9IG1ldGhvZCwgYW5kIEkgd2lsbCB0YWtlIGNhcmUKICogb2YgaXQgYW5kIHJldHVybiBhIHJlc3BvbnNlLgogKgogKiBGb3IgeW91ciBjb252ZW5pZW5jZSwgSSBhbHNvIHByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvIHtAbGluawogKiBBdXRoX09wZW5JRF9EZWNvZGVyOjpkZWNvZGUoKX0gYW5kIHtAbGluawogKiBBdXRoX09wZW5JRF9TaWduaW5nRW5jb2Rlcjo6ZW5jb2RlKCl9IHRocm91Z2ggbXkgbWV0aG9kcyB7QGxpbmsKICogZGVjb2RlUmVxdWVzdH0gYW5kIHtAbGluayBlbmNvZGVSZXNwb25zZX0uCiAqCiAqIEFsbCBteSBzdGF0ZSBpcyBlbmNhcHN1bGF0ZWQgaW4gYW4ge0BsaW5rIEF1dGhfT3BlbklEX09wZW5JRFN0b3JlfS4KICoKICogRXhhbXBsZToKICoKICogPHByZT4gJG9zZXJ2ZXIgPSBuZXcgQXV0aF9PcGVuSURfU2VydmVyKEF1dGhfT3BlbklEX0ZpbGVTdG9yZSgkZGF0YV9wYXRoKSwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vb3AiKTsKICogJHJlcXVlc3QgPSAkb3NlcnZlci0+ZGVjb2RlUmVxdWVzdCgpOwogKiBpZiAoaW5fYXJyYXkoJHJlcXVlc3QtPm1vZGUsIGFycmF5KCdjaGVja2lkX2ltbWVkaWF0ZScsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoZWNraWRfc2V0dXAnKSkpIHsKICogICAgIGlmICgkYXBwLT5pc0F1dGhvcml6ZWQoJHJlcXVlc3QtPmlkZW50aXR5LCAkcmVxdWVzdC0+dHJ1c3Rfcm9vdCkpIHsKICogICAgICAgICAkcmVzcG9uc2UgPSAkcmVxdWVzdC0+YW5zd2VyKHRydWUpOwogKiAgICAgfSBlbHNlIGlmICgkcmVxdWVzdC0+aW1tZWRpYXRlKSB7CiAqICAgICAgICAgJHJlc3BvbnNlID0gJHJlcXVlc3QtPmFuc3dlcihmYWxzZSk7CiAqICAgICB9IGVsc2UgewogKiAgICAgICAgICRhcHAtPnNob3dEZWNpZGVQYWdlKCRyZXF1ZXN0KTsKICogICAgICAgICByZXR1cm47CiAqICAgICB9CiAqIH0gZWxzZSB7CiAqICAgICAkcmVzcG9uc2UgPSAkb3NlcnZlci0+aGFuZGxlUmVxdWVzdCgkcmVxdWVzdCk7CiAqIH0KICoKICogJHdlYnJlc3BvbnNlID0gJG9zZXJ2ZXItPmVuY29kZSgkcmVzcG9uc2UpOzwvcHJlPgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1NlcnZlciB7CiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TZXJ2ZXIoJHN0b3JlLCAkb3BfZW5kcG9pbnQ9bnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RvcmUgPSAkc3RvcmU7CiAgICAgICAgJHRoaXMtPnNpZ25hdG9yeSA9IG5ldyBBdXRoX09wZW5JRF9TaWduYXRvcnkoJHRoaXMtPnN0b3JlKTsKICAgICAgICAkdGhpcy0+ZW5jb2RlciA9IG5ldyBBdXRoX09wZW5JRF9TaWduaW5nRW5jb2RlcigkdGhpcy0+c2lnbmF0b3J5KTsKICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBBdXRoX09wZW5JRF9EZWNvZGVyKCR0aGlzKTsKICAgICAgICAkdGhpcy0+b3BfZW5kcG9pbnQgPSAkb3BfZW5kcG9pbnQ7CiAgICAgICAgJHRoaXMtPm5lZ290aWF0b3IgPSBBdXRoX09wZW5JRF9nZXREZWZhdWx0TmVnb3RpYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlIGEgcmVxdWVzdC4gIEdpdmVuIGFuIHtAbGluayBBdXRoX09wZW5JRF9SZXF1ZXN0fSBvYmplY3QsCiAgICAgKiBjYWxsIHRoZSBhcHByb3ByaWF0ZSB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyfSBtZXRob2QgdG8KICAgICAqIHByb2Nlc3MgdGhlIHJlcXVlc3QgYW5kIGdlbmVyYXRlIGEgcmVzcG9uc2UuCiAgICAgKgogICAgICogQHBhcmFtIEF1dGhfT3BlbklEX1JlcXVlc3QgJHJlcXVlc3QgQW4ge0BsaW5rIEF1dGhfT3BlbklEX1JlcXVlc3R9CiAgICAgKiByZXR1cm5lZCBieSB7QGxpbmsgQXV0aF9PcGVuSURfU2VydmVyOjpkZWNvZGVSZXF1ZXN0KCl9LgogICAgICoKICAgICAqIEByZXR1cm4gQXV0aF9PcGVuSURfU2VydmVyUmVzcG9uc2UgJHJlc3BvbnNlIEEgcmVzcG9uc2Ugb2JqZWN0CiAgICAgKiBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgYSB1c2VyLWFnZW50IHJlcGx5LgogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRyZXF1ZXN0KQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAib3BlbmlkXyIgLiAkcmVxdWVzdC0+bW9kZSkpIHsKICAgICAgICAgICAgJGhhbmRsZXIgPSBhcnJheSgkdGhpcywgIm9wZW5pZF8iIC4gJHJlcXVlc3QtPm1vZGUpOwogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJGhhbmRsZXIsICYkcmVxdWVzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGNhbGxiYWNrIGZvciAnY2hlY2tfYXV0aGVudGljYXRpb24nIG1lc3NhZ2VzLgogICAgICovCiAgICBmdW5jdGlvbiBvcGVuaWRfY2hlY2tfYXV0aGVudGljYXRpb24oJHJlcXVlc3QpCiAgICB7CiAgICAgICAgcmV0dXJuICRyZXF1ZXN0LT5hbnN3ZXIoJHRoaXMtPnNpZ25hdG9yeSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgY2FsbGJhY2sgZm9yICdhc3NvY2lhdGUnIG1lc3NhZ2VzLgogICAgICovCiAgICBmdW5jdGlvbiBvcGVuaWRfYXNzb2NpYXRlKCRyZXF1ZXN0KQogICAgewogICAgICAgICRhc3NvY190eXBlID0gJHJlcXVlc3QtPmFzc29jX3R5cGU7CiAgICAgICAgJHNlc3Npb25fdHlwZSA9ICRyZXF1ZXN0LT5zZXNzaW9uLT5zZXNzaW9uX3R5cGU7CiAgICAgICAgaWYgKCR0aGlzLT5uZWdvdGlhdG9yLT5pc0FsbG93ZWQoJGFzc29jX3R5cGUsICRzZXNzaW9uX3R5cGUpKSB7CiAgICAgICAgICAgICRhc3NvYyA9ICR0aGlzLT5zaWduYXRvcnktPmNyZWF0ZUFzc29jaWF0aW9uKGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NfdHlwZSk7CiAgICAgICAgICAgIHJldHVybiAkcmVxdWVzdC0+YW5zd2VyKCRhc3NvYyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBzcHJpbnRmKCdBc3NvY2lhdGlvbiB0eXBlICVzIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCAnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nlc3Npb24gdHlwZSAlcycsICRhc3NvY190eXBlLCAkc2Vzc2lvbl90eXBlKTsKICAgICAgICAgICAgbGlzdCgkcHJlZmVycmVkX2Fzc29jX3R5cGUsICRwcmVmZXJyZWRfc2Vzc2lvbl90eXBlKSA9CiAgICAgICAgICAgICAgICAkdGhpcy0+bmVnb3RpYXRvci0+Z2V0QWxsb3dlZFR5cGUoKTsKICAgICAgICAgICAgcmV0dXJuICRyZXF1ZXN0LT5hbnN3ZXJVbnN1cHBvcnRlZCgkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJlZmVycmVkX2Fzc29jX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZlcnJlZF9zZXNzaW9uX3R5cGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZXMgYXMgcmVzcG9uc2UgaW4gdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCBzdWl0YWJsZSBmb3IKICAgICAqIHNlbmRpbmcgdG8gdGhlIHVzZXIgYWdlbnQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuY29kZVJlc3BvbnNlKCRyZXNwb25zZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZXItPmVuY29kZSgkcmVzcG9uc2UpOwogICAgfQoKICAgIC8qKgogICAgICogRGVjb2RlcyBhIHF1ZXJ5IGFyZ3MgYXJyYXkgaW50byB0aGUgYXBwcm9wcmlhdGUKICAgICAqIHtAbGluayBBdXRoX09wZW5JRF9SZXF1ZXN0fSBvYmplY3QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRlY29kZVJlcXVlc3QoJHF1ZXJ5PW51bGwpCiAgICB7CiAgICAgICAgaWYgKCRxdWVyeSA9PT0gbnVsbCkgewogICAgICAgICAgICAkcXVlcnkgPSBBdXRoX09wZW5JRDo6Z2V0UXVlcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRxdWVyeSk7CiAgICB9Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/ServerRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE9wZW5JRCBTZXJ2ZXIgUmVxdWVzdAogKgogKiBAc2VlIEF1dGhfT3BlbklEX1NlcnZlcgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogSW1wb3J0cwogKi8KcmVxdWlyZV9vbmNlICJBdXRoL09wZW5JRC5waHAiOwoKLyoqCiAqIE9iamVjdCB0aGF0IGhvbGRzIHRoZSBzdGF0ZSBvZiBhIHJlcXVlc3QgdG8gdGhlIE9wZW5JRCBzZXJ2ZXIKICoKICogV2l0aCBhY2Nlc3NvciBmdW5jdGlvbnMgdG8gZ2V0IGF0IHRoZSBpbnRlcm5hbCByZXF1ZXN0IGRhdGEuCiAqCiAqIEBzZWUgQXV0aF9PcGVuSURfU2VydmVyCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU2VydmVyUmVxdWVzdCB7CiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TZXJ2ZXJSZXF1ZXN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+bW9kZSA9IG51bGw7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/SQLiteStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBbiBTUUxpdGUgc3RvcmUuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KCi8qKgogKiBSZXF1aXJlIHRoZSBiYXNlIGNsYXNzIGZpbGUuCiAqLwpyZXF1aXJlX29uY2UgIkF1dGgvT3BlbklEL1NRTFN0b3JlLnBocCI7CgovKioKICogQW4gU1FMIHN0b3JlIHRoYXQgdXNlcyBTUUxpdGUgYXMgaXRzIGJhY2tlbmQuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU1FMaXRlU3RvcmUgZXh0ZW5kcyBBdXRoX09wZW5JRF9TUUxTdG9yZSB7CiAgICBmdW5jdGlvbiBzZXRTUUwoKQogICAgewogICAgICAgICR0aGlzLT5zcWxbJ25vbmNlX3RhYmxlJ10gPQogICAgICAgICAgICAiQ1JFQVRFIFRBQkxFICVzIChzZXJ2ZXJfdXJsIFZBUkNIQVIoMjA0NyksIHRpbWVzdGFtcCBJTlRFR0VSLCAiLgogICAgICAgICAgICAic2FsdCBDSEFSKDQwKSwgVU5JUVVFIChzZXJ2ZXJfdXJsLCB0aW1lc3RhbXAsIHNhbHQpKSI7CgogICAgICAgICR0aGlzLT5zcWxbJ2Fzc29jX3RhYmxlJ10gPQogICAgICAgICAgICAiQ1JFQVRFIFRBQkxFICVzIChzZXJ2ZXJfdXJsIFZBUkNIQVIoMjA0NyksIGhhbmRsZSBWQVJDSEFSKDI1NSksICIuCiAgICAgICAgICAgICJzZWNyZXQgQkxPQigxMjgpLCBpc3N1ZWQgSU5URUdFUiwgbGlmZXRpbWUgSU5URUdFUiwgIi4KICAgICAgICAgICAgImFzc29jX3R5cGUgVkFSQ0hBUig2NCksIFBSSU1BUlkgS0VZIChzZXJ2ZXJfdXJsLCBoYW5kbGUpKSI7CgogICAgICAgICR0aGlzLT5zcWxbJ3NldF9hc3NvYyddID0KICAgICAgICAgICAgIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KSI7CgogICAgICAgICR0aGlzLT5zcWxbJ2dldF9hc3NvY3MnXSA9CiAgICAgICAgICAgICJTRUxFQ1QgaGFuZGxlLCBzZWNyZXQsIGlzc3VlZCwgbGlmZXRpbWUsIGFzc29jX3R5cGUgRlJPTSAlcyAiLgogICAgICAgICAgICAiV0hFUkUgc2VydmVyX3VybCA9ID8iOwoKICAgICAgICAkdGhpcy0+c3FsWydnZXRfYXNzb2MnXSA9CiAgICAgICAgICAgICJTRUxFQ1QgaGFuZGxlLCBzZWNyZXQsIGlzc3VlZCwgbGlmZXRpbWUsIGFzc29jX3R5cGUgRlJPTSAlcyAiLgogICAgICAgICAgICAiV0hFUkUgc2VydmVyX3VybCA9ID8gQU5EIGhhbmRsZSA9ID8iOwoKICAgICAgICAkdGhpcy0+c3FsWydyZW1vdmVfYXNzb2MnXSA9CiAgICAgICAgICAgICJERUxFVEUgRlJPTSAlcyBXSEVSRSBzZXJ2ZXJfdXJsID0gPyBBTkQgaGFuZGxlID0gPyI7CgogICAgICAgICR0aGlzLT5zcWxbJ2FkZF9ub25jZSddID0KICAgICAgICAgICAgIklOU0VSVCBJTlRPICVzIChzZXJ2ZXJfdXJsLCB0aW1lc3RhbXAsIHNhbHQpIFZBTFVFUyAoPywgPywgPykiOwoKICAgICAgICAkdGhpcy0+c3FsWydjbGVhbl9ub25jZSddID0KICAgICAgICAgICAgIkRFTEVURSBGUk9NICVzIFdIRVJFIHRpbWVzdGFtcCA8ID8iOwoKICAgICAgICAkdGhpcy0+c3FsWydjbGVhbl9hc3NvYyddID0KICAgICAgICAgICAgIkRFTEVURSBGUk9NICVzIFdIRVJFIGlzc3VlZCArIGxpZmV0aW1lIDwgPyI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2FkZF9ub25jZSgkc2VydmVyX3VybCwgJHRpbWVzdGFtcCwgJHNhbHQpCiAgICB7CiAgICAgICAgLy8gUEVDTCBTUUxpdGUgZXh0ZW5zaW9ucyAxLjAuMyBhbmQgb2xkZXIgKDEuMC4zIGlzIHRoZQogICAgICAgIC8vIGN1cnJlbnQgcmVsZWFzZSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcpIGhhdmUgYSBicm9rZW4KICAgICAgICAvLyBzcWxpdGVfZXNjYXBlX3N0cmluZyBmdW5jdGlvbiB0aGF0IGJyZWFrcyB3aGVuIHBhc3NlZCB0aGUKICAgICAgICAvLyBlbXB0eSBzdHJpbmcuIFByZWZpeGluZyBhbGwgc3RyaW5ncyB3aXRoIG9uZSBjaGFyYWN0ZXIKICAgICAgICAvLyBrZWVwcyB0aGVtIHVuaXF1ZSBhbmQgYXZvaWRzIHRoaXMgYnVnLiBUaGUgbm9uY2UgdGFibGUgaXMKICAgICAgICAvLyB3cml0ZS1vbmx5LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVwZGF0aW5nIG90aGVyCiAgICAgICAgLy8gZnVuY3Rpb25zIHdpdGggdGhpcyBzYW1lIGJhZCBoYWNrLgogICAgICAgIHJldHVybiBwYXJlbnQ6Ol9hZGRfbm9uY2UoJ3gnIC4gJHNlcnZlcl91cmwsICR0aW1lc3RhbXAsICRzYWx0KTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/SQLStore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTUUwtYmFja2VkIE9wZW5JRCBzdG9yZXMuCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvSW50ZXJmYWNlLnBocCc7CnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvTm9uY2UucGhwJzsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQucGhwJzsKCi8qKgogKiBAYWNjZXNzIHByaXZhdGUKICovCnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQvTm9uY2UucGhwJzsKCi8qKgogKiBUaGlzIGlzIHRoZSBwYXJlbnQgY2xhc3MgZm9yIHRoZSBTUUwgc3RvcmVzLCB3aGljaCBjb250YWlucyB0aGUKICogbG9naWMgY29tbW9uIHRvIGFsbCBvZiB0aGUgU1FMIHN0b3Jlcy4KICoKICogVGhlIHRhYmxlIG5hbWVzIHVzZWQgYXJlIGRldGVybWluZWQgYnkgdGhlIGNsYXNzIHZhcmlhYmxlcwogKiBhc3NvY2lhdGlvbnNfdGFibGVfbmFtZSBhbmQgbm9uY2VzX3RhYmxlX25hbWUuICBUbyBjaGFuZ2UgdGhlIG5hbWUKICogb2YgdGhlIHRhYmxlcyB1c2VkLCBwYXNzIG5ldyB0YWJsZSBuYW1lcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4KICoKICogVG8gY3JlYXRlIHRoZSB0YWJsZXMgd2l0aCB0aGUgcHJvcGVyIHNjaGVtYSwgc2VlIHRoZSBjcmVhdGVUYWJsZXMKICogbWV0aG9kLgogKgogKiBUaGlzIGNsYXNzIHNob3VsZG4ndCBiZSB1c2VkIGRpcmVjdGx5LiAgVXNlIG9uZSBvZiBpdHMgc3ViY2xhc3NlcwogKiBpbnN0ZWFkLCBhcyB0aG9zZSBjb250YWluIHRoZSBjb2RlIG5lY2Vzc2FyeSB0byB1c2UgYSBzcGVjaWZpYwogKiBkYXRhYmFzZS4gIElmIHlvdSdyZSBhbiBPcGVuSUQgaW50ZWdyYXRvciBhbmQgeW91J2QgbGlrZSB0byBjcmVhdGUKICogYW4gU1FMLWRyaXZlbiBzdG9yZSB0aGF0IHdyYXBzIGFuIGFwcGxpY2F0aW9uJ3MgZGF0YWJhc2UKICogYWJzdHJhY3Rpb24sIGJlIHN1cmUgdG8gY3JlYXRlIGEgc3ViY2xhc3Mgb2YKICoge0BsaW5rIEF1dGhfT3BlbklEX0RhdGFiYXNlQ29ubmVjdGlvbn0gdGhhdCBjYWxscyB0aGUgYXBwbGljYXRpb24ncwogKiBkYXRhYmFzZSBhYnN0cmFjdGlvbiBjYWxscy4gIFRoZW4sIHBhc3MgYW4gaW5zdGFuY2Ugb2YgeW91ciBuZXcKICogZGF0YWJhc2UgY29ubmVjdGlvbiBjbGFzcyB0byB5b3VyIFNRTFN0b3JlIHN1YmNsYXNzIGNvbnN0cnVjdG9yLgogKgogKiBBbGwgbWV0aG9kcyBvdGhlciB0aGFuIHRoZSBjb25zdHJ1Y3RvciBhbmQgY3JlYXRlVGFibGVzIHNob3VsZCBiZQogKiBjb25zaWRlcmVkIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU1FMU3RvcmUgZXh0ZW5kcyBBdXRoX09wZW5JRF9PcGVuSURTdG9yZSB7CgogICAgLyoqCiAgICAgKiBUaGlzIGNyZWF0ZXMgYSBuZXcgU1FMU3RvcmUgaW5zdGFuY2UuICBJdCByZXF1aXJlcyBhbgogICAgICogZXN0YWJsaXNoZWQgZGF0YWJhc2UgY29ubmVjdGlvbiBiZSBnaXZlbiB0byBpdCwgYW5kIGl0IGFsbG93cwogICAgICogb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB0YWJsZSBuYW1lcy4KICAgICAqCiAgICAgKiBAcGFyYW0gY29ubmVjdGlvbiAkY29ubmVjdGlvbiBUaGlzIG11c3QgYmUgYW4gZXN0YWJsaXNoZWQKICAgICAqIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGUgU1FMU3RvcmUKICAgICAqIHN1YmNsYXNzIHlvdSdyZSB1c2luZy4gIFRoaXMgbXVzdCBlaXRoZXIgYmUgYW4gUEVBUiBEQgogICAgICogY29ubmVjdGlvbiBoYW5kbGUgb3IgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZgogICAgICogQXV0aF9PcGVuSURfRGF0YWJhc2VDb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBhc3NvY2lhdGlvbnNfdGFibGU6IFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvCiAgICAgKiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSB0YWJsZSB1c2VkIGZvciBzdG9yaW5nIGFzc29jaWF0aW9ucy4KICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdvaWRfYXNzb2NpYXRpb25zJy4KICAgICAqCiAgICAgKiBAcGFyYW0gbm9uY2VzX3RhYmxlOiBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5CiAgICAgKiB0aGUgbmFtZSBvZiB0aGUgdGFibGUgdXNlZCBmb3Igc3RvcmluZyBub25jZXMuICBUaGUgZGVmYXVsdAogICAgICogdmFsdWUgaXMgJ29pZF9ub25jZXMnLgogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TUUxTdG9yZSgkY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbnNfdGFibGUgPSBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vbmNlc190YWJsZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc29jaWF0aW9uc190YWJsZV9uYW1lID0gIm9pZF9hc3NvY2lhdGlvbnMiOwogICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSA9ICJvaWRfbm9uY2VzIjsKCiAgICAgICAgLy8gQ2hlY2sgdGhlIGNvbm5lY3Rpb24gb2JqZWN0IHR5cGUgdG8gYmUgc3VyZSBpdCdzIGEgUEVBUgogICAgICAgIC8vIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAgICAgICAgaWYgKCEoaXNfb2JqZWN0KCRjb25uZWN0aW9uKSAmJgogICAgICAgICAgICAgIChpc19zdWJjbGFzc19vZigkY29ubmVjdGlvbiwgJ2RiX2NvbW1vbicpIHx8CiAgICAgICAgICAgICAgIGlzX3N1YmNsYXNzX29mKCRjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aF9vcGVuaWRfZGF0YWJhc2Vjb25uZWN0aW9uJykpKSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJBdXRoX09wZW5JRF9TUUxTdG9yZSBleHBlY3RlZCBQRUFSIGNvbm5lY3Rpb24gIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCAoZ290ICIuZ2V0X2NsYXNzKCRjb25uZWN0aW9uKS4iKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSAkY29ubmVjdGlvbjsKCiAgICAgICAgLy8gQmUgc3VyZSB0byBzZXQgdGhlIGZldGNoIG1vZGUgc28gdGhlIHJlc3VsdHMgYXJlIGtleWVkIG9uCiAgICAgICAgLy8gY29sdW1uIG5hbWUgaW5zdGVhZCBvZiBjb2x1bW4gaW5kZXguICBUaGlzIGlzIGEgUEVBUgogICAgICAgIC8vIGNvbnN0YW50LCBzbyBvbmx5IHRyeSB0byB1c2UgaXQgaWYgUEVBUiBpcyBwcmVzZW50LiAgTm90ZQogICAgICAgIC8vIHRoYXQgQXV0aF9PcGVuaWRfRGF0YWJhc2Vjb25uZWN0aW9uIGluc3RhbmNlcyBuZWVkIG5vdAogICAgICAgIC8vIGltcGxlbWVudCA6OnNldEZldGNoTW9kZSBmb3IgdGhpcyByZWFzb24uCiAgICAgICAgaWYgKGlzX3N1YmNsYXNzX29mKCR0aGlzLT5jb25uZWN0aW9uLCAnZGJfY29tbW9uJykpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPnNldEZldGNoTW9kZShEQl9GRVRDSE1PREVfQVNTT0MpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhc3NvY2lhdGlvbnNfdGFibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc29jaWF0aW9uc190YWJsZV9uYW1lID0gJGFzc29jaWF0aW9uc190YWJsZTsKICAgICAgICB9CgogICAgICAgIGlmICgkbm9uY2VzX3RhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSA9ICRub25jZXNfdGFibGU7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bWF4X25vbmNlX2FnZSA9IDYgKiA2MCAqIDYwOwoKICAgICAgICAvLyBCZSBzdXJlIHRvIHJ1biB0aGUgZGF0YWJhc2UgcXVlcmllcyB3aXRoIGF1dG8tY29tbWl0IG1vZGUKICAgICAgICAvLyB0dXJuZWQgT0ZGLCBiZWNhdXNlIHdlIHdhbnQgZXZlcnkgZnVuY3Rpb24gdG8gcnVuIGluIGEKICAgICAgICAvLyB0cmFuc2FjdGlvbiwgaW1wbGljaXRseS4gIEFzIGEgcnVsZSwgbWV0aG9kcyBuYW1lZCB3aXRoIGEKICAgICAgICAvLyBsZWFkaW5nIHVuZGVyc2NvcmUgd2lsbCBOT1QgY29udHJvbCB0cmFuc2FjdGlvbiBiZWhhdmlvci4KICAgICAgICAvLyBDYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgd2lsbCB3b3JyeSBhYm91dCB0cmFuc2FjdGlvbnMuCiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24tPmF1dG9Db21taXQoZmFsc2UpOwoKICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgU1FMIHN0cmluZ3MgYXJyYXkuCiAgICAgICAgJHRoaXMtPnNxbCA9IGFycmF5KCk7CgogICAgICAgIC8vIENhbGwgdGhpcyBtZXRob2QgKHdoaWNoIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMpCiAgICAgICAgLy8gdG8gcG9wdWxhdGUgdGhlICR0aGlzLT5zcWwgYXJyYXkgd2l0aCBTUUwgc3RyaW5ncy4KICAgICAgICAkdGhpcy0+c2V0U1FMKCk7CgogICAgICAgIC8vIFZlcmlmeSB0aGF0IGFsbCByZXF1aXJlZCBTUUwgc3RhdGVtZW50cyBoYXZlIGJlZW4gc2V0LCBhbmQKICAgICAgICAvLyByYWlzZSBhbiBlcnJvciBpZiBhbnkgZXhwZWN0ZWQgU1FMIHN0cmluZ3Mgd2VyZSBlaXRoZXIKICAgICAgICAvLyBhYnNlbnQgb3IgZW1wdHkuCiAgICAgICAgbGlzdCgkbWlzc2luZywgJGVtcHR5KSA9ICR0aGlzLT5fdmVyaWZ5U1FMKCk7CgogICAgICAgIGlmICgkbWlzc2luZykgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJFeHBlY3RlZCBrZXlzIGluIFNRTCBxdWVyeSBsaXN0OiAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsb2RlKCIsICIsICRtaXNzaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJGVtcHR5KSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoIlNRTCBsaXN0IGtleXMgaGF2ZSBubyBTUUwgc3RyaW5nczogIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbG9kZSgiLCAiLCAkZW1wdHkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCB0YWJsZSBuYW1lcyB0byBxdWVyaWVzLgogICAgICAgICR0aGlzLT5fZml4U1FMKCk7CiAgICB9CgogICAgZnVuY3Rpb24gdGFibGVFeGlzdHMoJHRhYmxlX25hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+aXNFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5xdWVyeSgKICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJTRUxFQ1QgKiBGUk9NICVzIExJTUlUIDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlX25hbWUpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgJHZhbHVlIGNvbnN0aXR1dGVzIGEgZGF0YWJhc2UgZXJyb3I7IHJldHVybnMKICAgICAqIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgZnVuY3Rpb24gaXNFcnJvcigkdmFsdWUpCiAgICB7CiAgICAgICAgLyogQHZhciAkZ0NtcyBDbXNPYmplY3QgKi8KICAgICAgICBnbG9iYWwgJGdDbXM7CiAgICAgICAgLyogQHZhciAkZGIgcGVhcl9BRE9Db25uZWN0aW9uICovCiAgICAgICAgJGRiID0mICRnQ21zLT5HZXREYigpOwogICAgICAgICRpc0Vycm9yID0gJGRiLT5FcnJvck5vKCkgIT0gMDsKICAgICAgICBPcGVuSUQ6OkxvZygiU1FMU3RvcmU6aXNFcnJvciAiLnByaW50X3IoJHZhbHVlLCBUUlVFKS4iID0gIi4kZGItPkVycm9yTm8oKS4iICIuICBnZXRfY2xhc3MoJGRiKSk7CiAgICAgICAgLy9yZXR1cm4gUEVBUjo6aXNFcnJvcigkdmFsdWUpOwogICAgICAgIC8vIFRPRE8gQ2hlY2sgaWYgUEVBUiBpcyBwcmVzZW50LCBpZiBub3QgcmVxdWlyZSBjbGFzcyB3aXRoIHRoaXMgc3RhdGljIG1ldGhvZCBpbiBpdAogICAgICAgIHJldHVybiAkaXNFcnJvcjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgcXVlcnkgcmVzdWx0IHRvIGEgYm9vbGVhbi4gIElmIHRoZSByZXN1bHQgaXMgYQogICAgICogZGF0YWJhc2UgZXJyb3IgYWNjb3JkaW5nIHRvICR0aGlzLT5pc0Vycm9yKCksIHRoaXMgcmV0dXJucwogICAgICogZmFsc2U7IG90aGVyd2lzZSwgdGhpcyByZXR1cm5zIHRydWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc3VsdFRvQm9vbCgkb2JqKQogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNFcnJvcigkb2JqKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIGlzCiAgICAgKiBjYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yIHRvIHNldCB2YWx1ZXMgaW4gJHRoaXMtPnNxbCwgd2hpY2ggaXMKICAgICAqIGFuIGFycmF5IGtleWVkIG9uIHNxbCBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBzZXRTUUwoKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogUmVzZXRzIHRoZSBzdG9yZSBieSByZW1vdmluZyBhbGwgcmVjb3JkcyBmcm9tIHRoZSBzdG9yZSdzCiAgICAgKiB0YWJsZXMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc2V0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoc3ByaW50ZigiREVMRVRFIEZST00gJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSkpOwoKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoc3ByaW50ZigiREVMRVRFIEZST00gJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ub25jZXNfdGFibGVfbmFtZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF92ZXJpZnlTUUwoKQogICAgewogICAgICAgICRtaXNzaW5nID0gYXJyYXkoKTsKICAgICAgICAkZW1wdHkgPSBhcnJheSgpOwoKICAgICAgICAkcmVxdWlyZWRfc3FsX2tleXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uY2VfdGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NvY190YWJsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldF9hc3NvYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9hc3NvYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9hc3NvY3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZW1vdmVfYXNzb2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgZm9yZWFjaCAoJHJlcXVpcmVkX3NxbF9rZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICR0aGlzLT5zcWwpKSB7CiAgICAgICAgICAgICAgICAkbWlzc2luZ1tdID0gJGtleTsKICAgICAgICAgICAgfSBlbHNlIGlmICghJHRoaXMtPnNxbFska2V5XSkgewogICAgICAgICAgICAgICAgJGVtcHR5W10gPSAka2V5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoJG1pc3NpbmcsICRlbXB0eSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2ZpeFNRTCgpCiAgICB7CiAgICAgICAgJHJlcGxhY2VtZW50cyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdGhpcy0+bm9uY2VzX3RhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlzJyA9PiBhcnJheSgnbm9uY2VfdGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZF9ub25jZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xlYW5fbm9uY2UnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdGhpcy0+YXNzb2NpYXRpb25zX3RhYmxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlzJyA9PiBhcnJheSgnYXNzb2NfdGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldF9hc3NvYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2Fzc29jJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfYXNzb2NzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZW1vdmVfYXNzb2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsZWFuX2Fzc29jJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICBmb3JlYWNoICgkcmVwbGFjZW1lbnRzIGFzICRpdGVtKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRpdGVtWyd2YWx1ZSddOwogICAgICAgICAgICAka2V5cyA9ICRpdGVtWydrZXlzJ107CgogICAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAkaykgewogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0aGlzLT5zcWxbJGtdKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zcWxbJGtdIGFzICRwYXJ0X2tleSA9PiAkcGFydF92YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3FsWyRrXVskcGFydF9rZXldID0gc3ByaW50ZigkcGFydF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zcWxbJGtdID0gc3ByaW50ZigkdGhpcy0+c3FsWyRrXSwgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBibG9iRGVjb2RlKCRibG9iKQogICAgewogICAgICAgIHJldHVybiAkYmxvYjsKICAgIH0KCiAgICBmdW5jdGlvbiBibG9iRW5jb2RlKCRzdHIpCiAgICB7CiAgICAgICAgcmV0dXJuICRzdHI7CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlVGFibGVzKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+YXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAkbiA9ICR0aGlzLT5jcmVhdGVfbm9uY2VfdGFibGUoKTsKICAgICAgICAkYSA9ICR0aGlzLT5jcmVhdGVfYXNzb2NfdGFibGUoKTsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+YXV0b0NvbW1pdChmYWxzZSk7CgogICAgICAgIGlmICgkbiAmJiAkYSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZV9ub25jZV90YWJsZSgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+dGFibGVFeGlzdHMoJHRoaXMtPm5vbmNlc190YWJsZV9uYW1lKSkgewogICAgICAgICAgICAkciA9ICR0aGlzLT5jb25uZWN0aW9uLT5xdWVyeSgkdGhpcy0+c3FsWydub25jZV90YWJsZSddKTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHRUb0Jvb2woJHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVfYXNzb2NfdGFibGUoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnRhYmxlRXhpc3RzKCR0aGlzLT5hc3NvY2lhdGlvbnNfdGFibGVfbmFtZSkpIHsKICAgICAgICAgICAgJHIgPSAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoJHRoaXMtPnNxbFsnYXNzb2NfdGFibGUnXSk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0VG9Cb29sKCRyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3NldF9hc3NvYygkc2VydmVyX3VybCwgJGhhbmRsZSwgJHNlY3JldCwgJGlzc3VlZCwKICAgICAgICAgICAgICAgICAgICAgICAgJGxpZmV0aW1lLCAkYXNzb2NfdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbm5lY3Rpb24tPnF1ZXJ5KCR0aGlzLT5zcWxbJ3NldF9hc3NvYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmVyX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzc3VlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaWZldGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY190eXBlKSk7CiAgICB9CgogICAgZnVuY3Rpb24gc3RvcmVBc3NvY2lhdGlvbigkc2VydmVyX3VybCwgJGFzc29jaWF0aW9uKQogICAgewogICAgICAgIGlmICgkdGhpcy0+cmVzdWx0VG9Cb29sKCR0aGlzLT5fc2V0X2Fzc29jKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbi0+aGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ibG9iRW5jb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbi0+c2VjcmV0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NpYXRpb24tPmlzc3VlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2NpYXRpb24tPmxpZmV0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc3NvY2lhdGlvbi0+YXNzb2NfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5jb21taXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cm9sbGJhY2soKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2dldF9hc3NvYygkc2VydmVyX3VybCwgJGhhbmRsZSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldFJvdygkdGhpcy0+c3FsWydnZXRfYXNzb2MnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkc2VydmVyX3VybCwgJGhhbmRsZSkpOwogICAgICAgIGlmICgkdGhpcy0+aXNFcnJvcigkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2dldF9hc3NvY3MoJHNlcnZlcl91cmwpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5jb25uZWN0aW9uLT5nZXRBbGwoJHRoaXMtPnNxbFsnZ2V0X2Fzc29jcyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRzZXJ2ZXJfdXJsKSk7CgogICAgICAgIGlmICgkdGhpcy0+aXNFcnJvcigkcmVzdWx0KSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRoYW5kbGUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5fZ2V0X2Fzc29jKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKSA9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cmVzdWx0VG9Cb29sKCR0aGlzLT5jb25uZWN0aW9uLT5xdWVyeSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNxbFsncmVtb3ZlX2Fzc29jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRzZXJ2ZXJfdXJsLCAkaGFuZGxlKSkpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5jb21taXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cm9sbGJhY2soKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFzc29jaWF0aW9uKCRzZXJ2ZXJfdXJsLCAkaGFuZGxlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGhhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkYXNzb2MgPSAkdGhpcy0+X2dldF9hc3NvYygkc2VydmVyX3VybCwgJGhhbmRsZSk7CgogICAgICAgICAgICAkYXNzb2NzID0gYXJyYXkoKTsKICAgICAgICAgICAgaWYgKCRhc3NvYykgewogICAgICAgICAgICAgICAgJGFzc29jc1tdID0gJGFzc29jOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGFzc29jcyA9ICR0aGlzLT5fZ2V0X2Fzc29jcygkc2VydmVyX3VybCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRhc3NvY3MgfHwgKGNvdW50KCRhc3NvY3MpID09IDApKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhc3NvY2lhdGlvbnMgPSBhcnJheSgpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGFzc29jcyBhcyAkYXNzb2Nfcm93KSB7CiAgICAgICAgICAgICAgICAkYXNzb2MgPSBuZXcgQXV0aF9PcGVuSURfQXNzb2NpYXRpb24oJGFzc29jX3Jvd1snaGFuZGxlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX3Jvd1snc2VjcmV0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX3Jvd1snaXNzdWVkJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jX3Jvd1snbGlmZXRpbWUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNzb2Nfcm93Wydhc3NvY190eXBlJ10pOwoKICAgICAgICAgICAgICAgICRhc3NvYy0+c2VjcmV0ID0gJHRoaXMtPmJsb2JEZWNvZGUoJGFzc29jLT5zZWNyZXQpOwoKICAgICAgICAgICAgICAgIGlmICgkYXNzb2MtPmdldEV4cGlyZXNJbigpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVtb3ZlQXNzb2NpYXRpb24oJHNlcnZlcl91cmwsICRhc3NvYy0+aGFuZGxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGFzc29jaWF0aW9uc1tdID0gYXJyYXkoJGFzc29jLT5pc3N1ZWQsICRhc3NvYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkYXNzb2NpYXRpb25zKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVkID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICRhc3NvY3MgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGFzc29jaWF0aW9ucyBhcyAka2V5ID0+ICRhc3NvYykgewogICAgICAgICAgICAgICAgICAgICRpc3N1ZWRbJGtleV0gPSAkYXNzb2NbMF07CiAgICAgICAgICAgICAgICAgICAgJGFzc29jc1ska2V5XSA9ICRhc3NvY1sxXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBhcnJheV9tdWx0aXNvcnQoJGlzc3VlZCwgU09SVF9ERVNDLCAkYXNzb2NzLCBTT1JUX0RFU0MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc29jaWF0aW9ucyk7CgogICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBtb3N0IHJlY2VudGx5IGlzc3VlZCBvbmUuCiAgICAgICAgICAgICAgICBsaXN0KCRpc3N1ZWQsICRhc3NvYykgPSAkYXNzb2NpYXRpb25zWzBdOwogICAgICAgICAgICAgICAgcmV0dXJuICRhc3NvYzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9hZGRfbm9uY2UoJHNlcnZlcl91cmwsICR0aW1lc3RhbXAsICRzYWx0KQogICAgewogICAgICAgICRzcWwgPSAkdGhpcy0+c3FsWydhZGRfbm9uY2UnXTsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmNvbm5lY3Rpb24tPnF1ZXJ5KCRzcWwsIGFycmF5KCRzZXJ2ZXJfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzYWx0KSk7CiAgICAgICAgaWYgKCR0aGlzLT5pc0Vycm9yKCRyZXN1bHQpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5yb2xsYmFjaygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5jb21taXQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHRUb0Jvb2woJHJlc3VsdCk7CiAgICB9CgogICAgZnVuY3Rpb24gdXNlTm9uY2UoJHNlcnZlcl91cmwsICR0aW1lc3RhbXAsICRzYWx0KQogICAgewogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfU0tFVzsKCiAgICAgICAgaWYgKCBhYnMoJHRpbWVzdGFtcCAtIHRpbWUoKSkgPiAkQXV0aF9PcGVuSURfU0tFVyApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5fYWRkX25vbmNlKCRzZXJ2ZXJfdXJsLCAkdGltZXN0YW1wLCAkc2FsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiT2N0aWZpZXMiIGEgYmluYXJ5IHN0cmluZyBieSByZXR1cm5pbmcgYSBzdHJpbmcgd2l0aCBlc2NhcGVkCiAgICAgKiBvY3RhbCBieXRlcy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJlcGFyaW5nIGJpbmFyeSBkYXRhIGZvcgogICAgICogUG9zdGdyZVNRTCBCWVRFQSBmaWVsZHMuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9vY3RpZnkoJHN0cikKICAgIHsKICAgICAgICAkcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgQXV0aF9PcGVuSUQ6OmJ5dGVzKCRzdHIpOyAkaSsrKSB7CiAgICAgICAgICAgICRjaCA9IHN1YnN0cigkc3RyLCAkaSwgMSk7CiAgICAgICAgICAgIGlmICgkY2ggPT0gIlxcIikgewogICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiXFxcXFxcXFwiOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9yZCgkY2gpID09IDApIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIlxcXFwwMDAiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiXFwiIC4gc3RydmFsKGRlY29jdChvcmQoJGNoKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogIlVub2N0aWZpZXMiIG9jdGFsLWVzY2FwZWQgZGF0YSBmcm9tIFBvc3RncmVTUUwgYW5kIHJldHVybnMgdGhlCiAgICAgKiByZXN1bHRpbmcgQVNDSUkgKHBvc3NpYmx5IGJpbmFyeSkgc3RyaW5nLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfdW5vY3RpZnkoJHN0cikKICAgIHsKICAgICAgICAkcmVzdWx0ID0gIiI7CiAgICAgICAgJGkgPSAwOwogICAgICAgIHdoaWxlICgkaSA8IHN0cmxlbigkc3RyKSkgewogICAgICAgICAgICAkY2hhciA9ICRzdHJbJGldOwogICAgICAgICAgICBpZiAoJGNoYXIgPT0gIlxcIikgewogICAgICAgICAgICAgICAgLy8gTG9vayB0byBzZWUgaWYgdGhlIG5leHQgY2hhciBpcyBhIGJhY2tzbGFzaCBhbmQKICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBpdC4KICAgICAgICAgICAgICAgIGlmICgkc3RyWyRpICsgMV0gIT0gIlxcIikgewogICAgICAgICAgICAgICAgICAgICRvY3RhbF9kaWdpdHMgPSBzdWJzdHIoJHN0ciwgJGkgKyAxLCAzKTsKICAgICAgICAgICAgICAgICAgICAkZGVjID0gb2N0ZGVjKCRvY3RhbF9kaWdpdHMpOwogICAgICAgICAgICAgICAgICAgICRjaGFyID0gY2hyKCRkZWMpOwogICAgICAgICAgICAgICAgICAgICRpICs9IDQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjaGFyID0gIlxcIjsKICAgICAgICAgICAgICAgICAgICAkaSArPSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGkgKz0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY2hhcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXBOb25jZXMoKQogICAgewogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfU0tFVzsKICAgICAgICAkdiA9IHRpbWUoKSAtICRBdXRoX09wZW5JRF9TS0VXOwoKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoJHRoaXMtPnNxbFsnY2xlYW5fbm9uY2UnXSwgYXJyYXkoJHYpKTsKICAgICAgICAkbnVtID0gJHRoaXMtPmNvbm5lY3Rpb24tPmFmZmVjdGVkUm93cygpOwogICAgICAgICR0aGlzLT5jb25uZWN0aW9uLT5jb21taXQoKTsKICAgICAgICByZXR1cm4gJG51bTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwQXNzb2NpYXRpb25zKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+cXVlcnkoJHRoaXMtPnNxbFsnY2xlYW5fYXNzb2MnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkodGltZSgpKSk7CiAgICAgICAgJG51bSA9ICR0aGlzLT5jb25uZWN0aW9uLT5hZmZlY3RlZFJvd3MoKTsKICAgICAgICAkdGhpcy0+Y29ubmVjdGlvbi0+Y29tbWl0KCk7CiAgICAgICAgcmV0dXJuICRudW07CiAgICB9Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/SReg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTaW1wbGUgcmVnaXN0cmF0aW9uIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHBhcnNpbmcgYW5kIG9iamVjdAogKiByZXByZXNlbnRhdGlvbi4KICoKICogVGhpcyBtb2R1bGUgY29udGFpbnMgb2JqZWN0cyByZXByZXNlbnRpbmcgc2ltcGxlIHJlZ2lzdHJhdGlvbgogKiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBib3RoIE9wZW5JRCByZWx5aW5nCiAqIHBhcnRpZXMgYW5kIE9wZW5JRCBwcm92aWRlcnMuCiAqCiAqIDEuIFRoZSByZWx5aW5nIHBhcnR5IGNyZWF0ZXMgYSByZXF1ZXN0IG9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUKICoge0BsaW5rIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0fSBvYmplY3QgYmVmb3JlIG1ha2luZyB0aGUKICogY2hlY2tpZCByZXF1ZXN0IHRvIHRoZSBPcGVuSUQgcHJvdmlkZXI6CiAqCiAqICAgJHNyZWdfcmVxID0gQXV0aF9PcGVuSURfU1JlZ1JlcXVlc3Q6OmJ1aWxkKGFycmF5KCdlbWFpbCcpKTsKICogICAkYXV0aF9yZXF1ZXN0LT5hZGRFeHRlbnNpb24oJHNyZWdfcmVxKTsKICoKICogMi4gVGhlIE9wZW5JRCBwcm92aWRlciBleHRyYWN0cyB0aGUgc2ltcGxlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0CiAqIGZyb20gdGhlIE9wZW5JRCByZXF1ZXN0IHVzaW5nIHtAbGluawogKiBBdXRoX09wZW5JRF9TUmVnUmVxdWVzdDo6ZnJvbU9wZW5JRFJlcXVlc3R9LCBnZXRzIHRoZSB1c2VyJ3MKICogYXBwcm92YWwgYW5kIGRhdGEsIGNyZWF0ZXMgYW4ge0BsaW5rIEF1dGhfT3BlbklEX1NSZWdSZXNwb25zZX0KICogb2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBpZF9yZXMgcmVzcG9uc2U6CiAqCiAqICAgJHNyZWdfcmVxID0gQXV0aF9PcGVuSURfU1JlZ1JlcXVlc3Q6OmZyb21PcGVuSURSZXF1ZXN0KAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tpZF9yZXF1ZXN0KTsKICogICAvLyBbIGdldCB0aGUgdXNlcidzIGFwcHJvdmFsIGFuZCBkYXRhLCBpbmZvcm1pbmcgdGhlIHVzZXIgdGhhdAogKiAgIC8vICAgdGhlIGZpZWxkcyBpbiBzcmVnX3Jlc3BvbnNlIHdlcmUgcmVxdWVzdGVkIF0KICogICAkc3JlZ19yZXNwID0gQXV0aF9PcGVuSURfU1JlZ1Jlc3BvbnNlOjpleHRyYWN0UmVzcG9uc2UoCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcmVnX3JlcSwgJHVzZXJfZGF0YSk7CiAqICAgJHNyZWdfcmVzcC0+dG9NZXNzYWdlKCRvcGVuaWRfcmVzcG9uc2UtPmZpZWxkcyk7CiAqCiAqIDMuIFRoZSByZWx5aW5nIHBhcnR5IHVzZXMge0BsaW5rCiAqIEF1dGhfT3BlbklEX1NSZWdSZXNwb25zZTo6ZnJvbVN1Y2Nlc3NSZXNwb25zZX0gdG8gZXh0cmFjdCB0aGUgZGF0YQogKiBmcm9tIHRoZSBPcGVuSUQgcmVzcG9uc2U6CiAqCiAqICAgJHNyZWdfcmVzcCA9IEF1dGhfT3BlbklEX1NSZWdSZXNwb25zZTo6ZnJvbVN1Y2Nlc3NSZXNwb25zZSgKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3NfcmVzcG9uc2UpOwogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCgovKioKICogSW1wb3J0IG1lc3NhZ2UgYW5kIGV4dGVuc2lvbiBpbnRlcm5hbHMuCiAqLwpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL01lc3NhZ2UucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL09wZW5JRC9FeHRlbnNpb24ucGhwJzsKCi8vIFRoZSBkYXRhIGZpZWxkcyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIHNyZWcgc3BlYwpnbG9iYWwgJEF1dGhfT3BlbklEX3NyZWdfZGF0YV9maWVsZHM7CiRBdXRoX09wZW5JRF9zcmVnX2RhdGFfZmllbGRzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGxuYW1lJyA9PiAnRnVsbCBOYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmlja25hbWUnID0+ICdOaWNrbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvYicgPT4gJ0RhdGUgb2YgQmlydGgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJ0UtbWFpbCBBZGRyZXNzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2VuZGVyJyA9PiAnR2VuZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zdGNvZGUnID0+ICdQb3N0YWwgQ29kZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdW50cnknID0+ICdDb3VudHJ5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFuZ3VhZ2UnID0+ICdMYW5ndWFnZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWV6b25lJyA9PiAnVGltZSBab25lJyk7CgovKioKICogQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGdpdmVuIHZhbHVlIGlzIGEgdmFsaWQgc2ltcGxlIHJlZ2lzdHJhdGlvbgogKiBkYXRhIGZpZWxkIG5hbWUuICBSZXR1cm4gdHJ1ZSBpZiBzbywgZmFsc2UgaWYgbm90LgogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfY2hlY2tGaWVsZE5hbWUoJGZpZWxkX25hbWUpCnsKICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfc3JlZ19kYXRhX2ZpZWxkczsKCiAgICBpZiAoIWluX2FycmF5KCRmaWVsZF9uYW1lLCBhcnJheV9rZXlzKCRBdXRoX09wZW5JRF9zcmVnX2RhdGFfZmllbGRzKSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKLy8gVVJJIHVzZWQgaW4gdGhlIHdpbGQgZm9yIFlhZGlzIGRvY3VtZW50cyBhZHZlcnRpc2luZyBzaW1wbGUKLy8gcmVnaXN0cmF0aW9uIHN1cHBvcnQKZGVmaW5lKCdBdXRoX09wZW5JRF9TUkVHX05TX1VSSV8xXzAnLCAnaHR0cDovL29wZW5pZC5uZXQvc3JlZy8xLjAnKTsKCi8vIFVSSSBpbiB0aGUgZHJhZnQgc3BlY2lmaWNhdGlvbiBmb3Igc2ltcGxlIHJlZ2lzdHJhdGlvbiAxLjEKLy8gPGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1zaW1wbGUtcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi0xXzEtMDEuaHRtbD4KZGVmaW5lKCdBdXRoX09wZW5JRF9TUkVHX05TX1VSSV8xXzEnLCAnaHR0cDovL29wZW5pZC5uZXQvZXh0ZW5zaW9ucy9zcmVnLzEuMScpOwoKLy8gVGhpcyBhdHRyaWJ1dGUgd2lsbCBhbHdheXMgaG9sZCB0aGUgcHJlZmVycmVkIFVSSSB0byB1c2Ugd2hlbgovLyBhZGRpbmcgc3JlZyBzdXBwb3J0IHRvIGFuIFhSRFMgZmlsZSBvciBpbiBhbiBPcGVuSUQgbmFtZXNwYWNlCi8vIGRlY2xhcmF0aW9uLgpkZWZpbmUoJ0F1dGhfT3BlbklEX1NSRUdfTlNfVVJJJywgQXV0aF9PcGVuSURfU1JFR19OU19VUklfMV8xKTsKCkF1dGhfT3BlbklEX3JlZ2lzdGVyTmFtZXNwYWNlQWxpYXMoQXV0aF9PcGVuSURfU1JFR19OU19VUklfMV8xLCAnc3JlZycpOwoKLyoqCiAqIERvZXMgdGhlIGdpdmVuIGVuZHBvaW50IGFkdmVydGlzZSBzdXBwb3J0IGZvciBzaW1wbGUKICogcmVnaXN0cmF0aW9uPwogKgogKiAkZW5kcG9pbnQ6IFRoZSBlbmRwb2ludCBvYmplY3QgYXMgcmV0dXJuZWQgYnkgT3BlbklEIGRpc2NvdmVyeS4KICogcmV0dXJucyB3aGV0aGVyIGFuIHNyZWcgdHlwZSB3YXMgYWR2ZXJ0aXNlZCBieSB0aGUgZW5kcG9pbnQKICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX3N1cHBvcnRzU1JlZygkZW5kcG9pbnQpCnsKICAgIHJldHVybiAoJGVuZHBvaW50LT51c2VzRXh0ZW5zaW9uKEF1dGhfT3BlbklEX1NSRUdfTlNfVVJJXzFfMSkgfHwKICAgICAgICAgICAgJGVuZHBvaW50LT51c2VzRXh0ZW5zaW9uKEF1dGhfT3BlbklEX1NSRUdfTlNfVVJJXzFfMCkpOwp9CgovKioKICogQSBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIGRlYWxpbmcgd2l0aCBTaW1wbGUgUmVnaXN0cmF0aW9uIHByb3RvY29sCiAqIG1lc3NhZ2VzLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfT3BlbklEX1NSZWdCYXNlIGV4dGVuZHMgQXV0aF9PcGVuSURfRXh0ZW5zaW9uIHsKICAgIC8qKgogICAgICogRXh0cmFjdCB0aGUgc2ltcGxlIHJlZ2lzdHJhdGlvbiBuYW1lc3BhY2UgVVJJIGZyb20gdGhlIGdpdmVuCiAgICAgKiBPcGVuSUQgbWVzc2FnZS4gSGFuZGxlcyBPcGVuSUQgMSBhbmQgMiwgYXMgd2VsbCBhcyBib3RoIHNyZWcKICAgICAqIG5hbWVzcGFjZSBVUklzIGZvdW5kIGluIHRoZSB3aWxkLCBhcyB3ZWxsIGFzIG1pc3NpbmcgbmFtZXNwYWNlCiAgICAgKiBkZWZpbml0aW9ucyAoZm9yIE9wZW5JRCAxKQogICAgICoKICAgICAqICRtZXNzYWdlOiBUaGUgT3BlbklEIG1lc3NhZ2UgZnJvbSB3aGljaCB0byBwYXJzZSBzaW1wbGUKICAgICAqIHJlZ2lzdHJhdGlvbiBmaWVsZHMuIFRoaXMgbWF5IGJlIGEgcmVxdWVzdCBvciByZXNwb25zZSBtZXNzYWdlLgogICAgICoKICAgICAqIFJldHVybnMgdGhlIHNyZWcgbmFtZXNwYWNlIFVSSSBmb3IgdGhlIHN1cHBsaWVkIG1lc3NhZ2UuIFRoZQogICAgICogbWVzc2FnZSBtYXkgYmUgbW9kaWZpZWQgdG8gZGVmaW5lIGEgc2ltcGxlIHJlZ2lzdHJhdGlvbgogICAgICogbmFtZXNwYWNlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gX2dldFNSZWdOUygkbWVzc2FnZSkKICAgIHsKICAgICAgICAkYWxpYXMgPSBudWxsOwogICAgICAgICRmb3VuZF9uc191cmkgPSBudWxsOwoKICAgICAgICAvLyBTZWUgaWYgdGhlcmUgZXhpc3RzIGFuIGFsaWFzIGZvciBvbmUgb2YgdGhlIHR3byBkZWZpbmVkCiAgICAgICAgLy8gc2ltcGxlIHJlZ2lzdHJhdGlvbiB0eXBlcy4KICAgICAgICBmb3JlYWNoIChhcnJheShBdXRoX09wZW5JRF9TUkVHX05TX1VSSV8xXzEsCiAgICAgICAgICAgICAgICAgICAgICAgQXV0aF9PcGVuSURfU1JFR19OU19VUklfMV8wKSBhcyAkc3JlZ19uc191cmkpIHsKICAgICAgICAgICAgJGFsaWFzID0gJG1lc3NhZ2UtPm5hbWVzcGFjZXMtPmdldEFsaWFzKCRzcmVnX25zX3VyaSk7CiAgICAgICAgICAgIGlmICgkYWxpYXMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRmb3VuZF9uc191cmkgPSAkc3JlZ19uc191cmk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRhbGlhcyA9PT0gbnVsbCkgewogICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBhbGlhcyBmb3IgZWl0aGVyIG9mIHRoZSB0eXBlcywgc28gdHJ5IHRvCiAgICAgICAgICAgIC8vIGFkZCBvbmUuIFdlIGRlZmF1bHQgdG8gdXNpbmcgdGhlIG1vZGVybiB2YWx1ZSAoMS4xKQogICAgICAgICAgICAkZm91bmRfbnNfdXJpID0gQXV0aF9PcGVuSURfU1JFR19OU19VUklfMV8xOwogICAgICAgICAgICBpZiAoJG1lc3NhZ2UtPm5hbWVzcGFjZXMtPmFkZEFsaWFzKEF1dGhfT3BlbklEX1NSRUdfTlNfVVJJXzFfMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JlZycpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyBBbiBhbGlhcyBmb3IgdGhlIHN0cmluZyAnc3JlZycgYWxyZWFkeSBleGlzdHMsIGJ1dAogICAgICAgICAgICAgICAgLy8gaXQncyBkZWZpbmVkIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBzaW1wbGUKICAgICAgICAgICAgICAgIC8vIHJlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm91bmRfbnNfdXJpOwogICAgfQp9CgovKioKICogQW4gb2JqZWN0IHRvIGhvbGQgdGhlIHN0YXRlIG9mIGEgc2ltcGxlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0LgogKgogKiByZXF1aXJlZDogQSBsaXN0IG9mIHRoZSByZXF1aXJlZCBmaWVsZHMgaW4gdGhpcyBzaW1wbGUgcmVnaXN0cmF0aW9uCiAqIHJlcXVlc3QKICoKICogb3B0aW9uYWw6IEEgbGlzdCBvZiB0aGUgb3B0aW9uYWwgZmllbGRzIGluIHRoaXMgc2ltcGxlIHJlZ2lzdHJhdGlvbgogKiByZXF1ZXN0CiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9PcGVuSURfU1JlZ1JlcXVlc3QgZXh0ZW5kcyBBdXRoX09wZW5JRF9TUmVnQmFzZSB7CgogICAgdmFyICRuc19hbGlhcyA9ICdzcmVnJzsKCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYW4gZW1wdHkgc2ltcGxlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0LgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gYnVpbGQoJHJlcXVpcmVkPW51bGwsICRvcHRpb25hbD1udWxsLAogICAgICAgICAgICAgICAgICAgJHBvbGljeV91cmw9bnVsbCwKICAgICAgICAgICAgICAgICAgICRzcmVnX25zX3VyaT1BdXRoX09wZW5JRF9TUkVHX05TX1VSSSwKICAgICAgICAgICAgICAgICAgICRjbHM9J0F1dGhfT3BlbklEX1NSZWdSZXF1ZXN0JykKICAgIHsKICAgICAgICAkb2JqID0gbmV3ICRjbHMoKTsKCiAgICAgICAgJG9iai0+cmVxdWlyZWQgPSBhcnJheSgpOwogICAgICAgICRvYmotPm9wdGlvbmFsID0gYXJyYXkoKTsKICAgICAgICAkb2JqLT5wb2xpY3lfdXJsID0gJHBvbGljeV91cmw7CiAgICAgICAgJG9iai0+bnNfdXJpID0gJHNyZWdfbnNfdXJpOwoKICAgICAgICBpZiAoJHJlcXVpcmVkKSB7CiAgICAgICAgICAgIGlmICghJG9iai0+cmVxdWVzdEZpZWxkcygkcmVxdWlyZWQsIHRydWUsIHRydWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcHRpb25hbCkgewogICAgICAgICAgICBpZiAoISRvYmotPnJlcXVlc3RGaWVsZHMoJG9wdGlvbmFsLCBmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHNpbXBsZSByZWdpc3RyYXRpb24gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBmaWVsZHMKICAgICAqIHRoYXQgd2VyZSByZXF1ZXN0ZWQgaW4gdGhlIE9wZW5JRCByZXF1ZXN0IHdpdGggdGhlIGdpdmVuCiAgICAgKiBhcmd1bWVudHMKICAgICAqCiAgICAgKiAkcmVxdWVzdDogVGhlIE9wZW5JRCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZyb20gd2hpY2ggdG8KICAgICAqIGV4dHJhY3QgYW4gc3JlZyByZXF1ZXN0LgogICAgICoKICAgICAqICRjbHM6IG5hbWUgb2YgY2xhc3MgdG8gdXNlIHdoZW4gY3JlYXRpbmcgc3JlZyByZXF1ZXN0IG9iamVjdC4KICAgICAqIFVzZWQgZm9yIHRlc3RpbmcuCiAgICAgKgogICAgICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBzaW1wbGUgcmVnaXN0cmF0aW9uIHJlcXVlc3QKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21PcGVuSURSZXF1ZXN0KCRyZXF1ZXN0LCAkY2xzPSdBdXRoX09wZW5JRF9TUmVnUmVxdWVzdCcpCiAgICB7CgogICAgICAgICRvYmogPSBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkY2xzLCAnYnVpbGQnKSwKICAgICAgICAgICAgICAgICBhcnJheShudWxsLCBudWxsLCBudWxsLCBBdXRoX09wZW5JRF9TUkVHX05TX1VSSSwgJGNscykpOwoKICAgICAgICAvLyBTaW5jZSB3ZSdyZSBnb2luZyB0byBtZXNzIHdpdGggbmFtZXNwYWNlIFVSSSBtYXBwaW5nLCBkb24ndAogICAgICAgIC8vIG11dGF0ZSB0aGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KICAgICAgICAkbSA9ICRyZXF1ZXN0LT5tZXNzYWdlOwoKICAgICAgICAkb2JqLT5uc191cmkgPSAkb2JqLT5fZ2V0U1JlZ05TKCRtKTsKICAgICAgICAkYXJncyA9ICRtLT5nZXRBcmdzKCRvYmotPm5zX3VyaSk7CgogICAgICAgIGlmICgkYXJncyA9PT0gbnVsbCB8fCBBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRhcmdzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRvYmotPnBhcnNlRXh0ZW5zaW9uQXJncygkYXJncyk7CgogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgdGhlIHVucXVhbGlmaWVkIHNpbXBsZSByZWdpc3RyYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzCiAgICAgKiBhbmQgYWRkIHRoZW0gdG8gdGhpcyBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgZXNzZW50aWFsbHkgdGhlIGludmVyc2Ugb2YKICAgICAqIGdldEV4dGVuc2lvbkFyZ3MuIFRoaXMgbWV0aG9kIHJlc3RvcmVzIHRoZSBzZXJpYWxpemVkIHNpbXBsZQogICAgICogcmVnaXN0cmF0aW9uIHJlcXVlc3QgZmllbGRzLgogICAgICoKICAgICAqIElmIHlvdSBhcmUgZXh0cmFjdGluZyBhcmd1bWVudHMgZnJvbSBhIHN0YW5kYXJkIE9wZW5JRAogICAgICogY2hlY2tpZF8qIHJlcXVlc3QsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSBmcm9tT3BlbklEUmVxdWVzdCwKICAgICAqIHdoaWNoIHdpbGwgZXh0cmFjdCB0aGUgc3JlZyBuYW1lc3BhY2UgYW5kIGFyZ3VtZW50cyBmcm9tIHRoZQogICAgICogT3BlbklEIHJlcXVlc3QuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBjYXNlcyB3aGVyZSB0aGUKICAgICAqIE9wZW5JRCBzZXJ2ZXIgbmVlZHMgbW9yZSBjb250cm9sIG92ZXIgaG93IHRoZSBhcmd1bWVudHMgYXJlCiAgICAgKiBwYXJzZWQgdGhhbiB0aGF0IG1ldGhvZCBwcm92aWRlcy4KICAgICAqCiAgICAgKiAkYXJncyA9PSAkbWVzc2FnZS0+Z2V0QXJncygkbnNfdXJpKTsKICAgICAqICRyZXF1ZXN0LT5wYXJzZUV4dGVuc2lvbkFyZ3MoJGFyZ3MpOwogICAgICoKICAgICAqICRhcmdzOiBUaGUgdW5xdWFsaWZpZWQgc2ltcGxlIHJlZ2lzdHJhdGlvbiBhcmd1bWVudHMKICAgICAqCiAgICAgKiBzdHJpY3Q6IFdoZXRoZXIgcmVxdWVzdHMgd2l0aCBmaWVsZHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4KICAgICAqIHRoZSBzaW1wbGUgcmVnaXN0cmF0aW9uIHNwZWNpZmljYXRpb24gc2hvdWxkIGJlIHRvbGVyYXRlZCAoYW5kCiAgICAgKiBpZ25vcmVkKQogICAgICovCiAgICBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbkFyZ3MoJGFyZ3MsICRzdHJpY3Q9ZmFsc2UpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ3JlcXVpcmVkJywgJ29wdGlvbmFsJykgYXMgJGxpc3RfbmFtZSkgewogICAgICAgICAgICAkcmVxdWlyZWQgPSAoJGxpc3RfbmFtZSA9PSAncmVxdWlyZWQnKTsKICAgICAgICAgICAgJGl0ZW1zID0gQXV0aF9PcGVuSUQ6OmFycmF5R2V0KCRhcmdzLCAkbGlzdF9uYW1lKTsKICAgICAgICAgICAgaWYgKCRpdGVtcykgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnLCcsICRpdGVtcykgYXMgJGZpZWxkX25hbWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5yZXF1ZXN0RmllbGQoJGZpZWxkX25hbWUsICRyZXF1aXJlZCwgJHN0cmljdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdHJpY3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnBvbGljeV91cmwgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGFyZ3MsICdwb2xpY3lfdXJsJyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQSBsaXN0IG9mIGFsbCBvZiB0aGUgc2ltcGxlIHJlZ2lzdHJhdGlvbiBmaWVsZHMgdGhhdCB3ZXJlCiAgICAgKiByZXF1ZXN0ZWQsIHdoZXRoZXIgdGhleSB3ZXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsLgogICAgICovCiAgICBmdW5jdGlvbiBhbGxSZXF1ZXN0ZWRGaWVsZHMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tZXJnZSgkdGhpcy0+cmVxdWlyZWQsICR0aGlzLT5vcHRpb25hbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYXZlIGFueSBzaW1wbGUgcmVnaXN0cmF0aW9uIGZpZWxkcyBiZWVuIHJlcXVlc3RlZD8KICAgICAqLwogICAgZnVuY3Rpb24gd2VyZUZpZWxkc1JlcXVlc3RlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5hbGxSZXF1ZXN0ZWRGaWVsZHMoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXYXMgdGhpcyBmaWVsZCBpbiB0aGUgcmVxdWVzdD8KICAgICAqLwogICAgZnVuY3Rpb24gY29udGFpbnMoJGZpZWxkX25hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuIChpbl9hcnJheSgkZmllbGRfbmFtZSwgJHRoaXMtPnJlcXVpcmVkKSB8fAogICAgICAgICAgICAgICAgaW5fYXJyYXkoJGZpZWxkX25hbWUsICR0aGlzLT5vcHRpb25hbCkpOwogICAgfQoKICAgIC8qKgogICAgICogUmVxdWVzdCB0aGUgc3BlY2lmaWVkIGZpZWxkIGZyb20gdGhlIE9wZW5JRCB1c2VyCiAgICAgKgogICAgICogJGZpZWxkX25hbWU6IHRoZSB1bnF1YWxpZmllZCBzaW1wbGUgcmVnaXN0cmF0aW9uIGZpZWxkIG5hbWUKICAgICAqCiAgICAgKiByZXF1aXJlZDogd2hldGhlciB0aGUgZ2l2ZW4gZmllbGQgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUKICAgICAqIHVzZXIgYXMgYmVpbmcgYSByZXF1aXJlZCB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIHJlcXVlc3QKICAgICAqCiAgICAgKiBzdHJpY3Q6IHdoZXRoZXIgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gYSBmaWVsZCBpcyBhZGRlZCB0bwogICAgICogYSByZXF1ZXN0IG1vcmUgdGhhbiBvbmNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlcXVlc3RGaWVsZCgkZmllbGRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVxdWlyZWQ9ZmFsc2UsICRzdHJpY3Q9ZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCFBdXRoX09wZW5JRF9jaGVja0ZpZWxkTmFtZSgkZmllbGRfbmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5jb250YWlucygkZmllbGRfbmFtZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZmllbGRfbmFtZSwgJHRoaXMtPnJlcXVpcmVkKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZmllbGRfbmFtZSwgJHRoaXMtPm9wdGlvbmFsKSkgewogICAgICAgICAgICAgICAgaWYgKCRyZXF1aXJlZCkgewogICAgICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5vcHRpb25hbFthcnJheV9zZWFyY2goJGZpZWxkX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3B0aW9uYWwpXSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlcXVpcmVkKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXF1aXJlZFtdID0gJGZpZWxkX25hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPm9wdGlvbmFsW10gPSAkZmllbGRfbmFtZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIHRoZSBnaXZlbiBsaXN0IG9mIGZpZWxkcyB0byB0aGUgcmVxdWVzdAogICAgICoKICAgICAqIGZpZWxkX25hbWVzOiBUaGUgc2ltcGxlIHJlZ2lzdHJhdGlvbiBkYXRhIGZpZWxkcyB0byByZXF1ZXN0CiAgICAgKgogICAgICogcmVxdWlyZWQ6IFdoZXRoZXIgdGhlc2UgdmFsdWVzIHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIKICAgICAqIGFzIHJlcXVpcmVkCiAgICAgKgogICAgICogc3RyaWN0OiB3aGV0aGVyIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIGEgZmllbGQgaXMgYWRkZWQgdG8KICAgICAqIGEgcmVxdWVzdCBtb3JlIHRoYW4gb25jZQogICAgICovCiAgICBmdW5jdGlvbiByZXF1ZXN0RmllbGRzKCRmaWVsZF9uYW1lcywgJHJlcXVpcmVkPWZhbHNlLCAkc3RyaWN0PWZhbHNlKQogICAgewogICAgICAgIGlmICghaXNfYXJyYXkoJGZpZWxkX25hbWVzKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZmllbGRfbmFtZXMgYXMgJGZpZWxkX25hbWUpIHsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+cmVxdWVzdEZpZWxkKCRmaWVsZF9uYW1lLCAkcmVxdWlyZWQsICRzdHJpY3Q9JHN0cmljdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBkaWN0aW9uYXJ5IG9mIHVucXVhbGlmaWVkIHNpbXBsZSByZWdpc3RyYXRpb24gYXJndW1lbnRzCiAgICAgKiByZXByZXNlbnRpbmcgdGhpcyByZXF1ZXN0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIGVzc2VudGlhbGx5IHRoZSBpbnZlcnNlIG9mCiAgICAgKiBDe0x7cGFyc2VFeHRlbnNpb25BcmdzfX0uIFRoaXMgbWV0aG9kIHNlcmlhbGl6ZXMgdGhlIHNpbXBsZQogICAgICogcmVnaXN0cmF0aW9uIHJlcXVlc3QgZmllbGRzLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRFeHRlbnNpb25BcmdzKCkKICAgIHsKICAgICAgICAkYXJncyA9IGFycmF5KCk7CgogICAgICAgIGlmICgkdGhpcy0+cmVxdWlyZWQpIHsKICAgICAgICAgICAgJGFyZ3NbJ3JlcXVpcmVkJ10gPSBpbXBsb2RlKCcsJywgJHRoaXMtPnJlcXVpcmVkKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+b3B0aW9uYWwpIHsKICAgICAgICAgICAgJGFyZ3NbJ29wdGlvbmFsJ10gPSBpbXBsb2RlKCcsJywgJHRoaXMtPm9wdGlvbmFsKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cG9saWN5X3VybCkgewogICAgICAgICAgICAkYXJnc1sncG9saWN5X3VybCddID0gJHRoaXMtPnBvbGljeV91cmw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFyZ3M7CiAgICB9Cn0KCi8qKgogKiBSZXByZXNlbnRzIHRoZSBkYXRhIHJldHVybmVkIGluIGEgc2ltcGxlIHJlZ2lzdHJhdGlvbiByZXNwb25zZQogKiBpbnNpZGUgb2YgYW4gT3BlbklEIEN7aWRfcmVzfSByZXNwb25zZS4gVGhpcyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkCiAqIGJ5IHRoZSBPcGVuSUQgc2VydmVyLCBhZGRlZCB0byB0aGUgQ3tpZF9yZXN9IHJlc3BvbnNlIG9iamVjdCwgYW5kCiAqIHRoZW4gZXh0cmFjdGVkIGZyb20gdGhlIEN7aWRfcmVzfSBtZXNzYWdlIGJ5IHRoZSBDb25zdW1lci4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9TUmVnUmVzcG9uc2UgZXh0ZW5kcyBBdXRoX09wZW5JRF9TUmVnQmFzZSB7CgogICAgdmFyICRuc19hbGlhcyA9ICdzcmVnJzsKCiAgICBmdW5jdGlvbiBBdXRoX09wZW5JRF9TUmVnUmVzcG9uc2UoJGRhdGE9bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3JlZ19uc191cmk9QXV0aF9PcGVuSURfU1JFR19OU19VUkkpCiAgICB7CiAgICAgICAgaWYgKCRkYXRhID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm5zX3VyaSA9ICRzcmVnX25zX3VyaTsKICAgIH0KCiAgICAvKioKICAgICAqIFRha2UgYSBDe0x7U1JlZ1JlcXVlc3R9fSBhbmQgYSBkaWN0aW9uYXJ5IG9mIHNpbXBsZQogICAgICogcmVnaXN0cmF0aW9uIHZhbHVlcyBhbmQgY3JlYXRlIGEgQ3tMe1NSZWdSZXNwb25zZX19IG9iamVjdAogICAgICogY29udGFpbmluZyB0aGF0IGRhdGEuCiAgICAgKgogICAgICogcmVxdWVzdDogVGhlIHNpbXBsZSByZWdpc3RyYXRpb24gcmVxdWVzdCBvYmplY3QKICAgICAqCiAgICAgKiBkYXRhOiBUaGUgc2ltcGxlIHJlZ2lzdHJhdGlvbiBkYXRhIGZvciB0aGlzIHJlc3BvbnNlLCBhcyBhCiAgICAgKiBkaWN0aW9uYXJ5IGZyb20gdW5xdWFsaWZpZWQgc2ltcGxlIHJlZ2lzdHJhdGlvbiBmaWVsZCBuYW1lIHRvCiAgICAgKiBzdHJpbmcgKHVuaWNvZGUpIHZhbHVlLiBGb3IgaW5zdGFuY2UsIHRoZSBuaWNrbmFtZSBzaG91bGQgYmUKICAgICAqIHN0b3JlZCB1bmRlciB0aGUga2V5ICduaWNrbmFtZScuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0UmVzcG9uc2UoJHJlcXVlc3QsICRkYXRhKQogICAgewogICAgICAgICRvYmogPSBuZXcgQXV0aF9PcGVuSURfU1JlZ1Jlc3BvbnNlKCk7CiAgICAgICAgJG9iai0+bnNfdXJpID0gJHJlcXVlc3QtPm5zX3VyaTsKCiAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmFsbFJlcXVlc3RlZEZpZWxkcygpIGFzICRmaWVsZCkgewogICAgICAgICAgICAkdmFsdWUgPSBBdXRoX09wZW5JRDo6YXJyYXlHZXQoJGRhdGEsICRmaWVsZCk7CiAgICAgICAgICAgIGlmICgkdmFsdWUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRvYmotPmRhdGFbJGZpZWxkXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBDe0x7U1JlZ1Jlc3BvbnNlfX0gb2JqZWN0IGZyb20gYSBzdWNjZXNzZnVsIE9wZW5JRAogICAgICogbGlicmFyeSByZXNwb25zZQogICAgICogKEN7THtvcGVuaWQuY29uc3VtZXIuY29uc3VtZXIuU3VjY2Vzc1Jlc3BvbnNlfX0pIHJlc3BvbnNlCiAgICAgKiBtZXNzYWdlCiAgICAgKgogICAgICogc3VjY2Vzc19yZXNwb25zZTogQSBTdWNjZXNzUmVzcG9uc2UgZnJvbSBjb25zdW1lci5jb21wbGV0ZSgpCiAgICAgKgogICAgICogc2lnbmVkX29ubHk6IFdoZXRoZXIgdG8gcHJvY2VzcyBvbmx5IGRhdGEgdGhhdCB3YXMKICAgICAqIHNpZ25lZCBpbiB0aGUgaWRfcmVzIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLgogICAgICoKICAgICAqIFJldHVybnMgYSBzaW1wbGUgcmVnaXN0cmF0aW9uIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIGRhdGEgdGhhdAogICAgICogd2FzIHN1cHBsaWVkIHdpdGggdGhlIEN7aWRfcmVzfSByZXNwb25zZS4KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZyb21TdWNjZXNzUmVzcG9uc2UoJHN1Y2Nlc3NfcmVzcG9uc2UsICRzaWduZWRfb25seT10cnVlKQogICAgewogICAgICAgIGdsb2JhbCAkQXV0aF9PcGVuSURfc3JlZ19kYXRhX2ZpZWxkczsKCiAgICAgICAgJG9iaiA9IG5ldyBBdXRoX09wZW5JRF9TUmVnUmVzcG9uc2UoKTsKICAgICAgICAkb2JqLT5uc191cmkgPSAkb2JqLT5fZ2V0U1JlZ05TKCRzdWNjZXNzX3Jlc3BvbnNlLT5tZXNzYWdlKTsKCiAgICAgICAgaWYgKCRzaWduZWRfb25seSkgewogICAgICAgICAgICAkYXJncyA9ICRzdWNjZXNzX3Jlc3BvbnNlLT5nZXRTaWduZWROUygkb2JqLT5uc191cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhcmdzID0gJHN1Y2Nlc3NfcmVzcG9uc2UtPm1lc3NhZ2UtPmdldEFyZ3MoJG9iai0+bnNfdXJpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYXJncyA9PT0gbnVsbCB8fCBBdXRoX09wZW5JRDo6aXNGYWlsdXJlKCRhcmdzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRBdXRoX09wZW5JRF9zcmVnX2RhdGFfZmllbGRzIGFzICRmaWVsZF9uYW1lID0+ICRkZXNjKSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZmllbGRfbmFtZSwgYXJyYXlfa2V5cygkYXJncykpKSB7CiAgICAgICAgICAgICAgICAkb2JqLT5kYXRhWyRmaWVsZF9uYW1lXSA9ICRhcmdzWyRmaWVsZF9uYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQXJncygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIC8vIFJlYWQtb25seSBkaWN0aW9uYXJ5IGludGVyZmFjZQogICAgZnVuY3Rpb24gZ2V0KCRmaWVsZF9uYW1lLCAkZGVmYXVsdD1udWxsKQogICAgewogICAgICAgIGlmICghQXV0aF9PcGVuSURfY2hlY2tGaWVsZE5hbWUoJGZpZWxkX25hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEF1dGhfT3BlbklEOjphcnJheUdldCgkdGhpcy0+ZGF0YSwgJGZpZWxkX25hbWUsICRkZWZhdWx0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb250ZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/TrustRoot.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIE9wZW5JRCB0cnVzdCByb290cwogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgpyZXF1aXJlX29uY2UgJ0F1dGgvT3BlbklEL0Rpc2NvdmVyLnBocCc7CgovKioKICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgZG9tYWluIGVuZGluZyBpbiBhIHRvcC1sZXZlbCBkb21haW5zLgogKiBVc2VkIGluIGNoZWNraW5nIHRydXN0IHJvb3RzIGZvciBzYW5pdHkuCiAqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KZGVmaW5lKCdBdXRoX09wZW5JRF9fX1RMRHMnLAogICAgICAgJy9cLihhY3xhZHxhZXxhZXJvfGFmfGFnfGFpfGFsfGFtfGFufGFvfGFxfGFyfGFycGF8YXN8YXNpYScgLgogICAgICAgJ3xhdHxhdXxhd3xheHxhenxiYXxiYnxiZHxiZXxiZnxiZ3xiaHxiaXxiaXp8Ymp8Ym18Ym58Ym98YnInIC4KICAgICAgICd8YnN8YnR8YnZ8Ynd8Ynl8Ynp8Y2F8Y2F0fGNjfGNkfGNmfGNnfGNofGNpfGNrfGNsfGNtfGNufGNvJyAuCiAgICAgICAnfGNvbXxjb29wfGNyfGN1fGN2fGN4fGN5fGN6fGRlfGRqfGRrfGRtfGRvfGR6fGVjfGVkdXxlZXxlZycgLgogICAgICAgJ3xlcnxlc3xldHxldXxmaXxmanxma3xmbXxmb3xmcnxnYXxnYnxnZHxnZXxnZnxnZ3xnaHxnaXxnbCcgLgogICAgICAgJ3xnbXxnbnxnb3Z8Z3B8Z3F8Z3J8Z3N8Z3R8Z3V8Z3d8Z3l8aGt8aG18aG58aHJ8aHR8aHV8aWR8aWUnIC4KICAgICAgICd8aWx8aW18aW58aW5mb3xpbnR8aW98aXF8aXJ8aXN8aXR8amV8am18am98am9ic3xqcHxrZXxrZ3xraCcgLgogICAgICAgJ3xraXxrbXxrbnxrcHxrcnxrd3xreXxrenxsYXxsYnxsY3xsaXxsa3xscnxsc3xsdHxsdXxsdnxseScgLgogICAgICAgJ3xtYXxtY3xtZHxtZXxtZ3xtaHxtaWx8bWt8bWx8bW18bW58bW98bW9iaXxtcHxtcXxtcnxtc3xtdCcgLgogICAgICAgJ3xtdXxtdXNldW18bXZ8bXd8bXh8bXl8bXp8bmF8bmFtZXxuY3xuZXxuZXR8bmZ8bmd8bml8bmx8bm8nIC4KICAgICAgICd8bnB8bnJ8bnV8bnp8b218b3JnfHBhfHBlfHBmfHBnfHBofHBrfHBsfHBtfHBufHByfHByb3xwc3xwdCcgLgogICAgICAgJ3xwd3xweXxxYXxyZXxyb3xyc3xydXxyd3xzYXxzYnxzY3xzZHxzZXxzZ3xzaHxzaXxzanxza3xzbCcgLgogICAgICAgJ3xzbXxzbnxzb3xzcnxzdHxzdXxzdnxzeXxzenx0Y3x0ZHx0ZWx8dGZ8dGd8dGh8dGp8dGt8dGx8dG0nIC4KICAgICAgICd8dG58dG98dHB8dHJ8dHJhdmVsfHR0fHR2fHR3fHR6fHVhfHVnfHVrfHVzfHV5fHV6fHZhfHZjfHZlJyAuCiAgICAgICAnfHZnfHZpfHZufHZ1fHdmfHdzfHhuLS0wendtNTZkfHhuLS0xMWI1YnMzYTlhajZnJyAuCiAgICAgICAnfHhuLS04MGFraGJ5a25qNGZ8eG4tLTl0NGIxMXlpNWF8eG4tLWRlYmEwYWR8eG4tLWc2dzI1MWQnIC4KICAgICAgICd8eG4tLWhnYms2YWo3ZjUzYmJhfHhuLS1obGNqNmF5YTllc2M3YXx4bi0tanhhbHBkbHAnIC4KICAgICAgICd8eG4tLWtnYmVjaHR2fHhuLS16Y2t6YWh8eWV8eXR8eXV8emF8em18encpXC4/JC8nKTsKCmRlZmluZSgnQXV0aF9PcGVuSURfX19Ib3N0U2VnbWVudFJlJywKICAgICAgICIvXig/OlstYS16QS1aMC05ISQmJ1xcKFxcKVxcKissOz0uX35dfCVbYS16QS1aMC05XXsyfSkqJC8iKTsKCi8qKgogKiBBIHdyYXBwZXIgZm9yIHRydXN0LXJvb3QgcmVsYXRlZCBmdW5jdGlvbnMKICovCmNsYXNzIEF1dGhfT3BlbklEX1RydXN0Um9vdCB7CiAgICAvKgogICAgICogUmV0dXJuIGEgZGlzY292ZXJ5IFVSTCBmb3IgdGhpcyByZWFsbS4KICAgICAqCiAgICAgKiBSZXR1cm4gbnVsbCBpZiB0aGUgcmVhbG0gY291bGQgbm90IGJlIHBhcnNlZCBvciB3YXMgbm90IHZhbGlkLgogICAgICoKICAgICAqIEBwYXJhbSByZXR1cm5fdG8gVGhlIHJlbHlpbmcgcGFydHkgcmV0dXJuIFVSTCBvZiB0aGUgT3BlbklECiAgICAgKiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0CiAgICAgKgogICAgICogQHJldHVybiBUaGUgVVJMIHVwb24gd2hpY2ggcmVseWluZyBwYXJ0eSBkaXNjb3Zlcnkgc2hvdWxkIGJlCiAgICAgKiBydW4gaW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSByZXR1cm5fdG8gVVJMCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBidWlsZERpc2NvdmVyeVVSTCgkcmVhbG0pCiAgICB7CiAgICAgICAgJHBhcnNlZCA9IEF1dGhfT3BlbklEX1RydXN0Um9vdDo6X3BhcnNlKCRyZWFsbSk7CgogICAgICAgIGlmICgkcGFyc2VkID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBhcnNlZFsnd2lsZGNhcmQnXSkgewogICAgICAgICAgICAvLyBVc2UgInd3dy4iIGluIHBsYWNlIG9mIHRoZSBzdGFyCiAgICAgICAgICAgIGlmICgkcGFyc2VkWydob3N0J11bMF0gIT0gJy4nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR3d3dfZG9tYWluID0gJ3d3dycgLiAkcGFyc2VkWydob3N0J107CgogICAgICAgICAgICByZXR1cm4gc3ByaW50ZignJXM6Ly8lcyVzJywgJHBhcnNlZFsnc2NoZW1lJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICR3d3dfZG9tYWluLCAkcGFyc2VkWydwYXRoJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkcGFyc2VkWyd1bnBhcnNlZCddOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgVVJMIGludG8gaXRzIHRydXN0X3Jvb3QgcGFydHMuCiAgICAgKgogICAgICogQHN0YXRpYwogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRydXN0X3Jvb3QgVGhlIHVybCB0byBwYXJzZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgJHBhcnNlZCBFaXRoZXIgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdHJ1c3Qgcm9vdAogICAgICogcGFydHMgb3IgZmFsc2UgaWYgcGFyc2luZyBmYWlsZWQuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBfcGFyc2UoJHRydXN0X3Jvb3QpCiAgICB7CiAgICAgICAgJHRydXN0X3Jvb3QgPSBBdXRoX09wZW5JRF91cmlub3JtKCR0cnVzdF9yb290KTsKICAgICAgICBpZiAoJHRydXN0X3Jvb3QgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByZWdfbWF0Y2goIi86XC9cL1teOl0rKDpcZCspezIsfShcL3wkKS8iLCAkdHJ1c3Rfcm9vdCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHBhcnRzID0gQHBhcnNlX3VybCgkdHJ1c3Rfcm9vdCk7CiAgICAgICAgaWYgKCRwYXJ0cyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJlcXVpcmVkX3BhcnRzID0gYXJyYXkoJ3NjaGVtZScsICdob3N0Jyk7CiAgICAgICAgJGZvcmJpZGRlbl9wYXJ0cyA9IGFycmF5KCd1c2VyJywgJ3Bhc3MnLCAnZnJhZ21lbnQnKTsKICAgICAgICAka2V5cyA9IGFycmF5X2tleXMoJHBhcnRzKTsKICAgICAgICBpZiAoYXJyYXlfaW50ZXJzZWN0KCRrZXlzLCAkcmVxdWlyZWRfcGFydHMpICE9ICRyZXF1aXJlZF9wYXJ0cykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoYXJyYXlfaW50ZXJzZWN0KCRrZXlzLCAkZm9yYmlkZGVuX3BhcnRzKSAhPSBhcnJheSgpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICghcHJlZ19tYXRjaChBdXRoX09wZW5JRF9fX0hvc3RTZWdtZW50UmUsICRwYXJ0c1snaG9zdCddKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkc2NoZW1lID0gc3RydG9sb3dlcigkcGFydHNbJ3NjaGVtZSddKTsKICAgICAgICAkYWxsb3dlZF9zY2hlbWVzID0gYXJyYXkoJ2h0dHAnLCAnaHR0cHMnKTsKICAgICAgICBpZiAoIWluX2FycmF5KCRzY2hlbWUsICRhbGxvd2VkX3NjaGVtZXMpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJHBhcnRzWydzY2hlbWUnXSA9ICRzY2hlbWU7CgogICAgICAgICRob3N0ID0gc3RydG9sb3dlcigkcGFydHNbJ2hvc3QnXSk7CiAgICAgICAgJGhvc3RwYXJ0cyA9IGV4cGxvZGUoJyonLCAkaG9zdCk7CiAgICAgICAgc3dpdGNoIChjb3VudCgkaG9zdHBhcnRzKSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgJHBhcnRzWyd3aWxkY2FyZCddID0gZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgaWYgKCRob3N0cGFydHNbMF0gfHwKICAgICAgICAgICAgICAgICgkaG9zdHBhcnRzWzFdICYmIHN1YnN0cigkaG9zdHBhcnRzWzFdLCAwLCAxKSAhPSAnLicpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGhvc3QgPSAkaG9zdHBhcnRzWzFdOwogICAgICAgICAgICAkcGFydHNbJ3dpbGRjYXJkJ10gPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJwb3MoJGhvc3QsICc6JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRwYXJ0c1snaG9zdCddID0gJGhvc3Q7CgogICAgICAgIGlmIChpc3NldCgkcGFydHNbJ3BhdGgnXSkpIHsKICAgICAgICAgICAgJHBhdGggPSBzdHJ0b2xvd2VyKCRwYXJ0c1sncGF0aCddKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkcGF0aCwgMCwgMSkgIT0gJy8nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGF0aCA9ICcvJzsKICAgICAgICB9CgogICAgICAgICRwYXJ0c1sncGF0aCddID0gJHBhdGg7CiAgICAgICAgaWYgKCFpc3NldCgkcGFydHNbJ3BvcnQnXSkpIHsKICAgICAgICAgICAgJHBhcnRzWydwb3J0J10gPSBmYWxzZTsKICAgICAgICB9CgoKICAgICAgICAkcGFydHNbJ3VucGFyc2VkJ10gPSAkdHJ1c3Rfcm9vdDsKCiAgICAgICAgcmV0dXJuICRwYXJ0czsKICAgIH0KCiAgICAvKioKICAgICAqIElzIHRoaXMgdHJ1c3Qgcm9vdCBzYW5lPwogICAgICoKICAgICAqIEEgdHJ1c3Qgcm9vdCBpcyBzYW5lIGlmIGl0IGlzIHN5bnRhY3RpY2FsbHkgdmFsaWQgYW5kIGl0IGhhcyBhCiAgICAgKiByZWFzb25hYmxlIGRvbWFpbiBuYW1lLiBTcGVjaWZpY2FsbHksIHRoZSBkb21haW4gbmFtZSBtdXN0IGJlCiAgICAgKiBtb3JlIHRoYW4gb25lIGxldmVsIGJlbG93IGEgc3RhbmRhcmQgVExEIG9yIG1vcmUgdGhhbiB0d28KICAgICAqIGxldmVscyBiZWxvdyBhIHR3by1sZXR0ZXIgdGxkLgogICAgICoKICAgICAqIEZvciBleGFtcGxlLCAnKi5jb20nIGlzIG5vdCBhIHNhbmUgdHJ1c3Qgcm9vdCwgYnV0ICcqLmZvby5jb20nCiAgICAgKiBpcy4gICcqLmNvLnVrJyBpcyBub3Qgc2FuZSwgYnV0ICcqLmJiYy5jby51aycgaXMuCiAgICAgKgogICAgICogVGhpcyBjaGVjayBpcyBub3QgYWx3YXlzIGNvcnJlY3QsIGJ1dCBpdCBhdHRlbXB0cyB0byBlcnIgb24gdGhlCiAgICAgKiBzaWRlIG9mIG1hcmtpbmcgc2FuZSB0cnVzdCByb290cyBpbnNhbmUgaW5zdGVhZCBvZiBtYXJraW5nCiAgICAgKiBpbnNhbmUgdHJ1c3Qgcm9vdHMgc2FuZS4gRm9yIGV4YW1wbGUsICdraW5rLmZtJyBpcyBtYXJrZWQgYXMKICAgICAqIGluc2FuZSBldmVuIHRob3VnaCBpdCAic2hvdWxkIiAoZm9yIHNvbWUgbWVhbmluZyBvZiBzaG91bGQpIGJlCiAgICAgKiBtYXJrZWQgc2FuZS4KICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgT3BlbklEIHNlcnZlcnMgdG8KICAgICAqIGFsZXJ0IHRoZSB1c2VycyBvZiB0aGUgc2VydmVyIHdoZW4gYSBjb25zdW1lciBhdHRlbXB0cyB0byBnZXQKICAgICAqIHRoZSB1c2VyIHRvIGFjY2VwdCBhIHN1c3BpY2lvdXMgdHJ1c3Qgcm9vdC4KICAgICAqCiAgICAgKiBAc3RhdGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cnVzdF9yb290IFRoZSB0cnVzdCByb290IHRvIGNoZWNrCiAgICAgKiBAcmV0dXJuIGJvb2wgJHNhbml0eSBXaGV0aGVyIHRoZSB0cnVzdCByb290IGxvb2tzIE9LCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBpc1NhbmUoJHRydXN0X3Jvb3QpCiAgICB7CiAgICAgICAgJHBhcnRzID0gQXV0aF9PcGVuSURfVHJ1c3RSb290OjpfcGFyc2UoJHRydXN0X3Jvb3QpOwogICAgICAgIGlmICgkcGFydHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIExvY2FsaG9zdCBpcyBhIHNwZWNpYWwgY2FzZQogICAgICAgIGlmICgkcGFydHNbJ2hvc3QnXSA9PSAnbG9jYWxob3N0JykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGhvc3RfcGFydHMgPSBleHBsb2RlKCcuJywgJHBhcnRzWydob3N0J10pOwogICAgICAgIGlmICgkcGFydHNbJ3dpbGRjYXJkJ10pIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbXB0eSBzdHJpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQogICAgICAgICAgICBhcnJheV9zaGlmdCgkaG9zdF9wYXJ0cyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGhvc3RfcGFydHMgJiYgISRob3N0X3BhcnRzW2NvdW50KCRob3N0X3BhcnRzKSAtIDFdKSB7CiAgICAgICAgICAgIGFycmF5X3BvcCgkaG9zdF9wYXJ0cyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRob3N0X3BhcnRzKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIERvbid0IGFsbG93IGFkamFjZW50IGRvdHMKICAgICAgICBpZiAoaW5fYXJyYXkoJycsICRob3N0X3BhcnRzLCB0cnVlKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBHZXQgdGhlIHRvcC1sZXZlbCBkb21haW4gb2YgdGhlIGhvc3QuIElmIGl0IGlzIG5vdCBhIHZhbGlkIFRMRCwKICAgICAgICAvLyBpdCdzIG5vdCBzYW5lLgogICAgICAgIHByZWdfbWF0Y2goQXV0aF9PcGVuSURfX19UTERzLCAkcGFydHNbJ2hvc3QnXSwgJG1hdGNoZXMpOwogICAgICAgIGlmICghJG1hdGNoZXMpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkdGxkID0gJG1hdGNoZXNbMV07CgogICAgICAgIGlmIChjb3VudCgkaG9zdF9wYXJ0cykgPT0gMSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBhcnRzWyd3aWxkY2FyZCddKSB7CiAgICAgICAgICAgIC8vIEl0J3MgYSAyLWxldHRlciB0bGQgd2l0aCBhIHNob3J0IHNlY29uZCB0byBsYXN0IHNlZ21lbnQKICAgICAgICAgICAgLy8gc28gdGhlcmUgbmVlZHMgdG8gYmUgbW9yZSB0aGFuIHR3byBzZWdtZW50cyBzcGVjaWZpZWQKICAgICAgICAgICAgLy8gKGUuZy4gKi5jby51ayBpcyBpbnNhbmUpCiAgICAgICAgICAgICRzZWNvbmRfbGV2ZWwgPSAkaG9zdF9wYXJ0c1tjb3VudCgkaG9zdF9wYXJ0cykgLSAyXTsKICAgICAgICAgICAgaWYgKHN0cmxlbigkdGxkKSA9PSAyICYmIHN0cmxlbigkc2Vjb25kX2xldmVsKSA8PSAzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQoJGhvc3RfcGFydHMpID4gMjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzIHRoaXMgVVJMIG1hdGNoIHRoZSBnaXZlbiB0cnVzdCByb290PwogICAgICoKICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBVUkwgZmFsbHMgdW5kZXIgdGhlIGdpdmVuIHRydXN0IHJvb3QuIFRoaXMKICAgICAqIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIHRydXN0IHJvb3QgaXMgc2FuZS4gSWYgdGhlIFVSTCBvcgogICAgICogdHJ1c3Qgcm9vdCBkbyBub3QgcGFyc2UsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHJ1c3Rfcm9vdCBUaGUgdHJ1c3Qgcm9vdCB0byBtYXRjaCBhZ2FpbnN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gY2hlY2sKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgJG1hdGNoZXMgV2hldGhlciB0aGUgVVJMIG1hdGNoZXMgYWdhaW5zdCB0aGUKICAgICAqIHRydXN0IHJvb3QKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIG1hdGNoKCR0cnVzdF9yb290LCAkdXJsKQogICAgewogICAgICAgICR0cnVzdF9yb290X3BhcnNlZCA9IEF1dGhfT3BlbklEX1RydXN0Um9vdDo6X3BhcnNlKCR0cnVzdF9yb290KTsKICAgICAgICAkdXJsX3BhcnNlZCA9IEF1dGhfT3BlbklEX1RydXN0Um9vdDo6X3BhcnNlKCR1cmwpOwogICAgICAgIGlmICghJHRydXN0X3Jvb3RfcGFyc2VkIHx8ICEkdXJsX3BhcnNlZCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBob3N0cyBtYXRjaGluZwogICAgICAgIGlmICgkdXJsX3BhcnNlZFsnd2lsZGNhcmQnXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICgkdHJ1c3Rfcm9vdF9wYXJzZWRbJ3dpbGRjYXJkJ10pIHsKICAgICAgICAgICAgJGhvc3RfdGFpbCA9ICR0cnVzdF9yb290X3BhcnNlZFsnaG9zdCddOwogICAgICAgICAgICAkaG9zdCA9ICR1cmxfcGFyc2VkWydob3N0J107CiAgICAgICAgICAgIGlmICgkaG9zdF90YWlsICYmCiAgICAgICAgICAgICAgICBzdWJzdHIoJGhvc3QsIC0oc3RybGVuKCRob3N0X3RhaWwpKSkgIT0gJGhvc3RfdGFpbCAmJgogICAgICAgICAgICAgICAgc3Vic3RyKCRob3N0X3RhaWwsIDEpICE9ICRob3N0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRydXN0X3Jvb3RfcGFyc2VkWydob3N0J10gIT0gJHVybF9wYXJzZWRbJ2hvc3QnXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBwYXRoIGFuZCBxdWVyeSBtYXRjaGluZwogICAgICAgICRiYXNlX3BhdGggPSAkdHJ1c3Rfcm9vdF9wYXJzZWRbJ3BhdGgnXTsKICAgICAgICAkcGF0aCA9ICR1cmxfcGFyc2VkWydwYXRoJ107CiAgICAgICAgaWYgKCFpc3NldCgkdHJ1c3Rfcm9vdF9wYXJzZWRbJ3F1ZXJ5J10pKSB7CiAgICAgICAgICAgIGlmICgkYmFzZV9wYXRoICE9ICRwYXRoKSB7CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRwYXRoLCAwLCBzdHJsZW4oJGJhc2VfcGF0aCkpICE9ICRiYXNlX3BhdGgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRiYXNlX3BhdGgsIHN0cmxlbigkYmFzZV9wYXRoKSAtIDEsIDEpICE9ICcvJyAmJgogICAgICAgICAgICAgICAgICAgIHN1YnN0cigkcGF0aCwgc3RybGVuKCRiYXNlX3BhdGgpLCAxKSAhPSAnLycpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYmFzZV9xdWVyeSA9ICR0cnVzdF9yb290X3BhcnNlZFsncXVlcnknXTsKICAgICAgICAgICAgJHF1ZXJ5ID0gQCR1cmxfcGFyc2VkWydxdWVyeSddOwogICAgICAgICAgICAkcXBsdXMgPSBzdWJzdHIoJHF1ZXJ5LCAwLCBzdHJsZW4oJGJhc2VfcXVlcnkpICsgMSk7CiAgICAgICAgICAgICRicXBsdXMgPSAkYmFzZV9xdWVyeSAuICcmJzsKICAgICAgICAgICAgaWYgKCRiYXNlX3BhdGggIT0gJHBhdGggfHwKICAgICAgICAgICAgICAgICgkYmFzZV9xdWVyeSAhPSAkcXVlcnkgJiYgJHFwbHVzICE9ICRicXBsdXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFRoZSBwb3J0IGFuZCBzY2hlbWUgbmVlZCB0byBtYXRjaCBleGFjdGx5CiAgICAgICAgcmV0dXJuICgkdHJ1c3Rfcm9vdF9wYXJzZWRbJ3NjaGVtZSddID09ICR1cmxfcGFyc2VkWydzY2hlbWUnXSAmJgogICAgICAgICAgICAgICAgJHVybF9wYXJzZWRbJ3BvcnQnXSA9PT0gJHRydXN0X3Jvb3RfcGFyc2VkWydwb3J0J10pOwogICAgfQp9CgovKgogKiBJZiB0aGUgZW5kcG9pbnQgaXMgYSByZWx5aW5nIHBhcnR5IE9wZW5JRCByZXR1cm5fdG8gZW5kcG9pbnQsCiAqIHJldHVybiB0aGUgZW5kcG9pbnQgVVJMLiBPdGhlcndpc2UsIHJldHVybiBOb25lLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBmaWx0ZXIgZm9yIHRoZSBZYWRpcwogKiBmaWx0ZXJpbmcgaW50ZXJmYWNlLgogKgogKiBAc2VlOiBDe0x7b3BlbmlkLnlhZGlzLnNlcnZpY2VzfX0KICogQHNlZTogQ3tMe29wZW5pZC55YWRpcy5maWx0ZXJzfX0KICoKICogQHBhcmFtIGVuZHBvaW50OiBBbiBYUkRTIEJhc2ljU2VydmljZUVuZHBvaW50LCBhcyByZXR1cm5lZCBieQogKiBwZXJmb3JtaW5nIFlhZGlzIGRpY292ZXJ5LgogKgogKiBAcmV0dXJuczogVGhlIGVuZHBvaW50IFVSTCBvciBOb25lIGlmIHRoZSBlbmRwb2ludCBpcyBub3QgYQogKiByZWx5aW5nIHBhcnR5IGVuZHBvaW50LgogKi8KZnVuY3Rpb24gZmlsdGVyX2V4dHJhY3RSZXR1cm5VUkwoJGVuZHBvaW50KQp7CiAgICBpZiAoJGVuZHBvaW50LT5tYXRjaFR5cGVzKGFycmF5KEF1dGhfT3BlbklEX1JQX1JFVFVSTl9UT19VUkxfVFlQRSkpKSB7CiAgICAgICAgcmV0dXJuICRlbmRwb2ludDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KCmZ1bmN0aW9uICZBdXRoX09wZW5JRF9leHRyYWN0UmV0dXJuVVJMKCYkZW5kcG9pbnRfbGlzdCkKewogICAgJHJlc3VsdCA9IGFycmF5KCk7CgogICAgZm9yZWFjaCAoJGVuZHBvaW50X2xpc3QgYXMgJGVuZHBvaW50KSB7CiAgICAgICAgaWYgKGZpbHRlcl9leHRyYWN0UmV0dXJuVVJMKCRlbmRwb2ludCkpIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gJGVuZHBvaW50OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoKICogSXMgdGhlIHJldHVybl90byBVUkwgdW5kZXIgb25lIG9mIHRoZSBzdXBwbGllZCBhbGxvd2VkIHJldHVybl90bwogKiBVUkxzPwogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfcmV0dXJuVG9NYXRjaGVzKCRhbGxvd2VkX3JldHVybl90b191cmxzLCAkcmV0dXJuX3RvKQp7CiAgICBmb3JlYWNoICgkYWxsb3dlZF9yZXR1cm5fdG9fdXJscyBhcyAkYWxsb3dlZF9yZXR1cm5fdG8pIHsKICAgICAgICAvLyBBIHJldHVybl90byBwYXR0ZXJuIHdvcmtzIHRoZSBzYW1lIGFzIGEgcmVhbG0sIGV4Y2VwdCB0aGF0CiAgICAgICAgLy8gaXQncyBub3QgYWxsb3dlZCB0byB1c2UgYSB3aWxkY2FyZC4gV2UnbGwgbW9kZWwgdGhpcyBieQogICAgICAgIC8vIHBhcnNpbmcgaXQgYXMgYSByZWFsbSwgYW5kIG5vdCB0cnlpbmcgdG8gbWF0Y2ggaXQgaWYgaXQgaGFzCiAgICAgICAgLy8gYSB3aWxkY2FyZC4KCiAgICAgICAgJHJldHVybl9yZWFsbSA9IEF1dGhfT3BlbklEX1RydXN0Um9vdDo6X3BhcnNlKCRhbGxvd2VkX3JldHVybl90byk7CiAgICAgICAgaWYgKC8vIFBhcnNlcyBhcyBhIHRydXN0IHJvb3QKICAgICAgICAgICAgKCRyZXR1cm5fcmVhbG0gIT09IGZhbHNlKSAmJgogICAgICAgICAgICAvLyBEb2VzIG5vdCBoYXZlIGEgd2lsZGNhcmQKICAgICAgICAgICAgKCEkcmV0dXJuX3JlYWxtWyd3aWxkY2FyZCddKSAmJgogICAgICAgICAgICAvLyBNYXRjaGVzIHRoZSByZXR1cm5fdG8gdGhhdCB3ZSBwYXNzZWQgaW4gd2l0aCBpdAogICAgICAgICAgICAoQXV0aF9PcGVuSURfVHJ1c3RSb290OjptYXRjaCgkYWxsb3dlZF9yZXR1cm5fdG8sICRyZXR1cm5fdG8pKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLy8gTm8gVVJMIGluIHRoZSBsaXN0IG1hdGNoZWQKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogR2l2ZW4gYSByZWx5aW5nIHBhcnR5IGRpc2NvdmVyeSBVUkwgcmV0dXJuIGEgbGlzdCBvZiByZXR1cm5fdG8KICogVVJMcy4KICovCmZ1bmN0aW9uIEF1dGhfT3BlbklEX2dldEFsbG93ZWRSZXR1cm5VUkxzKCRyZWx5aW5nX3BhcnR5X3VybCwgJGZldGNoZXIsCiAgICAgICAgICAgICAgJGRpc2NvdmVyX2Z1bmN0aW9uPW51bGwpCnsKICAgIGlmICgkZGlzY292ZXJfZnVuY3Rpb24gPT09IG51bGwpIHsKICAgICAgICAkZGlzY292ZXJfZnVuY3Rpb24gPSBhcnJheSgnQXV0aF9ZYWRpc19ZYWRpcycsICdkaXNjb3ZlcicpOwogICAgfQoKICAgICR4cmRzX3BhcnNlX2NiID0gYXJyYXkoJ0F1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludCcsICdjb25zdW1lckZyb21YUkRTJyk7CgogICAgbGlzdCgkcnBfdXJsX2FmdGVyX3JlZGlyZWN0cywgJGVuZHBvaW50cykgPQogICAgICAgIEF1dGhfWWFkaXNfZ2V0U2VydmljZUVuZHBvaW50cygkcmVseWluZ19wYXJ0eV91cmwsICR4cmRzX3BhcnNlX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzY292ZXJfZnVuY3Rpb24sICRmZXRjaGVyKTsKCiAgICBpZiAoJHJwX3VybF9hZnRlcl9yZWRpcmVjdHMgIT0gJHJlbHlpbmdfcGFydHlfdXJsKSB7CiAgICAgICAgLy8gVmVyaWZpY2F0aW9uIGNhdXNlZCBhIHJlZGlyZWN0CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRkaXNjb3Zlcl9mdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRyZWx5aW5nX3BhcnR5X3VybCwgJiRmZXRjaGVyKSk7CgogICAgJHJldHVybl90b191cmxzID0gYXJyYXkoKTsKICAgICRtYXRjaGluZ19lbmRwb2ludHMgPSBBdXRoX09wZW5JRF9leHRyYWN0UmV0dXJuVVJMKCRlbmRwb2ludHMpOwoKICAgIGZvcmVhY2ggKCRtYXRjaGluZ19lbmRwb2ludHMgYXMgJGUpIHsKICAgICAgICAkcmV0dXJuX3RvX3VybHNbXSA9ICRlLT5zZXJ2ZXJfdXJsOwogICAgfQoKICAgIHJldHVybiAkcmV0dXJuX3RvX3VybHM7Cn0KCi8qCiAqIFZlcmlmeSB0aGF0IGEgcmV0dXJuX3RvIFVSTCBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHJlYWxtLgogKgogKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBhIGRpc2NvdmVyeSBVUkwsIHBlcmZvcm1zIFlhZGlzIGRpc2NvdmVyeSBvbgogKiBpdCwgbWFrZXMgc3VyZSB0aGF0IHRoZSBVUkwgZG9lcyBub3QgcmVkaXJlY3QsIHBhcnNlcyBvdXQgdGhlCiAqIHJldHVybl90byBVUkxzLCBhbmQgZmluYWxseSBjaGVja3MgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHJldHVybl90bwogKiBVUkwgbWF0Y2hlcyB0aGUgcmV0dXJuX3RvLgogKgogKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJldHVybl90byBVUkwgaXMgdmFsaWQgZm9yIHRoZSByZWFsbQogKi8KZnVuY3Rpb24gQXV0aF9PcGVuSURfdmVyaWZ5UmV0dXJuVG8oJHJlYWxtX3N0ciwgJHJldHVybl90bywgJGZldGNoZXIsCiAgICAgICAgICAgICAgJF92cmZ5PSdBdXRoX09wZW5JRF9nZXRBbGxvd2VkUmV0dXJuVVJMcycpCnsKICAgICRkaXNjb191cmwgPSBBdXRoX09wZW5JRF9UcnVzdFJvb3Q6OmJ1aWxkRGlzY292ZXJ5VVJMKCRyZWFsbV9zdHIpOwoKICAgIGlmICgkZGlzY29fdXJsID09PSBmYWxzZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkYWxsb3dhYmxlX3VybHMgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgkX3ZyZnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRkaXNjb191cmwsICRmZXRjaGVyKSk7CgogICAgLy8gVGhlIHJlYWxtX3N0ciBjb3VsZCBub3QgYmUgcGFyc2VkLgogICAgaWYgKCRhbGxvd2FibGVfdXJscyA9PT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKEF1dGhfT3BlbklEX3JldHVyblRvTWF0Y2hlcygkYWxsb3dhYmxlX3VybHMsICRyZXR1cm5fdG8pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/OpenID/URINorm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBVUkkgbm9ybWFsaXphdGlvbiByb3V0aW5lcy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgpyZXF1aXJlX29uY2UgJ0F1dGgvWWFkaXMvTWlzYy5waHAnOwoKLy8gZnJvbSBhcHBlbmRpeCBCIG9mIHJmYyAzOTg2IChodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCkKZnVuY3Rpb24gQXV0aF9PcGVuSURfZ2V0VVJJUGF0dGVybigpCnsKICAgIHJldHVybiAnJl4oKFteOi8/I10rKTopPygvLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPyYnOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRBdXRob3JpdHlQYXR0ZXJuKCkKewogICAgcmV0dXJuICcvXihbXkBdKkApPyhbXjpdKikoOi4qKT8vJzsKfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfZ2V0RW5jb2RlZFBhdHRlcm4oKQp7CiAgICByZXR1cm4gJy8lKFswLTlBLUZhLWZdezJ9KS8nOwp9CgojIGdlbi1kZWxpbXMgID0gIjoiIC8gIi8iIC8gIj8iIC8gIiMiIC8gIlsiIC8gIl0iIC8gIkAiCiMKIyBzdWItZGVsaW1zICA9ICIhIiAvICIkIiAvICImIiAvICInIiAvICIoIiAvICIpIgojICAgICAgICAgICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAiOyIgLyAiPSIKIwojIHVucmVzZXJ2ZWQgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRVUkxJbGxlZ2FsQ2hhclJFKCkKewogICAgcmV0dXJuICIvKFteLUEtWmEtejAtOTpcL1w/I1xbXF1AXCFcJCYnXChcKVwqXCssOz1cLl9+XCVdKS8iOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRVbnJlc2VydmVkKCkKewogICAgJF91bnJlc2VydmVkID0gYXJyYXkoKTsKICAgIGZvciAoJGkgPSAwOyAkaSA8IDI1NjsgJGkrKykgewogICAgICAgICRfdW5yZXNlcnZlZFskaV0gPSBmYWxzZTsKICAgIH0KCiAgICBmb3IgKCRpID0gb3JkKCdBJyk7ICRpIDw9IG9yZCgnWicpOyAkaSsrKSB7CiAgICAgICAgJF91bnJlc2VydmVkWyRpXSA9IHRydWU7CiAgICB9CgogICAgZm9yICgkaSA9IG9yZCgnMCcpOyAkaSA8PSBvcmQoJzknKTsgJGkrKykgewogICAgICAgICRfdW5yZXNlcnZlZFskaV0gPSB0cnVlOwogICAgfQoKICAgIGZvciAoJGkgPSBvcmQoJ2EnKTsgJGkgPD0gb3JkKCd6Jyk7ICRpKyspIHsKICAgICAgICAkX3VucmVzZXJ2ZWRbJGldID0gdHJ1ZTsKICAgIH0KCiAgICAkX3VucmVzZXJ2ZWRbb3JkKCctJyldID0gdHJ1ZTsKICAgICRfdW5yZXNlcnZlZFtvcmQoJy4nKV0gPSB0cnVlOwogICAgJF91bnJlc2VydmVkW29yZCgnXycpXSA9IHRydWU7CiAgICAkX3VucmVzZXJ2ZWRbb3JkKCd+JyldID0gdHJ1ZTsKCiAgICByZXR1cm4gJF91bnJlc2VydmVkOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9nZXRFc2NhcGVSRSgpCnsKICAgICRwYXJ0cyA9IGFycmF5KCk7CiAgICBmb3JlYWNoIChhcnJheV9tZXJnZShBdXRoX1lhZGlzX2dldFVDU0NoYXJzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoX1lhZGlzX2dldElQcml2YXRlQ2hhcnMoKSkgYXMgJHBhaXIpIHsKICAgICAgICBsaXN0KCRtLCAkbikgPSAkcGFpcjsKICAgICAgICAkcGFydHNbXSA9IHNwcmludGYoIiVzLSVzIiwgY2hyKCRtKSwgY2hyKCRuKSk7CiAgICB9CgogICAgcmV0dXJuIHNwcmludGYoJ1slc10nLCBpbXBsb2RlKCcnLCAkcGFydHMpKTsKfQoKZnVuY3Rpb24gQXV0aF9PcGVuSURfcGN0X2VuY29kZWRfcmVwbGFjZV91bnJlc2VydmVkKCRtbykKewogICAgJF91bnJlc2VydmVkID0gQXV0aF9PcGVuSURfZ2V0VW5yZXNlcnZlZCgpOwoKICAgICRpID0gaW50dmFsKCRtb1sxXSwgMTYpOwogICAgaWYgKCRfdW5yZXNlcnZlZFskaV0pIHsKICAgICAgICByZXR1cm4gY2hyKCRpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoJG1vWzBdKTsKICAgIH0KCiAgICByZXR1cm4gJG1vWzBdOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9wY3RfZW5jb2RlZF9yZXBsYWNlKCRtbykKewogICAgcmV0dXJuIGNocihpbnR2YWwoJG1vWzFdLCAxNikpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF9yZW1vdmVfZG90X3NlZ21lbnRzKCRwYXRoKQp7CiAgICAkcmVzdWx0X3NlZ21lbnRzID0gYXJyYXkoKTsKCiAgICB3aGlsZSAoJHBhdGgpIHsKICAgICAgICBpZiAoQXV0aF9ZYWRpc19zdGFydHN3aXRoKCRwYXRoLCAnLi4vJykpIHsKICAgICAgICAgICAgJHBhdGggPSBzdWJzdHIoJHBhdGgsIDMpOwogICAgICAgIH0gZWxzZSBpZiAoQXV0aF9ZYWRpc19zdGFydHN3aXRoKCRwYXRoLCAnLi8nKSkgewogICAgICAgICAgICAkcGF0aCA9IHN1YnN0cigkcGF0aCwgMik7CiAgICAgICAgfSBlbHNlIGlmIChBdXRoX1lhZGlzX3N0YXJ0c3dpdGgoJHBhdGgsICcvLi8nKSkgewogICAgICAgICAgICAkcGF0aCA9IHN1YnN0cigkcGF0aCwgMik7CiAgICAgICAgfSBlbHNlIGlmICgkcGF0aCA9PSAnLy4nKSB7CiAgICAgICAgICAgICRwYXRoID0gJy8nOwogICAgICAgIH0gZWxzZSBpZiAoQXV0aF9ZYWRpc19zdGFydHN3aXRoKCRwYXRoLCAnLy4uLycpKSB7CiAgICAgICAgICAgICRwYXRoID0gc3Vic3RyKCRwYXRoLCAzKTsKICAgICAgICAgICAgaWYgKCRyZXN1bHRfc2VnbWVudHMpIHsKICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkcmVzdWx0X3NlZ21lbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoJHBhdGggPT0gJy8uLicpIHsKICAgICAgICAgICAgJHBhdGggPSAnLyc7CiAgICAgICAgICAgIGlmICgkcmVzdWx0X3NlZ21lbnRzKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHJlc3VsdF9zZWdtZW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCgkcGF0aCA9PSAnLi4nKSB8fAogICAgICAgICAgICAgICAgICAgKCRwYXRoID09ICcuJykpIHsKICAgICAgICAgICAgJHBhdGggPSAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgIGlmICgkcGF0aFswXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICRpID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaSA9IHN0cnBvcygkcGF0aCwgJy8nLCAkaSk7CiAgICAgICAgICAgIGlmICgkaSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRpID0gc3RybGVuKCRwYXRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0X3NlZ21lbnRzW10gPSBzdWJzdHIoJHBhdGgsIDAsICRpKTsKICAgICAgICAgICAgJHBhdGggPSBzdWJzdHIoJHBhdGgsICRpKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGltcGxvZGUoJycsICRyZXN1bHRfc2VnbWVudHMpOwp9CgpmdW5jdGlvbiBBdXRoX09wZW5JRF91cmlub3JtKCR1cmkpCnsKICAgICR1cmlfbWF0Y2hlcyA9IGFycmF5KCk7CiAgICBwcmVnX21hdGNoKEF1dGhfT3BlbklEX2dldFVSSVBhdHRlcm4oKSwgJHVyaSwgJHVyaV9tYXRjaGVzKTsKCiAgICBpZiAoY291bnQoJHVyaV9tYXRjaGVzKSA8IDkpIHsKICAgICAgICBmb3IgKCRpID0gY291bnQoJHVyaV9tYXRjaGVzKTsgJGkgPD0gOTsgJGkrKykgewogICAgICAgICAgICAkdXJpX21hdGNoZXNbXSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICAkaWxsZWdhbF9tYXRjaGVzID0gYXJyYXkoKTsKICAgIHByZWdfbWF0Y2goQXV0aF9PcGVuSURfZ2V0VVJMSWxsZWdhbENoYXJSRSgpLAogICAgICAgICAgICAgICAkdXJpLCAkaWxsZWdhbF9tYXRjaGVzKTsKICAgIGlmICgkaWxsZWdhbF9tYXRjaGVzKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgJHNjaGVtZSA9ICR1cmlfbWF0Y2hlc1syXTsKICAgIGlmICgkc2NoZW1lKSB7CiAgICAgICAgJHNjaGVtZSA9IHN0cnRvbG93ZXIoJHNjaGVtZSk7CiAgICB9CgogICAgJHNjaGVtZSA9ICR1cmlfbWF0Y2hlc1syXTsKICAgIGlmICgkc2NoZW1lID09PSAnJykgewogICAgICAgIC8vIE5vIHNjaGVtZSBzcGVjaWZpZWQKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAkc2NoZW1lID0gc3RydG9sb3dlcigkc2NoZW1lKTsKICAgIGlmICghaW5fYXJyYXkoJHNjaGVtZSwgYXJyYXkoJ2h0dHAnLCAnaHR0cHMnKSkpIHsKICAgICAgICAvLyBOb3QgYW4gYWJzb2x1dGUgSFRUUCBvciBIVFRQUyBVUkkKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAkYXV0aG9yaXR5ID0gJHVyaV9tYXRjaGVzWzRdOwogICAgaWYgKCRhdXRob3JpdHkgPT09ICcnKSB7CiAgICAgICAgLy8gTm90IGFuIGFic29sdXRlIFVSSQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgICRhdXRob3JpdHlfbWF0Y2hlcyA9IGFycmF5KCk7CiAgICBwcmVnX21hdGNoKEF1dGhfT3BlbklEX2dldEF1dGhvcml0eVBhdHRlcm4oKSwKICAgICAgICAgICAgICAgJGF1dGhvcml0eSwgJGF1dGhvcml0eV9tYXRjaGVzKTsKICAgIGlmIChjb3VudCgkYXV0aG9yaXR5X21hdGNoZXMpID09PSAwKSB7CiAgICAgICAgLy8gVVJJIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBhdXRob3JpdHkKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoY291bnQoJGF1dGhvcml0eV9tYXRjaGVzKSA8IDQpIHsKICAgICAgICBmb3IgKCRpID0gY291bnQoJGF1dGhvcml0eV9tYXRjaGVzKTsgJGkgPD0gNDsgJGkrKykgewogICAgICAgICAgICAkYXV0aG9yaXR5X21hdGNoZXNbXSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICBsaXN0KCRfd2hvbGUsICR1c2VyaW5mbywgJGhvc3QsICRwb3J0KSA9ICRhdXRob3JpdHlfbWF0Y2hlczsKCiAgICBpZiAoJHVzZXJpbmZvID09PSBudWxsKSB7CiAgICAgICAgJHVzZXJpbmZvID0gJyc7CiAgICB9CgogICAgaWYgKHN0cnBvcygkaG9zdCwgJyUnKSAhPT0gLTEpIHsKICAgICAgICAkaG9zdCA9IHN0cnRvbG93ZXIoJGhvc3QpOwogICAgICAgICRob3N0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAgICAgICBBdXRoX09wZW5JRF9nZXRFbmNvZGVkUGF0dGVybigpLAogICAgICAgICAgICAgICAgICAnQXV0aF9PcGVuSURfcGN0X2VuY29kZWRfcmVwbGFjZScsICRob3N0KTsKICAgICAgICAvLyBOTyBJRE5BLgogICAgICAgIC8vICRob3N0ID0gdW5pY29kZSgkaG9zdCwgJ3V0Zi04JykuZW5jb2RlKCdpZG5hJyk7CiAgICB9IGVsc2UgewogICAgICAgICRob3N0ID0gc3RydG9sb3dlcigkaG9zdCk7CiAgICB9CgogICAgaWYgKCRwb3J0KSB7CiAgICAgICAgaWYgKCgkcG9ydCA9PSAnOicpIHx8CiAgICAgICAgICAgICgkc2NoZW1lID09ICdodHRwJyAmJiAkcG9ydCA9PSAnOjgwJykgfHwKICAgICAgICAgICAgKCRzY2hlbWUgPT0gJ2h0dHBzJyAmJiAkcG9ydCA9PSAnOjQ0MycpKSB7CiAgICAgICAgICAgICRwb3J0ID0gJyc7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkcG9ydCA9ICcnOwogICAgfQoKICAgICRhdXRob3JpdHkgPSAkdXNlcmluZm8gLiAkaG9zdCAuICRwb3J0OwoKICAgICRwYXRoID0gJHVyaV9tYXRjaGVzWzVdOwogICAgJHBhdGggPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX2dldEVuY29kZWRQYXR0ZXJuKCksCiAgICAgICAgICAgICAgICdBdXRoX09wZW5JRF9wY3RfZW5jb2RlZF9yZXBsYWNlX3VucmVzZXJ2ZWQnLCAkcGF0aCk7CgogICAgJHBhdGggPSBBdXRoX09wZW5JRF9yZW1vdmVfZG90X3NlZ21lbnRzKCRwYXRoKTsKICAgIGlmICghJHBhdGgpIHsKICAgICAgICAkcGF0aCA9ICcvJzsKICAgIH0KCiAgICAkcXVlcnkgPSAkdXJpX21hdGNoZXNbNl07CiAgICBpZiAoJHF1ZXJ5ID09PSBudWxsKSB7CiAgICAgICAgJHF1ZXJ5ID0gJyc7CiAgICB9CgogICAgJGZyYWdtZW50ID0gJHVyaV9tYXRjaGVzWzhdOwogICAgaWYgKCRmcmFnbWVudCA9PT0gbnVsbCkgewogICAgICAgICRmcmFnbWVudCA9ICcnOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkYXV0aG9yaXR5IC4gJHBhdGggLiAkcXVlcnkgLiAkZnJhZ21lbnQ7Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/HTTPFetcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgSFRUUCBmZXRjaGVyIGludGVyZmFjZQogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogUmVxdWlyZSBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkKICovCnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQucGhwIjsKCmRlZmluZSgnQXV0aF9PcGVuSURfRkVUQ0hFUl9NQVhfUkVTUE9OU0VfS0InLCAxMDI0KTsKZGVmaW5lKCdBdXRoX09wZW5JRF9VU0VSX0FHRU5UJywgCiAgICAgICAncGhwLW9wZW5pZC8nLkF1dGhfT3BlbklEX1ZFUlNJT04uJyAocGhwLycucGhwdmVyc2lvbigpLicpJyk7CgpjbGFzcyBBdXRoX1lhZGlzX0hUVFBSZXNwb25zZSB7CiAgICBmdW5jdGlvbiBBdXRoX1lhZGlzX0hUVFBSZXNwb25zZSgkZmluYWxfdXJsID0gbnVsbCwgJHN0YXR1cyA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgPSBudWxsLCAkYm9keSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmZpbmFsX3VybCA9ICRmaW5hbF91cmw7CiAgICAgICAgJHRoaXMtPnN0YXR1cyA9ICRzdGF0dXM7CiAgICAgICAgJHRoaXMtPmhlYWRlcnMgPSAkaGVhZGVyczsKICAgICAgICAkdGhpcy0+Ym9keSA9ICRib2R5OwogICAgfQp9CgovKioKICogVGhpcyBjbGFzcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBIVFRQIGZldGNoZXJzIHRoZSBZYWRpcyBsaWJyYXJ5CiAqIHVzZXMuICBUaGlzIGludGVyZmFjZSBpcyBvbmx5IGltcG9ydGFudCBpZiB5b3UgbmVlZCB0byB3cml0ZSBhIG5ldwogKiBmZXRjaGVyIGZvciBzb21lIHJlYXNvbi4KICoKICogQGFjY2VzcyBwcml2YXRlCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19IVFRQRmV0Y2hlciB7CgogICAgdmFyICR0aW1lb3V0ID0gMjA7IC8vIHRpbWVvdXQgaW4gc2Vjb25kcy4KCiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIGEgVVJMIGNhbiBiZSBmZXRjaGVkLiAgUmV0dXJucyBmYWxzZSBpZiB0aGUgVVJMCiAgICAgKiBzY2hlbWUgaXMgbm90IGFsbG93ZWQgb3IgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGZldGNoZXIKICAgICAqIGltcGxlbWVudGF0aW9uOyByZXR1cm5zIHRydWUgb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmdW5jdGlvbiBjYW5GZXRjaFVSTCgkdXJsKQogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNIVFRQUygkdXJsKSAmJiAhJHRoaXMtPnN1cHBvcnRzU1NMKCkpIHsKICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygiSFRUUFMgVVJMIHVuc3VwcG9ydGVkIGZldGNoaW5nICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXJsKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkdGhpcy0+YWxsb3dlZFVSTCgkdXJsKSkgewogICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCJVUkwgZmV0Y2hpbmcgbm90IGFsbG93ZWQgZm9yICclcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIGEgVVJMIHNob3VsZCBiZSBhbGxvd2VkLiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0bwogICAgICogY29uZm9ybSB0byB5b3VyIGxvY2FsIHBvbGljeS4KICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCB3aWxsIGF0dGVtcHQgdG8gZmV0Y2ggYW55IGh0dHAgb3IgaHR0cHMgVVJMLgogICAgICovCiAgICBmdW5jdGlvbiBhbGxvd2VkVVJMKCR1cmwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5VUkxIYXNBbGxvd2VkU2NoZW1lKCR1cmwpOwogICAgfQoKICAgIC8qKgogICAgICogRG9lcyB0aGlzIGZldGNoZXIgaW1wbGVtZW50YXRpb24gKGFuZCBydW50aW1lKSBzdXBwb3J0IGZldGNoaW5nCiAgICAgKiBIVFRQUyBVUkxzPyAgTWF5IGluc3BlY3QgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBib29sICRzdXBwb3J0IFRydWUgaWYgdGhpcyBmZXRjaGVyIHN1cHBvcnRzIEhUVFBTCiAgICAgKiBmZXRjaGluZzsgZmFsc2UgaWYgbm90LgogICAgICovCiAgICBmdW5jdGlvbiBzdXBwb3J0c1NTTCgpCiAgICB7CiAgICAgICAgdHJpZ2dlcl9lcnJvcigibm90IGltcGxlbWVudGVkIiwgRV9VU0VSX0VSUk9SKTsKICAgIH0KCiAgICAvKioKICAgICAqIElzIHRoaXMgYW4gaHR0cHMgVVJMPwogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBpc0hUVFBTKCR1cmwpCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKXByZWdfbWF0Y2goJy9eaHR0cHM6XC9cLy9pJywgJHVybCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyB0aGlzIGFuIGh0dHAgb3IgaHR0cHMgVVJMPwogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBVUkxIYXNBbGxvd2VkU2NoZW1lKCR1cmwpCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKXByZWdfbWF0Y2goJy9eaHR0cHM/OlwvXC8vaScsICR1cmwpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9maW5kUmVkaXJlY3QoJGhlYWRlcnMsICR1cmwpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGxpbmUpIHsKICAgICAgICAgICAgaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRsaW5lKSwgImxvY2F0aW9uOiAiKSA9PT0gMCkgewogICAgICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgiICIsICRsaW5lLCAyKTsKICAgICAgICAgICAgICAgICRsb2MgPSAkcGFydHNbMV07CiAgICAgICAgICAgICAgICAkcHBvcyA9IHN0cnBvcygkbG9jLCAiOi8vIik7CiAgICAgICAgICAgICAgICBpZiAoJHBwb3MgPT09IGZhbHNlIHx8ICRwcG9zID4gc3RycG9zKCRsb2MsICIvIikpIHsKICAgICAgICAgICAgICAgICAgLyogbm8gaG9zdDsgYWRkIGl0ICovCiAgICAgICAgICAgICAgICAgICRocG9zID0gc3RycG9zKCR1cmwsICI6Ly8iKTsKICAgICAgICAgICAgICAgICAgJHBydCA9IHN1YnN0cigkdXJsLCAwLCAkaHBvcyszKTsKICAgICAgICAgICAgICAgICAgJHVybCA9IHN1YnN0cigkdXJsLCAkaHBvcyszKTsKICAgICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkbG9jLCAwLCAxKSA9PSAiLyIpIHsKICAgICAgICAgICAgICAgICAgICAvKiBhYnNvbHV0ZSBwYXRoICovCiAgICAgICAgICAgICAgICAgICAgJGZzcG9zID0gc3RycG9zKCR1cmwsICIvIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmc3BvcykgJGxvYyA9ICRwcnQuc3Vic3RyKCR1cmwsIDAsICRmc3BvcykuJGxvYzsKICAgICAgICAgICAgICAgICAgICBlbHNlICRsb2MgPSAkcHJ0LiR1cmwuJGxvYzsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKiByZWxhdGl2ZSBwYXRoICovCiAgICAgICAgICAgICAgICAgICAgJHBwID0gJHBydDsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgICAgICAgICAgJHhwb3MgPSBzdHJwb3MoJHVybCwgIi8iKTsKICAgICAgICAgICAgICAgICAgICAgIGlmICgkeHBvcyA9PT0gZmFsc2UpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgJGFwb3MgPSBzdHJwb3MoJHVybCwgIj8iKTsKICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXBvcyAhPT0gZmFsc2UgJiYgJGFwb3MgPCAkeHBvcykgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAkYXBvcyA9IHN0cnBvcygkdXJsLCAiJiIpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCRhcG9zICE9PSBmYWxzZSAmJiAkYXBvcyA8ICR4cG9zKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICRwcCAuPSBzdWJzdHIoJHVybCwgMCwgJHhwb3MrMSk7CiAgICAgICAgICAgICAgICAgICAgICAkdXJsID0gc3Vic3RyKCR1cmwsICR4cG9zKzEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbG9jID0gJHBwLiRsb2M7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkbG9jOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2hlcyB0aGUgc3BlY2lmaWVkIFVSTCB1c2luZyBvcHRpb25hbCBleHRyYSBoZWFkZXJzIGFuZAogICAgICogcmV0dXJucyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gYmUgZmV0Y2hlZC4KICAgICAqIEBwYXJhbSBhcnJheSAkZXh0cmFfaGVhZGVycyBBbiBhcnJheSBvZiBoZWFkZXIgc3RyaW5ncwogICAgICogKGUuZy4gIkFjY2VwdDogdGV4dC9odG1sIikuCiAgICAgKiBAcmV0dXJuIG1peGVkICRyZXN1bHQgQW4gYXJyYXkgb2YgKCRjb2RlLCAkdXJsLCAkaGVhZGVycywKICAgICAqICRib2R5KSBpZiB0aGUgVVJMIGNvdWxkIGJlIGZldGNoZWQ7IG51bGwgaWYgdGhlIFVSTCBkb2VzIG5vdAogICAgICogcGFzcyB0aGUgVVJMSGFzQWxsb3dlZFNjaGVtZSBjaGVjayBvciBpZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UKICAgICAqIGlzIG1hbGZvcm1lZC4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0KCR1cmwsICRoZWFkZXJzID0gbnVsbCkKICAgIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCJub3QgaW1wbGVtZW50ZWQiLCBFX1VTRVJfRVJST1IpOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/Manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBZYWRpcyBzZXJ2aWNlIG1hbmFnZXIgdG8gYmUgdXNlZCBkdXJpbmcgeWFkaXMtZHJpdmVuIGF1dGhlbnRpY2F0aW9uCiAqIGF0dGVtcHRzLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCgovKioKICogVGhlIGJhc2Ugc2Vzc2lvbiBjbGFzcyB1c2VkIGJ5IHRoZSBBdXRoX1lhZGlzX01hbmFnZXIuICBUaGlzCiAqIGNsYXNzIHdyYXBzIHRoZSBkZWZhdWx0IFBIUCBzZXNzaW9uIG1hY2hpbmVyeSBhbmQgc2hvdWxkIGJlCiAqIHN1YmNsYXNzZWQgaWYgeW91ciBhcHBsaWNhdGlvbiBkb2Vzbid0IHVzZSBQSFAgc2Vzc2lvbmluZy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX1lhZGlzX1BIUFNlc3Npb24gewogICAgLyoqCiAgICAgKiBTZXQgYSBzZXNzaW9uIGtleS92YWx1ZSBwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNlc3Npb24ga2V5IHRvIGFkZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQgdG8gdGhlIHNlc3Npb24uCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldCgkbmFtZSwgJHZhbHVlKQogICAgewogICAgICAgICRfU0VTU0lPTlskbmFtZV0gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBrZXkncyB2YWx1ZSBmcm9tIHRoZSBzZXNzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGtleSB0byByZXRyaWV2ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHQgVGhlIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUga2V5CiAgICAgKiBpcyBub3QgZm91bmQgaW4gdGhlIHNlc3Npb24uCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkcmVzdWx0IFRoZSBrZXkncyB2YWx1ZSBpbiB0aGUgc2Vzc2lvbiBvcgogICAgICogJGRlZmF1bHQgaWYgaXQgaXNuJ3QgZm91bmQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldCgkbmFtZSwgJGRlZmF1bHQ9bnVsbCkKICAgIHsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJF9TRVNTSU9OKSkgewogICAgICAgICAgICByZXR1cm4gJF9TRVNTSU9OWyRuYW1lXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIHBhaXIgZnJvbSB0aGUgc2Vzc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gcmVtb3ZlLgogICAgICovCiAgICBmdW5jdGlvbiBkZWwoJG5hbWUpCiAgICB7CiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWyRuYW1lXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzZXNzaW9uIGluIGFycmF5IGZvcm0uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvbnRlbnRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJF9TRVNTSU9OOwogICAgfQp9CgovKioKICogQSBzZXNzaW9uIGhlbHBlciBjbGFzcyBkZXNpZ25lZCB0byB0cmFuc2xhdGUgYmV0d2VlbiBhcnJheXMgYW5kCiAqIG9iamVjdHMuICBOb3RlIHRoYXQgdGhlIGNsYXNzIHVzZWQgbXVzdCBoYXZlIGEgY29uc3RydWN0b3IgdGhhdAogKiB0YWtlcyBubyBwYXJhbWV0ZXJzLiAgVGhpcyBpcyBub3QgYSBnZW5lcmFsIHNvbHV0aW9uLCBidXQgaXQgd29ya3MKICogZm9yIGR1bWIgb2JqZWN0cyB0aGF0IGp1c3QgbmVlZCB0byBoYXZlIGF0dHJpYnV0ZXMgc2V0LiAgVGhlIGlkZWEKICogaXMgdGhhdCB5b3UnbGwgc3ViY2xhc3MgdGhpcyBhbmQgb3ZlcnJpZGUgJHRoaXMtPmNoZWNrKCRkYXRhKSAtPgogKiBib29sIHRvIGltcGxlbWVudCB5b3VyIG93biBzZXNzaW9uIGRhdGEgdmFsaWRhdGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX1lhZGlzX1Nlc3Npb25Mb2FkZXIgewogICAgLyoqCiAgICAgKiBPdmVycmlkZSB0aGlzLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBjaGVjaygkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgc2Vzc2lvbiBkYXRhIHZhbHVlIChhbiBhcnJheSksIHRoaXMgY3JlYXRlcyBhbiBvYmplY3QKICAgICAqIChyZXR1cm5lZCBieSAkdGhpcy0+bmV3T2JqZWN0KCkpIHdob3NlIGF0dHJpYnV0ZXMgYW5kIHZhbHVlcwogICAgICogYXJlIHRob3NlIGluICRkYXRhLiAgUmV0dXJucyBudWxsIGlmICRkYXRhIGxhY2tzIGtleXMgZm91bmQgaW4KICAgICAqICR0aGlzLT5yZXF1aXJlZEtleXMoKS4gIFJldHVybnMgbnVsbCBpZiAkdGhpcy0+Y2hlY2soJGRhdGEpCiAgICAgKiBldmFsdWF0ZXMgdG8gZmFsc2UuICBSZXR1cm5zIG51bGwgaWYgJHRoaXMtPm5ld09iamVjdCgpCiAgICAgKiBldmFsdWF0ZXMgdG8gZmFsc2UuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZyb21TZXNzaW9uKCRkYXRhKQogICAgewogICAgICAgIGlmICghJGRhdGEpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcmVxdWlyZWQgPSAkdGhpcy0+cmVxdWlyZWRLZXlzKCk7CgogICAgICAgIGZvcmVhY2ggKCRyZXF1aXJlZCBhcyAkaykgewogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGssICRkYXRhKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPmNoZWNrKCRkYXRhKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gYXJyYXlfbWVyZ2UoJGRhdGEsICR0aGlzLT5wcmVwYXJlRm9yTG9hZCgkZGF0YSkpOwogICAgICAgICRvYmogPSAkdGhpcy0+bmV3T2JqZWN0KCRkYXRhKTsKCiAgICAgICAgaWYgKCEkb2JqKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHJlcXVpcmVkIGFzICRrKSB7CiAgICAgICAgICAgICRvYmotPiRrID0gJGRhdGFbJGtdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlcyB0aGUgZGF0YSBhcnJheSBieSBtYWtpbmcgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzLgogICAgICogUmV0dXJucyBhbiBhcnJheSB3aG9zZSBrZXlzIGFuZCB2YWx1ZXMgd2lsbCBiZSB1c2VkIHRvIHVwZGF0ZQogICAgICogdGhlIG9yaWdpbmFsIGRhdGEgYXJyYXkgYmVmb3JlIGNhbGxpbmcgJHRoaXMtPm5ld09iamVjdCgkZGF0YSkuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByZXBhcmVGb3JMb2FkKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGxvYWRlcidzIGNsYXNzLCB1c2luZyB0aGUKICAgICAqIHNlc3Npb24gZGF0YSB0byBjb25zdHJ1Y3QgaXQgaWYgbmVjZXNzYXJ5LiAgVGhlIG9iamVjdCBuZWVkCiAgICAgKiBvbmx5IGJlIGNyZWF0ZWQ7ICR0aGlzLT5mcm9tU2Vzc2lvbigpIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcKICAgICAqIHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBuZXdPYmplY3QoJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGtleXMgYW5kIHZhbHVlcyBidWlsdCBmcm9tIHRoZSBhdHRyaWJ1dGVzCiAgICAgKiBvZiAkb2JqLiAgSWYgJHRoaXMtPnByZXBhcmVGb3JTYXZlKCRvYmopIHJldHVybnMgYW4gYXJyYXksIGl0cyBrZXlzCiAgICAgKiBhbmQgdmFsdWVzIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgJGRhdGEgYXJyYXkgb2YgYXR0cmlidXRlcwogICAgICogZnJvbSAkb2JqLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiB0b1Nlc3Npb24oJG9iaikKICAgIHsKICAgICAgICAkZGF0YSA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJG9iaiBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkZGF0YVska10gPSAkdjsKICAgICAgICB9CgogICAgICAgICRleHRyYSA9ICR0aGlzLT5wcmVwYXJlRm9yU2F2ZSgkb2JqKTsKCiAgICAgICAgaWYgKCRleHRyYSAmJiBpc19hcnJheSgkZXh0cmEpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRleHRyYSBhcyAkayA9PiAkdikgewogICAgICAgICAgICAgICAgJGRhdGFbJGtdID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIE92ZXJyaWRlIHRoaXMuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByZXBhcmVGb3JTYXZlKCRvYmopCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9Cn0KCi8qKgogKiBBIGNvbmNyZXRlIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50cy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnRMb2FkZXIgZXh0ZW5kcyBBdXRoX1lhZGlzX1Nlc3Npb25Mb2FkZXIgewogICAgZnVuY3Rpb24gbmV3T2JqZWN0KCRkYXRhKQogICAgewogICAgICAgIHJldHVybiBuZXcgQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50KCk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVxdWlyZWRLZXlzKCkKICAgIHsKICAgICAgICAkb2JqID0gbmV3IEF1dGhfT3BlbklEX1NlcnZpY2VFbmRwb2ludCgpOwogICAgICAgICRkYXRhID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkb2JqIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICRkYXRhW10gPSAkazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoZWNrKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiBpc19hcnJheSgkZGF0YVsndHlwZV91cmlzJ10pOwogICAgfQp9CgovKioKICogQSBjb25jcmV0ZSBsb2FkZXIgaW1wbGVtZW50YXRpb24gZm9yIEF1dGhfWWFkaXNfTWFuYWdlcnMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19NYW5hZ2VyTG9hZGVyIGV4dGVuZHMgQXV0aF9ZYWRpc19TZXNzaW9uTG9hZGVyIHsKICAgIGZ1bmN0aW9uIHJlcXVpcmVkS2V5cygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCdzdGFydGluZ191cmwnLAogICAgICAgICAgICAgICAgICAgICAneWFkaXNfdXJsJywKICAgICAgICAgICAgICAgICAgICAgJ3NlcnZpY2VzJywKICAgICAgICAgICAgICAgICAgICAgJ3Nlc3Npb25fa2V5JywKICAgICAgICAgICAgICAgICAgICAgJ19jdXJyZW50JywKICAgICAgICAgICAgICAgICAgICAgJ3N0YWxlJyk7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3T2JqZWN0KCRkYXRhKQogICAgewogICAgICAgIHJldHVybiBuZXcgQXV0aF9ZYWRpc19NYW5hZ2VyKCRkYXRhWydzdGFydGluZ191cmwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJ3lhZGlzX3VybCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVsnc2VydmljZXMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJ3Nlc3Npb25fa2V5J10pOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoZWNrKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiBpc19hcnJheSgkZGF0YVsnc2VydmljZXMnXSk7CiAgICB9CgogICAgZnVuY3Rpb24gcHJlcGFyZUZvckxvYWQoJGRhdGEpCiAgICB7CiAgICAgICAgJGxvYWRlciA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnRMb2FkZXIoKTsKICAgICAgICAkc2VydmljZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRkYXRhWydzZXJ2aWNlcyddIGFzICRzKSB7CiAgICAgICAgICAgICRzZXJ2aWNlc1tdID0gJGxvYWRlci0+ZnJvbVNlc3Npb24oJHMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ3NlcnZpY2VzJyA9PiAkc2VydmljZXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHByZXBhcmVGb3JTYXZlKCRvYmopCiAgICB7CiAgICAgICAgJGxvYWRlciA9IG5ldyBBdXRoX09wZW5JRF9TZXJ2aWNlRW5kcG9pbnRMb2FkZXIoKTsKICAgICAgICAkc2VydmljZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRvYmotPnNlcnZpY2VzIGFzICRzKSB7CiAgICAgICAgICAgICRzZXJ2aWNlc1tdID0gJGxvYWRlci0+dG9TZXNzaW9uKCRzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5KCdzZXJ2aWNlcycgPT4gJHNlcnZpY2VzKTsKICAgIH0KfQoKLyoqCiAqIFRoZSBZYWRpcyBzZXJ2aWNlIG1hbmFnZXIgd2hpY2ggc3RvcmVzIHN0YXRlIGluIGEgc2Vzc2lvbiBhbmQKICogaXRlcmF0ZXMgb3ZlciA8U2VydmljZT4gZWxlbWVudHMgaW4gYSBZYWRpcyBYUkRTIGRvY3VtZW50IGFuZCBsZXRzCiAqIGEgY2FsbGVyIGF0dGVtcHQgdG8gdXNlIGVhY2ggb25lLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBZYWRpcwogKiBsaWJyYXJ5IGludGVybmFsbHkuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19NYW5hZ2VyIHsKCiAgICAvKioKICAgICAqIEludGlhbGl6ZSBhIG5ldyB5YWRpcyBzZXJ2aWNlIG1hbmFnZXIuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEF1dGhfWWFkaXNfTWFuYWdlcigkc3RhcnRpbmdfdXJsLCAkeWFkaXNfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmljZXMsICRzZXNzaW9uX2tleSkKICAgIHsKICAgICAgICAvLyBUaGUgVVJMIHRoYXQgd2FzIHVzZWQgdG8gaW5pdGlhdGUgdGhlIFlhZGlzIHByb3RvY29sCiAgICAgICAgJHRoaXMtPnN0YXJ0aW5nX3VybCA9ICRzdGFydGluZ191cmw7CgogICAgICAgIC8vIFRoZSBVUkwgYWZ0ZXIgZm9sbG93aW5nIHJlZGlyZWN0cyAodGhlIGlkZW50aWZpZXIpCiAgICAgICAgJHRoaXMtPnlhZGlzX3VybCA9ICR5YWRpc191cmw7CgogICAgICAgIC8vIExpc3Qgb2Ygc2VydmljZSBlbGVtZW50cwogICAgICAgICR0aGlzLT5zZXJ2aWNlcyA9ICRzZXJ2aWNlczsKCiAgICAgICAgJHRoaXMtPnNlc3Npb25fa2V5ID0gJHNlc3Npb25fa2V5OwoKICAgICAgICAvLyBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2VydmljZSBvYmplY3QKICAgICAgICAkdGhpcy0+X2N1cnJlbnQgPSBudWxsOwoKICAgICAgICAvLyBTdGFsZSBmbGFnIGZvciBjbGVhbnVwIGlmIFBIUCBsaWIgaGFzIHRyb3VibGUuCiAgICAgICAgJHRoaXMtPnN0YWxlID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gbGVuZ3RoKCkKICAgIHsKICAgICAgICAvLyBIb3cgbWFueSB1bnRyaWVkIHNlcnZpY2VzIHJlbWFpbj8KICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPnNlcnZpY2VzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbmV4dCBzZXJ2aWNlCiAgICAgKgogICAgICogJHRoaXMtPmN1cnJlbnQoKSB3aWxsIGNvbnRpbnVlIHRvIHJldHVybiB0aGF0IHNlcnZpY2UgdW50aWwgdGhlCiAgICAgKiBuZXh0IGNhbGwgdG8gdGhpcyBtZXRob2QuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG5leHRTZXJ2aWNlKCkKICAgIHsKCiAgICAgICAgaWYgKCR0aGlzLT5zZXJ2aWNlcykgewogICAgICAgICAgICAkdGhpcy0+X2N1cnJlbnQgPSBhcnJheV9zaGlmdCgkdGhpcy0+c2VydmljZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5fY3VycmVudCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl9jdXJyZW50OwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGN1cnJlbnQoKQogICAgewogICAgICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBzZXJ2aWNlLgogICAgICAgIC8vIFJldHVybnMgTm9uZSBpZiB0aGVyZSBhcmUgbm8gc2VydmljZXMgbGVmdC4KICAgICAgICByZXR1cm4gJHRoaXMtPl9jdXJyZW50OwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZvclVSTCgkdXJsKQogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkdXJsLCBhcnJheSgkdGhpcy0+c3RhcnRpbmdfdXJsLCAkdGhpcy0+eWFkaXNfdXJsKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gc3RhcnRlZCgpCiAgICB7CiAgICAgICAgLy8gSGFzIHRoZSBmaXJzdCBzZXJ2aWNlIGJlZW4gcmV0dXJuZWQ/CiAgICAgICAgcmV0dXJuICR0aGlzLT5fY3VycmVudCAhPT0gbnVsbDsKICAgIH0KfQoKLyoqCiAqIFN0YXRlIG1hbmFnZW1lbnQgZm9yIGRpc2NvdmVyeS4KICoKICogSGlnaC1sZXZlbCB1c2FnZSBwYXR0ZXJuIGlzIHRvIGNhbGwgLmdldE5leHRTZXJ2aWNlKGRpc2NvdmVyKSBpbgogKiBvcmRlciB0byBmaW5kIHRoZSBuZXh0IGF2YWlsYWJsZSBzZXJ2aWNlIGZvciB0aGlzIHVzZXIgZm9yIHRoaXMKICogc2Vzc2lvbi4gT25jZSBhIHJlcXVlc3QgY29tcGxldGVzLCBjYWxsIC5jbGVhbnVwKCkgdG8gY2xlYW4gdXAgdGhlCiAqIHNlc3Npb24gc3RhdGUuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19EaXNjb3ZlcnkgewoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHZhciAkREVGQVVMVF9TVUZGSVggPSAnYXV0aCc7CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgdmFyICRQUkVGSVggPSAnX3lhZGlzX3NlcnZpY2VzXyc7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIGEgZGlzY292ZXJ5IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gQXV0aF9ZYWRpc19QSFBTZXNzaW9uICRzZXNzaW9uIEFuIG9iamVjdCB3aGljaAogICAgICogaW1wbGVtZW50cyB0aGUgQXV0aF9ZYWRpc19QSFBTZXNzaW9uIEFQSS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybCBUaGUgVVJMIG9uIHdoaWNoIHRvIGF0dGVtcHQgZGlzY292ZXJ5LgogICAgICogQHBhcmFtIHN0cmluZyAkc2Vzc2lvbl9rZXlfc3VmZml4IFRoZSBvcHRpb25hbCBzZXNzaW9uIGtleQogICAgICogc3VmZml4IG92ZXJyaWRlLgogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX1lhZGlzX0Rpc2NvdmVyeSgkc2Vzc2lvbiwgJHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vzc2lvbl9rZXlfc3VmZml4ID0gbnVsbCkKICAgIHsKICAgICAgICAvLy8gSW5pdGlhbGl6ZSBhIGRpc2NvdmVyeSBvYmplY3QKICAgICAgICAkdGhpcy0+c2Vzc2lvbiA9ICRzZXNzaW9uOwogICAgICAgICR0aGlzLT51cmwgPSAkdXJsOwogICAgICAgIGlmICgkc2Vzc2lvbl9rZXlfc3VmZml4ID09PSBudWxsKSB7CiAgICAgICAgICAgICRzZXNzaW9uX2tleV9zdWZmaXggPSAkdGhpcy0+REVGQVVMVF9TVUZGSVg7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2Vzc2lvbl9rZXlfc3VmZml4ID0gJHNlc3Npb25fa2V5X3N1ZmZpeDsKICAgICAgICAkdGhpcy0+c2Vzc2lvbl9rZXkgPSAkdGhpcy0+UFJFRklYIC4gJHRoaXMtPnNlc3Npb25fa2V5X3N1ZmZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbmV4dCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIGZvciB0aGUgcGFpciBvZgogICAgICogdXNlcl9pbnB1dCBhbmQgc2Vzc2lvbi4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGZhbGxiYWNrLgogICAgICovCiAgICBmdW5jdGlvbiBnZXROZXh0U2VydmljZSgkZGlzY292ZXJfY2IsICRmZXRjaGVyKQogICAgewogICAgICAgICRtYW5hZ2VyID0gJHRoaXMtPmdldE1hbmFnZXIoKTsKICAgICAgICBpZiAoISRtYW5hZ2VyIHx8ICghJG1hbmFnZXItPnNlcnZpY2VzKSkgewogICAgICAgICAgICAkdGhpcy0+ZGVzdHJveU1hbmFnZXIoKTsKCiAgICAgICAgICAgIGxpc3QoJHlhZGlzX3VybCwgJHNlcnZpY2VzKSA9IGNhbGxfdXNlcl9mdW5jKCRkaXNjb3Zlcl9jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiRmZXRjaGVyKTsKCiAgICAgICAgICAgICRtYW5hZ2VyID0gJHRoaXMtPmNyZWF0ZU1hbmFnZXIoJHNlcnZpY2VzLCAkeWFkaXNfdXJsKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWFuYWdlcikgewogICAgICAgICAgICAkbG9hZGVyID0gbmV3IEF1dGhfWWFkaXNfTWFuYWdlckxvYWRlcigpOwogICAgICAgICAgICAkc2VydmljZSA9ICRtYW5hZ2VyLT5uZXh0U2VydmljZSgpOwogICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0KCR0aGlzLT5zZXNzaW9uX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUoJGxvYWRlci0+dG9TZXNzaW9uKCRtYW5hZ2VyKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZXJ2aWNlID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2VydmljZTsKICAgIH0KCiAgICAvKioKICAgICAqIENsZWFuIHVwIFlhZGlzLXJlbGF0ZWQgc2VydmljZXMgaW4gdGhlIHNlc3Npb24gYW5kIHJldHVybiB0aGUKICAgICAqIG1vc3QtcmVjZW50bHktYXR0ZW1wdGVkIHNlcnZpY2UgZnJvbSB0aGUgbWFuYWdlciwgaWYgb25lCiAgICAgKiBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICRmb3JjZSBUcnVlIGlmIHRoZSBtYW5hZ2VyIHNob3VsZCBiZSBkZWxldGVkIHJlZ2FyZGxlc3MKICAgICAqIG9mIHdoZXRoZXIgaXQncyBhIG1hbmFnZXIgZm9yICR0aGlzLT51cmwuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNsZWFudXAoJGZvcmNlPWZhbHNlKQogICAgewogICAgICAgICRtYW5hZ2VyID0gJHRoaXMtPmdldE1hbmFnZXIoJGZvcmNlKTsKICAgICAgICBpZiAoJG1hbmFnZXIpIHsKICAgICAgICAgICAgJHNlcnZpY2UgPSAkbWFuYWdlci0+Y3VycmVudCgpOwogICAgICAgICAgICAkdGhpcy0+ZGVzdHJveU1hbmFnZXIoJGZvcmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2VydmljZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlcnZpY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2Vzc2lvbktleSgpCiAgICB7CiAgICAgICAgLy8gR2V0IHRoZSBzZXNzaW9uIGtleSBmb3IgdGhpcyBzdGFydGluZyBVUkwgYW5kIHN1ZmZpeAogICAgICAgIHJldHVybiAkdGhpcy0+UFJFRklYIC4gJHRoaXMtPnNlc3Npb25fa2V5X3N1ZmZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICoKICAgICAqIEBwYXJhbSAkZm9yY2UgVHJ1ZSBpZiB0aGUgbWFuYWdlciBzaG91bGQgYmUgcmV0dXJuZWQgcmVnYXJkbGVzcwogICAgICogb2Ygd2hldGhlciBpdCdzIGEgbWFuYWdlciBmb3IgJHRoaXMtPnVybC4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TWFuYWdlcigkZm9yY2U9ZmFsc2UpCiAgICB7CiAgICAgICAgLy8gRXh0cmFjdCB0aGUgWWFkaXNTZXJ2aWNlTWFuYWdlciBmb3IgdGhpcyBvYmplY3QncyBVUkwgYW5kCiAgICAgICAgLy8gc3VmZml4IGZyb20gdGhlIHNlc3Npb24uCgogICAgICAgICRtYW5hZ2VyX3N0ciA9ICR0aGlzLT5zZXNzaW9uLT5nZXQoJHRoaXMtPmdldFNlc3Npb25LZXkoKSk7CiAgICAgICAgJG1hbmFnZXIgPSBudWxsOwoKICAgICAgICBpZiAoJG1hbmFnZXJfc3RyICE9PSBudWxsKSB7CiAgICAgICAgICAgICRsb2FkZXIgPSBuZXcgQXV0aF9ZYWRpc19NYW5hZ2VyTG9hZGVyKCk7CiAgICAgICAgICAgICRtYW5hZ2VyID0gJGxvYWRlci0+ZnJvbVNlc3Npb24odW5zZXJpYWxpemUoJG1hbmFnZXJfc3RyKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1hbmFnZXIgJiYgKCRtYW5hZ2VyLT5mb3JVUkwoJHRoaXMtPnVybCkgfHwgJGZvcmNlKSkgewogICAgICAgICAgICByZXR1cm4gJG1hbmFnZXI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXIoJHNlcnZpY2VzLCAkeWFkaXNfdXJsID0gbnVsbCkKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmdldFNlc3Npb25LZXkoKTsKICAgICAgICBpZiAoJHRoaXMtPmdldE1hbmFnZXIoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldE1hbmFnZXIoKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc2VydmljZXMpIHsKICAgICAgICAgICAgJGxvYWRlciA9IG5ldyBBdXRoX1lhZGlzX01hbmFnZXJMb2FkZXIoKTsKICAgICAgICAgICAgJG1hbmFnZXIgPSBuZXcgQXV0aF9ZYWRpc19NYW5hZ2VyKCR0aGlzLT51cmwsICR5YWRpc191cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmljZXMsICRrZXkpOwogICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0KCR0aGlzLT5zZXNzaW9uX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUoJGxvYWRlci0+dG9TZXNzaW9uKCRtYW5hZ2VyKSkpOwogICAgICAgICAgICByZXR1cm4gJG1hbmFnZXI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKgogICAgICogQHBhcmFtICRmb3JjZSBUcnVlIGlmIHRoZSBtYW5hZ2VyIHNob3VsZCBiZSBkZWxldGVkIHJlZ2FyZGxlc3MKICAgICAqIG9mIHdoZXRoZXIgaXQncyBhIG1hbmFnZXIgZm9yICR0aGlzLT51cmwuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRlc3Ryb3lNYW5hZ2VyKCRmb3JjZT1mYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmdldE1hbmFnZXIoJGZvcmNlKSAhPT0gbnVsbCkgewogICAgICAgICAgICAka2V5ID0gJHRoaXMtPmdldFNlc3Npb25LZXkoKTsKICAgICAgICAgICAgJHRoaXMtPnNlc3Npb24tPmRlbCgka2V5KTsKICAgICAgICB9CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/Misc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNaXNjZWxsYW5lb3VzIHV0aWxpdHkgdmFsdWVzIGFuZCBmdW5jdGlvbnMgZm9yIE9wZW5JRCBhbmQgWWFkaXMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKZnVuY3Rpb24gQXV0aF9ZYWRpc19nZXRVQ1NDaGFycygpCnsKICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICBhcnJheSgweEEwLCAweEQ3RkYpLAogICAgICAgICAgICAgICAgIGFycmF5KDB4RjkwMCwgMHhGRENGKSwKICAgICAgICAgICAgICAgICBhcnJheSgweEZERjAsIDB4RkZFRiksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHgxMDAwMCwgMHgxRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHgyMDAwMCwgMHgyRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHgzMDAwMCwgMHgzRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg0MDAwMCwgMHg0RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg1MDAwMCwgMHg1RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg2MDAwMCwgMHg2RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg3MDAwMCwgMHg3RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg4MDAwMCwgMHg4RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHg5MDAwMCwgMHg5RkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhBMDAwMCwgMHhBRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhCMDAwMCwgMHhCRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhDMDAwMCwgMHhDRkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhEMDAwMCwgMHhERkZGRCksCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhFMTAwMCwgMHhFRkZGRCkKICAgICAgICAgICAgICAgICApOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2dldElQcml2YXRlQ2hhcnMoKQp7CiAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAgYXJyYXkoMHhFMDAwLCAweEY4RkYpLAogICAgICAgICAgICAgICAgIGFycmF5KDB4RjAwMDAsIDB4RkZGRkQpLAogICAgICAgICAgICAgICAgIGFycmF5KDB4MTAwMDAwLCAweDEwRkZGRCkKICAgICAgICAgICAgICAgICApOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX3BjdF9lc2NhcGVfdW5pY29kZSgkY2hhcl9tYXRjaCkKewogICAgJGMgPSAkY2hhcl9tYXRjaFswXTsKICAgICRyZXN1bHQgPSAiIjsKICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkYyk7ICRpKyspIHsKICAgICAgICAkcmVzdWx0IC49ICIlIi5zcHJpbnRmKCIlWCIsIG9yZCgkY1skaV0pKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX3N0YXJ0c3dpdGgoJHMsICRzdHVmZikKewogICAgcmV0dXJuIHN0cnBvcygkcywgJHN0dWZmKSA9PT0gMDsKfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/ParanoidHTTPFetcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgQ1VSTC1iYXNlZCBIVFRQIGZldGNoZXIgaW1wbGVtZW50YXRpb24uCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBJbnRlcmZhY2UgaW1wb3J0CiAqLwpyZXF1aXJlX29uY2UgIkF1dGgvWWFkaXMvSFRUUEZldGNoZXIucGhwIjsKCnJlcXVpcmVfb25jZSAiQXV0aC9PcGVuSUQucGhwIjsKCi8qKgogKiBBIHBhcmFub2lkIHtAbGluayBBdXRoX1lhZGlzX0hUVFBGZXRjaGVyfSBjbGFzcyB3aGljaCB1c2VzIENVUkwKICogZm9yIGZldGNoaW5nLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfWWFkaXNfUGFyYW5vaWRIVFRQRmV0Y2hlciBleHRlbmRzIEF1dGhfWWFkaXNfSFRUUEZldGNoZXIgewogICAgZnVuY3Rpb24gQXV0aF9ZYWRpc19QYXJhbm9pZEhUVFBGZXRjaGVyKCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVzZXQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmhlYWRlcnMgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5kYXRhID0gIiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3dyaXRlSGVhZGVyKCRjaCwgJGhlYWRlcikKICAgIHsKICAgICAgICBhcnJheV9wdXNoKCR0aGlzLT5oZWFkZXJzLCBydHJpbSgkaGVhZGVyKSk7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkaGVhZGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfd3JpdGVEYXRhKCRjaCwgJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKHN0cmxlbigkdGhpcy0+ZGF0YSkgPiAxMDI0KkF1dGhfT3BlbklEX0ZFVENIRVJfTUFYX1JFU1BPTlNFX0tCKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhIC49ICRkYXRhOwogICAgICAgICAgICByZXR1cm4gc3RybGVuKCRkYXRhKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzIHRoaXMgZmV0Y2hlciBzdXBwb3J0IFNTTCBVUkxzPwogICAgICovCiAgICBmdW5jdGlvbiBzdXBwb3J0c1NTTCgpCiAgICB7CiAgICAgICAgJHYgPSBjdXJsX3ZlcnNpb24oKTsKICAgICAgICBpZihpc19hcnJheSgkdikpIHsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KCdodHRwcycsICR2Wydwcm90b2NvbHMnXSk7CiAgICAgICAgfSBlbHNlaWYgKGlzX3N0cmluZygkdikpIHsKICAgICAgICAgICAgcmV0dXJuIHByZWdfbWF0Y2goJy9PcGVuU1NML2knLCAkdik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldCgkdXJsLCAkZXh0cmFfaGVhZGVycyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y2FuRmV0Y2hVUkwoJHVybCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc3RvcCA9IHRpbWUoKSArICR0aGlzLT50aW1lb3V0OwogICAgICAgICRvZmYgPSAkdGhpcy0+dGltZW91dDsKCiAgICAgICAgJHJlZGlyID0gdHJ1ZTsKCiAgICAgICAgd2hpbGUgKCRyZWRpciAmJiAoJG9mZiA+IDApKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXNldCgpOwoKICAgICAgICAgICAgJGMgPSBjdXJsX2luaXQoKTsKCiAgICAgICAgICAgIGlmICgkYyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEOjpsb2coCiAgICAgICAgICAgICAgICAgICAgImN1cmxfaW5pdCByZXR1cm5lZCBmYWxzZTsgY291bGQgbm90ICIgLgogICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplIGZvciBVUkwgJyVzJyIsICR1cmwpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChkZWZpbmVkKCdDVVJMT1BUX05PU0lHTkFMJykpIHsKICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX05PU0lHTkFMLCB0cnVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWxsb3dlZFVSTCgkdXJsKSkgewogICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygiRmV0Y2hpbmcgVVJMIG5vdCBhbGxvd2VkOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCR0aGlzLCAiX3dyaXRlRGF0YSIpKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCR0aGlzLCAiX3dyaXRlSGVhZGVyIikpOwoKICAgICAgICAgICAgaWYgKCRleHRyYV9oZWFkZXJzKSB7CiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9IVFRQSEVBREVSLCAkZXh0cmFfaGVhZGVycyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjdiA9IGN1cmxfdmVyc2lvbigpOwogICAgICAgICAgICBpZihpc19hcnJheSgkY3YpKSB7CiAgICAgICAgICAgICAgJGN1cmxfdXNlcl9hZ2VudCA9ICdjdXJsLycuJGN2Wyd2ZXJzaW9uJ107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJGN1cmxfdXNlcl9hZ2VudCA9ICRjdjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9VU0VSQUdFTlQsCiAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEX1VTRVJfQUdFTlQuJyAnLiRjdXJsX3VzZXJfYWdlbnQpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9USU1FT1VULCAkb2ZmKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVVJMLCAkdXJsKTsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBCZWdpbiBtb2RpZmljYXRpb24gQ01TTVMgT3BlbklEIE1vZHVsZQogICAgICAgICAgICAgKiBBbGxvdyBPcGVuSUQgbW9kdWxlIHRvIHNwZWNpZnkgQ0EtaW5mbwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKGRlZmluZWQoJ0F1dGhfT3BlbklEX0NVUkxPUFRfQ0FJTkZPJykpIHsKICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLENVUkxPUFRfQ0FJTkZPLEF1dGhfT3BlbklEX0NVUkxPUFRfQ0FJTkZPKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiogRW5kIG1vZGlmaWNhdGlvbiAqLwoKICAgICAgICAgICAgaWYgKGRlZmluZWQoJ0F1dGhfT3BlbklEX1ZFUklGWV9IT1NUJykpIHsKICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCB0cnVlKTsKICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJsX2V4ZWMoJGMpOwoKICAgICAgICAgICAgJGNvZGUgPSBjdXJsX2dldGluZm8oJGMsIENVUkxJTkZPX0hUVFBfQ09ERSk7CiAgICAgICAgICAgICRib2R5ID0gJHRoaXMtPmRhdGE7CiAgICAgICAgICAgICRoZWFkZXJzID0gJHRoaXMtPmhlYWRlcnM7CgogICAgICAgICAgICBpZiAoISRjb2RlKSB7CiAgICAgICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCJHb3Qgbm8gcmVzcG9uc2UgY29kZSB3aGVuIGZldGNoaW5nICVzIiwgJHVybCk7CiAgICAgICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCJDVVJMIGVycm9yICglcyk6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9lcnJubygkYyksIGN1cmxfZXJyb3IoJGMpKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGNvZGUsIGFycmF5KDMwMSwgMzAyLCAzMDMsIDMwNykpKSB7CiAgICAgICAgICAgICAgICAkdXJsID0gJHRoaXMtPl9maW5kUmVkaXJlY3QoJGhlYWRlcnMsICR1cmwpOwogICAgICAgICAgICAgICAgJHJlZGlyID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZWRpciA9IGZhbHNlOwogICAgICAgICAgICAgICAgY3VybF9jbG9zZSgkYyk7CgogICAgICAgICAgICAgICAgaWYgKGRlZmluZWQoJ0F1dGhfT3BlbklEX1ZFUklGWV9IT1NUJykgJiYKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aXNIVFRQUygkdXJsKSkgewogICAgICAgICAgICAgICAgICAgIEF1dGhfT3BlbklEOjpsb2coJ09wZW5JRDogVmVyaWZpZWQgU1NMIGhvc3QgJXMgdXNpbmcgJy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJsL2dldCcsICR1cmwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5ld19oZWFkZXJzID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkaGVhZGVyLCAnOiAnKSkgewogICAgICAgICAgICAgICAgICAgICAgICBsaXN0KCRuYW1lLCAkdmFsdWUpID0gZXhwbG9kZSgnOiAnLCAkaGVhZGVyLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld19oZWFkZXJzWyRuYW1lXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygKICAgICAgICAgICAgICAgICAgICAiU3VjY2Vzc2Z1bGx5IGZldGNoZWQgJyVzJzogR0VUIHJlc3BvbnNlIGNvZGUgJXMiLAogICAgICAgICAgICAgICAgICAgICR1cmwsICRjb2RlKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhfWWFkaXNfSFRUUFJlc3BvbnNlKCR1cmwsICRjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld19oZWFkZXJzLCAkYm9keSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvZmYgPSAkc3RvcCAtIHRpbWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvc3QoJHVybCwgJGJvZHksICRleHRyYV9oZWFkZXJzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jYW5GZXRjaFVSTCgkdXJsKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZXNldCgpOwoKICAgICAgICAkYyA9IGN1cmxfaW5pdCgpOwoKICAgICAgICBpZiAoZGVmaW5lZCgnQ1VSTE9QVF9OT1NJR05BTCcpKSB7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX05PU0lHTkFMLCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1BPU1QsIHRydWUpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRib2R5KTsKICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9USU1FT1VULCAkdGhpcy0+dGltZW91dCk7CiAgICAgICAgY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVVJMLCAkdXJsKTsKICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAogICAgICAgICAgICAgICAgICAgIGFycmF5KCR0aGlzLCAiX3dyaXRlRGF0YSIpKTsKCiAgICAgICAgaWYgKGRlZmluZWQoJ0F1dGhfT3BlbklEX1ZFUklGWV9IT1NUJykpIHsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIHRydWUpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMik7CiAgICAgICAgfQoKICAgICAgICBjdXJsX2V4ZWMoJGMpOwoKICAgICAgICAkY29kZSA9IGN1cmxfZ2V0aW5mbygkYywgQ1VSTElORk9fSFRUUF9DT0RFKTsKCiAgICAgICAgaWYgKCEkY29kZSkgewogICAgICAgICAgICBBdXRoX09wZW5JRDo6bG9nKCJHb3Qgbm8gcmVzcG9uc2UgY29kZSB3aGVuIGZldGNoaW5nICVzIiwgJHVybCk7CiAgICAgICAgICAgIEF1dGhfT3BlbklEOjpsb2coIkNVUkwgZXJyb3IgKCVzKTogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZXJybm8oJGMpLCBjdXJsX2Vycm9yKCRjKSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRlZmluZWQoJ0F1dGhfT3BlbklEX1ZFUklGWV9IT1NUJykgJiYgJHRoaXMtPmlzSFRUUFMoJHVybCkpIHsKICAgICAgICAgICAgQXV0aF9PcGVuSUQ6OmxvZygnT3BlbklEOiBWZXJpZmllZCBTU0wgaG9zdCAlcyB1c2luZyAnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJsL3Bvc3QnLCAkdXJsKTsKICAgICAgICB9CiAgICAgICAgJGJvZHkgPSAkdGhpcy0+ZGF0YTsKCiAgICAgICAgY3VybF9jbG9zZSgkYyk7CgogICAgICAgICRuZXdfaGVhZGVycyA9ICRleHRyYV9oZWFkZXJzOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aGVhZGVycyBhcyAkaGVhZGVyKSB7CiAgICAgICAgICAgIGlmIChzdHJwb3MoJGhlYWRlciwgJzogJykpIHsKICAgICAgICAgICAgICAgIGxpc3QoJG5hbWUsICR2YWx1ZSkgPSBleHBsb2RlKCc6ICcsICRoZWFkZXIsIDIpOwogICAgICAgICAgICAgICAgJG5ld19oZWFkZXJzWyRuYW1lXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIEF1dGhfT3BlbklEOjpsb2coIlN1Y2Nlc3NmdWxseSBmZXRjaGVkICclcyc6IFBPU1QgcmVzcG9uc2UgY29kZSAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAkdXJsLCAkY29kZSk7CgogICAgICAgIHJldHVybiBuZXcgQXV0aF9ZYWRpc19IVFRQUmVzcG9uc2UoJHVybCwgJGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3X2hlYWRlcnMsICRib2R5KTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/ParseHTML.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGlzIHRoZSBIVE1MIHBzZXVkby1wYXJzZXIgZm9yIHRoZSBZYWRpcyBsaWJyYXJ5LgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igc2Nhbm5pbmcgYW4gSFRNTCBzdHJpbmcgdG8gZmluZCBNRVRBCiAqIHRhZ3MgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuICBUaGlzIGlzIHVzZWQgYnkgdGhlIFlhZGlzIGRpc2NvdmVyeQogKiBwcm9jZXNzLiAgVGhpcyBjbGFzcyBtdXN0IGJlIGluc3RhbnRpYXRlZCB0byBiZSB1c2VkLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfWWFkaXNfUGFyc2VIVE1MIHsKCiAgICAvKioKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJF9yZV9mbGFncyA9ICJzaSI7CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgdmFyICRfcmVtb3ZlZF9yZSA9CiAgICAgICAgICAgIjwhLS0uKj8tLT58PCFcW0NEQVRBXFsuKj9cXVxdPnw8c2NyaXB0XGIoPyE6KVtePl0qPi4qPzxcL3NjcmlwdD4iOwoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHZhciAkX3RhZ19leHByID0gIjwlcyVzKD86XHMuKj8pPyVzPiI7CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgdmFyICRfYXR0cl9maW5kID0gJ1xiKFstXHddKyk9KCIuKj8ifFwnLio/XCd8Lis/KVtcL1xzPl0nOwoKICAgIGZ1bmN0aW9uIEF1dGhfWWFkaXNfUGFyc2VIVE1MKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2F0dHJfZmluZCA9IHNwcmludGYoIi8lcy8lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fYXR0cl9maW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3JlX2ZsYWdzKTsKCiAgICAgICAgJHRoaXMtPl9yZW1vdmVkX3JlID0gc3ByaW50ZigiLyVzLyVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcmVtb3ZlZF9yZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcmVfZmxhZ3MpOwoKICAgICAgICAkdGhpcy0+X2VudGl0eV9yZXBsYWNlbWVudHMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1wJyA9PiAnJicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x0JyA9PiAnPCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d0JyA9PiAnPicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1b3QnID0+ICciJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICR0aGlzLT5fZW50X3JlcGxhY2UgPQogICAgICAgICAgICBzcHJpbnRmKCImKCVzKTsiLCBpbXBsb2RlKCJ8IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2VudGl0eV9yZXBsYWNlbWVudHMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2UgSFRNTCBlbnRpdGllcyAoYW1wLCBsdCwgZ3QsIGFuZCBxdW90KSBhcyB3ZWxsIGFzCiAgICAgKiBudW1lcmljIGVudGl0aWVzIChlLmcuICN4OWY7KSB3aXRoIHRoZWlyIGFjdHVhbCB2YWx1ZXMgYW5kCiAgICAgKiByZXR1cm4gdGhlIG5ldyBzdHJpbmcuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIHN0cmluZyBpbiB3aGljaCB0byBsb29rIGZvciBlbnRpdGllcwogICAgICogQHJldHVybiBzdHJpbmcgJG5ld19zdHIgVGhlIG5ldyBzdHJpbmcgZW50aXRpZXMgZGVjb2RlZAogICAgICovCiAgICBmdW5jdGlvbiByZXBsYWNlRW50aXRpZXMoJHN0cikKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+X2VudGl0eV9yZXBsYWNlbWVudHMgYXMgJG9sZCA9PiAkbmV3KSB7CiAgICAgICAgICAgICRzdHIgPSBwcmVnX3JlcGxhY2Uoc3ByaW50ZigiLyYlczsvIiwgJG9sZCksICRuZXcsICRzdHIpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVwbGFjZSBudW1lcmljIGVudGl0aWVzIGJlY2F1c2UgaHRtbF9lbnRpdHlfZGVjb2RlIGRvZXNuJ3QKICAgICAgICAvLyBkbyBpdCBmb3IgdXMuCiAgICAgICAgJHN0ciA9IHByZWdfcmVwbGFjZSgnfiYjeChbMC05YS1mXSspO35laScsICdjaHIoaGV4ZGVjKCJcXDEiKSknLCAkc3RyKTsKICAgICAgICAkc3RyID0gcHJlZ19yZXBsYWNlKCd+JiMoWzAtOV0rKTt+ZScsICdjaHIoXFwxKScsICRzdHIpOwoKICAgICAgICByZXR1cm4gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIFN0cmlwIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcyBvZmYgb2YgYSBzdHJpbmcsIGlmIHRoZXkgYXJlCiAgICAgKiBwcmVzZW50LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBvcmlnaW5hbCBzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nICRuZXdfc3RyIFRoZSBuZXcgc3RyaW5nIHdpdGggbGVhZGluZyBhbmQKICAgICAqIHRyYWlsaW5nIHF1b3RlcyByZW1vdmVkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlbW92ZVF1b3Rlcygkc3RyKQogICAgewogICAgICAgICRtYXRjaGVzID0gYXJyYXkoKTsKICAgICAgICAkZG91YmxlID0gJy9eIiguKikiJC8nOwogICAgICAgICRzaW5nbGUgPSAiL15cJyguKilcJyQvIjsKCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJGRvdWJsZSwgJHN0ciwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkbWF0Y2hlc1sxXTsKICAgICAgICB9IGVsc2UgaWYgKHByZWdfbWF0Y2goJHNpbmdsZSwgJHN0ciwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkbWF0Y2hlc1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHN0cjsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIG1hdGNoIGFuIG9wZW5pbmcgCiAgICAgKiBvciBjbG9zaW5nIHRhZyBmcm9tIGEgc2V0IG9mIG5hbWVzLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIG1peGVkICR0YWdfbmFtZXMgVGFnIG5hbWVzIHRvIG1hdGNoCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNsb3NlIGZhbHNlLzAgPSBubywgdHJ1ZS8xID0geWVzLCBvdGhlciA9IG1heWJlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHNlbGZfY2xvc2UgZmFsc2UvMCA9IG5vLCB0cnVlLzEgPSB5ZXMsIG90aGVyID0gbWF5YmUKICAgICAqIEByZXR1cm4gc3RyaW5nICRyZWdleCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgdG8gYmUgdXNlZAogICAgICogaW4sIHNheSwgcHJlZ19tYXRjaC4KICAgICAqLwogICAgZnVuY3Rpb24gdGFnUGF0dGVybigkdGFnX25hbWVzLCAkY2xvc2UsICRzZWxmX2Nsb3NlKQogICAgewogICAgICAgIGlmIChpc19hcnJheSgkdGFnX25hbWVzKSkgewogICAgICAgICAgICAkdGFnX25hbWVzID0gJyg/OicuaW1wbG9kZSgnfCcsJHRhZ19uYW1lcykuJyknOwogICAgICAgIH0KICAgICAgICBpZiAoJGNsb3NlKSB7CiAgICAgICAgICAgICRjbG9zZSA9ICdcLycgLiAoKCRjbG9zZSA9PSAxKT8gJycgOiAnPycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjbG9zZSA9ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoJHNlbGZfY2xvc2UpIHsKICAgICAgICAgICAgJHNlbGZfY2xvc2UgPSAnKD86XC9ccyopJyAuICgoJHNlbGZfY2xvc2UgPT0gMSk/ICcnIDogJz8nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2VsZl9jbG9zZSA9ICcnOwogICAgICAgIH0KICAgICAgICAkZXhwciA9IHNwcmludGYoJHRoaXMtPl90YWdfZXhwciwgJGNsb3NlLCAkdGFnX25hbWVzLCAkc2VsZl9jbG9zZSk7CgogICAgICAgIHJldHVybiBzcHJpbnRmKCIvJXMvJXMiLCAkZXhwciwgJHRoaXMtPl9yZV9mbGFncyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBIVE1MIGRvY3VtZW50IHN0cmluZywgdGhpcyBmaW5kcyBhbGwgdGhlIE1FVEEgdGFncyBpbgogICAgICogdGhlIGRvY3VtZW50LCBwcm92aWRlZCB0aGV5IGFyZSBmb3VuZCBpbiB0aGUKICAgICAqIDxIVE1MPjxIRUFEPi4uLjwvSEVBRD4gc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnQuICBUaGUgPEhUTUw+IHRhZwogICAgICogbWF5IGJlIG1pc3NpbmcuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sX3N0cmluZyBBbiBIVE1sIGRvY3VtZW50IHN0cmluZwogICAgICogQHJldHVybiBhcnJheSAkdGFnX2xpc3QgQXJyYXkgb2YgdGFnczsgZWFjaCB0YWcgaXMgYW4gYXJyYXkgb2YKICAgICAqIGF0dHJpYnV0ZSAtPiB2YWx1ZS4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TWV0YVRhZ3MoJGh0bWxfc3RyaW5nKQogICAgewogICAgICAgICRodG1sX3N0cmluZyA9IHByZWdfcmVwbGFjZSgkdGhpcy0+X3JlbW92ZWRfcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9zdHJpbmcpOwoKICAgICAgICAka2V5X3RhZ3MgPSBhcnJheSgkdGhpcy0+dGFnUGF0dGVybignaHRtbCcsIGZhbHNlLCBmYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhZ1BhdHRlcm4oJ2hlYWQnLCBmYWxzZSwgZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWdQYXR0ZXJuKCdoZWFkJywgdHJ1ZSwgZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWdQYXR0ZXJuKCdodG1sJywgdHJ1ZSwgZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWdQYXR0ZXJuKGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICdib2R5JywgJ2ZyYW1lc2V0JywgJ2ZyYW1lJywgJ3AnLCAnZGl2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGFibGUnLCdzcGFuJywnYScpLCAnbWF5YmUnLCAnbWF5YmUnKSk7CiAgICAgICAgJGtleV90YWdzX3BvcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGtleV90YWdzIGFzICRwYXQpIHsKICAgICAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgICAgICAgICBwcmVnX21hdGNoKCRwYXQsICRodG1sX3N0cmluZywgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwogICAgICAgICAgICBpZigkbWF0Y2hlcykgewogICAgICAgICAgICAgICAgJGtleV90YWdzX3Bvc1tdID0gJG1hdGNoZXNbMF1bMV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAka2V5X3RhZ3NfcG9zW10gPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIG5vIG9wZW5pbmcgaGVhZCB0YWcKICAgICAgICBpZiAoaXNfbnVsbCgka2V5X3RhZ3NfcG9zWzFdKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgLy8gdGhlIGVmZmVjdGl2ZSA8L2hlYWQ+IGlzIHRoZSBtaW4gb2YgdGhlIGZvbGxvd2luZwogICAgICAgIGlmIChpc19udWxsKCRrZXlfdGFnc19wb3NbMl0pKSB7CiAgICAgICAgICAgICRrZXlfdGFnc19wb3NbMl0gPSBzdHJsZW4oJGh0bWxfc3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoYXJyYXkoJGtleV90YWdzX3Bvc1szXSwgJGtleV90YWdzX3Bvc1s0XSkgYXMgJHBvcykgewogICAgICAgICAgICBpZiAoIWlzX251bGwoJHBvcykgJiYgJHBvcyA8ICRrZXlfdGFnc19wb3NbMl0pIHsKICAgICAgICAgICAgICAgICRrZXlfdGFnc19wb3NbMl0gPSAkcG9zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGNsb3NpbmcgaGVhZCB0YWcgY29tZXMgYmVmb3JlIG9wZW5pbmcgaGVhZCB0YWcKICAgICAgICBpZiAoJGtleV90YWdzX3Bvc1sxXSA+ICRrZXlfdGFnc19wb3NbMl0pIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIG9wZW5pbmcgaHRtbCB0YWcsIG1ha2Ugc3VyZSB0aGUgb3BlbmluZyBoZWFkIHRhZwogICAgICAgIC8vIGNvbWVzIGFmdGVyIGl0CiAgICAgICAgaWYgKCFpc19udWxsKCRrZXlfdGFnc19wb3NbMF0pICYmICRrZXlfdGFnc19wb3NbMV0gPCAka2V5X3RhZ3NfcG9zWzBdKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICAgIH0KICAgICAgICAkaHRtbF9zdHJpbmcgPSBzdWJzdHIoJGh0bWxfc3RyaW5nLCAka2V5X3RhZ3NfcG9zWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJGtleV90YWdzX3Bvc1syXS0ka2V5X3RhZ3NfcG9zWzFdKSk7CgogICAgICAgICRsaW5rX2RhdGEgPSBhcnJheSgpOwogICAgICAgICRsaW5rX21hdGNoZXMgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgIGlmICghcHJlZ19tYXRjaF9hbGwoJHRoaXMtPnRhZ1BhdHRlcm4oJ21ldGEnLCBmYWxzZSwgJ21heWJlJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9zdHJpbmcsICRsaW5rX21hdGNoZXMpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGxpbmtfbWF0Y2hlc1swXSBhcyAkbGluaykgewogICAgICAgICAgICAkYXR0cl9tYXRjaGVzID0gYXJyYXkoKTsKICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJHRoaXMtPl9hdHRyX2ZpbmQsICRsaW5rLCAkYXR0cl9tYXRjaGVzKTsKICAgICAgICAgICAgJGxpbmtfYXR0cnMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkYXR0cl9tYXRjaGVzWzBdIGFzICRpbmRleCA9PiAkZnVsbF9tYXRjaCkgewogICAgICAgICAgICAgICAgJG5hbWUgPSAkYXR0cl9tYXRjaGVzWzFdWyRpbmRleF07CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+cmVwbGFjZUVudGl0aWVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVtb3ZlUXVvdGVzKCRhdHRyX21hdGNoZXNbMl1bJGluZGV4XSkpOwoKICAgICAgICAgICAgICAgICRsaW5rX2F0dHJzW3N0cnRvbG93ZXIoJG5hbWUpXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGlua19kYXRhW10gPSAkbGlua19hdHRyczsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGlua19kYXRhOwogICAgfQoKICAgIC8qKgogICAgICogTG9va3MgZm9yIGEgTUVUQSB0YWcgd2l0aCBhbiAiaHR0cC1lcXVpdiIgYXR0cmlidXRlIHdob3NlIHZhbHVlCiAgICAgKiBpcyBvbmUgb2YgKCJ4LXhyZHMtbG9jYXRpb24iLCAieC15YWRpcy1sb2NhdGlvbiIpLCBpZ25vcmluZwogICAgICogY2FzZS4gIElmIHN1Y2ggYSBNRVRBIHRhZyBpcyBmb3VuZCwgaXRzICJjb250ZW50IiBhdHRyaWJ1dGUKICAgICAqIHZhbHVlIGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGh0bWxfc3RyaW5nIEFuIEhUTUwgZG9jdW1lbnQgaW4gc3RyaW5nIGZvcm1hdAogICAgICogQHJldHVybiBtaXhlZCAkY29udGVudCBUaGUgImNvbnRlbnQiIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUKICAgICAqIE1FVEEgdGFnLCBpZiBmb3VuZCwgb3IgbnVsbCBpZiBubyBzdWNoIHRhZyB3YXMgZm91bmQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhUVFBFcXVpdigkaHRtbF9zdHJpbmcpCiAgICB7CiAgICAgICAgJG1ldGFfdGFncyA9ICR0aGlzLT5nZXRNZXRhVGFncygkaHRtbF9zdHJpbmcpOwoKICAgICAgICBpZiAoJG1ldGFfdGFncykgewogICAgICAgICAgICBmb3JlYWNoICgkbWV0YV90YWdzIGFzICR0YWcpIHsKICAgICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdodHRwLWVxdWl2JywgJHRhZykgJiYKICAgICAgICAgICAgICAgICAgICAoaW5fYXJyYXkoc3RydG9sb3dlcigkdGFnWydodHRwLWVxdWl2J10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgneC14cmRzLWxvY2F0aW9uJywgJ3gteWFkaXMtbG9jYXRpb24nKSkpICYmCiAgICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5X2V4aXN0cygnY29udGVudCcsICR0YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0YWdbJ2NvbnRlbnQnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/PlainHTTPFetcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgcGxhaW4gbm9uLWN1cmwgSFRUUCBmZXRjaGVyCiAqIGltcGxlbWVudGF0aW9uLgogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KICoKICogQHBhY2thZ2UgT3BlbklECiAqIEBhdXRob3IgSmFuUmFpbiwgSW5jLiA8b3BlbmlkQGphbnJhaW4uY29tPgogKiBAY29weXJpZ2h0IDIwMDUtMjAwOCBKYW5yYWluLCBJbmMuCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBBcGFjaGUKICovCgovKioKICogSW50ZXJmYWNlIGltcG9ydAogKi8KcmVxdWlyZV9vbmNlICJBdXRoL1lhZGlzL0hUVFBGZXRjaGVyLnBocCI7CgovKioKICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgcGxhaW4sIGhhbmQtYnVpbHQgc29ja2V0LWJhc2VkIGZldGNoZXIKICogd2hpY2ggd2lsbCBiZSB1c2VkIGluIHRoZSBldmVudCB0aGF0IENVUkwgaXMgdW5hdmFpbGFibGUuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19QbGFpbkhUVFBGZXRjaGVyIGV4dGVuZHMgQXV0aF9ZYWRpc19IVFRQRmV0Y2hlciB7CiAgICAvKioKICAgICAqIERvZXMgdGhpcyBmZXRjaGVyIHN1cHBvcnQgU1NMIFVSTHM/CiAgICAgKi8KICAgIGZ1bmN0aW9uIHN1cHBvcnRzU1NMKCkKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX29wZW4nKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXQoJHVybCwgJGV4dHJhX2hlYWRlcnMgPSBudWxsKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmNhbkZldGNoVVJMKCR1cmwpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHJlZGlyID0gdHJ1ZTsKCiAgICAgICAgJHN0b3AgPSB0aW1lKCkgKyAkdGhpcy0+dGltZW91dDsKICAgICAgICAkb2ZmID0gJHRoaXMtPnRpbWVvdXQ7CgogICAgICAgIHdoaWxlICgkcmVkaXIgJiYgKCRvZmYgPiAwKSkgewoKICAgICAgICAgICAgJHBhcnRzID0gcGFyc2VfdXJsKCR1cmwpOwoKICAgICAgICAgICAgJHNwZWNpZnlfcG9ydCA9IHRydWU7CgogICAgICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IHBvcnQuCiAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncG9ydCcsICRwYXJ0cykpIHsKICAgICAgICAgICAgICAgICRzcGVjaWZ5X3BvcnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmICgkcGFydHNbJ3NjaGVtZSddID09ICdodHRwJykgewogICAgICAgICAgICAgICAgICAgICRwYXJ0c1sncG9ydCddID0gODA7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHBhcnRzWydzY2hlbWUnXSA9PSAnaHR0cHMnKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnRzWydwb3J0J10gPSA0NDM7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ3BhdGgnLCAkcGFydHMpKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbJ3BhdGgnXSA9ICcvJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGhvc3QgPSAkcGFydHNbJ2hvc3QnXTsKCiAgICAgICAgICAgIGlmICgkcGFydHNbJ3NjaGVtZSddID09ICdodHRwcycpIHsKICAgICAgICAgICAgICAgICRob3N0ID0gJ3NzbDovLycgLiAkaG9zdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHVzZXJfYWdlbnQgPSBBdXRoX09wZW5JRF9VU0VSX0FHRU5UOwoKICAgICAgICAgICAgJGhlYWRlcnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0VUICIuJHBhcnRzWydwYXRoJ10uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFycmF5X2tleV9leGlzdHMoJ3F1ZXJ5JywgJHBhcnRzKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI/Ii4kcGFydHNbJ3F1ZXJ5J10gOiAiIikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgSFRUUC8xLjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyLUFnZW50OiAkdXNlcl9hZ2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhvc3Q6ICIuJHBhcnRzWydob3N0J10uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRzcGVjaWZ5X3BvcnQgPyAiOiIuJHBhcnRzWydwb3J0J10gOiAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBvcnQ6ICIuJHBhcnRzWydwb3J0J10pOwoKICAgICAgICAgICAgJGVycm5vID0gMDsKICAgICAgICAgICAgJGVycnN0ciA9ICcnOwoKICAgICAgICAgICAgaWYgKCRleHRyYV9oZWFkZXJzKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZXh0cmFfaGVhZGVycyBhcyAkaCkgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzW10gPSAkaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQCRzb2NrID0gZnNvY2tvcGVuKCRob3N0LCAkcGFydHNbJ3BvcnQnXSwgJGVycm5vLCAkZXJyc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRpbWVvdXQpOwogICAgICAgICAgICBpZiAoJHNvY2sgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0cmVhbV9zZXRfdGltZW91dCgkc29jaywgJHRoaXMtPnRpbWVvdXQpOwoKICAgICAgICAgICAgZnB1dHMoJHNvY2ssIGltcGxvZGUoIlxyXG4iLCAkaGVhZGVycykgLiAiXHJcblxyXG4iKTsKCiAgICAgICAgICAgICRkYXRhID0gIiI7CiAgICAgICAgICAgICRraWxvYnl0ZXMgPSAwOwogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJHNvY2spICYmCiAgICAgICAgICAgICAgICAgICAka2lsb2J5dGVzIDwgQXV0aF9PcGVuSURfRkVUQ0hFUl9NQVhfUkVTUE9OU0VfS0IgKSB7CiAgICAgICAgICAgICAgICAkZGF0YSAuPSBmZ2V0cygkc29jaywgMTAyNCk7CiAgICAgICAgICAgICAgICAka2lsb2J5dGVzICs9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZjbG9zZSgkc29jayk7CgogICAgICAgICAgICAvLyBTcGxpdCByZXNwb25zZSBpbnRvIGhlYWRlciBhbmQgYm9keSBzZWN0aW9ucwogICAgICAgICAgICBsaXN0KCRoZWFkZXJzLCAkYm9keSkgPSBleHBsb2RlKCJcclxuXHJcbiIsICRkYXRhLCAyKTsKICAgICAgICAgICAgJGhlYWRlcnMgPSBleHBsb2RlKCJcclxuIiwgJGhlYWRlcnMpOwoKICAgICAgICAgICAgJGh0dHBfY29kZSA9IGV4cGxvZGUoIiAiLCAkaGVhZGVyc1swXSk7CiAgICAgICAgICAgICRjb2RlID0gJGh0dHBfY29kZVsxXTsKCiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkY29kZSwgYXJyYXkoJzMwMScsICczMDInKSkpIHsKICAgICAgICAgICAgICAgICR1cmwgPSAkdGhpcy0+X2ZpbmRSZWRpcmVjdCgkaGVhZGVycywgJHVybCk7CiAgICAgICAgICAgICAgICAkcmVkaXIgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlZGlyID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvZmYgPSAkc3RvcCAtIHRpbWUoKTsKICAgICAgICB9CgogICAgICAgICRuZXdfaGVhZGVycyA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goIi86LyIsICRoZWFkZXIpKSB7CiAgICAgICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCI6ICIsICRoZWFkZXIsIDIpOwoKICAgICAgICAgICAgICAgIGlmIChjb3VudCgkcGFydHMpID09IDIpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRuYW1lLCAkdmFsdWUpID0gJHBhcnRzOwogICAgICAgICAgICAgICAgICAgICRuZXdfaGVhZGVyc1skbmFtZV0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEF1dGhfWWFkaXNfSFRUUFJlc3BvbnNlKCR1cmwsICRjb2RlLCAkbmV3X2hlYWRlcnMsICRib2R5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3N0KCR1cmwsICRib2R5LCAkZXh0cmFfaGVhZGVycyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y2FuRmV0Y2hVUkwoJHVybCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcGFydHMgPSBwYXJzZV91cmwoJHVybCk7CgogICAgICAgICRoZWFkZXJzID0gYXJyYXkoKTsKCiAgICAgICAgJHBvc3RfcGF0aCA9ICRwYXJ0c1sncGF0aCddOwogICAgICAgIGlmIChpc3NldCgkcGFydHNbJ3F1ZXJ5J10pKSB7CiAgICAgICAgICAgICRwb3N0X3BhdGggLj0gJz8nIC4gJHBhcnRzWydxdWVyeSddOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlcnNbXSA9ICJQT1NUICIuJHBvc3RfcGF0aC4iIEhUVFAvMS4wIjsKICAgICAgICAkaGVhZGVyc1tdID0gIkhvc3Q6ICIgLiAkcGFydHNbJ2hvc3QnXTsKICAgICAgICAkaGVhZGVyc1tdID0gIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsKICAgICAgICAkaGVhZGVyc1tdID0gIkNvbnRlbnQtbGVuZ3RoOiAiIC4gc3RydmFsKHN0cmxlbigkYm9keSkpOwoKICAgICAgICBpZiAoJGV4dHJhX2hlYWRlcnMgJiYKICAgICAgICAgICAgaXNfYXJyYXkoJGV4dHJhX2hlYWRlcnMpKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gYXJyYXlfbWVyZ2UoJGhlYWRlcnMsICRleHRyYV9oZWFkZXJzKTsKICAgICAgICB9CgogICAgICAgIC8vIEpvaW4gYWxsIGhlYWRlcnMgdG9nZXRoZXIuCiAgICAgICAgJGFsbF9oZWFkZXJzID0gaW1wbG9kZSgiXHJcbiIsICRoZWFkZXJzKTsKCiAgICAgICAgLy8gQWRkIGhlYWRlcnMsIHR3byBuZXdsaW5lcywgYW5kIHJlcXVlc3QgYm9keS4KICAgICAgICAkcmVxdWVzdCA9ICRhbGxfaGVhZGVycyAuICJcclxuXHJcbiIgLiAkYm9keTsKCiAgICAgICAgLy8gU2V0IGEgZGVmYXVsdCBwb3J0LgogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncG9ydCcsICRwYXJ0cykpIHsKICAgICAgICAgICAgaWYgKCRwYXJ0c1snc2NoZW1lJ10gPT0gJ2h0dHAnKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbJ3BvcnQnXSA9IDgwOwogICAgICAgICAgICB9IGVsc2VpZiAoJHBhcnRzWydzY2hlbWUnXSA9PSAnaHR0cHMnKSB7CiAgICAgICAgICAgICAgICAkcGFydHNbJ3BvcnQnXSA9IDQ0MzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBhcnRzWydzY2hlbWUnXSA9PSAnaHR0cHMnKSB7CiAgICAgICAgICAgICRwYXJ0c1snaG9zdCddID0gc3ByaW50Zigic3NsOi8vJXMiLCAkcGFydHNbJ2hvc3QnXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBDb25uZWN0IHRvIHRoZSByZW1vdGUgc2VydmVyLgogICAgICAgICRlcnJubyA9IDA7CiAgICAgICAgJGVycnN0ciA9ICcnOwoKICAgICAgICAkc29jayA9IGZzb2Nrb3BlbigkcGFydHNbJ2hvc3QnXSwgJHBhcnRzWydwb3J0J10sICRlcnJubywgJGVycnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dGltZW91dCk7CgogICAgICAgIGlmICgkc29jayA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssICR0aGlzLT50aW1lb3V0KTsKCiAgICAgICAgLy8gV3JpdGUgdGhlIFBPU1QgcmVxdWVzdC4KICAgICAgICBmcHV0cygkc29jaywgJHJlcXVlc3QpOwoKICAgICAgICAvLyBHZXQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KICAgICAgICAkcmVzcG9uc2UgPSAiIjsKICAgICAgICB3aGlsZSAoIWZlb2YoJHNvY2spKSB7CiAgICAgICAgICAgIGlmICgkZGF0YSA9IGZnZXRzKCRzb2NrLCAxMjgpKSB7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgLj0gJGRhdGE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU3BsaXQgdGhlIHJlcXVlc3QgaW50byBoZWFkZXJzIGFuZCBib2R5LgogICAgICAgIGxpc3QoJGhlYWRlcnMsICRyZXNwb25zZV9ib2R5KSA9IGV4cGxvZGUoIlxyXG5cclxuIiwgJHJlc3BvbnNlLCAyKTsKCiAgICAgICAgJGhlYWRlcnMgPSBleHBsb2RlKCJcclxuIiwgJGhlYWRlcnMpOwoKICAgICAgICAvLyBFeHBlY3QgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGhlYWRlcnMgZGF0YSB0byBiZSBzb21ldGhpbmcKICAgICAgICAvLyBsaWtlIEhUVFAvMS4xIDIwMCBPSy4gIFNwbGl0IHRoZSBsaW5lIG9uIHNwYWNlcyBhbmQgdGFrZQogICAgICAgIC8vIHRoZSBzZWNvbmQgdG9rZW4sIHdoaWNoIHNob3VsZCBiZSB0aGUgcmV0dXJuIGNvZGUuCiAgICAgICAgJGh0dHBfY29kZSA9IGV4cGxvZGUoIiAiLCAkaGVhZGVyc1swXSk7CiAgICAgICAgJGNvZGUgPSAkaHR0cF9jb2RlWzFdOwoKICAgICAgICAkbmV3X2hlYWRlcnMgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKSB7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvOi8iLCAkaGVhZGVyKSkgewogICAgICAgICAgICAgICAgbGlzdCgkbmFtZSwgJHZhbHVlKSA9IGV4cGxvZGUoIjogIiwgJGhlYWRlciwgMik7CiAgICAgICAgICAgICAgICAkbmV3X2hlYWRlcnNbJG5hbWVdID0gJHZhbHVlOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBBdXRoX1lhZGlzX0hUVFBSZXNwb25zZSgkdXJsLCAkY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdfaGVhZGVycywgJHJlc3BvbnNlX2JvZHkpOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/XML.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBYTUwtcGFyc2luZyBjbGFzc2VzIHRvIHdyYXAgdGhlIGRvbXhtbCBhbmQgRE9NIGV4dGVuc2lvbnMgZm9yIFBIUCA0CiAqIGFuZCA1LCByZXNwZWN0aXZlbHkuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3Igd3JhcHBlcnMgZm9yIGF2YWlsYWJsZSBQSFAgWE1MLXBhcnNpbmcKICogZXh0ZW5zaW9ucy4gIFRvIHdvcmsgd2l0aCB0aGlzIFlhZGlzIGxpYnJhcnksIHN1YmNsYXNzZXMgb2YgdGhpcwogKiBjbGFzcyBNVVNUIGltcGxlbWVudCB0aGUgQVBJIGFzIGRlZmluZWQgaW4gdGhlIHJlbWFya3MgZm9yIHRoaXMKICogY2xhc3MuICBTdWJjbGFzc2VzIG9mIEF1dGhfWWFkaXNfWE1MUGFyc2VyIGFyZSB1c2VkIHRvIHdyYXAKICogcGFydGljdWxhciBQSFAgWE1MIGV4dGVuc2lvbnMgc3VjaCBhcyAnZG9teG1sJy4gIFRoZXNlIGFyZSB1c2VkCiAqIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnkgZGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YKICogc3VwcG9ydGVkIFBIUCBYTUwgZXh0ZW5zaW9ucy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX1lhZGlzX1hNTFBhcnNlciB7CiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgQXV0aF9ZYWRpc19YTUxQYXJzZXIgd2l0aCBzb21lCiAgICAgKiBYTUwgYW5kIG5hbWVzcGFjZXMuICBUaGlzIFNIT1VMRCBOT1QgYmUgb3ZlcnJpZGRlbiBieQogICAgICogc3ViY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4bWxfc3RyaW5nIEEgc3RyaW5nIG9mIFhNTCB0byBiZSBwYXJzZWQuCiAgICAgKiBAcGFyYW0gYXJyYXkgJG5hbWVzcGFjZV9tYXAgQW4gYXJyYXkgb2YgKCRuc19uYW1lID0+ICRuc191cmkpCiAgICAgKiB0byBiZSByZWdpc3RlcmVkIHdpdGggdGhlIFhNTCBwYXJzZXIuICBNYXkgYmUgZW1wdHkuCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gJHJlc3VsdCBUcnVlIGlmIHRoZSBpbml0aWFsaXphdGlvbiBhbmQKICAgICAqIG5hbWVzcGFjZSByZWdpc3RyYXRpb24ocykgc3VjY2VlZGVkOyBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGluaXQoJHhtbF9zdHJpbmcsICRuYW1lc3BhY2VfbWFwKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnNldFhNTCgkeG1sX3N0cmluZykpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJG5hbWVzcGFjZV9tYXAgYXMgJHByZWZpeCA9PiAkdXJpKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPnJlZ2lzdGVyTmFtZXNwYWNlKCRwcmVmaXgsICR1cmkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgYSBuYW1lc3BhY2Ugd2l0aCB0aGUgWE1MIHBhcnNlci4gIFRoaXMgc2hvdWxkIGJlCiAgICAgKiBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IFRoZSBuYW1lc3BhY2UgcHJlZml4IHRvIGFwcGVhciBpbiBYTUwgdGFnCiAgICAgKiBuYW1lcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkgVGhlIG5hbWVzcGFjZSBVUkkgdG8gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUKICAgICAqIG5hbWVzcGFjZSBpbiB0aGUgWE1MLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbiAkcmVzdWx0IFRydWUgaWYgdGhlIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQ7CiAgICAgKiBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlZ2lzdGVyTmFtZXNwYWNlKCRwcmVmaXgsICR1cmkpCiAgICB7CiAgICAgICAgLy8gTm90IGltcGxlbWVudGVkLgogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoaXMgcGFyc2VyIG9iamVjdCdzIFhNTCBwYXlsb2FkLiAgVGhpcyBzaG91bGQgYmUKICAgICAqIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4bWxfc3RyaW5nIFRoZSBYTUwgc3RyaW5nIHRvIHBhc3MgdG8gdGhpcwogICAgICogb2JqZWN0J3MgWE1MIHBhcnNlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gJHJlc3VsdCBUcnVlIGlmIHRoZSBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQ7CiAgICAgKiBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFhNTCgkeG1sX3N0cmluZykKICAgIHsKICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCiAgICB9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBhbiBYUGF0aCBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBub2RlCiAgICAgKiBsaXN0LiAgVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHhwYXRoIFRoZSBYUGF0aCBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5vZGUgQSBub2RlIG9iamVjdCByZXN1bHRpbmcgZnJvbSBhIHByZXZpb3VzCiAgICAgKiBldmFsWFBhdGggY2FsbC4gIFRoaXMgbm9kZSwgaWYgc3BlY2lmaWVkLCBwcm92aWRlcyB0aGUgY29udGV4dAogICAgICogZm9yIHRoZSBldmFsdWF0aW9uIG9mIHRoaXMgeHBhdGggZXhwcmVzc2lvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRub2RlX2xpc3QgQW4gYXJyYXkgb2YgbWF0Y2hpbmcgb3BhcXVlIG5vZGUKICAgICAqIG9iamVjdHMgdG8gYmUgdXNlZCB3aXRoIG90aGVyIG1ldGhvZHMgb2YgdGhpcyBwYXJzZXIgY2xhc3MuCiAgICAgKi8KICAgIGZ1bmN0aW9uICZldmFsWFBhdGgoJHhwYXRoLCAkbm9kZSA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gTm90IGltcGxlbWVudGVkLgogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb2YgYSBzcGVjaWZpZWQgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5vZGUgQSBub2RlIG9iamVjdCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0bwogICAgICogJHRoaXMtPmV2YWxYUGF0aCgpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRjb250ZW50IFRoZSBjb250ZW50IG9mIHRoaXMgbm9kZS4KICAgICAqLwogICAgZnVuY3Rpb24gY29udGVudCgkbm9kZSkKICAgIHsKICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgYSBzcGVjaWZpZWQgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5vZGUgQSBub2RlIG9iamVjdCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0bwogICAgICogJHRoaXMtPmV2YWxYUGF0aCgpLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgJGF0dHJzIEFuIGFycmF5IG1hcHBpbmcgYXR0cmlidXRlIG5hbWVzIHRvCiAgICAgKiB2YWx1ZXMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMoJG5vZGUpCiAgICB7CiAgICAgICAgLy8gTm90IGltcGxlbWVudGVkLgogICAgfQp9CgovKioKICogVGhpcyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBBdXRoX1lhZGlzX1hNTFBhcnNlciBpbXBsZW1lbnRzCiAqIHRoZSBhcHByb3ByaWF0ZSBBUEkgZm9yIHRoZSAnZG9teG1sJyBleHRlbnNpb24gd2hpY2ggaXMgdHlwaWNhbGx5CiAqIHBhY2thZ2VkIHdpdGggUEhQIDQuICBUaGlzIGNsYXNzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgJ2RvbXhtbCcKICogZXh0ZW5zaW9uIGlzIGRldGVjdGVkLiAgU2VlIHRoZSBBdXRoX1lhZGlzX1hNTFBhcnNlciBjbGFzcyBmb3IKICogZGV0YWlscyBvbiB0aGlzIGNsYXNzJ3MgbWV0aG9kcy4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX1lhZGlzX2RvbXhtbCBleHRlbmRzIEF1dGhfWWFkaXNfWE1MUGFyc2VyIHsKICAgIGZ1bmN0aW9uIEF1dGhfWWFkaXNfZG9teG1sKCkKICAgIHsKICAgICAgICAkdGhpcy0+eG1sID0gbnVsbDsKICAgICAgICAkdGhpcy0+ZG9jID0gbnVsbDsKICAgICAgICAkdGhpcy0+eHBhdGggPSBudWxsOwogICAgICAgICR0aGlzLT5lcnJvcnMgPSBhcnJheSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFhNTCgkeG1sX3N0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+eG1sID0gJHhtbF9zdHJpbmc7CiAgICAgICAgJHRoaXMtPmRvYyA9IEBkb214bWxfb3Blbl9tZW0oJHhtbF9zdHJpbmcsIERPTVhNTF9MT0FEX1BBUlNJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmVycm9ycyk7CgogICAgICAgIGlmICghJHRoaXMtPmRvYykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+eHBhdGggPSAkdGhpcy0+ZG9jLT54cGF0aF9uZXdfY29udGV4dCgpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiByZWdpc3Rlck5hbWVzcGFjZSgkcHJlZml4LCAkdXJpKQogICAgewogICAgICAgIHJldHVybiB4cGF0aF9yZWdpc3Rlcl9ucygkdGhpcy0+eHBhdGgsICRwcmVmaXgsICR1cmkpOwogICAgfQoKICAgIGZ1bmN0aW9uICZldmFsWFBhdGgoJHhwYXRoLCAkbm9kZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRub2RlKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAJHRoaXMtPnhwYXRoLT54cGF0aF9ldmFsKCR4cGF0aCwgJG5vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAJHRoaXMtPnhwYXRoLT54cGF0aF9ldmFsKCR4cGF0aCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRyZXN1bHQpIHsKICAgICAgICAgICAgJG4gPSBhcnJheSgpOwogICAgICAgICAgICByZXR1cm4gJG47CiAgICAgICAgfQoKICAgICAgICBpZiAoISRyZXN1bHQtPm5vZGVzZXQpIHsKICAgICAgICAgICAgJG4gPSBhcnJheSgpOwogICAgICAgICAgICByZXR1cm4gJG47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdC0+bm9kZXNldDsKICAgIH0KCiAgICBmdW5jdGlvbiBjb250ZW50KCRub2RlKQogICAgewogICAgICAgIGlmICgkbm9kZSkgewogICAgICAgICAgICByZXR1cm4gJG5vZGUtPmdldF9jb250ZW50KCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMoJG5vZGUpCiAgICB7CiAgICAgICAgaWYgKCRub2RlKSB7CiAgICAgICAgICAgICRhcnIgPSAkbm9kZS0+YXR0cmlidXRlcygpOwogICAgICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGlmICgkYXJyKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXJyIGFzICRhdHRybm9kZSkgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHRbJGF0dHJub2RlLT5uYW1lXSA9ICRhdHRybm9kZS0+dmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFRoaXMgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgQXV0aF9ZYWRpc19YTUxQYXJzZXIgaW1wbGVtZW50cwogKiB0aGUgYXBwcm9wcmlhdGUgQVBJIGZvciB0aGUgJ2RvbScgZXh0ZW5zaW9uIHdoaWNoIGlzIHR5cGljYWxseQogKiBwYWNrYWdlZCB3aXRoIFBIUCA1LiAgVGhpcyBjbGFzcyB3aWxsIGJlIHVzZWQgd2hlbmV2ZXIgdGhlICdkb20nCiAqIGV4dGVuc2lvbiBpcyBkZXRlY3RlZC4gIFNlZSB0aGUgQXV0aF9ZYWRpc19YTUxQYXJzZXIgY2xhc3MgZm9yCiAqIGRldGFpbHMgb24gdGhpcyBjbGFzcydzIG1ldGhvZHMuCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKi8KY2xhc3MgQXV0aF9ZYWRpc19kb20gZXh0ZW5kcyBBdXRoX1lhZGlzX1hNTFBhcnNlciB7CiAgICBmdW5jdGlvbiBBdXRoX1lhZGlzX2RvbSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnhtbCA9IG51bGw7CiAgICAgICAgJHRoaXMtPmRvYyA9IG51bGw7CiAgICAgICAgJHRoaXMtPnhwYXRoID0gbnVsbDsKICAgICAgICAkdGhpcy0+ZXJyb3JzID0gYXJyYXkoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRYTUwoJHhtbF9zdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnhtbCA9ICR4bWxfc3RyaW5nOwogICAgICAgICR0aGlzLT5kb2MgPSBuZXcgRE9NRG9jdW1lbnQ7CgogICAgICAgIGlmICghJHRoaXMtPmRvYykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoIUAkdGhpcy0+ZG9jLT5sb2FkWE1MKCR4bWxfc3RyaW5nKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+eHBhdGggPSBuZXcgRE9NWFBhdGgoJHRoaXMtPmRvYyk7CgogICAgICAgIGlmICgkdGhpcy0+eHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWdpc3Rlck5hbWVzcGFjZSgkcHJlZml4LCAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+eHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCRwcmVmaXgsICR1cmkpOwogICAgfQoKICAgIGZ1bmN0aW9uICZldmFsWFBhdGgoJHhwYXRoLCAkbm9kZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRub2RlKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAJHRoaXMtPnhwYXRoLT5xdWVyeSgkeHBhdGgsICRub2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0ID0gQCR0aGlzLT54cGF0aC0+cXVlcnkoJHhwYXRoKTsKICAgICAgICB9CgogICAgICAgICRuID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCEkcmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAkbjsKICAgICAgICB9CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRyZXN1bHQtPmxlbmd0aDsgJGkrKykgewogICAgICAgICAgICAkbltdID0gJHJlc3VsdC0+aXRlbSgkaSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG47CiAgICB9CgogICAgZnVuY3Rpb24gY29udGVudCgkbm9kZSkKICAgIHsKICAgICAgICBpZiAoJG5vZGUpIHsKICAgICAgICAgICAgcmV0dXJuICRub2RlLT50ZXh0Q29udGVudDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXR0cmlidXRlcygkbm9kZSkKICAgIHsKICAgICAgICBpZiAoJG5vZGUpIHsKICAgICAgICAgICAgJGFyciA9ICRub2RlLT5hdHRyaWJ1dGVzOwogICAgICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGlmICgkYXJyKSB7CiAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkYXJyLT5sZW5ndGg7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAkbm9kZSA9ICRhcnItPml0ZW0oJGkpOwogICAgICAgICAgICAgICAgICAgICRyZXN1bHRbJG5vZGUtPm5vZGVOYW1lXSA9ICRub2RlLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KICAgIH0KfQoKZ2xvYmFsICRfX0F1dGhfWWFkaXNfZGVmYXVsdFBhcnNlcjsKJF9fQXV0aF9ZYWRpc19kZWZhdWx0UGFyc2VyID0gbnVsbDsKCi8qKgogKiBTZXQgYSBkZWZhdWx0IHBhcnNlciB0byBvdmVycmlkZSB0aGUgZXh0ZW5zaW9uLWRyaXZlbiBzZWxlY3Rpb24gb2YKICogYXZhaWxhYmxlIHBhcnNlciBjbGFzc2VzLiAgVGhpcyBpcyBoZWxwZnVsIGluIGEgdGVzdCBlbnZpcm9ubWVudCBvcgogKiBvbmUgaW4gd2hpY2ggbXVsdGlwbGUgcGFyc2VycyBjYW4gYmUgdXNlZCBidXQgb25lIGlzIG1vcmUKICogZGVzaXJhYmxlLgogKgogKiBAcGFyYW0gQXV0aF9ZYWRpc19YTUxQYXJzZXIgJHBhcnNlciBBbiBpbnN0YW5jZSBvZiBhCiAqIEF1dGhfWWFkaXNfWE1MUGFyc2VyIHN1YmNsYXNzLgogKi8KZnVuY3Rpb24gQXV0aF9ZYWRpc19zZXREZWZhdWx0UGFyc2VyKCRwYXJzZXIpCnsKICAgIGdsb2JhbCAkX19BdXRoX1lhZGlzX2RlZmF1bHRQYXJzZXI7CiAgICAkX19BdXRoX1lhZGlzX2RlZmF1bHRQYXJzZXIgPSAkcGFyc2VyOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2dldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQp7CiAgICByZXR1cm4gYXJyYXkoJ2RvbScgICAgPT4gJ0F1dGhfWWFkaXNfZG9tJywKICAgICAgICAgICAgICAgICAnZG9teG1sJyA9PiAnQXV0aF9ZYWRpc19kb214bWwnKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYSBBdXRoX1lhZGlzX1hNTFBhcnNlciBzdWJjbGFzcyBiYXNlZCBvbgogKiB0aGUgYXZhaWxhYmlsaXR5IG9mIFBIUCBleHRlbnNpb25zIGZvciBYTUwgcGFyc2luZy4gIElmCiAqIEF1dGhfWWFkaXNfc2V0RGVmYXVsdFBhcnNlciBoYXMgYmVlbiBjYWxsZWQsIHRoZSBwYXJzZXIgdXNlZCBpbgogKiB0aGF0IGNhbGwgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkLgogKi8KZnVuY3Rpb24gQXV0aF9ZYWRpc19nZXRYTUxQYXJzZXIoKQp7CiAgICBnbG9iYWwgJF9fQXV0aF9ZYWRpc19kZWZhdWx0UGFyc2VyOwogICAgCiAgICBpZiAoaXNzZXQoJF9fQXV0aF9ZYWRpc19kZWZhdWx0UGFyc2VyKSkgewogICAgICAgIHJldHVybiAkX19BdXRoX1lhZGlzX2RlZmF1bHRQYXJzZXI7CiAgICB9CiAgICAKICAgIGZvcmVhY2goQXV0aF9ZYWRpc19nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkgYXMgJGV4dGVuc2lvbiA9PiAkY2xhc3NuYW1lKQogICAgewogICAgICBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgkZXh0ZW5zaW9uKSkKICAgICAgewogICAgICAgICRwID0gbmV3ICRjbGFzc25hbWUoKTsKICAgICAgICBBdXRoX1lhZGlzX3NldERlZmF1bHRQYXJzZXIoJHApOwogICAgICAgIHJldHVybiAkcDsKICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gZmFsc2U7Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/XRDS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgWFJEUyBwYXJzaW5nIGNvZGUuCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBSZXF1aXJlIHRoZSBYUGF0aCBpbXBsZW1lbnRhdGlvbi4KICovCnJlcXVpcmVfb25jZSAnQXV0aC9ZYWRpcy9YTUwucGhwJzsKCi8qKgogKiBUaGlzIG1hdGNoIG1vZGUgbWVhbnMgYSBnaXZlbiBzZXJ2aWNlIG11c3QgbWF0Y2ggQUxMIGZpbHRlcnMgcGFzc2VkCiAqIHRvIHRoZSBBdXRoX1lhZGlzX1hSRFM6OnNlcnZpY2VzKCkgY2FsbC4KICovCmRlZmluZSgnU0VSVklDRVNfWUFESVNfTUFUQ0hfQUxMJywgMTAxKTsKCi8qKgogKiBUaGlzIG1hdGNoIG1vZGUgbWVhbnMgYSBnaXZlbiBzZXJ2aWNlIG11c3QgbWF0Y2ggQU5ZIGZpbHRlcnMgKGF0CiAqIGxlYXN0IG9uZSkgcGFzc2VkIHRvIHRoZSBBdXRoX1lhZGlzX1hSRFM6OnNlcnZpY2VzKCkgY2FsbC4KICovCmRlZmluZSgnU0VSVklDRVNfWUFESVNfTUFUQ0hfQU5ZJywgMTAyKTsKCi8qKgogKiBUaGUgcHJpb3JpdHkgdmFsdWUgdXNlZCBmb3Igc2VydmljZSBlbGVtZW50cyB3aXRoIG5vIHByaW9yaXR5CiAqIHNwZWNpZmllZC4KICovCmRlZmluZSgnU0VSVklDRVNfWUFESVNfTUFYX1BSSU9SSVRZJywgcG93KDIsIDMwKSk7CgovKioKICogWFJEIFhNTCBuYW1lc3BhY2UKICovCmRlZmluZSgnQXV0aF9ZYWRpc19YTUxOU19YUkRfMl8wJywgJ3hyaTovLyR4cmQqKCR2KjIuMCknKTsKCi8qKgogKiBYUkRTIFhNTCBuYW1lc3BhY2UKICovCmRlZmluZSgnQXV0aF9ZYWRpc19YTUxOU19YUkRTJywgJ3hyaTovLyR4cmRzJyk7CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2dldE5TTWFwKCkKewogICAgcmV0dXJuIGFycmF5KCd4cmRzJyA9PiBBdXRoX1lhZGlzX1hNTE5TX1hSRFMsCiAgICAgICAgICAgICAgICAgJ3hyZCcgPT4gQXV0aF9ZYWRpc19YTUxOU19YUkRfMl8wKTsKfQoKLyoqCiAqIEBhY2Nlc3MgcHJpdmF0ZQogKi8KZnVuY3Rpb24gQXV0aF9ZYWRpc19hcnJheV9zY3JhbWJsZSgkYXJyKQp7CiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICB3aGlsZSAoY291bnQoJGFycikpIHsKICAgICAgICAkaW5kZXggPSBhcnJheV9yYW5kKCRhcnIsIDEpOwogICAgICAgICRyZXN1bHRbXSA9ICRhcnJbJGluZGV4XTsKICAgICAgICB1bnNldCgkYXJyWyRpbmRleF0pOwogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgPFNlcnZpY2U+IGVsZW1lbnQgaW4gYW4gWFJEUyBkb2N1bWVudC4KICogT2JqZWN0cyBvZiB0aGlzIHR5cGUgYXJlIHJldHVybmVkIGJ5CiAqIEF1dGhfWWFkaXNfWFJEUzo6c2VydmljZXMoKSBhbmQKICogQXV0aF9ZYWRpc19ZYWRpczo6c2VydmljZXMoKS4gIEVhY2ggb2JqZWN0IGNvcnJlc3BvbmRzIGRpcmVjdGx5CiAqIHRvIGEgPFNlcnZpY2U+IGVsZW1lbnQgaW4gdGhlIFhSRFMgYW5kIHN1cHBsaWVzIGEKICogZ2V0RWxlbWVudHMoJG5hbWUpIG1ldGhvZCB3aGljaCB5b3Ugc2hvdWxkIHVzZSB0byBpbnNwZWN0IHRoZQogKiBlbGVtZW50J3MgY29udGVudHMuICBTZWUge0BsaW5rIEF1dGhfWWFkaXNfWWFkaXN9IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uIG9uIHRoZSByb2xlIHRoaXMgY2xhc3MgcGxheXMgaW4gWWFkaXMgZGlzY292ZXJ5LgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfWWFkaXNfU2VydmljZSB7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGVtcHR5IHNlcnZpY2Ugb2JqZWN0LgogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX1lhZGlzX1NlcnZpY2UoKQogICAgewogICAgICAgICR0aGlzLT5lbGVtZW50ID0gbnVsbDsKICAgICAgICAkdGhpcy0+cGFyc2VyID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgVVJJcyBpbiB0aGUgIlR5cGUiIGVsZW1lbnRzLCBpZiBhbnksIG9mIHRoaXMgU2VydmljZQogICAgICogZWxlbWVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICR0eXBlX3VyaXMgQW4gYXJyYXkgb2YgVHlwZSBVUkkgc3RyaW5ncy4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0VHlwZXMoKQogICAgewogICAgICAgICR0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Z2V0RWxlbWVudHMoJ3hyZDpUeXBlJykgYXMgJGVsZW0pIHsKICAgICAgICAgICAgJGMgPSAkdGhpcy0+cGFyc2VyLT5jb250ZW50KCRlbGVtKTsKICAgICAgICAgICAgaWYgKCRjKSB7CiAgICAgICAgICAgICAgICAkdFtdID0gJGM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0OwogICAgfQoKICAgIGZ1bmN0aW9uIG1hdGNoVHlwZXMoJHR5cGVfdXJpcykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmdldFR5cGVzKCkgYXMgJHR5cCkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHR5cCwgJHR5cGVfdXJpcykpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICR0eXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBVUklzIGluIHRoZSAiVVJJIiBlbGVtZW50cywgaWYgYW55LCBvZiB0aGlzIFNlcnZpY2UKICAgICAqIGVsZW1lbnQuICBUaGUgVVJJcyBhcmUgcmV0dXJuZWQgc29ydGVkIGluIHByaW9yaXR5IG9yZGVyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgJHVyaXMgQW4gYXJyYXkgb2YgVVJJIHN0cmluZ3MuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFVSSXMoKQogICAgewogICAgICAgICR1cmlzID0gYXJyYXkoKTsKICAgICAgICAkbGFzdCA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5nZXRFbGVtZW50cygneHJkOlVSSScpIGFzICRlbGVtKSB7CiAgICAgICAgICAgICR1cmlfc3RyaW5nID0gJHRoaXMtPnBhcnNlci0+Y29udGVudCgkZWxlbSk7CiAgICAgICAgICAgICRhdHRycyA9ICR0aGlzLT5wYXJzZXItPmF0dHJpYnV0ZXMoJGVsZW0pOwogICAgICAgICAgICBpZiAoJGF0dHJzICYmCiAgICAgICAgICAgICAgICBhcnJheV9rZXlfZXhpc3RzKCdwcmlvcml0eScsICRhdHRycykpIHsKICAgICAgICAgICAgICAgICRwcmlvcml0eSA9IGludHZhbCgkYXR0cnNbJ3ByaW9yaXR5J10pOwogICAgICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRwcmlvcml0eSwgJHVyaXMpKSB7CiAgICAgICAgICAgICAgICAgICAgJHVyaXNbJHByaW9yaXR5XSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHVyaXNbJHByaW9yaXR5XVtdID0gJHVyaV9zdHJpbmc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbGFzdFtdID0gJHVyaV9zdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkdXJpcyk7CiAgICAgICAgc29ydCgka2V5cyk7CgogICAgICAgIC8vIFJlYnVpbGQgYXJyYXkgb2YgVVJJcy4KICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAkaykgewogICAgICAgICAgICAkbmV3X3VyaXMgPSBBdXRoX1lhZGlzX2FycmF5X3NjcmFtYmxlKCR1cmlzWyRrXSk7CiAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkbmV3X3VyaXMpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfWWFkaXNfYXJyYXlfc2NyYW1ibGUoJGxhc3QpKTsKCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSAicHJpb3JpdHkiIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGlzIDxTZXJ2aWNlPgogICAgICogZWxlbWVudCwgaWYgdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50LiAgUmV0dXJucyBudWxsIGlmIG5vdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkICRyZXN1bHQgTnVsbCBvciBpbnRlZ2VyLCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgICogdGhpcyBTZXJ2aWNlIGVsZW1lbnQgaGFzIGEgJ3ByaW9yaXR5JyBhdHRyaWJ1dGUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFByaW9yaXR5KCkKICAgIHsKICAgICAgICAkYXR0cmlidXRlcyA9ICR0aGlzLT5wYXJzZXItPmF0dHJpYnV0ZXMoJHRoaXMtPmVsZW1lbnQpOwoKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncHJpb3JpdHknLCAkYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgcmV0dXJuIGludHZhbCgkYXR0cmlidXRlc1sncHJpb3JpdHknXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFVzZWQgdG8gZ2V0IFhNTCBlbGVtZW50cyBmcm9tIHRoaXMgb2JqZWN0J3MgPFNlcnZpY2U+IGVsZW1lbnQuCiAgICAgKgogICAgICogVGhpcyBpcyB3aGF0IHlvdSBzaG91bGQgdXNlIHRvIGdldCBhbGwgY3VzdG9tIGluZm9ybWF0aW9uIG91dAogICAgICogb2YgdGhpcyBlbGVtZW50LiBUaGlzIGlzIHVzZWQgYnkgc2VydmljZSBmaWx0ZXIgZnVuY3Rpb25zIHRvCiAgICAgKiBkZXRlcm1pbmUgd2hldGhlciBhIHNlcnZpY2UgZWxlbWVudCBjb250YWlucyBzcGVjaWZpYyB0YWdzLAogICAgICogZXRjLiAgTk9URTogdGhpcyBvbmx5IGNvbnNpZGVycyBlbGVtZW50cyB3aGljaCBhcmUgZGlyZWN0CiAgICAgKiBjaGlsZHJlbiBvZiB0aGUgPFNlcnZpY2U+IGVsZW1lbnQgZm9yIHRoaXMgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gbG9vayBmb3IKICAgICAqIEByZXR1cm4gYXJyYXkgJGxpc3QgQW4gYXJyYXkgb2YgZWxlbWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgKiBuYW1lIHdoaWNoIGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIDxTZXJ2aWNlPiBlbGVtZW50LiAgVGhlCiAgICAgKiBub2RlcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gJHRoaXMtPnBhcnNlcgogICAgICogbWV0aG9kcyAoc2VlIHtAbGluayBBdXRoX1lhZGlzX1hNTFBhcnNlcn0pLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRFbGVtZW50cygkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlci0+ZXZhbFhQYXRoKCRuYW1lLCAkdGhpcy0+ZWxlbWVudCk7CiAgICB9Cn0KCi8qCiAqIFJldHVybiB0aGUgZXhwaXJhdGlvbiBkYXRlIG9mIHRoaXMgWFJEIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8KICogZXhwaXJhdGlvbiB3YXMgc3BlY2lmaWVkLgogKgogKiBAcGFyYW0gJGRlZmF1bHQgVGhlIHZhbHVlIHRvIHVzZSBhcyB0aGUgZXhwaXJhdGlvbiBpZiBubyBleHBpcmF0aW9uCiAqIHdhcyBzcGVjaWZpZWQgaW4gdGhlIFhSRC4KICovCmZ1bmN0aW9uIEF1dGhfWWFkaXNfZ2V0WFJERXhwaXJhdGlvbigkeHJkX2VsZW1lbnQsICRkZWZhdWx0PW51bGwpCnsKICAgICRleHBpcmVzX2VsZW1lbnQgPSAkeHJkX2VsZW1lbnQtPiRwYXJzZXItPmV2YWxYUGF0aCgnL3hyZDpFeHBpcmVzJyk7CiAgICBpZiAoJGV4cGlyZXNfZWxlbWVudCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgIH0gZWxzZSB7CiAgICAgICAgJGV4cGlyZXNfc3RyaW5nID0gJGV4cGlyZXNfZWxlbWVudC0+dGV4dDsKCiAgICAgICAgLy8gV2lsbCByYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzdHJpbmcgaXMgbm90IHRoZSBleHBlY3RlZAogICAgICAgIC8vIGZvcm1hdAogICAgICAgICR0ID0gc3RycHRpbWUoJGV4cGlyZXNfc3RyaW5nLCAiJVktJW0tJWRUJUg6JU06JVNaIik7CgogICAgICAgIGlmICgkdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gW2ludCAkaG91ciBbLCBpbnQgJG1pbnV0ZSBbLCBpbnQgJHNlY29uZCBbLAogICAgICAgIC8vICBpbnQgJG1vbnRoIFssIGludCAkZGF5IFssIGludCAkeWVhciBdXV1dXV0KICAgICAgICByZXR1cm4gbWt0aW1lKCR0Wyd0bV9ob3VyJ10sICR0Wyd0bV9taW4nXSwgJHRbJ3RtX3NlYyddLAogICAgICAgICAgICAgICAgICAgICAgJHRbJ3RtX21vbiddLCAkdFsndG1fZGF5J10sICR0Wyd0bV95ZWFyJ10pOwogICAgfQp9CgovKioKICogVGhpcyBjbGFzcyBwZXJmb3JtcyBwYXJzaW5nIG9mIFhSRFMgZG9jdW1lbnRzLgogKgogKiBZb3Ugc2hvdWxkIG5vdCBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5OyByYXRoZXIsIGNhbGwKICogcGFyc2VYUkRTIHN0YXRpY2FsbHk6CiAqCiAqIDxwcmU+ICAkeHJkcyA9IEF1dGhfWWFkaXNfWFJEUzo6cGFyc2VYUkRTKCR4bWxfc3RyaW5nKTs8L3ByZT4KICoKICogSWYgdGhlIFhSRFMgY2FuIGJlIHBhcnNlZCBhbmQgaXMgdmFsaWQsIGFuIGluc3RhbmNlIG9mCiAqIEF1dGhfWWFkaXNfWFJEUyB3aWxsIGJlIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBudWxsIHdpbGwgYmUKICogcmV0dXJuZWQuICBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIEF1dGhfWWFkaXNfWWFkaXM6OmRpc2NvdmVyCiAqIG1ldGhvZC4KICoKICogQHBhY2thZ2UgT3BlbklECiAqLwpjbGFzcyBBdXRoX1lhZGlzX1hSRFMgewoKICAgIC8qKgogICAgICogSW5zdGFudGlhdGUgYSBBdXRoX1lhZGlzX1hSRFMgb2JqZWN0LiAgUmVxdWlyZXMgYW4gWFBhdGgKICAgICAqIGluc3RhbmNlIHdoaWNoIGhhcyBiZWVuIHVzZWQgdG8gcGFyc2UgYSB2YWxpZCBYUkRTIGRvY3VtZW50LgogICAgICovCiAgICBmdW5jdGlvbiBBdXRoX1lhZGlzX1hSRFMoJHhtbFBhcnNlciwgJHhyZE5vZGVzKQogICAgewogICAgICAgICR0aGlzLT5wYXJzZXIgPSAkeG1sUGFyc2VyOwogICAgICAgICR0aGlzLT54cmROb2RlID0gJHhyZE5vZGVzW2NvdW50KCR4cmROb2RlcykgLSAxXTsKICAgICAgICAkdGhpcy0+YWxsWHJkTm9kZXMgPSAkeHJkTm9kZXM7CiAgICAgICAgJHRoaXMtPnNlcnZpY2VMaXN0ID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X3BhcnNlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBhbiBYTUwgc3RyaW5nIChYUkRTIGRvY3VtZW50KSBhbmQgcmV0dXJuIGVpdGhlciBhCiAgICAgKiBBdXRoX1lhZGlzX1hSRFMgb2JqZWN0IG9yIG51bGwsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQogICAgICogWFJEUyBYTUwgaXMgdmFsaWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkeG1sX3N0cmluZyBBbiBYUkRTIFhNTCBzdHJpbmcuCiAgICAgKiBAcmV0dXJuIG1peGVkICR4cmRzIEFuIGluc3RhbmNlIG9mIEF1dGhfWWFkaXNfWFJEUyBvciBudWxsLAogICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWxpZGl0eSBvZiAkeG1sX3N0cmluZwogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gcGFyc2VYUkRTKCR4bWxfc3RyaW5nLCAkZXh0cmFfbnNfbWFwID0gbnVsbCkKICAgIHsKICAgICAgICAkX251bGwgPSBudWxsOwoKICAgICAgICBpZiAoISR4bWxfc3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiAkX251bGw7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VyID0gQXV0aF9ZYWRpc19nZXRYTUxQYXJzZXIoKTsKCiAgICAgICAgJG5zX21hcCA9IEF1dGhfWWFkaXNfZ2V0TlNNYXAoKTsKCiAgICAgICAgaWYgKCRleHRyYV9uc19tYXAgJiYgaXNfYXJyYXkoJGV4dHJhX25zX21hcCkpIHsKICAgICAgICAgICAgJG5zX21hcCA9IGFycmF5X21lcmdlKCRuc19tYXAsICRleHRyYV9uc19tYXApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEoJHBhcnNlciAmJiAkcGFyc2VyLT5pbml0KCR4bWxfc3RyaW5nLCAkbnNfbWFwKSkpIHsKICAgICAgICAgICAgcmV0dXJuICRfbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIFRyeSB0byBnZXQgcm9vdCBlbGVtZW50LgogICAgICAgICRyb290ID0gJHBhcnNlci0+ZXZhbFhQYXRoKCcveHJkczpYUkRTWzFdJyk7CiAgICAgICAgaWYgKCEkcm9vdCkgewogICAgICAgICAgICByZXR1cm4gJF9udWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2FycmF5KCRyb290KSkgewogICAgICAgICAgICAkcm9vdCA9ICRyb290WzBdOwogICAgICAgIH0KCiAgICAgICAgJGF0dHJzID0gJHBhcnNlci0+YXR0cmlidXRlcygkcm9vdCk7CgogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd4bWxuczp4cmQnLCAkYXR0cnMpICYmCiAgICAgICAgICAgICRhdHRyc1sneG1sbnM6eHJkJ10gIT0gQXV0aF9ZYWRpc19YTUxOU19YUkRTKSB7CiAgICAgICAgICAgIHJldHVybiAkX251bGw7CiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCd4bWxucycsICRhdHRycykgJiYKICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goJy94cmkvJywgJGF0dHJzWyd4bWxucyddKSAmJgogICAgICAgICAgICAgICAgICAgJGF0dHJzWyd4bWxucyddICE9IEF1dGhfWWFkaXNfWE1MTlNfWFJEXzJfMCkgewogICAgICAgICAgICByZXR1cm4gJF9udWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gR2V0IHRoZSBsYXN0IFhSRCBub2RlLgogICAgICAgICR4cmRfbm9kZXMgPSAkcGFyc2VyLT5ldmFsWFBhdGgoJy94cmRzOlhSRFNbMV0veHJkOlhSRCcpOwoKICAgICAgICBpZiAoISR4cmRfbm9kZXMpIHsKICAgICAgICAgICAgcmV0dXJuICRfbnVsbDsKICAgICAgICB9CgogICAgICAgICR4cmRzID0gbmV3IEF1dGhfWWFkaXNfWFJEUygkcGFyc2VyLCAkeHJkX25vZGVzKTsKICAgICAgICByZXR1cm4gJHhyZHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2FkZFNlcnZpY2UoJHByaW9yaXR5LCAkc2VydmljZSkKICAgIHsKICAgICAgICAkcHJpb3JpdHkgPSBpbnR2YWwoJHByaW9yaXR5KTsKCiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRwcmlvcml0eSwgJHRoaXMtPnNlcnZpY2VMaXN0KSkgewogICAgICAgICAgICAkdGhpcy0+c2VydmljZUxpc3RbJHByaW9yaXR5XSA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2VydmljZUxpc3RbJHByaW9yaXR5XVtdID0gJHNlcnZpY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSBzZXJ2aWNlIGxpc3QgdXNpbmcgbm9kZXMgZnJvbSB0aGUgWFJEUyBYTUwKICAgICAqIGRvY3VtZW50LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfcGFyc2UoKQogICAgewogICAgICAgICR0aGlzLT5zZXJ2aWNlTGlzdCA9IGFycmF5KCk7CgogICAgICAgICRzZXJ2aWNlcyA9ICR0aGlzLT5wYXJzZXItPmV2YWxYUGF0aCgneHJkOlNlcnZpY2UnLCAkdGhpcy0+eHJkTm9kZSk7CgogICAgICAgIGZvcmVhY2ggKCRzZXJ2aWNlcyBhcyAkbm9kZSkgewogICAgICAgICAgICAkcyA9IG5ldyBBdXRoX1lhZGlzX1NlcnZpY2UoKTsKICAgICAgICAgICAgJHMtPmVsZW1lbnQgPSAkbm9kZTsKICAgICAgICAgICAgJHMtPnBhcnNlciA9ICR0aGlzLT5wYXJzZXI7CgogICAgICAgICAgICAkcHJpb3JpdHkgPSAkcy0+Z2V0UHJpb3JpdHkoKTsKCiAgICAgICAgICAgIGlmICgkcHJpb3JpdHkgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRwcmlvcml0eSA9IFNFUlZJQ0VTX1lBRElTX01BWF9QUklPUklUWTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPl9hZGRTZXJ2aWNlKCRwcmlvcml0eSwgJHMpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHNlcnZpY2Ugb2JqZWN0cyB3aGljaCBjb3JyZXNwb25kIHRvIDxTZXJ2aWNlPgogICAgICogZWxlbWVudHMgaW4gdGhlIFhSRFMgWE1MIGRvY3VtZW50IGZvciB0aGlzIG9iamVjdC4KICAgICAqCiAgICAgKiBPcHRpb25hbGx5LCBhbiBhcnJheSBvZiBmaWx0ZXIgY2FsbGJhY2tzIG1heSBiZSBnaXZlbiB0byBsaW1pdAogICAgICogdGhlIGxpc3Qgb2YgcmV0dXJuZWQgc2VydmljZSBvYmplY3RzLiAgRnVydGhlcm1vcmUsIHRoZSBkZWZhdWx0CiAgICAgKiBtb2RlIGlzIHRvIHJldHVybiBhbGwgc2VydmljZSBvYmplY3RzIHdoaWNoIG1hdGNoIEFOWSBvZiB0aGUKICAgICAqIHNwZWNpZmllZCBmaWx0ZXJzLCBidXQgJGZpbHRlcl9tb2RlIG1heSBiZQogICAgICogU0VSVklDRVNfWUFESVNfTUFUQ0hfQUxMIGlmIHlvdSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGUKICAgICAqIHJldHVybmVkIHNlcnZpY2VzIG1hdGNoIGFsbCB0aGUgZ2l2ZW4gZmlsdGVycy4gIFNlZSB7QGxpbmsKICAgICAqIEF1dGhfWWFkaXNfWWFkaXN9IGZvciBkZXRhaWxlZCB1c2FnZSBpbmZvcm1hdGlvbiBvbiBmaWx0ZXIKICAgICAqIGZ1bmN0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGZpbHRlcnMgQW4gYXJyYXkgb2YgY2FsbGJhY2tzIHRvIGZpbHRlciB0aGUKICAgICAqIHJldHVybmVkIHNlcnZpY2VzLCBvciBudWxsIGlmIGFsbCBzZXJ2aWNlcyBhcmUgdG8gYmUgcmV0dXJuZWQuCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkZmlsdGVyX21vZGUgU0VSVklDRVNfWUFESVNfTUFUQ0hfQUxMIG9yCiAgICAgKiBTRVJWSUNFU19ZQURJU19NQVRDSF9BTlksIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSByZXR1cm5lZAogICAgICogc2VydmljZXMgc2hvdWxkIG1hdGNoIEFMTCBvciBBTlkgb2YgdGhlIHNwZWNpZmllZCBmaWx0ZXJzLAogICAgICogcmVzcGVjdGl2ZWx5LgogICAgICogQHJldHVybiBtaXhlZCAkc2VydmljZXMgQW4gYXJyYXkgb2Yge0BsaW5rCiAgICAgKiBBdXRoX1lhZGlzX1NlcnZpY2V9IG9iamVjdHMgaWYgJGZpbHRlcl9tb2RlIGlzIGEgdmFsaWQKICAgICAqIG1vZGU7IG51bGwgaWYgJGZpbHRlcl9tb2RlIGlzIGFuIGludmFsaWQgbW9kZSAoaS5lLiwgbm90CiAgICAgKiBTRVJWSUNFU19ZQURJU19NQVRDSF9BTlkgb3IgU0VSVklDRVNfWUFESVNfTUFUQ0hfQUxMKS4KICAgICAqLwogICAgZnVuY3Rpb24gc2VydmljZXMoJGZpbHRlcnMgPSBudWxsLAogICAgICAgICAgICAgICAgICAgICAgJGZpbHRlcl9tb2RlID0gU0VSVklDRVNfWUFESVNfTUFUQ0hfQU5ZKQogICAgewoKICAgICAgICAkcHJpX2tleXMgPSBhcnJheV9rZXlzKCR0aGlzLT5zZXJ2aWNlTGlzdCk7CiAgICAgICAgc29ydCgkcHJpX2tleXMsIFNPUlRfTlVNRVJJQyk7CgogICAgICAgIC8vIElmIG5vIGZpbHRlcnMgYXJlIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBlbnRpcmUgc2VydmljZQogICAgICAgIC8vIGxpc3QsIG9yZGVyZWQgYnkgcHJpb3JpdHkuCiAgICAgICAgaWYgKCEkZmlsdGVycyB8fAogICAgICAgICAgICAoIWlzX2FycmF5KCRmaWx0ZXJzKSkpIHsKCiAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkcHJpX2tleXMgYXMgJHByaSkgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsICR0aGlzLT5zZXJ2aWNlTGlzdFskcHJpXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgYSBiYWQgZmlsdGVyIG1vZGUgaXMgc3BlY2lmaWVkLCByZXR1cm4gbnVsbC4KICAgICAgICBpZiAoIWluX2FycmF5KCRmaWx0ZXJfbW9kZSwgYXJyYXkoU0VSVklDRVNfWUFESVNfTUFUQ0hfQU5ZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFU19ZQURJU19NQVRDSF9BTEwpKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBjYWxsYmFja3MgaW4gdGhlIGZpbHRlciBsaXN0IHRvCiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHNlcnZpY2VzIGFyZSByZXR1cm5lZC4KICAgICAgICAkZmlsdGVyZWQgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkcHJpX2tleXMgYXMgJHByaW9yaXR5X3ZhbHVlKSB7CiAgICAgICAgICAgICRzZXJ2aWNlX29ial9saXN0ID0gJHRoaXMtPnNlcnZpY2VMaXN0WyRwcmlvcml0eV92YWx1ZV07CgogICAgICAgICAgICBmb3JlYWNoICgkc2VydmljZV9vYmpfbGlzdCBhcyAkc2VydmljZSkgewoKICAgICAgICAgICAgICAgICRtYXRjaGVzID0gMDsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsdGVycyBhcyAkZmlsdGVyKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChjYWxsX3VzZXJfZnVuY19hcnJheSgkZmlsdGVyLCBhcnJheSgmJHNlcnZpY2UpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hlcysrOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWx0ZXJfbW9kZSA9PSBTRVJWSUNFU19ZQURJU19NQVRDSF9BTlkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmkgPSAkc2VydmljZS0+Z2V0UHJpb3JpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcHJpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaSA9IFNFUlZJQ0VTX1lBRElTX01BWF9QUklPUklUWTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJHByaSwgJGZpbHRlcmVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJlZFskcHJpXSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlcmVkWyRwcmldW10gPSAkc2VydmljZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgoJGZpbHRlcl9tb2RlID09IFNFUlZJQ0VTX1lBRElTX01BVENIX0FMTCkgJiYKICAgICAgICAgICAgICAgICAgICAoJG1hdGNoZXMgPT0gY291bnQoJGZpbHRlcnMpKSkgewoKICAgICAgICAgICAgICAgICAgICAkcHJpID0gJHNlcnZpY2UtPmdldFByaW9yaXR5KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwcmkgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHByaSA9IFNFUlZJQ0VTX1lBRElTX01BWF9QUklPUklUWTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkcHJpLCAkZmlsdGVyZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJlZFskcHJpXSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRmaWx0ZXJlZFskcHJpXVtdID0gJHNlcnZpY2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRwcmlfa2V5cyA9IGFycmF5X2tleXMoJGZpbHRlcmVkKTsKICAgICAgICBzb3J0KCRwcmlfa2V5cywgU09SVF9OVU1FUklDKTsKCiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHByaV9rZXlzIGFzICRwcmkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsICRmaWx0ZXJlZFskcHJpXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/XRI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBSb3V0aW5lcyBmb3IgWFJJIHJlc29sdXRpb24uCiAqCiAqIEBwYWNrYWdlIE9wZW5JRAogKiBAYXV0aG9yIEphblJhaW4sIEluYy4gPG9wZW5pZEBqYW5yYWluLmNvbT4KICogQGNvcHlyaWdodCAyMDA1LTIwMDggSmFucmFpbiwgSW5jLgogKiBAbGljZW5zZSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQXBhY2hlCiAqLwoKcmVxdWlyZV9vbmNlICdBdXRoL1lhZGlzL01pc2MucGhwJzsKcmVxdWlyZV9vbmNlICdBdXRoL1lhZGlzL1lhZGlzLnBocCc7CnJlcXVpcmVfb25jZSAnQXV0aC9PcGVuSUQucGhwJzsKCmZ1bmN0aW9uIEF1dGhfWWFkaXNfZ2V0RGVmYXVsdFByb3h5KCkKewogICAgcmV0dXJuICdodHRwOi8veHJpLm5ldC8nOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2dldFhSSUF1dGhvcml0aWVzKCkKewogICAgcmV0dXJuIGFycmF5KCchJywgJz0nLCAnQCcsICcrJywgJyQnLCAnKCcpOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2dldEVzY2FwZVJFKCkKewogICAgJHBhcnRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKGFycmF5X21lcmdlKEF1dGhfWWFkaXNfZ2V0VUNTQ2hhcnMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhfWWFkaXNfZ2V0SVByaXZhdGVDaGFycygpKSBhcyAkcGFpcikgewogICAgICAgIGxpc3QoJG0sICRuKSA9ICRwYWlyOwogICAgICAgICRwYXJ0c1tdID0gc3ByaW50ZigiJXMtJXMiLCBjaHIoJG0pLCBjaHIoJG4pKTsKICAgIH0KCiAgICByZXR1cm4gc3ByaW50ZignL1slc10vJywgaW1wbG9kZSgnJywgJHBhcnRzKSk7Cn0KCmZ1bmN0aW9uIEF1dGhfWWFkaXNfZ2V0WHJlZlJFKCkKewogICAgcmV0dXJuICcvXCgoLio/KVwpLyc7Cn0KCmZ1bmN0aW9uIEF1dGhfWWFkaXNfaWRlbnRpZmllclNjaGVtZSgkaWRlbnRpZmllcikKewogICAgaWYgKEF1dGhfWWFkaXNfc3RhcnRzd2l0aCgkaWRlbnRpZmllciwgJ3hyaTovLycpIHx8CiAgICAgICAgKCRpZGVudGlmaWVyICYmCiAgICAgICAgICBpbl9hcnJheSgkaWRlbnRpZmllclswXSwgQXV0aF9ZYWRpc19nZXRYUklBdXRob3JpdGllcygpKSkpIHsKICAgICAgICByZXR1cm4gIlhSSSI7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAiVVJJIjsKICAgIH0KfQoKZnVuY3Rpb24gQXV0aF9ZYWRpc190b0lSSU5vcm1hbCgkeHJpKQp7CiAgICBpZiAoIUF1dGhfWWFkaXNfc3RhcnRzd2l0aCgkeHJpLCAneHJpOi8vJykpIHsKICAgICAgICAkeHJpID0gJ3hyaTovLycgLiAkeHJpOwogICAgfQoKICAgIHJldHVybiBBdXRoX1lhZGlzX2VzY2FwZUZvcklSSSgkeHJpKTsKfQoKZnVuY3Rpb24gX2VzY2FwZV94cmVmKCR4cmVmX21hdGNoKQp7CiAgICAkeHJlZiA9ICR4cmVmX21hdGNoWzBdOwogICAgJHhyZWYgPSBzdHJfcmVwbGFjZSgnLycsICclMkYnLCAkeHJlZik7CiAgICAkeHJlZiA9IHN0cl9yZXBsYWNlKCc/JywgJyUzRicsICR4cmVmKTsKICAgICR4cmVmID0gc3RyX3JlcGxhY2UoJyMnLCAnJTIzJywgJHhyZWYpOwogICAgcmV0dXJuICR4cmVmOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2VzY2FwZUZvcklSSSgkeHJpKQp7CiAgICAkeHJpID0gc3RyX3JlcGxhY2UoJyUnLCAnJTI1JywgJHhyaSk7CiAgICAkeHJpID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKEF1dGhfWWFkaXNfZ2V0WHJlZlJFKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfZXNjYXBlX3hyZWYnLCAkeHJpKTsKICAgIHJldHVybiAkeHJpOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX3RvVVJJTm9ybWFsKCR4cmkpCnsKICAgIHJldHVybiBBdXRoX1lhZGlzX2lyaVRvVVJJKEF1dGhfWWFkaXNfdG9JUklOb3JtYWwoJHhyaSkpOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX2lyaVRvVVJJKCRpcmkpCnsKICAgIGlmICgxKSB7CiAgICAgICAgcmV0dXJuICRpcmk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIEFjY29yZGluZyB0byBSRkMgMzk4Nywgc2VjdGlvbiAzLjEsICJNYXBwaW5nIG9mIElSSXMgdG8gVVJJcyIKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKEF1dGhfWWFkaXNfZ2V0RXNjYXBlUkUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRoX1lhZGlzX3BjdF9lc2NhcGVfdW5pY29kZScsICRpcmkpOwogICAgfQp9CgoKZnVuY3Rpb24gQXV0aF9ZYWRpc19YUklBcHBlbmRBcmdzKCR1cmwsICRhcmdzKQp7CiAgICAvLyBBcHBlbmQgc29tZSBhcmd1bWVudHMgdG8gYW4gSFRUUCBxdWVyeS4gIFllcywgdGhpcyBpcyBqdXN0IGxpa2UKICAgIC8vIE9wZW5JRCdzIGFwcGVuZEFyZ3MsIGJ1dCB3aXRoIHNwZWNpYWwgc2Vhc29uaW5nIGZvciBYUkkKICAgIC8vIHF1ZXJpZXMuCgogICAgaWYgKGNvdW50KCRhcmdzKSA9PSAwKSB7CiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgLy8gTm9uLWVtcHR5IGFycmF5OyBpZiBpdCBpcyBhbiBhcnJheSBvZiBhcnJheXMsIHVzZSBtdWx0aXNvcnQ7CiAgICAvLyBvdGhlcndpc2UgdXNlIHNvcnQuCiAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygwLCAkYXJncykgJiYKICAgICAgICBpc19hcnJheSgkYXJnc1swXSkpIHsKICAgICAgICAvLyBEbyBub3RoaW5nIGhlcmUuCiAgICB9IGVsc2UgewogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkYXJncyk7CiAgICAgICAgc29ydCgka2V5cyk7CiAgICAgICAgJG5ld19hcmdzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICRuZXdfYXJnc1tdID0gYXJyYXkoJGtleSwgJGFyZ3NbJGtleV0pOwogICAgICAgIH0KICAgICAgICAkYXJncyA9ICRuZXdfYXJnczsKICAgIH0KCiAgICAvLyBBY2NvcmRpbmcgdG8gWFJJIFJlc29sdXRpb24gc2VjdGlvbiAiUVhSSSBxdWVyeSBwYXJhbWV0ZXJzIjoKICAgIC8vCiAgICAvLyAiSWYgdGhlIG9yaWdpbmFsIFFYUkkgaGFkIGEgbnVsbCBxdWVyeSBjb21wb25lbnQgKG9ubHkgYQogICAgLy8gIGxlYWRpbmcgcXVlc3Rpb24gbWFyayksIG9yIGEgcXVlcnkgY29tcG9uZW50IGNvbnNpc3Rpbmcgb2YKICAgIC8vICBvbmx5IHF1ZXN0aW9uIG1hcmtzLCBvbmUgYWRkaXRpb25hbCBsZWFkaW5nIHF1ZXN0aW9uIG1hcmsgTVVTVAogICAgLy8gIGJlIGFkZGVkIHdoZW4gYWRkaW5nIGFueSBYUkkgcmVzb2x1dGlvbiBwYXJhbWV0ZXJzLiIKICAgIGlmIChzdHJwb3MocnRyaW0oJHVybCwgJz8nKSwgJz8nKSAhPT0gZmFsc2UpIHsKICAgICAgICAkc2VwID0gJyYnOwogICAgfSBlbHNlIHsKICAgICAgICAkc2VwID0gJz8nOwogICAgfQoKICAgIHJldHVybiAkdXJsIC4gJHNlcCAuIEF1dGhfT3BlbklEOjpodHRwQnVpbGRRdWVyeSgkYXJncyk7Cn0KCmZ1bmN0aW9uIEF1dGhfWWFkaXNfcHJvdmlkZXJJc0F1dGhvcml0YXRpdmUoJHByb3ZpZGVySUQsICRjYW5vbmljYWxJRCkKewogICAgJGxhc3RiYW5nID0gc3RycnBvcygkY2Fub25pY2FsSUQsICchJyk7CiAgICAkcCA9IHN1YnN0cigkY2Fub25pY2FsSUQsIDAsICRsYXN0YmFuZyk7CiAgICByZXR1cm4gJHAgPT0gJHByb3ZpZGVySUQ7Cn0KCmZ1bmN0aW9uIEF1dGhfWWFkaXNfcm9vdEF1dGhvcml0eSgkeHJpKQp7CiAgICAvLyBSZXR1cm4gdGhlIHJvb3QgYXV0aG9yaXR5IGZvciBhbiBYUkkuCgogICAgJHJvb3QgPSBudWxsOwoKICAgIGlmIChBdXRoX1lhZGlzX3N0YXJ0c3dpdGgoJHhyaSwgJ3hyaTovLycpKSB7CiAgICAgICAgJHhyaSA9IHN1YnN0cigkeHJpLCA2KTsKICAgIH0KCiAgICAkYXV0aG9yaXR5ID0gZXhwbG9kZSgnLycsICR4cmksIDIpOwogICAgJGF1dGhvcml0eSA9ICRhdXRob3JpdHlbMF07CiAgICBpZiAoJGF1dGhvcml0eVswXSA9PSAnKCcpIHsKICAgICAgICAvLyBDcm9zcy1yZWZlcmVuY2UuCiAgICAgICAgLy8gWFhYOiBUaGlzIGlzIGluY29ycmVjdCBpZiBzb21lb25lIG5lc3RzIGNyb3NzLXJlZmVyZW5jZXMgc28KICAgICAgICAvLyAgIHRoZXJlIGlzIGFub3RoZXIgY2xvc2UtcGFyZW4gaW4gdGhlcmUuICBIb3BlZnVsbHkgbm9ib2R5CiAgICAgICAgLy8gICBkb2VzIHRoYXQgYmVmb3JlIHdlIGhhdmUgYSByZWFsIHhyaXBhcnNlIGZ1bmN0aW9uLgogICAgICAgIC8vICAgSG9wZWZ1bGx5IG5vYm9keSBkb2VzIHRoYXQgKmV2ZXIqLgogICAgICAgICRyb290ID0gc3Vic3RyKCRhdXRob3JpdHksIDAsIHN0cnBvcygkYXV0aG9yaXR5LCAnKScpICsgMSk7CiAgICB9IGVsc2UgaWYgKGluX2FycmF5KCRhdXRob3JpdHlbMF0sIEF1dGhfWWFkaXNfZ2V0WFJJQXV0aG9yaXRpZXMoKSkpIHsKICAgICAgICAvLyBPdGhlciBYUkkgcmVmZXJlbmNlLgogICAgICAgICRyb290ID0gJGF1dGhvcml0eVswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSVJJIHJlZmVyZW5jZS4KICAgICAgICAkX3NlZ21lbnRzID0gZXhwbG9kZSgiISIsICRhdXRob3JpdHkpOwogICAgICAgICRzZWdtZW50cyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJF9zZWdtZW50cyBhcyAkcykgewogICAgICAgICAgICAkc2VnbWVudHMgPSBhcnJheV9tZXJnZSgkc2VnbWVudHMsIGV4cGxvZGUoIioiLCAkcykpOwogICAgICAgIH0KICAgICAgICAkcm9vdCA9ICRzZWdtZW50c1swXTsKICAgIH0KCiAgICByZXR1cm4gQXV0aF9ZYWRpc19YUkkoJHJvb3QpOwp9CgpmdW5jdGlvbiBBdXRoX1lhZGlzX1hSSSgkeHJpKQp7CiAgICBpZiAoIUF1dGhfWWFkaXNfc3RhcnRzd2l0aCgkeHJpLCAneHJpOi8vJykpIHsKICAgICAgICAkeHJpID0gJ3hyaTovLycgLiAkeHJpOwogICAgfQogICAgcmV0dXJuICR4cmk7Cn0KCmZ1bmN0aW9uIEF1dGhfWWFkaXNfZ2V0Q2Fub25pY2FsSUQoJGluYW1lLCAkeHJkcykKewogICAgLy8gUmV0dXJucyBmYWxzZSBvciBhIGNhbm9uaWNhbCBJRCB2YWx1ZS4KCiAgICAvLyBOb3cgbm9kZXMgYXJlIGluIHJldmVyc2Ugb3JkZXIuCiAgICAkeHJkX2xpc3QgPSBhcnJheV9yZXZlcnNlKCR4cmRzLT5hbGxYcmROb2Rlcyk7CiAgICAkcGFyc2VyID0gJHhyZHMtPnBhcnNlcjsKICAgICRub2RlID0gJHhyZF9saXN0WzBdOwoKICAgICRjYW5vbmljYWxJRF9ub2RlcyA9ICRwYXJzZXItPmV2YWxYUGF0aCgneHJkOkNhbm9uaWNhbElEJywgJG5vZGUpOwoKICAgIGlmICghJGNhbm9uaWNhbElEX25vZGVzKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgICRjYW5vbmljYWxJRCA9ICRjYW5vbmljYWxJRF9ub2Rlc1swXTsKICAgICRjYW5vbmljYWxJRCA9IEF1dGhfWWFkaXNfWFJJKCRwYXJzZXItPmNvbnRlbnQoJGNhbm9uaWNhbElEKSk7CgogICAgJGNoaWxkSUQgPSAkY2Fub25pY2FsSUQ7CgogICAgZm9yICgkaSA9IDE7ICRpIDwgY291bnQoJHhyZF9saXN0KTsgJGkrKykgewogICAgICAgICR4cmQgPSAkeHJkX2xpc3RbJGldOwoKICAgICAgICAkcGFyZW50X3NvdWdodCA9IHN1YnN0cigkY2hpbGRJRCwgMCwgc3RycnBvcygkY2hpbGRJRCwgJyEnKSk7CiAgICAgICAgJHBhcmVudENJRCA9ICRwYXJzZXItPmV2YWxYUGF0aCgneHJkOkNhbm9uaWNhbElEJywgJHhyZCk7CiAgICAgICAgaWYgKCEkcGFyZW50Q0lEKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJHBhcmVudENJRCA9IEF1dGhfWWFkaXNfWFJJKCRwYXJzZXItPmNvbnRlbnQoJHBhcmVudENJRFswXSkpOwoKICAgICAgICBpZiAoc3RyY2FzZWNtcCgkcGFyZW50X3NvdWdodCwgJHBhcmVudENJRCkpIHsKICAgICAgICAgICAgLy8gcmFpc2UgWFJEU0ZyYXVkLgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkY2hpbGRJRCA9ICRwYXJlbnRfc291Z2h0OwogICAgfQoKICAgICRyb290ID0gQXV0aF9ZYWRpc19yb290QXV0aG9yaXR5KCRpbmFtZSk7CiAgICBpZiAoIUF1dGhfWWFkaXNfcHJvdmlkZXJJc0F1dGhvcml0YXRpdmUoJHJvb3QsICRjaGlsZElEKSkgewogICAgICAgIC8vIHJhaXNlIFhSRFNGcmF1ZC4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuICRjYW5vbmljYWxJRDsKfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/XRIRes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDb2RlIGZvciB1c2luZyBhIHByb3h5IFhSSSByZXNvbHZlci4KICovCgpyZXF1aXJlX29uY2UgJ0F1dGgvWWFkaXMvWFJEUy5waHAnOwpyZXF1aXJlX29uY2UgJ0F1dGgvWWFkaXMvWFJJLnBocCc7CgpjbGFzcyBBdXRoX1lhZGlzX1Byb3h5UmVzb2x2ZXIgewogICAgZnVuY3Rpb24gQXV0aF9ZYWRpc19Qcm94eVJlc29sdmVyKCRmZXRjaGVyLCAkcHJveHlfdXJsID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+ZmV0Y2hlciA9ICRmZXRjaGVyOwogICAgICAgICR0aGlzLT5wcm94eV91cmwgPSAkcHJveHlfdXJsOwogICAgICAgIGlmICghJHRoaXMtPnByb3h5X3VybCkgewogICAgICAgICAgICAkdGhpcy0+cHJveHlfdXJsID0gQXV0aF9ZYWRpc19nZXREZWZhdWx0UHJveHkoKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcXVlcnlVUkwoJHhyaSwgJHNlcnZpY2VfdHlwZSA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gdHJpbSBvZmYgdGhlIHhyaTovLyBwcmVmaXgKICAgICAgICAkcXhyaSA9IHN1YnN0cihBdXRoX1lhZGlzX3RvVVJJTm9ybWFsKCR4cmkpLCA2KTsKICAgICAgICAkaHhyaSA9ICR0aGlzLT5wcm94eV91cmwgLiAkcXhyaTsKICAgICAgICAkYXJncyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgJ194cmRfcicgPT4gJ2FwcGxpY2F0aW9uL3hyZHMreG1sJwogICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgaWYgKCRzZXJ2aWNlX3R5cGUpIHsKICAgICAgICAgICAgJGFyZ3NbJ194cmRfdCddID0gJHNlcnZpY2VfdHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBEb24ndCBwZXJmb3JtIHNlcnZpY2UgZW5kcG9pbnQgc2VsZWN0aW9uLgogICAgICAgICAgICAkYXJnc1snX3hyZF9yJ10gLj0gJztzZXA9ZmFsc2UnOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gQXV0aF9ZYWRpc19YUklBcHBlbmRBcmdzKCRoeHJpLCAkYXJncyk7CiAgICAgICAgcmV0dXJuICRxdWVyeTsKICAgIH0KCiAgICBmdW5jdGlvbiBxdWVyeSgkeHJpLCAkc2VydmljZV90eXBlcywgJGZpbHRlcnMgPSBhcnJheSgpKQogICAgewogICAgICAgICRzZXJ2aWNlcyA9IGFycmF5KCk7CiAgICAgICAgJGNhbm9uaWNhbElEID0gbnVsbDsKICAgICAgICBmb3JlYWNoICgkc2VydmljZV90eXBlcyBhcyAkc2VydmljZV90eXBlKSB7CiAgICAgICAgICAgICR1cmwgPSAkdGhpcy0+cXVlcnlVUkwoJHhyaSwgJHNlcnZpY2VfdHlwZSk7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5mZXRjaGVyLT5nZXQoJHVybCk7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2UtPnN0YXR1cyAhPSAyMDAgYW5kICRyZXNwb25zZS0+c3RhdHVzICE9IDIwNikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHhyZHMgPSBBdXRoX1lhZGlzX1hSRFM6OnBhcnNlWFJEUygkcmVzcG9uc2UtPmJvZHkpOwogICAgICAgICAgICBpZiAoISR4cmRzKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY2Fub25pY2FsSUQgPSBBdXRoX1lhZGlzX2dldENhbm9uaWNhbElEKCR4cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4cmRzKTsKCiAgICAgICAgICAgIGlmICgkY2Fub25pY2FsSUQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNvbWVfc2VydmljZXMgPSAkeHJkcy0+c2VydmljZXMoJGZpbHRlcnMpOwogICAgICAgICAgICAkc2VydmljZXMgPSBhcnJheV9tZXJnZSgkc2VydmljZXMsICRzb21lX3NlcnZpY2VzKTsKICAgICAgICAgICAgLy8gVE9ETzoKICAgICAgICAgICAgLy8gICogSWYgd2UgZG8gZ2V0IGhpdHMgZm9yIG11bHRpcGxlIHNlcnZpY2VfdHlwZXMsIHdlJ3JlCiAgICAgICAgICAgIC8vICAgIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gaGF2ZSBkdXBsaWNhdGVkIHNlcnZpY2UKICAgICAgICAgICAgLy8gICAgZW50cmllcyBhbmQgYnJva2VuIHByaW9yaXR5IG9yZGVyaW5nLgogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJGNhbm9uaWNhbElELCAkc2VydmljZXMpOwogICAgfQp9CgoK]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/Auth/Yadis/Yadis.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGUgY29yZSBQSFAgWWFkaXMgaW1wbGVtZW50YXRpb24uCiAqCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1CiAqCiAqIExJQ0VOU0U6IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICogQGF1dGhvciBKYW5SYWluLCBJbmMuIDxvcGVuaWRAamFucmFpbi5jb20+CiAqIEBjb3B5cmlnaHQgMjAwNS0yMDA4IEphbnJhaW4sIEluYy4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZQogKi8KCi8qKgogKiBOZWVkIGJvdGggZmV0Y2hlciB0eXBlcyBzbyB3ZSBjYW4gdXNlIHRoZSByaWdodCBvbmUgYmFzZWQgb24gdGhlCiAqIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgQ1VSTC4KICovCnJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9QbGFpbkhUVFBGZXRjaGVyLnBocCI7CnJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9QYXJhbm9pZEhUVFBGZXRjaGVyLnBocCI7CgovKioKICogTmVlZCB0aGlzIGZvciBwYXJzaW5nIEhUTUwgKGxvb2tpbmcgZm9yIE1FVEEgdGFncykuCiAqLwpyZXF1aXJlX29uY2UgIkF1dGgvWWFkaXMvUGFyc2VIVE1MLnBocCI7CgovKioKICogTmVlZCB0aGlzIHRvIHBhcnNlIHRoZSBYUkRTIGRvY3VtZW50IGR1cmluZyBZYWRpcyBkaXNjb3ZlcnkuCiAqLwpyZXF1aXJlX29uY2UgIkF1dGgvWWFkaXMvWFJEUy5waHAiOwoKLyoqCiAqIFhSRFMgKHlhZGlzKSBjb250ZW50IHR5cGUKICovCmRlZmluZSgnQXV0aF9ZYWRpc19DT05URU5UX1RZUEUnLCAnYXBwbGljYXRpb24veHJkcyt4bWwnKTsKCi8qKgogKiBZYWRpcyBoZWFkZXIKICovCmRlZmluZSgnQXV0aF9ZYWRpc19IRUFERVJfTkFNRScsICdYLVhSRFMtTG9jYXRpb24nKTsKCi8qKgogKiBDb250YWlucyB0aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcgWWFkaXMgZGlzY292ZXJ5IG9uIGEgVVJJLgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfWWFkaXNfRGlzY292ZXJ5UmVzdWx0IHsKCiAgICAvLyBUaGUgVVJJIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZmV0Y2hlcgogICAgdmFyICRyZXF1ZXN0X3VyaSA9IG51bGw7CgogICAgLy8gVGhlIHJlc3VsdCBvZiBmb2xsb3dpbmcgcmVkaXJlY3RzIGZyb20gdGhlIHJlcXVlc3RfdXJpCiAgICB2YXIgJG5vcm1hbGl6ZWRfdXJpID0gbnVsbDsKCiAgICAvLyBUaGUgVVJJIGZyb20gd2hpY2ggdGhlIHJlc3BvbnNlIHRleHQgd2FzIHJldHVybmVkIChzZXQgdG8KICAgIC8vIE5vbmUgaWYgdGhlcmUgd2FzIG5vIFhSRFMgZG9jdW1lbnQgZm91bmQpCiAgICB2YXIgJHhyZHNfdXJpID0gbnVsbDsKCiAgICB2YXIgJHhyZHMgPSBudWxsOwoKICAgIC8vIFRoZSBjb250ZW50LXR5cGUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzcG9uc2VfdGV4dAogICAgdmFyICRjb250ZW50X3R5cGUgPSBudWxsOwoKICAgIC8vIFRoZSBkb2N1bWVudCByZXR1cm5lZCBmcm9tIHRoZSB4cmRzX3VyaQogICAgdmFyICRyZXNwb25zZV90ZXh0ID0gbnVsbDsKCiAgICAvLyBEaWQgdGhlIGRpc2NvdmVyeSBmYWlsIG1pc2VyYWJseT8KICAgIHZhciAkZmFpbGVkID0gZmFsc2U7CgogICAgZnVuY3Rpb24gQXV0aF9ZYWRpc19EaXNjb3ZlcnlSZXN1bHQoJHJlcXVlc3RfdXJpKQogICAgewogICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QKICAgICAgICAvLyBzZXRzIGFsbCBhdHRyaWJ1dGVzIHRvIE5vbmUgZXhjZXB0IHRoZSByZXF1ZXN0X3VyaQogICAgICAgICR0aGlzLT5yZXF1ZXN0X3VyaSA9ICRyZXF1ZXN0X3VyaTsKICAgIH0KCiAgICBmdW5jdGlvbiBmYWlsKCkKICAgIHsKICAgICAgICAkdGhpcy0+ZmFpbGVkID0gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0ZhaWx1cmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFpbGVkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBzZXJ2aWNlIG9iamVjdHMgYXMgZGVzY3JpYmVkIGJ5IHRoZSBYUkRTCiAgICAgKiBkb2N1bWVudCwgaWYgdGhpcyB5YWRpcyBvYmplY3QgcmVwcmVzZW50cyBhIHN1Y2Nlc3NmdWwgWWFkaXMKICAgICAqIGRpc2NvdmVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRzZXJ2aWNlcyBBbiBhcnJheSBvZiB7QGxpbmsgQXV0aF9ZYWRpc19TZXJ2aWNlfQogICAgICogb2JqZWN0cwogICAgICovCiAgICBmdW5jdGlvbiBzZXJ2aWNlcygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT54cmRzKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+eHJkcy0+c2VydmljZXMoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIHVzZWRZYWRpc0xvY2F0aW9uKCkKICAgIHsKICAgICAgICAvLyBXYXMgdGhlIFlhZGlzIHByb3RvY29sJ3MgaW5kaXJlY3Rpb24gdXNlZD8KICAgICAgICByZXR1cm4gKCR0aGlzLT54cmRzX3VyaSAmJiAkdGhpcy0+bm9ybWFsaXplZF91cmkgIT0gJHRoaXMtPnhyZHNfdXJpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1hSRFMoKQogICAgewogICAgICAgIC8vIElzIHRoZSByZXNwb25zZSB0ZXh0IHN1cHBvc2VkIHRvIGJlIGFuIFhSRFMgZG9jdW1lbnQ/CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dXNlZFlhZGlzTG9jYXRpb24oKSB8fAogICAgICAgICAgICAgICAgJHRoaXMtPmNvbnRlbnRfdHlwZSA9PSBBdXRoX1lhZGlzX0NPTlRFTlRfVFlQRSk7CiAgICB9Cn0KCi8qKgogKgogKiBQZXJmb3JtIHRoZSBZYWRpcyBwcm90b2NvbCBvbiB0aGUgaW5wdXQgVVJMIGFuZCByZXR1cm4gYW4gaXRlcmFibGUKICogb2YgcmVzdWx0aW5nIGVuZHBvaW50IG9iamVjdHMuCiAqCiAqIGlucHV0X3VybDogVGhlIFVSTCBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBZYWRpcyBwcm90b2NvbAogKgogKiBAcmV0dXJuOiBUaGUgbm9ybWFsaXplZCBpZGVudGl0eSBVUkwgYW5kIGFuIGl0ZXJhYmxlIG9mIGVuZHBvaW50CiAqIG9iamVjdHMgZ2VuZXJhdGVkIGJ5IHRoZSBmaWx0ZXIgZnVuY3Rpb24uCiAqCiAqIHhyZHNfcGFyc2VfZnVuYzogYSBjYWxsYmFjayB3aGljaCB3aWxsIHRha2UgKHVyaSwgeHJkc190ZXh0KSBhbmQKICogcmV0dXJuIGFuIGFycmF5IG9mIHNlcnZpY2UgZW5kcG9pbnQgb2JqZWN0cyBvciBudWxsLiAgVXN1YWxseQogKiBhcnJheSgnQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50JywgJ2Zyb21YUkRTJykuCiAqCiAqIGRpc2NvdmVyX2Z1bmM6IGlmIG5vdCBudWxsLCBhIGNhbGxiYWNrIHdoaWNoIHNob3VsZCB0YWtlICh1cmkpIGFuZAogKiByZXR1cm4gYW4gQXV0aF9ZYWRpc19ZYWRpcyBvYmplY3Qgb3IgbnVsbC4KICovCmZ1bmN0aW9uIEF1dGhfWWFkaXNfZ2V0U2VydmljZUVuZHBvaW50cygkaW5wdXRfdXJsLCAkeHJkc19wYXJzZV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NvdmVyX2Z1bmM9bnVsbCwgJGZldGNoZXI9bnVsbCkKewogICAgaWYgKCRkaXNjb3Zlcl9mdW5jID09PSBudWxsKSB7CiAgICAgICAgJGRpc2NvdmVyX2Z1bmN0aW9uID0gYXJyYXkoJ0F1dGhfWWFkaXNfWWFkaXMnLCAnZGlzY292ZXInKTsKICAgIH0KCiAgICAkeWFkaXNfcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGRpc2NvdmVyX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJGlucHV0X3VybCwgJiRmZXRjaGVyKSk7CgogICAgaWYgKCR5YWRpc19yZXN1bHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gYXJyYXkoJGlucHV0X3VybCwgYXJyYXkoKSk7CiAgICB9CgogICAgJGVuZHBvaW50cyA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCR4cmRzX3BhcnNlX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkeWFkaXNfcmVzdWx0LT5ub3JtYWxpemVkX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5YWRpc19yZXN1bHQtPnJlc3BvbnNlX3RleHQpKTsKCiAgICBpZiAoJGVuZHBvaW50cyA9PT0gbnVsbCkgewogICAgICAgICRlbmRwb2ludHMgPSBhcnJheSgpOwogICAgfQoKICAgIHJldHVybiBhcnJheSgkeWFkaXNfcmVzdWx0LT5ub3JtYWxpemVkX3VyaSwgJGVuZHBvaW50cyk7Cn0KCi8qKgogKiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBQSFAgWWFkaXMgbGlicmFyeS4gIFRoaXMgaXMgdGhlIG9ubHkgY2xhc3MKICogYSB1c2VyIG5lZWRzIHRvIHVzZSB0byBwZXJmb3JtIFlhZGlzIGRpc2NvdmVyeS4gIFRoaXMgY2xhc3MKICogcGVyZm9ybXMgdGhlIGRpc2NvdmVyeSBBTkQgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIGRpc2NvdmVyeS4KICoKICogRmlyc3QsIHJlcXVpcmUgdGhpcyBsaWJyYXJ5IGludG8geW91ciBwcm9ncmFtIHNvdXJjZToKICoKICogPHByZT4gIHJlcXVpcmVfb25jZSAiQXV0aC9ZYWRpcy9ZYWRpcy5waHAiOzwvcHJlPgogKgogKiBUbyBwZXJmb3JtIFlhZGlzIGRpc2NvdmVyeSwgZmlyc3QgY2FsbCB0aGUgImRpc2NvdmVyIiBtZXRob2QKICogc3RhdGljYWxseSB3aXRoIGEgVVJJIHBhcmFtZXRlcjoKICoKICogPHByZT4gICRodHRwX3Jlc3BvbnNlID0gYXJyYXkoKTsKICogICRmZXRjaGVyID0gQXV0aF9ZYWRpc19ZYWRpczo6Z2V0SFRUUEZldGNoZXIoKTsKICogICR5YWRpc19vYmplY3QgPSBBdXRoX1lhZGlzX1lhZGlzOjpkaXNjb3ZlcigkdXJpLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodHRwX3Jlc3BvbnNlLCAkZmV0Y2hlcik7PC9wcmU+CiAqCiAqIElmIHRoZSBkaXNjb3Zlcnkgc3VjY2VlZHMsICR5YWRpc19vYmplY3Qgd2lsbCBiZSBhbiBpbnN0YW5jZSBvZgogKiB7QGxpbmsgQXV0aF9ZYWRpc19ZYWRpc30uICBJZiBub3QsIGl0IHdpbGwgYmUgbnVsbC4gIFRoZSBYUkRTCiAqIGRvY3VtZW50IGZvdW5kIGR1cmluZyBkaXNjb3Zlcnkgc2hvdWxkIGhhdmUgc2VydmljZSBkZXNjcmlwdGlvbnMsCiAqIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBieSBjYWxsaW5nCiAqCiAqIDxwcmU+ICAkc2VydmljZV9saXN0ID0gJHlhZGlzX29iamVjdC0+c2VydmljZXMoKTs8L3ByZT4KICoKICogd2hpY2ggcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdoaWNoIGRlc2NyaWJlIGVhY2ggc2VydmljZS4KICogVGhlc2Ugb2JqZWN0cyBhcmUgaW5zdGFuY2VzIG9mIEF1dGhfWWFkaXNfU2VydmljZS4gIEVhY2ggb2JqZWN0CiAqIGRlc2NyaWJlcyBleGFjdGx5IG9uZSB3aG9sZSBTZXJ2aWNlIGVsZW1lbnQsIGNvbXBsZXRlIHdpdGggYWxsIG9mCiAqIGl0cyBUeXBlcyBhbmQgVVJJcyAobm8gZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCkuICBUaGUgY29tbW9uIHVzZQogKiBjYXNlIGZvciB1c2luZyB0aGUgc2VydmljZSBvYmplY3RzIHJldHVybmVkIGJ5IHNlcnZpY2VzKCkgaXMgdG8KICogd3JpdGUgb25lIG9yIG1vcmUgZmlsdGVyIGZ1bmN0aW9ucyBhbmQgcGFzcyB0aG9zZSB0byBzZXJ2aWNlcygpOgogKgogKiA8cHJlPiAgJHNlcnZpY2VfbGlzdCA9ICR5YWRpc19vYmplY3QtPnNlcnZpY2VzKAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgiZmlsdGVyQnlVUkkiLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsdGVyQnlFeHRlbnNpb24iKSk7PC9wcmU+CiAqCiAqIFRoZSBmaWx0ZXIgZnVuY3Rpb25zICh3aG9zZSBuYW1lcyBhcHBlYXIgaW4gdGhlIGFycmF5IHBhc3NlZCB0bwogKiBzZXJ2aWNlcygpKSB0YWtlIHRoZSBmb2xsb3dpbmcgZm9ybToKICoKICogPHByZT4gIGZ1bmN0aW9uIG15RmlsdGVyKCRzZXJ2aWNlKSB7CiAqICAgICAgIC8vIFF1ZXJ5ICRzZXJ2aWNlIG9iamVjdCBoZXJlLiAgUmV0dXJuIHRydWUgaWYgdGhlIHNlcnZpY2UKICogICAgICAgLy8gbWF0Y2hlcyB5b3VyIHF1ZXJ5OyBmYWxzZSBpZiBub3QuCiAqICB9PC9wcmU+CiAqCiAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGZpbHRlciB3aGljaCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uIHRvCiAqIG1hdGNoIHRoZSBjb250ZW50IG9mIFVSSSB0YWdzIChub3RlIHRoYXQgdGhlIEF1dGhfWWFkaXNfU2VydmljZQogKiBjbGFzcyBwcm92aWRlcyBhIGdldFVSSXMoKSBtZXRob2Qgd2hpY2ggeW91IHNob3VsZCB1c2UgaW5zdGVhZCBvZgogKiB0aGlzIGNvbnRyaXZlZCBleGFtcGxlKToKICoKICogPHByZT4KICogIGZ1bmN0aW9uIFVSSU1hdGNoZXIoJHNlcnZpY2UpIHsKICogICAgICBmb3JlYWNoICgkc2VydmljZS0+Z2V0RWxlbWVudHMoJ3hyZDpVUkknKSBhcyAkdXJpKSB7CiAqICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvc29tZV9wYXR0ZXJuLyIsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2aWNlLT5wYXJzZXItPmNvbnRlbnQoJHVyaSkpKSB7CiAqICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICogICAgICAgICAgfQogKiAgICAgIH0KICogICAgICByZXR1cm4gZmFsc2U7CiAqICB9PC9wcmU+CiAqCiAqIFRoZSBmaWx0ZXIgZnVuY3Rpb25zIHlvdSBwYXNzIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHNlcnZpY2UKICogb2JqZWN0IHRvIGRldGVybWluZSB3aGljaCBvbmVzIG1hdGNoIHRoZSBjcml0ZXJpYSB5b3VyIGZpbHRlcnMKICogc3BlY2lmeS4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoYXQgaWYgYSBnaXZlbiBzZXJ2aWNlIG9iamVjdAogKiBtYXRjaGVzIEFOWSBvZiB0aGUgZmlsdGVycyBzcGVjaWZpZWQgaW4gdGhlIHNlcnZpY2VzKCkgY2FsbCwgaXQKICogd2lsbCBiZSByZXR1cm5lZC4gIFlvdSBjYW4gc3BlY2lmeSB0aGF0IGEgZ2l2ZW4gc2VydmljZSBvYmplY3Qgd2lsbAogKiBiZSByZXR1cm5lZCBPTkxZIGlmIGl0IG1hdGNoZXMgQUxMIHNwZWNpZmllZCBmaWx0ZXJzIGJ5IGNoYW5naW5nCiAqIHRoZSBtYXRjaCBtb2RlIG9mIHNlcnZpY2VzKCk6CiAqCiAqIDxwcmU+ICAkeWFkaXNfb2JqZWN0LT5zZXJ2aWNlcyhhcnJheSgiZmlsdGVyMSIsICJmaWx0ZXIyIiksCiAqICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFU19ZQURJU19NQVRDSF9BTEwpOzwvcHJlPgogKgogKiBTZWUge0BsaW5rIFNFUlZJQ0VTX1lBRElTX01BVENIX0FMTH0gYW5kIHtAbGluawogKiBTRVJWSUNFU19ZQURJU19NQVRDSF9BTll9LgogKgogKiBTZXJ2aWNlcyBkZXNjcmliZWQgaW4gYW4gWFJEUyBzaG91bGQgaGF2ZSBhIGxpYnJhcnkgd2hpY2ggeW91J2xsCiAqIHByb2JhYmx5IGJlIHVzaW5nLiAgVGhvc2UgbGlicmFyaWVzIGFyZSByZXNwb25zaWJsZSBmb3IgZGVmaW5pbmcKICogZmlsdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlICJzZXJ2aWNlcygpIiBjYWxsLiAgSWYgeW91IG5lZWQKICogdG8gd3JpdGUgeW91ciBvd24gZmlsdGVyLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHtAbGluawogKiBBdXRoX1lhZGlzX1NlcnZpY2V9LgogKgogKiBAcGFja2FnZSBPcGVuSUQKICovCmNsYXNzIEF1dGhfWWFkaXNfWWFkaXMgewoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBIVFRQIGZldGNoZXIgb2JqZWN0LiAgSWYgdGhlIENVUkwgZXh0ZW5zaW9uIGlzCiAgICAgKiBwcmVzZW50LCBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXV0aF9ZYWRpc19QYXJhbm9pZEhUVFBGZXRjaGVyfQogICAgICogaXMgcmV0dXJuZWQuICBJZiBub3QsIGFuIGluc3RhbmNlIG9mCiAgICAgKiB7QGxpbmsgQXV0aF9ZYWRpc19QbGFpbkhUVFBGZXRjaGVyfSBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBJZiBBdXRoX1lhZGlzX0NVUkxfT1ZFUlJJREUgaXMgZGVmaW5lZCwgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMKICAgICAqIHJldHVybiBhIHtAbGluayBBdXRoX1lhZGlzX1BsYWluSFRUUEZldGNoZXJ9LgogICAgICovCiAgICBzdGF0aWMgZnVuY3Rpb24gZ2V0SFRUUEZldGNoZXIoJHRpbWVvdXQgPSAyMCkKICAgIHsKICAgICAgICBpZiAoQXV0aF9ZYWRpc19ZYWRpczo6Y3VybFByZXNlbnQoKSAmJgogICAgICAgICAgICAoIWRlZmluZWQoJ0F1dGhfWWFkaXNfQ1VSTF9PVkVSUklERScpKSkgewogICAgICAgICAgICAkZmV0Y2hlciA9IG5ldyBBdXRoX1lhZGlzX1BhcmFub2lkSFRUUEZldGNoZXIoJHRpbWVvdXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRmZXRjaGVyID0gbmV3IEF1dGhfWWFkaXNfUGxhaW5IVFRQRmV0Y2hlcigkdGltZW91dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmV0Y2hlcjsKICAgIH0KCiAgICBzdGF0aWMgZnVuY3Rpb24gY3VybFByZXNlbnQoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgc3RhdGljIGZ1bmN0aW9uIF9nZXRIZWFkZXIoJGhlYWRlcl9saXN0LCAkbmFtZXMpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcl9saXN0IGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICBmb3JlYWNoICgkbmFtZXMgYXMgJG4pIHsKICAgICAgICAgICAgICAgIGlmIChzdHJ0b2xvd2VyKCRuYW1lKSA9PSBzdHJ0b2xvd2VyKCRuKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBfZ2V0Q29udGVudFR5cGUoJGNvbnRlbnRfdHlwZV9oZWFkZXIpCiAgICB7CiAgICAgICAgaWYgKCRjb250ZW50X3R5cGVfaGVhZGVyKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoIjsiLCAkY29udGVudF90eXBlX2hlYWRlcik7CiAgICAgICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKCRwYXJ0c1swXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHN0YXRpY2FsbHkgYW5kIHdpbGwgYnVpbGQgYSBZYWRpcwogICAgICogaW5zdGFuY2UgaWYgdGhlIGRpc2NvdmVyeSBwcm9jZXNzIHN1Y2NlZWRzLiAgVGhpcyBpbXBsZW1lbnRzCiAgICAgKiBZYWRpcyBkaXNjb3ZlcnkgYXMgc3BlY2lmaWVkIGluIHRoZSBZYWRpcyBzcGVjaWZpY2F0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSBUaGUgVVJJIG9uIHdoaWNoIHRvIHBlcmZvcm0gWWFkaXMgZGlzY292ZXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaHR0cF9yZXNwb25zZSBBbiBhcnJheSByZWZlcmVuY2Ugd2hlcmUgdGhlIEhUVFAKICAgICAqIHJlc3BvbnNlIG9iamVjdCB3aWxsIGJlIHN0b3JlZCAoc2VlIHtAbGluawogICAgICogQXV0aF9ZYWRpc19IVFRQUmVzcG9uc2V9LgogICAgICoKICAgICAqIEBwYXJhbSBBdXRoX1lhZGlzX0hUVFBGZXRjaGVyICRmZXRjaGVyIEFuIGluc3RhbmNlIG9mIGEKICAgICAqIEF1dGhfWWFkaXNfSFRUUEZldGNoZXIgc3ViY2xhc3MuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRleHRyYV9uc19tYXAgQW4gYXJyYXkgd2hpY2ggbWFwcyBuYW1lc3BhY2UgbmFtZXMKICAgICAqIHRvIG5hbWVzcGFjZSBVUklzIHRvIGJlIHVzZWQgd2hlbiBwYXJzaW5nIHRoZSBZYWRpcyBYUkRTCiAgICAgKiBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkdGltZW91dCBBbiBvcHRpb25hbCBmZXRjaGVyIHRpbWVvdXQsIGluIHNlY29uZHMuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCAkb2JqIEVpdGhlciBudWxsIG9yIGFuIGluc3RhbmNlIG9mCiAgICAgKiBBdXRoX1lhZGlzX1lhZGlzLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGlzY292ZXJ5CiAgICAgKiBzdWNjZWVkZWQuCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBkaXNjb3ZlcigkdXJpLCAkZmV0Y2hlciwKICAgICAgICAgICAgICAgICAgICAgICRleHRyYV9uc19tYXAgPSBudWxsLCAkdGltZW91dCA9IDIwKQogICAgewogICAgICAgICRyZXN1bHQgPSBuZXcgQXV0aF9ZYWRpc19EaXNjb3ZlcnlSZXN1bHQoJHVyaSk7CgogICAgICAgICRyZXF1ZXN0X3VyaSA9ICR1cmk7CiAgICAgICAgJGhlYWRlcnMgPSBhcnJheSgiQWNjZXB0OiAiIC4gQXV0aF9ZYWRpc19DT05URU5UX1RZUEUgLgogICAgICAgICAgICAgICAgICAgICAgICAgJywgdGV4dC9odG1sOyBxPTAuMywgYXBwbGljYXRpb24veGh0bWwreG1sOyBxPTAuNScpOwoKICAgICAgICBpZiAoJGZldGNoZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgJGZldGNoZXIgPSBBdXRoX1lhZGlzX1lhZGlzOjpnZXRIVFRQRmV0Y2hlcigkdGltZW91dCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSAkZmV0Y2hlci0+Z2V0KCR1cmksICRoZWFkZXJzKTsKCiAgICAgICAgaWYgKCEkcmVzcG9uc2UgfHwgKCRyZXNwb25zZS0+c3RhdHVzICE9IDIwMCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5zdGF0dXMgIT0gMjA2KSkgewogICAgICAgICAgICAkcmVzdWx0LT5mYWlsKCk7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdC0+bm9ybWFsaXplZF91cmkgPSAkcmVzcG9uc2UtPmZpbmFsX3VybDsKICAgICAgICAkcmVzdWx0LT5jb250ZW50X3R5cGUgPSBBdXRoX1lhZGlzX1lhZGlzOjpfZ2V0SGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdjb250ZW50LXR5cGUnKSk7CgogICAgICAgIGlmICgkcmVzdWx0LT5jb250ZW50X3R5cGUgJiYKICAgICAgICAgICAgKEF1dGhfWWFkaXNfWWFkaXM6Ol9nZXRDb250ZW50VHlwZSgkcmVzdWx0LT5jb250ZW50X3R5cGUpID09CiAgICAgICAgICAgICBBdXRoX1lhZGlzX0NPTlRFTlRfVFlQRSkpIHsKICAgICAgICAgICAgJHJlc3VsdC0+eHJkc191cmkgPSAkcmVzdWx0LT5ub3JtYWxpemVkX3VyaTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkeWFkaXNfbG9jYXRpb24gPSBBdXRoX1lhZGlzX1lhZGlzOjpfZ2V0SGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5oZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoQXV0aF9ZYWRpc19IRUFERVJfTkFNRSkpOwoKICAgICAgICAgICAgaWYgKCEkeWFkaXNfbG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICRwYXJzZXIgPSBuZXcgQXV0aF9ZYWRpc19QYXJzZUhUTUwoKTsKICAgICAgICAgICAgICAgICR5YWRpc19sb2NhdGlvbiA9ICRwYXJzZXItPmdldEhUVFBFcXVpdigkcmVzcG9uc2UtPmJvZHkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHlhZGlzX2xvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0LT54cmRzX3VyaSA9ICR5YWRpc19sb2NhdGlvbjsKCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkZmV0Y2hlci0+Z2V0KCR5YWRpc19sb2NhdGlvbik7CgogICAgICAgICAgICAgICAgaWYgKCghJHJlc3BvbnNlKSB8fCAoJHJlc3BvbnNlLT5zdGF0dXMgIT0gMjAwIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5zdGF0dXMgIT0gMjA2KSkgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHQtPmZhaWwoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcmVzdWx0LT5jb250ZW50X3R5cGUgPSBBdXRoX1lhZGlzX1lhZGlzOjpfZ2V0SGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdjb250ZW50LXR5cGUnKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRyZXN1bHQtPnJlc3BvbnNlX3RleHQgPSAkcmVzcG9uc2UtPmJvZHk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KCgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/CHANGES-2.1.0</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KiBBUEkgQ2hhbmdlcwogICogQVg6OkZldGNoUmVzcG9uc2U6OmZyb21TdWNjZXNzUmVzcG9uc2UgLSByZXR1cm4gbnVsbCB3aGVuIEFYCiAgICByZXNwb25zZSBhcmd1bWVudHMgYXJlIGFic2VudAogICogQWx0ZXIgQVggZnJvbU9wZW5JRFJlcXVlc3QoKSB0byB0YWtlIEF1dGhfT3BlbklEX0F1dGhSZXF1ZXN0CiAgICBvYmplY3QgaW5zdGVhZCBvZiBBdXRoX09wZW5JRF9NZXNzYWdlIG9iamVjdCBzbyB0aGF0IGl0IG1hdGNoZXMKICAgIGl0cyBjb3VudGVycGFydCBtZXRob2RzIGluIFNSRUcgYW5kIFBBUEUgZXh0ZW5zaW9ucy4KICAqIFBBUEUgKFByb3ZpZGVyIEF1dGhlbnRpY2F0aW9uIFBvbGljeSBFeHRlbnNpb24pIG1vZHVsZQogICAgICAqIFVwZGF0ZWQgZXh0ZW5zaW9uIGZvciBzcGVjaWZpY2F0aW9uIGRyYWZ0IDIKICAgICAgKiBBdXRoX09wZW5JRF9QQVBFX1JlcXVlc3Q6OmZyb21TdWNjZXNzUmVzcG9uc2UgcmV0dXJucyBOb25lIGlmCiAgICAgICAgUEFQRSByZXNwb25zZSBhcmd1bWVudHMgd2VyZSBub3Qgc2lnbmVkCiAgKiBBZGRlZCBmdW5jdGlvbnMgdG8gZ2VuZXJhdGUgcmVxdWVzdC9yZXNwb25zZSBIVE1MIGZvcm1zIHdpdGgKICAgIGF1dG8tc3VibWlzc2lvbiBqYXZhc2NyaXB0CiAgICAgICogQ29uc3VtZXIgKHJlbHlpbmcgcGFydHkpIEFQSToKICAgICAgICBBdXRoX09wZW5JRF9BdXRoUmVxdWVzdDo6aHRtbE1hcmt1cAogICAgICAqIFNlcnZlciBBUEk6IEF1dGhfT3BlbklEX09wZW5JRFJlc3BvbnNlOjp0b0hUTUwKCiogTmV3IEZlYXR1cmVzCiAgKiBBZGRlZCBleGFtcGxlcy9kaXNjb3Zlci5waHAsIGFuIE9wZW5JRCBzZXJ2aWNlIGRpc2NvdmVyeSB0b29sCiAgKiBBZGQgb3B0aW9uYWwgZm9ybV90YWdfYXR0cnMgYXJndW1lbnQgdG8KICAgIEF1dGhfT3BlbklEX1NlcnZlclJlc3BvbnNlOjp0b0Zvcm1NYXJrdXAgZm9yIHNldHRpbmcgYXJiaXRyYXJ5CiAgICBGT1JNIGVsZW1lbnQgYXR0cmlidXRlcwogICogRmV0Y2hlcnMgbm93IG9ubHkgcmVhZC9yZXF1ZXN0IGZpcnN0IG1lZ2FieXRlIG9mIHJlc3BvbnNlCgoqIEJ1ZyBGaXhlcwogICogTk9UIE5VTEwgY29uc3RyYWludHMgd2VyZSBhZGRlZCB0byBTUUxTdG9yZSB0YWJsZXMgd2hlcmUKICAgIGFwcHJvcHJpYXRlCiAgKiBZYWRpcyBkaXNjb3Zlcnkgbm93IHByb3Blcmx5IGZhbGxzIGJhY2sgdG8gSFRNTC1iYXNlZCBkaXNjb3ZlcnkgaWYKICAgIGl0IGZhaWxzIHRvIGdldCBhbiBYUkRTIGRvY3VtZW50CiAgKiBBdXRoX09wZW5JRF9EZWNvZGVyIG5vdyBiZWhhdmVzIGNvcnJlY3RseSB3aGVuIGdpdmVuIGEgcHJvdG9jb2wKICAgIG1lc3NhZ2Ugd2l0aCBhbiBpbnZhbGlkIE9wZW5JRCBuYW1lc3BhY2Ugb3IgYSBtaXNzaW5nIE9wZW5JRCBtb2RlCiAgKiBBdXRoX09wZW5JRF9PcGVuSURSZXNwb25zZTo6dG9Gb3JtTWFya3VwOiBVc2UgcmV0dXJuX3RvIGZyb20gdGhlCiAgICByZXF1ZXN0LCBub3QgdGhlIHJlc3BvbnNlIGZpZWxkcyAoTm90IGFsbCByZXNwb25zZXMgKGkuZS4gY2FuY2VsLAogICAgc2V0dXBfbmVlZGVkKSBpbmNsdWRlIGEgcmV0dXJuX3RvIGZpZWxkLikKICAqIG5vcm1hbGl6ZSByZXR1cm5fdG8gVVJMIGJlZm9yZSBwZXJmb3JtaW5nIHJldHVybl90byB2ZXJpZmljYXRpb24KICAqIEF1dGhfT3BlbklEX0NvbnN1bWVyOjpfdmVyaWZ5RGlzY292ZXJ5UmVzdWx0czogZmFsbCBiYWNrIHRvIE9wZW5JRAogICAgMS4wIHR5cGUgaWYgMS4xIGVuZHBvaW50IGNhbm5vdCBiZSBmb3VuZAogICogQXV0aF9ZYWRpc19QYXJhbm9pZEhUVFBGZXRjaGVyIG5vdyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBib3RoIGFycmF5CiAgICBhbmQgbm9uLWFycmF5IENVUkwgdmVyc2lvbnMKICAqIENsYXJpZmllZCBsaWNlbnNpbmcgbGFuZ3VhZ2UgaW4gYWxsIHNvdXJjZSBmaWxlcwogICogT3BlbklEIDEgYXNzb2NpYXRpb24gcmVxdWVzdHMgbm8gbG9uZ2VyIGV4cGxpY2l0bHkgc2V0CiAgICBuby1lbmNyeXB0aW9uIHNlc3Npb24gdHlwZQogICogQXV0aF9PcGVuSURfU2VydmljZUVuZHBvaW50OjpnZXREaXNwbGF5SWRlbnRpZmllciBubyBsb25nZXIKICAgIGluY2x1ZGVzIGEgZnJhZ21lbnQsIGlmIHByZXNlbnQsIGluIGRpc3BsYXkgaWRlbnRpZmllcnMKICAqIGNoZWNrX2F1dGhlbnRpY2F0aW9uIHJlcXVlc3RzOiBjb3B5IGVudGlyZSByZXNwb25zZSwgbm90IGp1c3QKICAgIHNpZ25lZCBmaWVsZHMuICBGaXhlcyBtaXNzaW5nIG5hbWVzcGFjZSBpbiBjaGVja19hdXRoZW50aWNhdGlvbgogICAgcmVxdWVzdHMKICAqIFlhZGlzIGRpc2NvdmVyeSBub3cgaW5jbHVkZXMgYXBwbGljYXRpb24veGh0bWwreG1sIGFuZCBxdWFsaXRpZXMKICAgIGluIHRoZSBBY2NlcHQgaGVhZGVyCiAgKiBOb3JtYWxpemUgVVJMcyBjb3JyZWN0bHkgd2l0aCBVUklOb3JtLnBocAogICogQXV0aF9PcGVuSURfTXlTUUxTdG9yZTogVXNlIEVOR0lORSBpbnN0ZWFkIG9mIFRZUEUgd2hlbiBjcmVhdGluZwogICAgdGFibGVzCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwoKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCgogICAxLiBEZWZpbml0aW9ucy4KCiAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCiAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgoKICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAogICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCiAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQogICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgogICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KCiAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAogICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCiAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgogICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAogICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CiAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgoKICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQogICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KCiAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQogICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCiAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCiAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgogICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCiAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCgogICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwogICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCiAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQogICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCiAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgogICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAogICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwogICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAogICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQogICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCgogICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCgogICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQogICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCiAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCgogICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQogICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCiAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCiAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCiAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawogICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAogICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCiAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQogICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCgogICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQogICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgogICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgogICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKCiAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAoKICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCiAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCiAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAogICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgogICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAoKICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCiAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CiAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAogICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCiAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAogICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgogICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCiAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCiAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCiAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQogICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCiAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KCiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAogICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCiAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCiAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAogICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgoKICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAogICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCiAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgoKICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQogICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCiAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQogICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KCiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgogICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCiAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQogICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CiAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KCiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAogICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAogICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQogICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCiAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgoKICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwogICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAogICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAogICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwogICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQogICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgogICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCiAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQogICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgoKICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCgogICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZwogICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCiAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCiAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQogICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCiAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgogICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCgogICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KCiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/examples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/examples/detect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRwYXRoX2V4dHJhID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRwYXRoID0gaW5pX2dldCgnaW5jbHVkZV9wYXRoJyk7CiRwYXRoID0gJHBhdGhfZXh0cmEgLiBQQVRIX1NFUEFSQVRPUiAuICRwYXRoOwppbmlfc2V0KCdpbmNsdWRlX3BhdGgnLCAkcGF0aCk7CgpkZWZpbmUoJ0lTX1dJTkRPV1MnLCBzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTicpOwoKY2xhc3MgUGxhaW5UZXh0IHsKICAgIGZ1bmN0aW9uIHN0YXJ0KCR0aXRsZSkKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgZnVuY3Rpb24gdHQoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0ZXh0OwogICAgfQoKICAgIGZ1bmN0aW9uIGxpbmsoJGhyZWYsICR0ZXh0PW51bGwpCiAgICB7CiAgICAgICAgaWYgKCR0ZXh0KSB7CiAgICAgICAgICAgIHJldHVybiAkdGV4dCAuICcgPCcgLiAkaHJlZiAuICc+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGhyZWY7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGIoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICcqJyAuICR0ZXh0IC4gJyonOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbnRlbnRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gJ3RleHQvcGxhaW4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHAoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIHdvcmR3cmFwKCR0ZXh0KSAuICJcblxuIjsKICAgIH0KCiAgICBmdW5jdGlvbiBwcmUoJHRleHQpCiAgICB7CiAgICAgICAgJG91dCA9ICcnOwogICAgICAgICRsaW5lcyA9IGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoIlxuIiwgJHRleHQpKTsKICAgICAgICBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsKICAgICAgICAgICAgJG91dCAuPSAnICAgICcgLiAkbGluZSAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRvdXQgLj0gIlxuIjsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBmdW5jdGlvbiBvbCgkaXRlbXMpCiAgICB7CiAgICAgICAgJG91dCA9ICcnOwogICAgICAgICRjID0gMTsKICAgICAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgJGl0ZW0gPSB3b3Jkd3JhcCgkaXRlbSwgNzIpOwogICAgICAgICAgICAkbGluZXMgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCJcbiIsICRpdGVtKSk7CiAgICAgICAgICAgICRvdXQgLj0gJGMgLiAnLiAnIC4gJGxpbmVzWzBdIC4gIlxuIjsKICAgICAgICAgICAgdW5zZXQoJGxpbmVzWzBdKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7CiAgICAgICAgICAgICAgICAkb3V0IC49ICcgICAnIC4gJGxpbmUgLiAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXQgLj0gIlxuIjsKICAgICAgICAgICAgJGMgKz0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgZnVuY3Rpb24gaDIoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oKCR0ZXh0LCAyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBoMSgkdGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmgoJHRleHQsIDEpOwogICAgfQoKICAgIGZ1bmN0aW9uIGgoJHRleHQsICRuKQogICAgewogICAgICAgICRjaGFycyA9ICcjPSstLic7CiAgICAgICAgJGMgPSAkY2hhcnNbJG4gLSAxXTsKICAgICAgICByZXR1cm4gIlxuIiAuICR0ZXh0IC4gIlxuIiAuIHN0cl9yZXBlYXQoJGMsIHN0cmxlbigkdGV4dCkpIC4gIlxuXG4iOwogICAgfQoKICAgIGZ1bmN0aW9uIGVuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgpjbGFzcyBIVE1MIHsKICAgIGZ1bmN0aW9uIHN0YXJ0KCR0aXRsZSkKICAgIHsKICAgICAgICByZXR1cm4gJzxodG1sPjxoZWFkPjx0aXRsZT4nIC4gJHRpdGxlIC4gJzwvdGl0bGU+JyAuCiAgICAgICAgICAgICR0aGlzLT5zdHlsZXNoZWV0KCkuCiAgICAgICAgICAgICc8L2hlYWQ+PGJvZHk+JyAuICJcbiI7CiAgICB9CgogICAgZnVuY3Rpb24gc3R5bGVzaGVldCgpCiAgICB7CiAgICAgICAgcmV0dXJuICI8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPlxuIi4KICAgICAgICAgICAgInAge1xuIi4KICAgICAgICAgICAgIiAgd2lkdGg6IDUwZW07XG4iLgogICAgICAgICAgICAifVxuIi4KICAgICAgICAgICAgJzwvc3R5bGU+JzsKICAgIH0KCiAgICBmdW5jdGlvbiB0dCgkdGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gJzxjb2RlPicgLiAkdGV4dCAuICc8L2NvZGU+JzsKICAgIH0KCiAgICBmdW5jdGlvbiBjb250ZW50VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICd0ZXh0L2h0bWwnOwogICAgfQoKICAgIGZ1bmN0aW9uIGIoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICc8c3Ryb25nPicgLiAkdGV4dCAuICc8L3N0cm9uZz4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHAoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICc8cD4nIC4gd29yZHdyYXAoJHRleHQpIC4gIjwvcD5cbiI7CiAgICB9CgogICAgZnVuY3Rpb24gcHJlKCR0ZXh0KQogICAgewogICAgICAgIHJldHVybiAnPHByZT4nIC4gJHRleHQgLiAiPC9wcmU+XG4iOwogICAgfQoKICAgIGZ1bmN0aW9uIG9sKCRpdGVtcykKICAgIHsKICAgICAgICAkb3V0ID0gJzxvbD4nOwogICAgICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewogICAgICAgICAgICAkb3V0IC49ICc8bGk+JyAuIHdvcmR3cmFwKCRpdGVtKSAuICI8L2xpPlxuIjsKICAgICAgICB9CiAgICAgICAgJG91dCAuPSAiPC9vbD5cbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgZnVuY3Rpb24gaCgkdGV4dCwgJG4pCiAgICB7CiAgICAgICAgcmV0dXJuICI8aCRuPiR0ZXh0PC9oJG4+XG4iOwogICAgfQoKICAgIGZ1bmN0aW9uIGgyKCR0ZXh0KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aCgkdGV4dCwgMik7CiAgICB9CgogICAgZnVuY3Rpb24gaDEoJHRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oKCR0ZXh0LCAxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5rKCRocmVmLCAkdGV4dD1udWxsKQogICAgewogICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyAuICRocmVmIC4gJyI+JyAuICgkdGV4dCA/ICR0ZXh0IDogJGhyZWYpIC4gJzwvYT4nOwogICAgfQoKICAgIGZ1bmN0aW9uIGVuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICI8L2JvZHk+XG48L2h0bWw+XG4iOwogICAgfQp9CgppZiAoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pKSB7CiAgICAkciA9IG5ldyBIVE1MKCk7Cn0gZWxzZSB7CiAgICAkciA9IG5ldyBQbGFpblRleHQoKTsKfQoKZnVuY3Rpb24gZGV0ZWN0X21hdGgoJHIsICYkb3V0KQp7CiAgICAkb3V0IC49ICRyLT5oMignTWF0aCBzdXBwb3J0Jyk7CiAgICAkZXh0ID0gQXV0aF9PcGVuSURfZGV0ZWN0TWF0aExpYnJhcnkoQXV0aF9PcGVuSURfbWF0aF9leHRlbnNpb25zKCkpOwogICAgaWYgKCFpc3NldCgkZXh0WydleHRlbnNpb24nXSkgfHwgIWlzc2V0KCRleHRbJ2NsYXNzJ10pKSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgKICAgICAgICAgICAgJ1lvdXIgUEhQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGJpZyBpbnRlZ2VyIG1hdGggJyAuCiAgICAgICAgICAgICdzdXBwb3J0LiBUaGlzIHN1cHBvcnQgaXMgcmVxdWlyZWQgaWYgeW91IHdpc2ggdG8gcnVuIGEgJyAuCiAgICAgICAgICAgICdzZWN1cmUgT3BlbklEIHNlcnZlciB3aXRob3V0IHVzaW5nIFNTTC4nKTsKICAgICAgICAkb3V0IC49ICRyLT5wKCdUbyB1c2UgdGhpcyBsaWJyYXJ5LCB5b3UgaGF2ZSBhIGZldyBvcHRpb25zOicpOwoKICAgICAgICAkZ21wX2xuayA9ICRyLT5saW5rKCdodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3JlZi5nbXAucGhwJywgJ0dNUCcpOwogICAgICAgICRiY19sbmsgPSAkci0+bGluaygnaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9yZWYuYmMucGhwJywgJ2JjbWF0aCcpOwogICAgICAgICRvdXQgLj0gJHItPm9sKGFycmF5KAogICAgICAgICAgICAnSW5zdGFsbCB0aGUgJyAuICRnbXBfbG5rIC4gJyBQSFAgZXh0ZW5zaW9uJywKICAgICAgICAgICAgJ0luc3RhbGwgdGhlICcgLiAkYmNfbG5rIC4gJyBQSFAgZXh0ZW5zaW9uJywKICAgICAgICAgICAgJ0lmIHlvdXIgc2l0ZSBpcyBsb3ctc2VjdXJpdHksIGNhbGwgJyAuCiAgICAgICAgICAgICdBdXRoX09wZW5JRF9zZXROb01hdGhTdXBwb3J0KCksIGRlZmluZWQgaW4gQXV0aC9PcGVuSUQvQmlnTWF0aC5waHAuICcsCgkgICAgJ1RoZSBsaWJyYXJ5IHdpbGwgZnVuY3Rpb24sIGJ1dCAnIC4KICAgICAgICAgICAgJ3RoZSBzZWN1cml0eSBvZiB5b3VyIE9wZW5JRCBzZXJ2ZXIgd2lsbCBkZXBlbmQgb24gdGhlICcgLgogICAgICAgICAgICAnc2VjdXJpdHkgb2YgdGhlIG5ldHdvcmsgbGlua3MgaW52b2x2ZWQuIElmIHlvdSBhcmUgb25seSAnIC4KICAgICAgICAgICAgJ3VzaW5nIGNvbnN1bWVyIHN1cHBvcnQsIHlvdSBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBvcGVyYXRlICcgLgogICAgICAgICAgICAnc2VjdXJlbHkgd2hlbiB0aGUgdXNlcnMgYXJlIGNvbW11bmljYXRpbmcgd2l0aCBhICcgLgogICAgICAgICAgICAnd2VsbC1pbXBsZW1lbnRlZCBzZXJ2ZXIuJykpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3dpdGNoICgkZXh0WydleHRlbnNpb24nXSkgewogICAgICAgIGNhc2UgJ2JjbWF0aCc6CiAgICAgICAgICAgICRvdXQgLj0gJHItPnAoJ1lvdXIgUEhQIGluc3RhbGxhdGlvbiBoYXMgYmNtYXRoIHN1cHBvcnQuIFRoaXMgaXMgJyAuCiAgICAgICAgICAgICAgICAgICdhZGVxdWF0ZSBmb3Igc21hbGwtc2NhbGUgdXNlLCBidXQgY2FuIGJlIENQVS1pbnRlbnNpdmUuICcgLgogICAgICAgICAgICAgICAgICAnWW91IG1heSB3YW50IHRvIGxvb2sgaW50byBpbnN0YWxsaW5nIHRoZSBHTVAgZXh0ZW5zaW9uLicpOwogICAgICAgICAgICAkbG5rID0gJHItPmxpbmsoJ2h0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVmLmdtcC5waHAnKTsKICAgICAgICAgICAgJG91dCAuPSAkci0+cCgnU2VlICcgLiAkbG5rIC4nIGZvciBtb3JlIGluZm9ybWF0aW9uICcgLgogICAgICAgICAgICAgICAgICAgICAgICAgICdhYm91dCB0aGUgR01QIGV4dGVuc2lvbi4nKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZ21wJzoKICAgICAgICAgICAgJG91dCAuPSAkci0+cCgnWW91ciBQSFAgaW5zdGFsbGF0aW9uIGhhcyBnbXAgc3VwcG9ydC4gR29vZC4nKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgJGNsYXNzID0gJGV4dFsnY2xhc3MnXTsKICAgICAgICAgICAgJGxpYiA9IG5ldyAkY2xhc3MoKTsKICAgICAgICAgICAgJG9uZSA9ICRsaWItPmluaXQoMSk7CiAgICAgICAgICAgICR0d28gPSAkbGliLT5hZGQoJG9uZSwgJG9uZSk7CiAgICAgICAgICAgICR0ID0gJGxpYi0+dG9TdHJpbmcoJHR3byk7CiAgICAgICAgICAgICRvdXQgLj0gJHItPnAoJ1VoLW9oLiBJIGRvIG5vdCBrbm93IGFib3V0IHRoZSAnIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0WydleHRlbnNpb24nXSAuICcgZXh0ZW5zaW9uIScpOwogICAgICAgICAgICBpZiAoJHQgIT0gJzInKSB7CiAgICAgICAgICAgICAgICAkb3V0IC49ICRyLT5wKCdJdCBsb29rcyBsaWtlIGl0IGlzIGJyb2tlbi4gMSArIDEgPSAnIC4KICAgICAgICAgICAgICAgICAgdmFyX2V4cG9ydCgkdCwgZmFsc2UpKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvdXQgLj0gJHItPnAoJ0J1dCBpdCBzZWVtcyB0byBiZSBhYmxlIHRvIGFkZCBvbmUgYW5kIG9uZS4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTWF0aCBsaWJyYXJ5IGlzIE9LCiAgICB9Cn0KCmZ1bmN0aW9uIGRldGVjdF9yYW5kb20oJHIsICYkb3V0KQp7CiAgICAkb3V0IC49ICRyLT5oMignQ3J5cHRvZ3JhcGhpYy1xdWFsaXR5IHJhbmRvbW5lc3Mgc291cmNlJyk7CiAgICBpZiAoQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UgPT09IG51bGwpIHsKICAgICAgICAkb3V0IC49ICRyLT5wKCdVc2luZyAoaW5zZWN1cmUpIHBzZXVkb3JhbmRvbSBudW1iZXIgc291cmNlLCBiZWNhdXNlICcgLgogICAgICAgICAgICAgICAgICAgICAgJ0F1dGhfT3BlbklEX1JBTkRfU09VUkNFIGhhcyBiZWVuIGRlZmluZWQgYXMgbnVsbC4nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgJG1zZyA9ICdUaGUgbGlicmFyeSB3aWxsIHRyeSB0byBhY2Nlc3MgJyAuIEF1dGhfT3BlbklEX1JBTkRfU09VUkNFCiAgICAgICAgLiAnIGFzIGEgc291cmNlIG9mIHJhbmRvbSBkYXRhLiAnOwoKICAgICRudW1ieXRlcyA9IDY7CgogICAgJGYgPSBAZm9wZW4oQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UsICdyJyk7CiAgICBpZiAoJGYgIT09IGZhbHNlKSB7CiAgICAgICAgJGRhdGEgPSBmcmVhZCgkZiwgJG51bWJ5dGVzKTsKICAgICAgICAkc3RhdCA9IGZzdGF0KCRmKTsKICAgICAgICAkc2l6ZSA9ICRzdGF0WydzaXplJ107CiAgICAgICAgZmNsb3NlKCRmKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGRhdGEgPSBudWxsOwogICAgICAgICRzaXplID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoJGYgIT09IGZhbHNlKSB7CiAgICAgICAgJGRhdGFvayA9IChBdXRoX09wZW5JRDo6Ynl0ZXMoJGRhdGEpID09ICRudW1ieXRlcyk7CiAgICAgICAgJG9rID0gJGRhdGFvayAmJiAhJHNpemU7CiAgICAgICAgJG1zZyAuPSAnSXQgc2VlbXMgdG8gZXhpc3QgJzsKICAgICAgICBpZiAoJGRhdGFvaykgewogICAgICAgICAgICAkbXNnIC49ICdhbmQgYmUgcmVhZGFibGUuIEhlcmUgaXMgc29tZSBoZXggZGF0YTogJyAuCiAgICAgICAgICAgICAgICBiaW4yaGV4KCRkYXRhKSAuICcuJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbXNnIC49ICdidXQgcmVhZGluZyBkYXRhIGZhaWxlZC4nOwogICAgICAgIH0KICAgICAgICBpZiAoJHNpemUpIHsKICAgICAgICAgICAgJG1zZyAuPSAnIFRoaXMgaXMgYSAnIC4gJHNpemUgLiAnIGJ5dGUgZmlsZS4gVW5sZXNzIHlvdSBrbm93ICcgLgogICAgICAgICAgICAgICAgJ3doYXQgeW91IGFyZSBkb2luZywgaXQgaXMgbGlrZWx5IHRoYXQgeW91IGFyZSBtYWtpbmcgYSAnIC4KICAgICAgICAgICAgICAgICdtaXN0YWtlIGJ5IHVzaW5nIGEgcmVndWxhciBmaWxlIGFzIGEgcmFuZG9tbmVzcyBzb3VyY2UuJzsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRtc2cgLj0gQXV0aF9PcGVuSURfUkFORF9TT1VSQ0UgLgogICAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBvcGVuZWQuIFRoaXMgY291bGQgYmUgYmVjYXVzZSBvZiByZXN0cmljdGlvbnMgb24nIC4KICAgICAgICAgICAgJyB5b3VyIFBIUCBlbnZpcm9ubWVudCBvciB0aGF0IHJhbmRvbW5lc3Mgc291cmNlIG1heSBub3QgZXhpc3QnIC4KICAgICAgICAgICAgJyBvbiB0aGlzIHBsYXRmb3JtLic7CiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHsKICAgICAgICAgICAgJG1zZyAuPSAnIFlvdSBzZWVtIHRvIGJlIHJ1bm5pbmcgV2luZG93cy4gVGhpcyBsaWJyYXJ5IGRvZXMgbm90JyAuCiAgICAgICAgICAgICAgICAnIGhhdmUgYWNjZXNzIHRvIGEgZ29vZCBzb3VyY2Ugb2YgcmFuZG9tbmVzcyBvbiBXaW5kb3dzLic7CiAgICAgICAgfQogICAgICAgICRvayA9IGZhbHNlOwogICAgfQoKICAgICRvdXQgLj0gJHItPnAoJG1zZyk7CgogICAgaWYgKCEkb2spIHsKICAgICAgICAkb3V0IC49ICRyLT5wKAogICAgICAgICAgICAnVG8gc2V0IGEgc291cmNlIG9mIHJhbmRvbW5lc3MsIGRlZmluZSBBdXRoX09wZW5JRF9SQU5EX1NPVVJDRSAnIC4KICAgICAgICAgICAgJ3RvIHRoZSBwYXRoIHRvIHRoZSByYW5kb21uZXNzIHNvdXJjZS4gSWYgeW91ciBwbGF0Zm9ybSBkb2VzICcgLgogICAgICAgICAgICAnbm90IHByb3ZpZGUgYSBzZWN1cmUgcmFuZG9tbmVzcyBzb3VyY2UsIHRoZSBsaWJyYXJ5IGNhbicgLgogICAgICAgICAgICAnb3BlcmF0ZSBpbiBwc2V1ZG9yYW5kb20gbW9kZSwgYnV0IGl0IGlzIHRoZW4gdnVsbmVyYWJsZSB0byAnIC4KICAgICAgICAgICAgJ3RoZW9yZXRpY2FsIGF0dGFja3MuIElmIHlvdSB3aXNoIHRvIG9wZXJhdGUgaW4gcHNldWRvcmFuZG9tICcgLgogICAgICAgICAgICAnbW9kZSwgZGVmaW5lIEF1dGhfT3BlbklEX1JBTkRfU09VUkNFIHRvIG51bGwuJyk7CiAgICAgICAgJG91dCAuPSAkci0+cCgnWW91IGFyZSBydW5uaW5nIG9uOicpOwogICAgICAgICRvdXQgLj0gJHItPnByZShwaHBfdW5hbWUoKSk7CiAgICAgICAgJG91dCAuPSAkci0+cCgnVGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSBhbiBhdmFpbGFibGUgc291cmNlICcgLgogICAgICAgICAgICAgICAgICAgICAgJ29mIHJhbmRvbW5lc3MuIE9uIGEgVW5peC1saWtlIHBsYXRmb3JtICcgLgogICAgICAgICAgICAgICAgICAgICAgJyhpbmNsdWRpbmcgTWFjT1MgWCksIHRyeSAvZGV2L3JhbmRvbSBhbmQgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnL2Rldi91cmFuZG9tLicpOwogICAgfQogICAgcmV0dXJuICRvazsKfQoKZnVuY3Rpb24gZGV0ZWN0X3N0b3JlcygkciwgJiRvdXQpCnsKICAgICRvdXQgLj0gJHItPmgyKCdEYXRhIHN0b3JhZ2UnKTsKCiAgICAkZm91bmQgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoYXJyYXkoJ3NxbGl0ZScsICdteXNxbCcsICdwZ3NxbCcpIGFzICRkYmV4dCkgewogICAgICAgIGlmIChleHRlbnNpb25fbG9hZGVkKCRkYmV4dCkgfHwgQGRsKCRkYmV4dCAuICcuJyAuIFBIUF9TSExJQl9TVUZGSVgpKSB7CiAgICAgICAgICAgICRmb3VuZFtdID0gJGRiZXh0OwogICAgICAgIH0KICAgIH0KICAgIGlmIChjb3VudCgkZm91bmQpID09IDApIHsKICAgICAgICAkdGV4dCA9ICdObyBTUUwgZGF0YWJhc2Ugc3VwcG9ydCB3YXMgZm91bmQgaW4gdGhpcyBQSFAgJyAuCiAgICAgICAgICAgICdpbnN0YWxsYXRpb24uIFNlZSB0aGUgUEhQIG1hbnVhbCBpZiB5b3UgbmVlZCB0byAnIC4KICAgICAgICAgICAgJ3VzZSBhbiBTUUwgZGF0YWJhc2UuJzsKICAgIH0gZWxzZSB7CiAgICAgICAgJHRleHQgPSAnU3VwcG9ydCB3YXMgZm91bmQgZm9yICc7CiAgICAgICAgaWYgKGNvdW50KCRmb3VuZCkgPT0gMSkgewogICAgICAgICAgICAkdGV4dCAuPSAkZm91bmRbMF0gLiAnLic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGxhc3QgPSBhcnJheV9wb3AoJGZvdW5kKTsKICAgICAgICAgICAgJHRleHQgLj0gaW1wbG9kZSgnLCAnLCAkZm91bmQpIC4gJyBhbmQgJyAuICRsYXN0IC4gJy4nOwogICAgICAgIH0KCSR0ZXh0ID0gJHItPmIoJHRleHQpOwogICAgfQogICAgJHRleHQgLj0gJyBUaGUgbGlicmFyeSBzdXBwb3J0cyB0aGUgTXlTUUwsIFBvc3RncmVTUUwsIGFuZCBTUUxpdGUgJyAuCiAgICAgICAgJ2RhdGFiYXNlIGVuZ2luZXMsIGFzIHdlbGwgYXMgZmlsZXN5c3RlbS1iYXNlZCBzdG9yYWdlLiAgSW4gJyAuCiAgICAgICAgJ2FkZGl0aW9uLCBQRUFSIERCIGlzIHJlcXVpcmVkIHRvIHVzZSBkYXRhYmFzZXMuJzsKICAgICRvdXQgLj0gJHItPnAoJHRleHQpOwoKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYKICAgICAgICBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGV1aWQnKSkgewogICAgICAgICRwcm9jZXNzVXNlciA9IHBvc2l4X2dldHB3dWlkKHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJHdlYl91c2VyID0gJHItPmIoJHItPnR0KCRwcm9jZXNzVXNlclsnbmFtZSddKSk7CiAgICB9IGVsc2UgewogICAgICAgICR3ZWJfdXNlciA9ICd0aGUgUEhQIHByb2Nlc3MnOwogICAgfQoKICAgIGlmIChpbl9hcnJheSgnc3FsaXRlJywgJGZvdW5kKSkgewogICAgICAgICRvdXQgLj0gJHItPnAoJ0lmIHlvdSBhcmUgdXNpbmcgU1FMaXRlLCB5b3VyIGRhdGFiYXNlIG11c3QgYmUgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnd3JpdGFibGUgYnkgJyAuICR3ZWJfdXNlciAuICcgYW5kIG5vdCBhdmFpbGFibGUgb3ZlcicgLgogICAgICAgICAgICAgICAgICAgICAgJyB0aGUgd2ViLicpOwogICAgfQoKICAgICRiYXNlZGlyX3N0ciA9IGluaV9nZXQoJ29wZW5fYmFzZWRpcicpOwogICAgaWYgKGdldHR5cGUoJGJhc2VkaXJfc3RyKSA9PSAnc3RyaW5nJykgewogICAgICAgICR1cmwgPSAnaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mZWF0dXJlcy5zYWZlLW1vZGUucGhwJyAuCiAgICAgICAgICAgICcjaW5pLm9wZW4tYmFzZWRpcic7CiAgICAgICAgJGxuayA9ICRyLT5saW5rKCR1cmwsICdvcGVuX2Jhc2VkaXInKTsKICAgICAgICAkb3V0IC49ICRyLT5wKCdJZiB5b3UgYXJlIHVzaW5nIGEgZmlsZXN5c3RlbS1iYXNlZCBzdG9yZSBvciBTUUxpdGUsICcgLgogICAgICAgICAgICAgICAgICAgICAgJ2JlIGF3YXJlIHRoYXQgJyAuICRsbmsgLiAnIGlzIGluIGVmZmVjdC4gVGhpcyBtZWFucyAnIC4KICAgICAgICAgICAgICAgICAgICAgICd0aGF0IHlvdXIgZGF0YSB3aWxsIGhhdmUgdG8gYmUgc3RvcmVkIGluIG9uZSBvZiB0aGUgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnZm9sbG93aW5nIGxvY2F0aW9uczonKTsKICAgICAgICAkb3V0IC49ICRyLT5wcmUodmFyX2V4cG9ydCgkYmFzZWRpcl9zdHIsIHRydWUpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgnVGhlICcgLiAkci0+Yigkci0+dHQoJ29wZW5fYmFzZWRpcicpKSAuICcgY29uZmlndXJhdGlvbiByZXN0cmljdGlvbiAnIC4KCQkgICAgICAnaXMgbm90IGluIGVmZmVjdC4nKTsKICAgIH0KCiAgICAkb3V0IC49ICRyLT5wKCdJZiB5b3UgYXJlIHVzaW5nIHRoZSBmaWxlc3lzdGVtIHN0b3JlLCB5b3VyICcgLgogICAgICAgICAgICAgICAgICAnZGF0YSBkaXJlY3RvcnkgbXVzdCBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgJyAuCiAgICAgICAgICAgICAgICAgICR3ZWJfdXNlciAuICcgYW5kIG5vdCBhdmFpbGFiZSBvdmVyIHRoZSBXZWIuJyk7CiAgICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gZGV0ZWN0X3htbCgkciwgJiRvdXQpCnsKICAgIGdsb2JhbCAkX19BdXRoX1lhZGlzX3htbF9leHRlbnNpb25zOwoKICAgICRvdXQgLj0gJHItPmgyKCdYTUwgU3VwcG9ydCcpOwoKICAgIC8vIFRyeSB0byBnZXQgYW4gWE1MIGV4dGVuc2lvbi4KICAgICRleHQgPSBBdXRoX1lhZGlzX2dldFhNTFBhcnNlcigpOwoKICAgIGlmICgkZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgnWE1MIHBhcnNpbmcgc3VwcG9ydCBpcyBwcmVzZW50IHVzaW5nIHRoZSAnLgogICAgICAgICAgICAgICAgICAgICAgJHItPmIoZ2V0X2NsYXNzKCRleHQpKS4nIGludGVyZmFjZS4nKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgnWE1MIHBhcnNpbmcgc3VwcG9ydCBpcyBhYnNlbnQ7IHBsZWFzZSBpbnN0YWxsIG9uZSAnLgogICAgICAgICAgICAgICAgICAgICAgJ29mIHRoZSBmb2xsb3dpbmcgUEhQIGV4dGVuc2lvbnM6Jyk7CiAgICAgICAgZm9yZWFjaCAoJF9fQXV0aF9ZYWRpc194bWxfZXh0ZW5zaW9ucyBhcyAkbmFtZSA9PiAkY2xzKSB7CiAgICAgICAgICAgICRvdXQgLj0gIjxsaT4iIC4gJHItPmIoJG5hbWUpIC4gIjwvbGk+IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgpmdW5jdGlvbiBkZXRlY3RfcXVlcnlfY29ycnVwdGlvbigkciwgJiRvdXQpCnsKICAgICRvdXQgLj0gJHItPmgyKCdRdWVyeSBDb3JydXB0aW9uJyk7CiAgICBpZiAoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdIT0idGVzdF9xdWVyeT1hJTI2YiIpCiAgICB7CiAgICAgICAgJG91dC49JHItPnAoIllvdXIgd2ViIHNlcnZlciBzZWVtcyB0byBjb3JydXB0IHF1ZXJpZXMuICBSZWNlaXZlZCAiLiRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXS4iLCBleHBlY3RlZCBhPSUyNmIuIENoZWNrIGZvciBtb2RfZW5jb2RpbmcuIik7CglyZXR1cm4gZmFsc2U7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgJG91dC49JHItPnAoIllvdXIgd2ViIHNlcnZlciBkb2VzIG5vdCBjb3JydXB0IHF1ZXJpZXMuICBHb29kLiIpOwoJcmV0dXJuIHRydWU7CiAgICB9Cn0KICAgIApmdW5jdGlvbiBkZXRlY3RfZmV0Y2hlcigkciwgJiRvdXQpCnsKICAgICRvdXQgLj0gJHItPmgyKCdIVFRQIEZldGNoaW5nJyk7CgogICAgJHJlc3VsdCA9IEBpbmNsdWRlICdBdXRoL1lhZGlzL1lhZGlzLnBocCc7CgogICAgaWYgKCEkcmVzdWx0KSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgnWWFkaXMgY29kZSB1bmF2YWlsYWJsZTsgY291bGQgbm90IHRlc3QgZmV0Y2hlciBzdXBwb3J0LicpOwoJcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChBdXRoX1lhZGlzX1lhZGlzOjpjdXJsUHJlc2VudCgpKSB7CiAgICAgICAgJG91dCAuPSAkci0+cCgnVGhpcyBQSFAgaW5zdGFsbGF0aW9uIGhhcyBzdXBwb3J0IGZvciBsaWJjdXJsLiBHb29kLicpOwogICAgfSBlbHNlIHsKICAgICAgICAkb3V0IC49ICRyLT5wKCdUaGlzIFBIUCBpbnN0YWxsYXRpb24gZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciAnIC4KICAgICAgICAgICAgICAgICAgICAgICdsaWJjdXJsLiBDVVJMIGlzIG5vdCByZXF1aXJlZCBidXQgaXMgcmVjb21tZW5kZWQuICcuCiAgICAgICAgICAgICAgICAgICAgICAnVGhlIE9wZW5JRCBsaWJyYXJ5IHdpbGwgdXNlIGFuIGZzb2Nrb3BlbigpLWJhc2VkIGZldGNoZXIuJyk7CiAgICAgICAgJGxuayA9ICRyLT5saW5rKCdodHRwOi8vdXMzLnBocC5uZXQvbWFudWFsL2VuL3JlZi5jdXJsLnBocCcpOwogICAgICAgICRvdXQgLj0gJHItPnAoJ1NlZSAnIC4gJGxuayAuICcgYWJvdXQgZW5hYmxpbmcgdGhlIGxpYmN1cmwgc3VwcG9ydCAnIC4KICAgICAgICAgICAgICAgICAgICAgICdmb3IgUEhQLicpOwogICAgfQoKICAgICRvayA9IHRydWU7CiAgICAkZmV0Y2hlciA9IEF1dGhfWWFkaXNfWWFkaXM6OmdldEhUVFBGZXRjaGVyKCk7CiAgICAkZmV0Y2hfdXJsID0gJ2h0dHA6Ly93d3cub3BlbmlkZW5hYmxlZC5jb20vcmVzb3VyY2VzL3BocC1mZXRjaC10ZXN0JzsKICAgICRleHBlY3RlZF91cmwgPSAkZmV0Y2hfdXJsIC4gJy50eHQnOwogICAgJHJlc3VsdCA9ICRmZXRjaGVyLT5nZXQoJGZldGNoX3VybCk7CgogICAgaWYgKGlzc2V0KCRyZXN1bHQpKSB7CiAgICAgICAgJHBhcnRzID0gYXJyYXkoJ0FuIEhUVFAgcmVxdWVzdCB3YXMgY29tcGxldGVkLicpOwogICAgICAgIC8vIGxpc3QgKCRjb2RlLCAkdXJsLCAkZGF0YSkgPSAkcmVzdWx0OwogICAgICAgIGlmICgkcmVzdWx0LT5zdGF0dXMgIT0gJzIwMCcgJiYgJHJlc3VsdC0+c3RhdHVzICE9ICcyMDYnKSB7CiAgICAgICAgICAgICRvayA9IGZhbHNlOwogICAgICAgICAgICAkcGFydHNbXSA9ICRyLT5iKAogICAgICAgICAgICAgICAgc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnR290ICVzIGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkIEhUVFAgc3RhdHVzICcgLgogICAgICAgICAgICAgICAgICAgICdjb2RlICgyMDAgb3IgMjA2KS4nLCAkcmVzdWx0LT5zdGF0dXMpKTsKICAgICAgICB9CgogICAgICAgICR1cmwgPSAkcmVzdWx0LT5maW5hbF91cmw7CiAgICAgICAgaWYgKCR1cmwgIT0gJGV4cGVjdGVkX3VybCkgewogICAgICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCR1cmwgPT0gJGZldGNoX3VybCkgewogICAgICAgICAgICAgICAgJG1zZyA9ICdUaGUgcmVkaXJlY3RlZCBVUkwgd2FzIG5vdCByZXR1cm5lZC4nOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1zZyA9ICdBbiB1bmV4cGVjdGVkIFVSTCB3YXMgcmV0dXJuZWQ6IDwnIC4gJHVybCAuICc+Lic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBhcnRzW10gPSAkci0+YigkbXNnKTsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gJHJlc3VsdC0+Ym9keTsKICAgICAgICBpZiAoJGRhdGEgIT0gJ0hlbGxvIFdvcmxkIScpIHsKICAgICAgICAgICAgJG9rID0gZmFsc2U7CiAgICAgICAgICAgICRwYXJ0c1tdID0gJHItPmIoJ1VuZXhwZWN0ZWQgZGF0YSB3YXMgcmV0dXJuZWQuJyk7CiAgICAgICAgfQogICAgICAgICRvdXQgLj0gJHItPnAoaW1wbG9kZSgnICcsICRwYXJ0cykpOwogICAgfSBlbHNlIHsKICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICAkb3V0IC49ICRyLT5wKCdGZXRjaGluZyBVUkwgJyAuICRsbmsgLiAnIGZhaWxlZCEnKTsKICAgIH0KCiAgICBpZiAoJGZldGNoZXItPnN1cHBvcnRzU1NMKCkpIHsKICAgICAgICAkb3V0IC49ICRyLT5wKCdZb3VyIFBIUCBpbnN0YWxsYXRpb24gYXBwZWFycyB0byBzdXBwb3J0IFNTTCwgc28gaXQgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBiZSBhYmxlIHRvIHByb2Nlc3MgSFRUUFMgaWRlbnRpdHkgVVJMcyBhbmQgc2VydmVyIFVSTHMuJyk7CiAgICB9IGVsc2UgewogICAgICAgICRvdXQgLj0gJHItPnAoJ1lvdXIgUEhQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFNTTCwgc28gaXQgJyAuCiAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBOT1QgYmUgYWJsZSB0byBwcm9jZXNzIEhUVFBTIGlkZW50aXR5IFVSTHMgYW5kIHNlcnZlciBVUkxzLicpOwogICAgfQoKICAgIHJldHVybiAkb2s7Cn0KCmhlYWRlcignQ29udGVudC1UeXBlOiAnIC4gJHItPmNvbnRlbnRUeXBlKCkgLiAnOyBjaGFyc2V0PXVzLWFzY2lpJyk7CmlmICghJF9HRVRbInRlc3RfcXVlcnkiXSkKewogICAgaGVhZGVyKCJMb2NhdGlvbjogIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3Rlc3RfcXVlcnk9YSUyNmIiKTsKfQogICAgCiAgICAkdGl0bGUgPSAnT3BlbklEIExpYnJhcnkgU3VwcG9ydCBSZXBvcnQnOwokb3V0ID0gJHItPnN0YXJ0KCR0aXRsZSkgLgogICAgJHItPmgxKCR0aXRsZSkgLgogICAgJHItPnAoJ1RoaXMgc2NyaXB0IGNoZWNrcyB5b3VyIFBIUCBpbnN0YWxsYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHlvdSAnIC4KICAgICAgICAgICdhcmUgc2V0IHVwIHRvIHVzZSB0aGUgSmFuUmFpbiBQSFAgT3BlbklEIGxpYnJhcnkuJyk7CgokYm9keSA9ICcnOwoKJF9pbmNsdWRlID0gaW5jbHVkZSAnQXV0aC9PcGVuSUQucGhwJzsKCmlmICghJF9pbmNsdWRlKSB7CiAgICAkcGF0aCA9IGluaV9nZXQoJ2luY2x1ZGVfcGF0aCcpOwogICAgJGJvZHkgLj0gJHItPnAoCiAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSBPcGVuSUQgbGlicmFyeS4gSXQgbXVzdCBiZSBpbiB5b3VyIFBIUCBpbmNsdWRlICcgLgogICAgICAgICdwYXRoLiBZb3VyIFBIUCBpbmNsdWRlIHBhdGggaXMgY3VycmVudGx5OicpOwogICAgJGJvZHkgLj0gJHItPnByZSgkcGF0aCk7Cn0gZWxzZSB7CiAgICAkc3RhdHVzID0gYXJyYXkoKTsKCiAgICAkc3RhdHVzW10gPSBkZXRlY3RfbWF0aCgkciwgJGJvZHkpOwogICAgJHN0YXR1c1tdID0gZGV0ZWN0X3JhbmRvbSgkciwgJGJvZHkpOwogICAgJHN0YXR1c1tdID0gZGV0ZWN0X3N0b3JlcygkciwgJGJvZHkpOwogICAgJHN0YXR1c1tdID0gZGV0ZWN0X2ZldGNoZXIoJHIsICRib2R5KTsKICAgICRzdGF0dXNbXSA9IGRldGVjdF94bWwoJHIsICRib2R5KTsKICAgICRzdGF0dXNbXSA9IGRldGVjdF9xdWVyeV9jb3JydXB0aW9uKCRyLCAkYm9keSk7CiAgICAkcmVzdWx0ID0gdHJ1ZTsKCiAgICBmb3JlYWNoICgkc3RhdHVzIGFzICR2KSB7CiAgICAgICAgaWYgKCEkdikgewogICAgICAgICAgICAkcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICRvdXQgLj0gJHItPmgyKCdTZXR1cCBDb21wbGV0ZSEnKTsKCSRvdXQgLj0gJHItPnAoJ1lvdXIgc3lzdGVtIHNob3VsZCBiZSByZWFkeSB0byBydW4gdGhlIE9wZW5JRCBsaWJyYXJ5LicpOwogICAgfSBlbHNlIHsKICAgICAgICAkb3V0IC49ICRyLT5oMignU2V0dXAgSW5jb21wbGV0ZScpOwoJJG91dCAuPSAkci0+cCgnWW91ciBzeXN0ZW0gbmVlZHMgYSBmZXcgY2hhbmdlcyBiZWZvcmUgaXQgd2lsbCBiZSByZWFkeSB0byBydW4gdGhlIE9wZW5JRCBsaWJyYXJ5LicpOwogICAgfQp9Cgokb3V0IC49ICRib2R5IC4gJHItPmVuZCgpOwpwcmludCAkb3V0Owo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/NEWS</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[V2hhdCdzIE5ldyBpbiBQSFAgT3BlbklEIDIuMAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBib3RoIHRoZSBPcGVuSUQgMSBhbmQgT3BlbklEIDIgcHJvdG9jb2xzLiAgVGhlCkFQSSBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBhcmUgbWluaW1hbCBhbmQgbW9zdGx5CmJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggY3VycmVudCBSUCBhbmQgU2VydmVyIGltcGxlbWVudGF0aW9ucy4gIElmCnlvdSdyZSBhbHJlYWR5IHVzaW5nIHRoaXMgbGlicmFyeSBmb3IgT3BlbklEIDEsIG9ubHkgYSBmZXcgc21hbGwKY2hhbmdlcyAoc2VlIFN1bW1hcnkgYmVsb3cpIHdpbGwgYmUgbmVlZGVkIG9uY2UgeW91IHVwZ3JhZGUuCgpUaGUgYmlnIG5ld3MgaGVyZSBpcyBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiAyLjAgb2YgdGhlIE9wZW5JRApwcm90b2NvbC4gIEhpZ2hsaWdodHMgaW5jbHVkZToKCiAqIFNpbXBsZSBSZWdpc3RyYXRpb24gc3VwcG9ydCBpbiBhIG5ldyBtb2R1bGUgQXV0aC9PcGVuSUQvU1JlZy5waHAuCiAgIChUaG9zZSBwcmV2aW91c2x5IHVzaW5nCiAgIEF1dGhfT3BlbklEX1N1Y2Nlc3NSZXNwb25zZTo6ZXh0ZW5zaW9uUmVzcG9uc2UoKSBhcmUgYWR2aXNlZCB0bwogICBsb29rIGhlcmUgYW5kIGF0IHRoZSBleGFtcGxlIGNvbnN1bWVyIGFuZCBzZXJ2ZXIgZm9yIGRldGFpbGVkIHVzYWdlCiAgIGluZm9ybWF0aW9uLikKICogT3BlbklEIHByb3ZpZGVyLWRyaXZlbiBpZGVudGlmaWVyIHNlbGVjdGlvbi4KICogIk5lZ290aWF0b3JzIiBhbGxvdyB5b3UgdG8gZGVmaW5lIHdoaWNoIGFzc29jaWF0aW9uIHR5cGVzIHRvIHVzZS4KICogSW1wcm92ZWQgZXhhbXBsZXMvZGV0ZWN0LnBocCBzY3JpcHQgKGJ1Z3MgZml4ZWQpCiAqIEltcHJvdmVkIGxheW91dCBvZiBleGFtcGxlIGNvbnN1bWVyIChzZWUgZXhhbXBsZXMvY29uc3VtZXIpCiAqIEFuIGltcHJvdmVkIEhUTUwgcGFyc2VyIGltcGxlbWVudGF0aW9uCiAqIExpYnJhcnkgaXMgbm93IGltbXVuZSB0byBiZWluZyBpbmNsdWRlZCBpbnNpZGUgZnVuY3Rpb25zIGFuZAogICBtZXRob2RzCiAqIEZpeGVzIHRvIGF2b2lkIG11bHRpYnl0ZSBvdmVybG9hZGluZyBwcm9ibGVtcwoKSWYgeW91J3ZlIHdyaXR0ZW4geW91ciBvd24gY3VzdG9tIHN0b3JlIG9yIGNvZGUgdGhhdCBpbnRlcmFjdHMKZGlyZWN0bHkgd2l0aCBpdCwgeW91J2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBjaGFuZ2Ugbm90ZXMgZm9yCkF1dGhfT3BlbklEX0ludGVyZmFjZSBpbiBBdXRoL09wZW5JRC9JbnRlcmZhY2UucGhwLgoKClVwZ3JhZGluZyBmcm9tIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpPbmUgb2YgdGhlIGFkZGl0aW9ucyB0byB0aGUgT3BlbklEIHByb3RvY29sIHdhcyBhIHNwZWNpZmllZCBub25jZQpmb3JtYXQgZm9yIG9uZS13YXkgbm9uY2VzLiAgQXMgYSByZXN1bHQsIHRoZSBub25jZSB0YWJsZSBpbiB0aGUKU1FMLWRyaXZlbiBzdG9yZXMgaGFzIGNoYW5nZWQuICBZb3UnbGwgbmVlZCB0byBydW4gdGhlIFB5dGhvbiBzY3JpcHQKY29udHJpYi91cGdyYWRlLXN0b3JlLTEuMS10by0yLjAgdG8gdXBncmFkZSB5b3VyIHN0b3JlLCBvciB5b3UnbGwKZW5jb3VudGVyIGVycm9ycyBhYm91dCB0aGUgd3JvbmcgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG9pZF9ub25jZXMKdGFibGUuICBUbyBydW4gdGhlIHNjcmlwdCwgeW91J2xsIG5lZWQgYSBweXRob24gbW9kdWxlIHN1cHBvcnRpbmcgeW91cgpkYXRhYmFzZSB0eXBlOiBweXNxbGl0ZTIsIHBzeWNvcGcsIG9yIE15U1FMZGIuCgpJZiB5b3UgY2Fubm90IHJ1biB0aGUgUHl0aG9uIHNjcmlwdCwgeW91IGNhbiByZS1jcmVhdGUgeW91ciBzdG9yZSBieQpkcm9wcGluZyB0aGUgdGFibGVzIGluIHRoZSBzdG9yZSBhbmQgY2FsbGluZyBjcmVhdGVUYWJsZXMoKSBvbiB0aGUKc3RvcmUgb2JqZWN0LgoKQ29uc3VtZXJzIHNob3VsZCBub3cgcGFzcyB0aGUgY29uc3VtZXIgcmV0dXJuX3RvIFVSTCB0bwpBdXRoX09wZW5JRF9Db25zdW1lcjo6Y29tcGxldGUoKSB0byBkZWZlbmQgYWdhaW5zdCByZXR1cm5fdG8gVVJMCnRhbXBlcmluZy4gIFRoaXMgaGFzIFJFUExBQ0VEIHRoZSBvbGQgcGFyYW1ldGVyLCAkcXVlcnkuICAkcXVlcnkgaXMKbm93IGEgc2Vjb25kIG9wdGlvbmFsIHBhcmFtZXRlci4gIEl0IGlzIFNUUk9OR0xZIFJFQ09NTUVOREVEIHRoYXQgeW91Cm5ldmVyIG92ZXJyaWRlICRxdWVyeSwgc2luY2UgdGhlIE9wZW5JRCBsaWJyYXJ5IHVzZXMgaXRzIG93biBsb2dpYyB0bwpzaWRlc3RlcCBQSFAncyBicm9rZW4gcmVxdWVzdC1wcm9jZXNzaW5nIGNvZGUuCgoKU3VtbWFyeSBvZiBBUEkgQ2hhbmdlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLSBBdXRoX09wZW5JRDo6Zml4QXJncyBpcyBub3cgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgYW5kCkF1dGhfT3BlbklEX0NvbnN1bWVyOjpjb21wbGV0ZSBhbmQgQXV0aF9PcGVuSURfU2VydmVyOjpkZWNvZGVSZXF1ZXN0Cm5vIGxvbmdlciB0YWtlIHF1ZXJ5IGFyZ3VtZW50IGFycmF5cy4gICpZb3Ugc2hvdWxkIG5vIGxvbmdlciBwYXNzIGFueQpwYXJhbWV0ZXJzIHRvIHRoZXNlIG1ldGhvZHMuKgoKIC0gQXV0aF9PcGVuSURfU3VjY2Vzc1Jlc3BvbnNlOjpleHRlbnNpb25SZXNwb25zZSgpIGlzIG5vIGxvbmdlciB0aGUKcHJlZmVycmVkIHdheSB0byBleHRyYWN0IGV4dGVuc2lvbiByZXNwb25zZSBwYXJhbWV0ZXJzIGZyb20gdGhlIE9wZW5JRApyZXNwb25zZS4gIEluc3RlYWQsIHNlZSB0aGUgQXV0aC9PcGVuSUQvU1JlZy5waHAgbW9kdWxlIGFuZCB0aGUKZXhhbXBsZSBjb25zdW1lciBhbmQgc2VydmVyIGZvciBkZXRhaWxlZCB1c2FnZSBpbmZvcm1hdGlvbiBvbgpjb25zdHJ1Y3RpbmcgU2ltcGxlIFJlZ2lzdHJhdGlvbiByZXF1ZXN0cyBhbmQgaW5zcGVjdGluZyByZXNwb25zZXMuCmV4dGVuc2lvblJlc3BvbnNlKCkgaXMgc3RpbGwgdmFsaWQsIGJ1dCBub3cgdGFrZXMgYSBzZWNvbmQgcGFyYW1ldGVyCihib29sKSBpbmRpY2F0aW5nIHdoZXRoZXIgZXh0ZW5zaW9uIGFyZ3Mgc2hvdWxkIGJlIHNpZ25lZC4KCiAtIFRoZSBBdXRoX09wZW5JRF9TZXJ2ZXIncyByZXNwb25zZSBhbnN3ZXIoKSBtZXRob2Qgbm93IHRha2VzCmFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBzdXBwb3J0IHByb3ZpZGVyLWRyaXZlbiBpZGVudGlmaWVyIHNlbGVjdGlvbi4KU2VlIHRoZSBleGFtcGxlIHNlcnZlciBhbmQgdGhlIGRvY3VtZW50YXRpb24gZm9yCkF1dGhfT3BlbklEX0NoZWNrSURSZXF1ZXN0OjphbnN3ZXIuCgogLSBBdXRoX09wZW5JRF9Db25zdW1lcjo6Y29tcGxldGUoKSBub3cgdGFrZXMgdHdvIGFyZ3M6CgogICAtICRyZXR1cm5fdG8sIGEgcmVxdWlyZWQgc3RyaW5nIHRoYXQgaXMgdGhlIHJldHVybiBVUkwgcGFzc2VkIHRvCiAgICAgQXV0aF9PcGVuSURfQXV0aFJlcXVlc3Q6OnJlZGlyZWN0VVJMKCkKCiAgIC0gJHF1ZXJ5LCBhbiBvcHRpb25hbCBhcnJheSAob3IgbnVsbCBpZiBhYnNlbnQpIGRlbm90aW5nIHRoZSBxdWVyeQogICAgIHBhcmFtZXRlcnMgb2YgdGhlIE9wZW5JRCByZXNwb25zZS4gIElmIG51bGwsIHRoZSByZXNwb25zZSBkYXRhCiAgICAgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgUEhQIHJlcXVlc3QgZW52aXJvbm1lbnQuICBMaWJyYXJ5CiAgICAgdXNlcnMgU0hPVUxEIE5PVCBldmVyIHBhc3MgYW55dGhpbmcgZm9yICRxdWVyeSB1bmxlc3MgdGhleSdyZQogICAgIHRlc3RpbmcgdGhlIGxpYnJhcnku]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ClBIUCBPcGVuSUQKLS0tLS0tLS0tLQoKVGhpcyBpcyB0aGUgUEhQIE9wZW5JRCBsaWJyYXJ5IGJ5IEphblJhaW4sIEluYy4gIFlvdSBjYW4gdmlzaXQgb3VyCndlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYWNrYWdlIGFuZCBvdGhlciBPcGVuSUQKaW1wbGVtZW50YXRpb25zIGFuZCB0b29sczoKCiAgaHR0cDovL3d3dy5vcGVuaWRlbmFibGVkLmNvbS8KCkdFVFRJTkcgU1RBUlRFRAo9PT09PT09PT09PT09PT0KCkZpcnN0LCBydW4gdGhlICdleGFtcGxlcy9kZXRlY3QucGhwJyBzY3JpcHQgZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQKbGluZSBvciB2aWEgdGhlIHdlYi4gIEl0IHdpbGwgZ2VuZXJhdGUgYSByZXBvcnQgb2YgYW55IHN5c3RlbQpjb25maWd1cmF0aW9uIGNoYW5nZXMgbmVjZXNzYXJ5IHRvIHJ1biB0aGUgbGlicmFyeS4KCklOU1RBTExBVElPTgo9PT09PT09PT09PT0KCllvdSB3aWxsIG5lZWQgUEhQIDQuMy4wIG9yIGdyZWF0ZXIgdG8gdXNlIHRoaXMgbGlicmFyeS4gIFdlIGhhdmUKdGVzdGVkIHRoZSBsaWJyYXJ5IExpbnV4IG9uIFBIUCA0LjMuMCwgNC40LjEsIDUuMC41LCBhbmQgNS4xLjEuICBXZQpoYXZlIHRlc3RlZCB0aGUgbGlicmFyeSBvbiBXaW5kb3dzIFhQIG9uIFBIUCA0LjQuNC4KCkZvbGxvdyB0aGVzZSBzdGVwczoKCjEuIEluc3RhbGwgZGVwZW5kZW5jaWVzLgoKICAgLSBFbmFibGUgZWl0aGVyIHRoZSBHTVAgZXh0ZW5zaW9uIG9yIEJjbWF0aCBleHRlbnNpb24uIChHTVAgaXMKICAgICBTVFJPTkdMWSByZWNvbW1lbmRlZCBiZWNhdXNlIGl0J3MgTVVDSCBmYXN0ZXIhKSAgVGhpcyBpcwogICAgIHJlcXVpcmVkLgoKICAgLSBFbmFibGUgdGhlIENVUkwgZXh0ZW5zaW9uLgoKICAgLSBJZiB5b3UgcGxhbiB0byB1c2UgU1FMaXRlLCBQb3N0Z3JlU1FMLCBvciBNeVNRTCB0byBzdG9yZSBPcGVuSUQKICAgICBkYXRhLCB5b3UnbGwgbmVlZCBQRUFSIERCLiAgWW91IGNhbiBpbnN0YWxsIHRoaXMgYnkgcnVubmluZyB0aGlzCiAgICAgYXMgcm9vdDoKCiAgICAgIyBwZWFyIGluc3RhbGwgREIKCiAgICAgWW91J2xsIGFsc28gbmVlZCB0byBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIGFwcHJvcHJpYXRlIFBIUAogICAgIGRhdGFiYXNlIGV4dGVuc2lvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3RvcmUgT3BlbklEIGRhdGEgb24KICAgICB0aGUgZmlsZXN5c3RlbSBpbnN0ZWFkIG9mIHVzaW5nIGEgcmVsYXRpb25hbCBkYXRhYmFzZS4gIE5vdGhpbmcKICAgICBzcGVjaWFsIGlzIHJlcXVpcmVkIGZvciB1c2luZyB0aGUgZmlsZXN5c3RlbSBtZXRob2QuCgogICAtIEluc3RhbGwgZWl0aGVyIHRoZSBET00gb3IgZG9teG1sIFBIUCBYTUwgcHJvY2Vzc2luZyBleHRlbnNpb24sCiAgICAgYnV0IG5vdCBib3RoICh0aGV5IGFyZSBpbmNvbXBhdGlibGUpLgoKMi4gQ29weSB0aGUgQXV0aC8gZGlyZWN0b3J5IGludG8geW91ciBQSFAgaW5jbHVkZSBwYXRoLgoKVEVTVElORyBZT1VSIFNFVFVQCj09PT09PT09PT09PT09PT09PQoKWW91IGNhbiB1c2UgdGhlIGV4YW1wbGUgY29kZSB0byB0ZXN0IHlvdXIgc2V0dXAuICBUbyBydW4gdGhlIGV4YW1wbGUKY29uc3VtZXIgb3Igc2VydmVyLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZXhhbXBsZXMvUkVBRE1FCmZpbGUuCgpVU0lORyBUSEUgQVBJCj09PT09PT09PT09PT0KClRoZSBiZXN0IHdheSB0byBnZXQgc3RhcnRlZCB1c2luZyB0aGUgQVBJIGlzIHRvIHRha2UgYSBsb29rIGF0IHRoZQpleGFtcGxlIGNvbnN1bWVyIGFuZCBzZXJ2ZXIgaW4gdGhlIGV4YW1wbGVzLyBkaXJlY3RvcnkuICBTZWUgdGhlCmV4YW1wbGVzL1JFQURNRSBmaWxlIGZvciBtb3JlIGRldGFpbHMuCgpUUk9VQkxFU0hPT1RJTkcKPT09PT09PT09PT09PT09CgoqIElmIHlvdSdyZSB1bmFibGUgdG8gdXNlIGFuIE9wZW5JRCBVUkwgd2l0aCB0aGUgbGlicmFyeSwgeW91IG1heSB3YW50CnRvIHRyeSB1c2luZyB0aGUgZGlzY292ZXIgdG9vbCAoZXhhbXBsZXMvZGlzY292ZXIucGhwKS4gIFRoaXMgdG9vbAp3aWxsIHBlcmZvcm0gT3BlbklEIGRpc2NvdmVyeSBvbiB0aGUgaWRlbnRpZmllciBhbmQgZ2l2ZSBhIGxpc3Qgb2YKZGlzY292ZXJlZCBPcGVuSUQgc2VydmljZXMgYW5kIHRoZWlyIHR5cGVzLgoKKiBPbiBzb21lIHN5c3RlbXMsIFBIUCBiYXNlZGlyIHJlc3RyaWN0aW9ucyBwcmV2ZW50IHdlYiBzZXJ2ZXJzIGZyb20Kb3BlbmluZyBhIHNvdXJjZSBvZiByYW5kb21uZXNzLCBzdWNoIGFzIC9kZXYvdXJhbmRvbS4gIElmIHlvdXIgUEhQCk9wZW5JRCBsaWJyYXJ5IGhhcyB0cm91YmxlIGdldHRpbmcgYSBzYXRpc2ZhY3Rvcnkgc291cmNlIG9mCnJhbmRvbW5lc3MsIGNoZWNrIHlvdXIgQXBhY2hlIGFuZCBQSFAgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZSB0aGF0CnRoZSByYW5kb21uZXNzIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIHBhdGhzIGZvciB0aGUKIm9wZW5fYmFzZWRpciIgb3B0aW9uLgoKKiBJbiBzb21lIGNhc2VzLCBidWdzIGluIHRoZSBHTVAgbWF0aCBsaWJyYXJ5IHdpbGwgcmVzdWx0IGluIHNpZ25hdHVyZQp2YWxpZGF0aW9uIGVycm9ycyB3aGVuIHVzaW5nIHRoaXMgbGlicmFyeS4gIFNpbmNlIEdNUCBpcyBwcmVmZXJyZWQKb3ZlciBiY21hdGggKGZvciBwZXJmb3JtYW5jZSksIHlvdSB3aWxsIGhhdmUgdG8gZGVmaW5lCkF1dGhfT3BlbklEX0JVR0dZX0dNUCBpbiB5b3VyIGFwcGxpY2F0aW9uICpiZWZvcmUqIGltcG9ydGluZyBhbnkgb2YKdGhlIGxpYnJhcnkgY29kZToKCiAgZGVmaW5lKCdBdXRoX09wZW5JRF9CVUdHWV9HTVAnLCB0cnVlKTsKCiogTm90IGFsbCBQSFAgaW5zdGFsbGF0aW9ucyBzdXBwb3J0IFNTTC4gIFlvdSBjYW4gZmluZCBvdXQgaWYgeW91cnMKc3VwcG9ydHMgU1NMIGJ5IHJlYWRpbmcgdGhlICJIVFRQIEZldGNoaW5nIiBzZWN0aW9uIG9mIHRoZSBvdXRwdXQgb2YKImV4YW1wbGVzL2RldGVjdC5waHAuIiAgSWYgeW91ciBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBTU0wsCnRoZW4gaHR0cHM6Ly8gaWRlbnRpdHkgVVJMcyBhbmQgc2VydmVyIFVSTHMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGJ5CnRoZSBsaWJyYXJ5LiAgQW4gYXR0ZW1wdCB0byB1c2Ugc3VjaCBhbiBpZGVudGl0eSBVUkwgd2lsbCBiZQplcXVpdmFsZW50IHRvIHVzaW5nIGFuIGludmFsaWQgT3BlbklELiAgVG8gZW5hYmxlIFNTTCBzdXBwb3J0LApyZWNvbXBpbGUgUEhQIHdpdGggT3BlblNTTCBzdXBwb3J0IG9yIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIE9wZW5TU0wKbW9kdWxlIGZvciB5b3VyIHBsYXRmb3JtLiAgSWYgeW91IGFyZSB1c2luZyBDVVJMLCBDVVJMIHdpbGwgbmVlZCB0byBiZQpidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydC4KCkdFVFRJTkcgSEVMUAo9PT09PT09PT09PT0KCklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHJlY29tbWVuZGF0aW9ucywgb3IgcGF0Y2hlcywgcGxlYXNlIHRlbGwKdXMhICBTdWJzY3JpYmUgdG8gb3VyIE9wZW5JRCBkZXZlbG9wbWVudCBkaXNjdXNzaW9uIGxpc3QgYXQKCiAgaHR0cDovL29wZW5pZC5uZXQvZGV2ZWxvcGVycy9kZXYtbWFpbGluZy1saXN0cy8KCkRPQ1VNRU5UQVRJT04KPT09PT09PT09PT09PQoKWW91IGNhbiB2aWV3IHRoZSBIVE1MIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZG9jLyBkaXJlY3RvcnkuCgpUaGlzIHBhY2thZ2UncyBkb2N1bWVudGF0aW9uIGlzIGluIFBocERvYyBmb3JtYXQuICBUbyBnZW5lcmF0ZSB0aGUKZG9jdW1lbnRhdGlvbiwgaW5zdGFsbCBwaHBkb2MgYW5kIHJ1biB0aGUgYWRtaW4vbWFrZWRvYy5zaCBzY3JpcHQuClBocGRvYyBsaXZlcyBhdDoKCiAgaHR0cDovL3d3dy5waHBkb2Mub3JnLwoKQ09OVFJJQlVUSU5HCj09PT09PT09PT09PQoKSWYgeW91IGhhdmUgYSBidWdmaXggb3IgZmVhdHVyZSB5b3UnZCBsaWtlIHRvIGNvbnRyaWJ1dGUsIGRvbid0Cmhlc2l0YXRlIHRvIHNlbmQgaXQgdG8gdXMuICBQb3N0IHlvdXIgcGF0Y2ggdG8gdGhlIGRldmVsb3BtZW50IGxpc3QgYXQKCiAgaHR0cDovL29wZW5pZC5uZXQvZGV2ZWxvcGVycy9kZXYtbWFpbGluZy1saXN0cy8KCkZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250cmlidXRlLCBzZWUKCiAgaHR0cDovL29wZW5pZGVuYWJsZWQuY29tL2NvbnRyaWJ1dGUvCgpUbyBydW4gdGhlIHRlc3Qgc3VpdGUgaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UsIGluc3RhbGwgUEhQVW5pdCAxLngKYW5kIHJ1bgoKICBwaHAgYWRtaW4vdGV4dHRlc3QucGhwCgpQSFBVbml0IDEueCBjYW4gYmUgZm91bmQgYXQKCiAgaHR0cDovL3BlYXIucGhwdW5pdC5kZS9nZXQvCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/README.Debian</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[RGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgU2V0dXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkphbnJhaW4gbm90ZTogWW91J2xsIG5lZWQgdG8gcnVuIHRoZXNlIGNvbW1hbmRzIHRvIGdlbmVyYXRlCmRvY3VtZW50YXRpb24gZm9yIHRoaXMgcHJvamVjdDoKCiAgYXB0LWdldCBpbnN0YWxsIHBocDQtcGVhcgogIHBlYXIgaW5zdGFsbCBQaHBEb2N1bWVudG9yCg==]]></data>
	</file>
	<file>
	  <filename>/openid-php-openid-782224d/README.git</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R2l0SHViIGlzIHRoZSBuZXcgaG9tZSBmb3IgcGhwLW9wZW5pZCBsaWJyYXJ5IGRldmVsb3BtZW50LgoKVGhpcyBsaWJyYXJ5IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSmFuUmFpbiBhbmQgbWFuYWdlZCB1c2luZyB0aGUgZGFyY3MgUkNTLiAgVGhpcyBmaWxlIGlzIGhvbWUgdG8gbm90ZXMgcmVnYXJkaW5nIHRoZSBtaWdyYXRpb24gZnJvbSBkYXJjcyB0byBnaXQsIGFuZCB0aGUgbW92ZSBmcm9tIG9wZW5pZGVuYWJsZWQuY29tIHRvIGdpdGh1Yi5jb20uCgpDb250YWN0OgpCcmlhbiBFbGxpbgpicmlhbkBqYW5yYWluLmNvbQo=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/css/openid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKCVNpbXBsZSBPcGVuSUQgUGx1Z2luCglodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BlbmlkLXNlbGVjdG9yLwoJCglUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4KKi8KCmZvcm0ub3BlbmlkX2Zvcm0gewoJd2lkdGg6IDU4MHB4Owp9Cgpmb3JtLm9wZW5pZF9mb3JtIGxlZ2VuZCB7Cglmb250LXdlaWdodDogYm9sZDsKfQoKI29wZW5pZF9jaG9pY2UgewoJZGlzcGxheTogbm9uZTsKfQoKI29wZW5pZF9pbnB1dF9hcmVhIHsKCWNsZWFyOiBib3RoOwoJcGFkZGluZzogMTBweDsKfQoKI29wZW5pZF9idG5zLCAjb3BlbmlkX2J0bnMgYnIgewoJY2xlYXI6IGJvdGg7Cn0KCiNvcGVuaWRfaGlnaGxpZ2h0IHsKCXBhZGRpbmc6IDNweDsKCWJhY2tncm91bmQtY29sb3I6ICNGRkZDQzk7CglmbG9hdDogbGVmdDsKfQoKLm9wZW5pZF9sYXJnZV9idG4gewoJd2lkdGg6IDEwMHB4OwoJaGVpZ2h0OiA2MHB4OwovKiBmaXggZm9yIElFIDYgb25seTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DU1NfZmlsdGVyI1VuZGVyc2NvcmVfaGFjayAqLwoJX3dpZHRoOiAxMDJweDsKCV9oZWlnaHQ6IDYycHg7CgoJYm9yZGVyOiAxcHggc29saWQgI0RERDsKCW1hcmdpbjogM3B4OwoJZmxvYXQ6IGxlZnQ7Cn0KCi5vcGVuaWRfc21hbGxfYnRuIHsKCXdpZHRoOiAyNHB4OwoJaGVpZ2h0OiAyNHB4OwovKiBmaXggZm9yIElFIDYgb25seTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DU1NfZmlsdGVyI1VuZGVyc2NvcmVfaGFjayAqLwoJX3dpZHRoOiAyNnB4OwoJX2hlaWdodDogMjZweDsKCglib3JkZXI6IDFweCBzb2xpZCAjREREOwoJbWFyZ2luOiAzcHg7CglmbG9hdDogbGVmdDsKfQoKYS5vcGVuaWRfbGFyZ2VfYnRuOmZvY3VzIHsKCW91dGxpbmU6IG5vbmU7Cn0KCmEub3BlbmlkX2xhcmdlX2J0bjpmb2N1cyB7CgktbW96LW91dGxpbmUtc3R5bGU6IG5vbmU7Cn0KCi5vcGVuaWRfc2VsZWN0ZWQgewoJYm9yZGVyOiA0cHggc29saWQgI0RERDsKfQ==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/aol.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/facebook.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/google.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/myopenid.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/openid.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhSwAZANUAAP9sEP/28P/s4P/FoP+TUP/i0P/OsP+ncP+AMN/f3/z8/P+7kP92IP+dYObm5vn5+dnZ2dLS0s/Pz+/v7/b29uLi4vJ8M9bW1vLy8uzs7PjIqfWANfiDOdzc3P+JQP+xgP/YwP9iAMzMzP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABLABkAAAb/wJFwSCQuisikcslsOokFROhJrVqfn5D2yu1ePdqpd0xOgrfldPksVrurj4mDE3ZMHu988uG4iP4WYX8iEQ54Cgl6agoOg4OBWo5/CRIiSAIgBYpUD36DCRMjbCMTlJJEBgxhAB8BbiAhWWEhHgcCQwoRgx14QqMjiKdCByEEmgIfAAiuabBZCyAgAwcAAAZCCZ9Fo4gQ3t9CzkUFIQdqziEgRAEIAAEKgxFIv0sEDEnEAR8FHx4exkMMEPA3YASyAg38NQiATh0RASEWYBjkYF6YJrGSkIOlbMEAMOoGFDNA7ABHAgYWAPDQEAkCAhP/VNx2cQlEh0hihWDATNQy/wDmhIgUSWCISAM6cQ7xB++PPJpolMBSSkTnkYARQ/QcwYBAiGvhdGahKsrDiGyToLZREqIgkgBt0z2kRcufv5Vyw2YZO8+sgkqTFCytuYRBgyQiN84FGa2xSJzo+BYBKoSCrj8SKlAQRVhJFk1FEJgtR+RoiFtDCDTIOyIyayELWCuoIEnEBi1FmbADAHpEAK+aQvAWEoCBWQC5R4iMDVksa2QhDhd5UOGyCAsMyCZhR+sAgWpgQ7RrcIABgFtIGXxY3WDqENeiz1BeQiGDAw1bnRj4wH9Az3Qg8LdAT8jwpw4yqBn0QYAB8veBASDkt0kRr01oYVXaXTjhBwlOGAEEADs=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/rambler.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhXwAUAOf8AAWUyx2TvRyQ6ReU2ACfvCyY6xCovTOY+QCw5QCx/wC0/SGu3TiqyAC2+AC2/wC4+wC59AK4/wC6/yOx/AC89wK7/QC98gC8/Rq27CKz9wC+/yK28w28/wDA/wDD9hK9/yC86wDE/xDA+x6+5ii88gDH+w/D9wDH/wzG8xjC/QDK/gDL9xzD/yfC6hjF+g7K8QDN/wDO+yDI4izE7R/H/ADQ/1i463av7gDR/h3K+ADT/yXJ/gDW/ADW/xHT7DfH9gDY9yHP9i3N5wDa8QPY/j7H/gDa+U7H5EHL5gDc/2jC1QDe9iPU9A/a/znP8UDM/ADh8gDg/lbJ7iPY8Q/e/QDk9VHO5ELR+k3P8inb9DzW8Bbg/w7j+jTa50nU6WvI/FPQ+k3T72TN7Brk6GjO4FXV5EnW/2rO9F/V81rW/0vb/VHb8ETf81nY/Eje+C7n8kbi4WLY9XnR+VTd8n3R/znn+WjZ/UDn/zzp+1Dj/nXY/2Df/03m+Vvj+InV/3Tc+4bX+YbZ5njd72zh64HZ/33d9m3i/4Hd/VHt+nrh/3jk+4Li+2zp+Eb0/3/k9m/o/nfn+I7i76Hc9ZXf/H3o/23v91b2+7Tc64Xp+3zs/XLv/qHh/57j+o/p/LHf/4Lw8+PV49Xa3Nja14bv+Yzu89vZ3Y/t+pvp/+PY3+Da2drc2dTe2eDczqzn/5vu7tvd2t/c4dze29bg26Ps/Nng1drf4prx+N7g3erd3Zf0863t/t3j5erg5rfu877r/5n2/+Pl4b3v/Lbx/aT397Pz98Lw98bv/bH2/8Dy/7r18+fp5s7v/8Hz/8P19dvv+8f1/ML4/tny9tbz/u3v7NH2/8v5/8r8/PPy6fDz79j5/Ob3/fb0+OH6/9T+//H47fX1///09en6/9z+//727v32/+L//fv4/f/3/en/8fj79//5+On//vD9/u3/+Pb8/v/6+f36//r8+fL////97vv9+vX/+v/8+/78//j/9Pj+//z/7v/+9f/9//n///z/+/7//CwAAAAAXwAUAAAI/gD/CfwX758yUa8ExhJ1S2DBgQPz3VM38F4+iBgzasx4r6C8ixnpCbxncaNJiNNeLUz4T5UohMA23vvnruLMkzg5Qry589/FfCBzYqQHTJWqVyoVGkUaS+NFeQOhUhQq9F49kvmmQswK7x5UqhiBxVIp69tIoLhcJsV4T4GDBBwUPFBw5lw9c2BP5itGg8YJpzp04OBJlV66W69UYRPIIAABA9zu0RMVK5ayjBQkSJC74cODDHlx7u37N2O+wIND/1uoKqYnAErIkLFi41K+aapiqUoHkd4DB5vfynXALajqrXz9AhZMWCjuhek8LTgCidixXKdIDLg3LZSqhhU1/mgWmI/FBAUbLH7UJiwcPXfn1M3Ed88asX3/8J0z1oukSGOk6UNNMvnsM9NpzKlzjjv3HMNGJu5INBE997jDxx2UvSLRAGo84ggpw1iiBhMCbCMPLYmJNJJ4Egw0j1wKmLNPB3ENV4RF9+BTQQoKcCCBCEF88IIIGpRwEYB+PQIDDCr4cCBqJKkzBRFU8pAEFersI9ESVERBRWKqqOOOHEgIYsovtlTCBxsI3JDOKrntxKJA6rTSgAItTvIBBBA8QMEDEmijTjrZSOBABw6YwGIKLJhwQhr5IHnCITG8EIMLMfgEpTrh4JBEElQuQUQd6uCzBRdEUEGFbho6Q0Ic/syssw471HxyTCsH3MOKbnJKoME/55QzgWZ06PKABnJ9IEIDEjwgkY8hQIBEBx9UIMEPIKRgAgr/BBMCCyosssKSMNRQzD9Q1oMDD0T0wAOXSyShCT1JRJHEEswcFYs7vpRRjRiRiJPNKHAkMkIB8MAylor/3CNeAu6g8IAFGjSwjwPM0mDORxV0DMY9H2jwATXt7NCABmaoM48GJ6Rwjy8hhKBCw+gEwWQP++DAXB5UDuGTOo0QcWU+qlJxkW6iAOUKJ1cMMgsjfTCRAwhf3ANKZb0+cE4DFECQgYEJTFDBger4spkC9zSrQDv7XOEoIQ1/kAIN9zATcwg3GZMD/gwryAMluzpkok+F+RDh5T5UfDqTS7fkc44Ue0DgRhhaZPGCDBuwk88qC/X66wwiUEBBPfm4pYAeg3frlgTqPPBABQI9IYIIhwjUAQspqMNODjS4IJE7aqyAAw77xMDcFkTwkIWW+VSTBBRv3HMlFQJhI8pi8kjTAgptBMEEED78gIZF3lDWKwcTZabAJuoUcbICIzDzTDCrt/567LPX/s/tIeADTwg5OIEJmmEIckHiHkRgTjiERgUezAIa8oNGNv4xPYikYxyhuEc02oCFNbCBDUKYwzl4cQ2NOGwzQDGWjxr2AB/x6Q/0A479YPcP2dHOdizAGzzMILMlpWBJ/jig0AqYsw9KEGEMRBiClaJQhTrko4IDwcZRsEG6QHihC2sQhzrygZjLYEQdmRnbTCSAgQbkox7wcAAEJLCBRBiDWRDQRwUs8IF9zMMJKPCAIvATggd0YIv46AAKTLCCGAThBMwgCA9iQISbAOFTQCgaFJyYuCRARBms2sU2GgYUc/AiFZVpCkbkcYhDAIIk+1jEIQixCYvkww586gYp/cCJf0iiEIX4xz6EsYhELOMf6nCEIxbhk6zkY28qmIVVKNIJSmAiH/KQjzgYYa9PcQER9+ADHvAQlsqgQhUKK0UtYFGKUnzHKQRpGDApdI5z5AMfEslHPOghDwPd4xw+P7kKPbREDslYZR/18MlE5CNQkEQIHmfEkXEEUo+A4gMcGbGeSpBCUaRchmHHyahGQ/MQbFRUNzHZqEhHipOAAAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/verisign.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/yahoo.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.large/yandex.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMgAXAOZxAAAAAGlpaf8PD7S0tP8AAJaWlv88PNLS0g8PDzw8PIeHh+Hh4czMzMPDwzMzM2ZmZgMDA6Wlpdvb2/8MDBISEgYGBuTk5AkJCe3t7WxsbN7e3vDw8DY2NqKiov9mZtXV1U5OTldXVwwMDG9vb/z8/P+KivPz8////yQkJP8YGDk5Oerq6pmZmf9FRdjY2EVFRf8wMP/Pz/n5+f+fn/+6umBgYEhISBgYGB4eHi0tLf85Oc/PzyoqKv/8/P/5+f+0tLq6ulFRUf97ez8/P/8nJ//Gxp+fn/82Nnh4eMnJyWNjY8DAwCcnJ1RUVP9ycoqKire3t/+xsf8zM/8/P/91dcbGxv9+fo2NjUtLS5ycnP9XV/8DA5CQkP/k5F1dXf8SEoSEhFpaWv9aWv94eP/b2zAwMP/AwP/29v/t7f8tLf+rq/8hIf8JCYGBgfb29r29vX5+fv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAHEALAAAAAAyABcAAAf/gHGCg4SFhoeIiYqLjI2NRSUeHlSOlY4+WgQTUhMClp+KQgRjggaeoKiEZxNrPaWnqak0BE6DprGxMwQltrCfMgMLjQxAJoO6Vr2CCQiCCgAHghEA1AAFggwIABAdggEAwjUADXEWOdQiK4IxBC3KcczO0NIAIxnWcW44DhoqFDJxvi3QACGIoBcXGDQAQ0gHATWvljWL8yxaHCPjBuDTGOFEBwADAoJTUkFCnAP1DpFJ0c5DilPxKM6LwwWAC43Xvn04UQUAHJENKgQQ9ATAG0RoYBBI02lZhQcPOMxEAmADTngArjxoAiCDyBciMAgKAUADoi5sYMS5Be9p1Jlexm7EuXrOgV0HCkSiuGBBkI2qiMQQiLIW5sSKgniAmIuvDAAShb5lAfDAL7hDMbYciQjv8DwMEK5dxQLAJCGBHCCYFBfSkAECNDjHRFxAxAbG1561iQxOY4g4HxcX+kFAx7vZ0JIwUcGCxb0QKzBQqBehwA6RwhxA2EECB4Aw1T8IIkLAzKApXwQNoSDvw7dq1cgxuEENARSRfQdcWCwBBTUKS6ASwESCaESOIAcw0IgLCqYyICEG4oKKBaYJYgIDkEmo4YaBAAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/aol.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAALEAAABRAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAD/AAAA/wAAAOoAAACHAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADAAAAAWgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAkwAAAC0AAAAAAAAAAAAAAAAAAABaAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAAAAAAAMAAAA5AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAAAA/////7Ozs/8AAAD/s7Oz//////8AAAD/s7Oz//z8/P+zs7P/AAAA/5mZmf//////AAAA///////BwcHsAAAAG9ra2v76+vr////////////Z2dn/s7Oz//////+zs7P//////7Ozs/+ZmZn//////wAAAP//////ycnJ4wAAAKWAgID//////wAAAP//////gICA//////+zs7P/AAAA/7Ozs///////mZmZ//////8AAAD/AAAA/wAAAIQAAADwQEBA/////////////////0BAQP+zs7P//////7Ozs///////s7Oz/5mZmf//////AAAA/wAAAP8AAABmAAAAjQAAAP+4uLj/+vr6/7i4uP8AAAD/AAAA/7Ozs///////s7Oz/wAAAP+ZmZn//////wAAAP8AAAD/AAAASAAAACQAAAD8TU1N//////9NTU3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/mZmZ//////8AAAD/AAAA/wAAACoAAAAAAAAAsQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAMAAAAAAAAAEUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAC0AAAAAAAAAAAAAAAAAAAA1QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+QAAAMMAAACQAAAAWgAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAAyQAAAJYAAABjAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P8AAPA/AADgBwEA4AEAAMAAAACAAAAAgAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAgAABAIABAADABwAAwP8AAA==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/aol.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMNAAAAAEBAQE1NTYCAgJmZmbOzs7i4uMHBwcnJydnZ2dra2vr6+vz8/P///////////yH5BAEKAA8ALAAAAAAQABAAAARK8ElApb2W6o3n/poHgpPQCCDRVJSxGFTRFIDKBk0eyLwNPIDBqiGkyXw/xSKX4M1sDcRjBpBVGTToQTTicLu/Lwkz6mS85kxaEgEAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/aol.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAJdnBBZwAAABAAAAAQAFzGrcMAAADhSURBVCjPdY8xSgNhEIU/s5WQAwgBq1QBQTzBNjaSLSSdBxBCDuIBrGy9QfjXXrFKQsoUSWGjhQSF1OviZ7HJmk02bxgY3rx5MxMB0GfCFReckLOkgiMAZnRKJmPMlDFT5hvqEmtjRVoIhgcEIk1okydqUmk8aFF1GvSJBvwwACAgYfvGU1jFFogNus7S4bbBU7x+JqZLSkJKt+LQWvxmqs73HHT0DmgQg4rB3FAeqS9fAE0+Dr75FgEZn/Sox2xTvO7NfnPP2b/ynHyr+cwNx7tmj4gsuaNdv63FkGuiXfoP2+yxa+9CzfkAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjM6Mzc6MTYrMDM6MDArI7pJAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTA5LTE2VDE5OjA2OjUyKzAzOjAw2x7zcwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/blogger.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAIAICAAAAEACACoCAAAJgAAABAQAAABAAgAaAUAAM4IAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAmb+AIKy/gDO4v4AWp7+AL7a/gDu9v4OInr+Dp7G/gAScv4Ajr7+AN7u/gByqv4A/v7+AAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAgwMDAwMDAwMAgcAAAAAAAAAAAAAAAAAAAAAAAAJDAwMDAwMDAwMDAwMDAwJAAAAAAAAAAAAAAAAAAAACQwMDAwMDAwMDAwMDAwMDAwJAAAAAAAAAAAAAAAAAAEMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAABwwMDAwMDAwMDAwMDAwMDAwMDAcAAAAAAAAAAAAAAAACDAwMDAwDAwMDAwMDAwwMDAwMAgAAAAAAAAAAAAAAAAwMDAwMAAAAAAAAAAAAAAwMDAwMAAAAAAAAAAAAAAAADAwMDAwMAwMDAwMDAwMMDAwMDAwAAAAAAAAAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMCgAAAAAAAAAAAAAAAAwMDAwMDAMDAwMMDAwMDAwFAQEAAAAAAAAAAAAAAAAADAwMDAwAAAAAAAAMDAwMDAEAAAAAAAAAAAAAAAAAAAACDAwMDAwDAwMDDAwMDAwMAQAAAAAAAAAAAAAAAAAAAAcMDAwMDAwMDAwMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAQwMDAwMDAwMDAwMDAwMBwAAAAAAAAAAAAAAAAAAAAAACQwMDAwMDAwMDAwMDAUGAAAAAAAAAAAAAAAAAAAAAAAACQwMDAwMDAwMDAwKAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQcCDAwMDAUECwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///AAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAAAygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACZv4CgrL+gu72/s5env5ars7+vjKC/u4Scv4ijr7+nv7+/hJuqv6Ovtr+3gAAAHIAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAcCCAgICAIHAAAAAAAAAAcICAgICAgICAcAAAAAAAACCAgDAwMDCAgCAAAAAAAACAgJAAAAAAkICAAAAAAAAAgICAgICAgICAgAAAAAAAAICAgICAgICAgIAAAAAAAACAgJAAADCAgBBQAAAAAAAAIICAMDAggIBQAAAAAAAAAHCAgICAgICgAAAAAAAAAAAAcCCAgIBAYAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAD//8ADQSCAAcADAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAMADgAE=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/blogger.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMLAP5mAv5yEv6CMv6eXv6qbv6ygv6+jv7Orv7avv727v7+/v///////////////////yH5BAEKAA8ALAAAAAAQABAAAAQ/8D1Aq6Vy3o25v0aijEfgGWOqIJ6oDIMrcCNBDWMxX2qvbD4VUGGrEEYbFww2SmxQQQMnpEpIP1gNFiPZAiQRADs=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/blogger.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAA2UlEQVQ4y2NkgIJ/aUz/GUgATLP+MTIwMDAwkqMZ2RBGcjXDAAuGSEQPA4NFAgMDhwBC7MIGBoYlKQwMXz5gugJDs0MBqmYGBgYGgwAGhow12L2BwrNIQLAXJEDwD6itKg4MDDIGBLwAs3lNAQPDiSUI8YQFCJcwMDAwPLkAl0INxBl/iAu5DIS9TMTpwA1YsIquKWBg2DMFVcwlh4EhZAIBA358gIRDyATMKINp/vEBjwEnFkCiETng0MGJBXgMWFECodETEszmEwsQaqCA4qRMeWaCccjNzgBJL0PlfcuQnAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMF+X9+UAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDAuyk9ZAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/claimid.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/claimid.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMZLAKjfD6jfEarfFargFKvgF6zgGazgG63gHK3gHa3hHq3hH67hHq7hH67hIK7hIa/hIq/hI6/hJLDhJbDiJrDiJ7HiJ7HiKLHiKbLiKrLjK7PjL7XkNbfkObrlQbvmRL3nSsDnUbnyGrryHbnzGsXpXrzzIrzzJL70J7/0Kr/0K7/0LMD0LMvsb83sdcX2OtDtfdPvhdPvhtbwj9nxl9D/NNvyneDzqODzqeD0quD6jez4y+750O/51PD51fL62vX74/X75fb85vb85/j86/j87fv99Pv+9f3++/7++///+P7//f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAH8ALAAAAAAQABAAAAeggH+Cg4SFgjQpiSslIScnIigqiTR/KBYWFwkfNTw7LAcTlyh/KZcNHUVLqkszCBUWKaSXBDCrqkgcD7CyFgMytktHHQ67pRQLOMBDGxDFFhIYQMBFHg3OFgU2wDoMobGlFgcgwCQGl9+XEBpEqz4REuekEwoBHUarLQAX8SMRHjFBbN3AIKBZrBw9lABTJeRFBgEm/ixc+GOGC4kTFyYJBAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/claimid.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABnklEQVQ4y6WSTWsTURSGn3vnTtJMTPqpKHXVUujCZcCF0EVx4d4/4MLf4k4QBDcuXHRVoa70FwhduxCkDZVQKkhTMqZJJpPMnXtcdJw6ZhRs39Xl5ZznnvNy4JpSAJ+kJeFo/JupsBKRSoyvGwBYF2VvDQgAi/UaBiAcRZz3XN5uZcRC5R5r9ces+PcRLEeDNxwP9/B0gEJntdEFIBsEgFTGNMw6W7feYnQ991vLL2j6m3wOn2F0kPVcogqAO8HDQvMvbTSeEpi7OElybwYgpHgqKA1MAE/NIVkGMwBBMCogMKulgMT9IJFhYfDiBOIw6gY3qw9KAZ6qUdHzCGk5QCmPqQvpxh9LAf3kC4OkjVaVv2eg8OgMd0sBB/2XOLH/WAHQqsrAfmWS9gr+IGlzGu9j/gg4BwgOK2MmrkdVL+HpuUJh+/w1E9dFKVPwDcBUQkQCmv4Gt2vbrDeezPy0XG3xLfpAnHbxdROt/GxloDN9LgvyiGZls+y2co3T7xz2X3EcvSO2pyytzF8ARET4D0X2hJPoPWf+ztUAl5rwE3eRmYox/naQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwX5f35QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMC7KT1kAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/clickpass.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOYAAP3au/zLn/iCF/iBFPu+h/u9hfqgT/mQMfmPL/mMKfiDGPiAEv/+/f/+/vmTNv3gxf/7+PzOpP/9/P3dwPmUN/7s3PiEGfmZQfqqYfqrY/7o1PmTNfqcR/3Wsv3jy/706v3cv/mKJvqjVPqlWPmVOv3UsP3gxvmXPf/8+fmOLP3Zuf/8+v7m0fiAE/qdSf7m0PqtZvmNK//48v7v4fzJmvqpX/zDj/qhUP7o1f7z6f/69/qnW/u7gPuwbP7y6PqkVfqpXv/69vmWPPiIIvzBi/3bvfiHH/7lz/7z6vqmWvqmWfzDkPzFk/7w4/mRMv3fw/zBjP/38Pu2d/7t3vqiUf7q2f3Ytv/59fzPpvu5fP7w5P7y5/717f706/zKnPiFG/y/iP3Sq/u3ev7p1vzPpfmKJfzCjfiIIf3iyvmLJ/qbRPu4evuycPuzcvuxbvmaQvqlV/utZ//48/qjU/7v4v3cvvmSNPqqYP3SrP3TrfzMofzJm/zAivmJI/////h/ESH5BAAAAAAALAAAAAAgACAAAAf/gH6Cg4RHZkokKTEbBllFV4SRkoQRbwt/mJmZBwRdk58eLpqjowhkn5F7FqSsmm4rqH5LrbSZSRCfAbW7fzCTLwq8uzSSHMK7FlOEYce8PYQXtRt8ACBeBrUKM4I4A7QFcpF5RrTEst+fE6usVIJwrScSqGKtITJ+Dq0RsRXBrGN+QrSqEqsBhVYTArIS0KSgmlYqFLJiUfBAqwd+hLSyEQsArQp+MLSKEQUVix2sUujwo6sVBgaxHty5lOmlHzr+WO3QQOgDLEImanj7g2eQiGwjCBCJk6bEJA8ZBFDQw8XPA5rCLsj7ZWyNoAzN/hT5lMOBA55+ciRo5qKBpBlOYEhoAZqTV8JIdf5IkWTly7Efk5j8KYAikgk7x9AIwjVoFhZJH9gI4FUj7Yk5jP2oQPLpRRsE9Yx1uNBHwYjMBWWAgALjxg0gPEpsYZCvTIWrIoIU3O0nAgUcgjpkWCkoEAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/clickpass.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhEAAQAMZ+AP3au/zLn/iCF/iBFPu+h/u9hfqgT/mQMfmPL/mMKfiDGPiAEv/+/f/+/vmTNv3gxf/7+PzOpP/9/P3dwPmUN/7s3PiEGfmZQfqqYfqrY/7o1PmTNfqcR/3Wsv3jy/706v3cv/mKJvqjVPqlWPmVOv3UsP3gxvmXPf/8+fmOLP3Zuf/8+v7m0fiAE/qdSf7m0PqtZvmNK//48v7v4fzJmvqpX/zDj/qhUP7o1f7z6f/69/qnW/u7gPuwbP7y6PqkVfqpXv/69vmWPPiIIvzBi/3bvfiHH/7lz/7z6vqmWvqmWfzDkPzFk/7w4/mRMv3fw/zBjP/38Pu2d/7t3vqiUf7q2f3Ytv/59fzPpvu5fP7w5P7y5/717f706/zKnPiFG/y/iP3Sq/u3ev7p1vzPpfmKJfzCjfiIIf3iyvmLJ/qbRPu4evuycPuzcvuxbvmaQvqlV/utZ//48/qjU/7v4v3cvvmSNPqqYP3SrP3TrfzMofzJm/zAivmJI/////h/ESwAAAAAEAAQAAAHdIB+goJHSikbWVeDi34ef4+QfwiMfkuRl38Qgy+YmIOdmD1+OJdygnmXfnCREotikTIhkYwNkROykLSRDxiRUYsskTp0lxqCK4ImA3+CC50Xi5x+OaANg05agladP4NMBYMfAp4nmiqMMlA3QCUMfxULQX6BADs=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/clickpass.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oKDAwBOqkaI2cAAAH3SURBVCjPfVJBSFRRFD33/T9/MqcMimmKqCCh0hShhUFIJkItAguiqFUl1K6gICoIwn1BQUVK1GxaDLSoTUkttEKY0KQEQUKTyGA2xWg5M///d0+L78xoUmd33zvnnXPfvUISAEkRsZMDOvxIZz6gmIdXK6kmp+Wks+twdAsAgJAkiWA+SHfp9JDEVmARaH1ZW+919yORjDSiqggK/s0GlGbxDxASvziGVRtExIhIkO76DxuAgP6D9sjB6NSgTr9blCFA3SbTdFSSDQyL1fO5nM32AnDtSFpiNRW2u/+a23E1Ku2nTJA5LW4cgBjHDj92Ws8a/ZqtWq9vrLABOM3HnMYjIKNSv4+CNCjmy6506juW9Eqa7QdJLdfKXzkD45bfF+ZnlvQqwtw4xFQE8BJGkjsqDDv29C+NaTlutuyh/xuArN4o8YQxOw9RF0zF9fw7u8OhuzozarN9LM1Jqtk788I7PyJb90oixeKsKOn3JKFhNbpa2ADGcfdddjuvVxfnfZ+d6BeSOjngPzwgXu2yCat342c0Lxby/u2W+JUvBoDZ1h478YShv2wjYN/eWkhbU+e0ngtf9wjL38z8t/D5BTvxEgDEARVQWbkuduqZf78tfmlc1mzm/A+wDFUlqUHRTg6GHzPh51dayNupN6V7bSRLvZ0R7Q8dgQmZeYVmGgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/facebook.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAYAICAQAAEABADoAgAAZgAAABAQEAABAAQAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEACABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA/wD/AP8AAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMzMzMzMzMzMzMzMAAAMzMzMzMzMzMzMzMzMzMAADN3d3d3d3d3//93d3czAAAzd3d3d3d3d///d3d3MwAAM3d3d3d3d3f//3d3dzMAADN3d3d3d3d3//93d3czAAAzMzMzMzMzM///MzMzMwAAMzMzMzMzMzP//zMzMzMAADMzMzMzMzMz//8zMzMzAAAzMzMzMzMzM///MzMzMwAAMzMzMzMzMzP//zMzMzMAADMzMzMzMzMz//8zMzMzAAAzMzMzMzM4//////gzMwAAMzMzMzMzP///////MzMAADMzMzMzMz///////zMzAAAzMzMzMzM///////8zMwAAMzMzMzMzMzP//3d3MzMAADMzMzMzMzMz//9zMzMzAAAzMzMzMzMzM///czMzMwAAMzMzMzMzMzP//3MzMzMAADMzMzMzMzMzj//4iDMzAAAzMzMzMzMzM3////8zMwAAMzMzMzMzMzM4////MzMAADMzMzMzMzMzM3j/+DMzAAAzMzMzMzMzMzMzN3MzMwAAMzMzMzMzMzMzMzMzMzMAADMzMzMzMzMzMzMzMzMzAAADMzMzMzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////4AAAB8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD4AAAB///////////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA/wD/AP8AAP//AP///wAAAAAAAAAAAAMzMzMzMzMwB3d3d3/3d3AHd3d3f/d3cAMzMzM/8zMwAzMzMz/zMzADMzMzP/MzMAMzMz////MwAzMzP///8zADMzMzP/MzMAMzMzM/8zMwAzMzMz//8zADMzMzN//zMAMzMzMzMzMwAzMzMzMzMzAAAAAAAAAAAP//vf+AAf//gAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAf//gAEoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAmlo6ANK6qgDu4t4AqnpeAJ5mSgDizsYA+vb2AJ5iQgDy6uIAupJ+AOra0gCaXkIA2sa6ALaGbgCmblYA9u7qAJpaPgDu5t4AomZKAOLSygD+/v4AnmJGAPLq5gDq2tYA3sq+ALaGcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoaGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoaGhoAAA0NDQ0NDQ0NDQ0NDQ0NFBQUFA0NDQ0NDQAAGhoaGgAADQ0NDQ0NDQ0NDQ0NDQ0UFBQUDQ0NDQ0NAAAaGhoaAAANDQ0NDQ0NDQ0NDQ0NDRQUFBQNDQ0NDQ0AABoaGhoAAA0NDQ0NDQ0NDQ0NDQ0NFBQUFA0NDQ0NDQAAGhoaGgAAAAAAAAAAAAAAAAAAAAAUFBQUAAAAAAAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAABQUFBQAAAAAAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAFBQUFAAAAAAAAAAAGhoaGgAAAAAAAAAAAAAAAAAAAAAUFBQUAAAAAAAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAABQUFBQAAAAAAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAFBQUFAAAAAAAAAAAGhoaGgAAAAAAAAAAAAAAAAAYFBQUFBQUFBQUBQAAAAAaGhoaAAAAAAAAAAAAAAAAABYUFBQUFBQUFBQCAAAAABoaGhoAAAAAAAAAAAAAAAAAFhQUFBQUFBQUFA8AAAAAGhoaGgAAAAAAAAAAAAAAAAACFBQUFBQUFBQUBgAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAABQUFBQOBAQEAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAFBQUFAcAAAAAAAAAGhoaGgAAAAAAAAAAAAAAAAAAAAAUFBQUBwAAAAAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAABQUFBQDAAAAAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAChQUFA8KChgAAAAAGhoaGgAAAAAAAAAAAAAAAAAAAAAJFBQUFBQUDwAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAABABFBQUFBQPAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAAAANDAIWCBMAAAAAGhoaGgAAAAAAAAAAAAAAAAAAAAAAAAAACwcHEAAAAAAaGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhoaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhr//////////+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAf//////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAACaWjoA9u7qAKp6YgCeYkYA/v7+ALaGbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGBgYGBgYGBgYGBgYGBgYAAAAAAAAAAAAAAAAAAAYGAwUFBQUFBQUEBAUFBQMGBgMFBQUFBQUFBAQFBQUDBgYAAAAAAAAAAAQEAAAAAAYGAAAAAAAAAAAEBAAAAAAGBgAAAAAAAAAABAQAAAAABgYAAAAAAAABAQQEAQEAAAYGAAAAAAAABAQEBAQEAAAGBgAAAAAAAAAABAQAAAAABgYAAAAAAAAAAAQEAAAAAAYGAAAAAAAAAAABBAQEAAAGBgAAAAAAAAAAAgEEBAAABgYAAAAAAAAAAAAAAAAAAAYGAAAAAAAAAAAAAAAAAAAGBgYGBgYGBgYGBgYGBgYGBv//vf+AAf//gAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAf//gAEoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmFk7M5hZO7OYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTuzmFk7MwAAAAAAAAAAAAAAAAAAAACYWTuzmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTuzAAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf//////////////////////tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt//////////////////////+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3//////////////////////7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf//////////////////////tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7//////////////////////+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv//////////////////////5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO///////////////////////mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7//////////////////////+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv//////////////////////5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO///////////////////////mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/93Jv//////////////////////////////////////////////////hz8b/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/8enl/////////////////////////////////////////////////+7k3/+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO//y6ub/////////////////////////////////////////////////9O7r/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/+3i3P/////////////////////////////////////////////////69/b/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv//////////////////////6ZvVf+gZUr/oGVK/59kSP+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO///////////////////////nGBD/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7//////////////////////+cYEP/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv//////////////////////6t4X/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO//o2dL/////////////////9O3p/+jb1P/o29T/3cm//5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/7uSfv/////////////////////////////////07en/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mVs9/9O4q/////////////////////////////Tt6v+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/7SGcP/bxbv/7eLd//Hp5f/w6OP/49LK/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAAAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+bXkD/nWFE/5xgQ/+ZWj3/mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAAAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAAAAAAAAAAAAAJhZO7OYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO7MAAAAAAAAAAAAAAAAAAAAAmFk7M5hZO7OYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTuzmFk7MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////wAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA///////////KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmFk7zJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO8wAAAAAAAAAAJ5iRf+0hG3/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3///////////+0hG3/tIRt/7SEbf+eYkX/AAAAAAAAAACeYkX/tIRt/7SEbf+0hG3/tIRt/7SEbf+0hG3/tIRt////////////tIRt/7SEbf+0hG3/nmJF/wAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO////////////5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv///////////+YWTv/mFk7/5hZO/+YWTv/AAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7////////////mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/9O7r//Tu6/////////////Tu6//07uv/mFk7/5hZO/8AAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/////////////////////////////////5hZO/+YWTv/AAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7////////////mFk7/5hZO/+YWTv/mFk7/wAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO////////////5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAJhZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/9O7r/////////////////5hZO/+YWTv/AAAAAAAAAACYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/6t4YP/07uv///////////+YWTv/mFk7/wAAAAAAAAAAmFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/8AAAAAAAAAAJhZO8yYWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTv/mFk7/5hZO/+YWTvMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAH/KIABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAH//wQA]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/facebook.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMIFADtZmEVinmB4q22EtOvu9P///////////yH5BAEKAAcALAAAAAAQABAAAAM4eLrcCjBK+aaF1QpSCj4XwHVfSEbZdJZq57ISMcpwS4HXCqSSrgSDoHDQEQZ+Q2ExeMSFbo6oIgEAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/facebook.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAAoUlEQVQ4y2NgoBAwMjAwMFhHzjjDwMBgTKLes0eXZ5gwQTmkaobrYSFGpaq8MEN3mSeDiCA3AwMDA4NN1Ey4HBMxBiBrRgdEuQCbzSS5AB/A64Ijy9Kx8pFdgteAN++/ongBxifaBQHZS1BshvGpGgbUCUQuTjYGDSUxgoqNtGXg7Bv3XlHRBd++/zp77uoTnPkBWwJiYGA4S6nlDAwMDAwAeE0mlblIUd0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjM6Mzc6MTYrMDM6MDArI7pJAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTA5LTE2VDE5OjEwOjUwKzAzOjAwgBFN3QAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/flickr.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIYwBNyGMAlshjAJXIYwBOAAAAAAAAAAAAAAAAAAAAAIQA/06EAP+VhAD/loQA/00AAAAAAAAAAAAAAADIYwCByGMA/8hjAP/IYwD/yGMA/8llAIMAAAAAAAAAAIMA/4SEAP//hAD//4QA//+EAP//hAD/gQAAAADIYwA5yGMA/8hjAP/IYwD/yGMA/8hjAP/JZQD/wlsWL4YD+C+DAP//hAD//4QA//+EAP//hAD//4QA//+EAP9PyGMAlchjAP/IYwD/yGMA/8hjAP/IYwD/yWUA/8JbFniGA/h5gwD//4QA//+EAP//hAD//4QA//+EAP//hAD/mshjAJXIYwD/yGMA/8hjAP/IYwD/yGMA/8llAP/CWxZ4hgP4eYMA//+EAP//hAD//4QA//+EAP//hAD//4QA/5rIYwA5yGMA/8hjAP/IYwD/yGMA/8hjAP/JZQD/wlsWL4YD+DCDAP//hAD//4QA//+EAP//hAD//4QA//+EAP9PAAAAAMhjAILIYwD/yGMA/8hjAP/IYwD/yWUAhAAAAAAAAAAAgwD/hIQA//+EAP//hAD//4QA//+EAP+CAAAAAAAAAAAAAAAAyGMAOMhjAJHIYwCQyGMAOQAAAAAAAAAAAAAAAAAAAACEAP85hAD/kIQA/5GEAP84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9Pe///AAD//3oA///B0+fnwdOBgcHTgYHB0wGAwdMBgMHTgYEAAIGBAADn5wAA//8AAP//AAD//wAA//8AAA==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/flickr.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMIEAP8Ag/8AhABjyABlyf///////////////yH5BAEKAAQALAAAAAAQABAAAAMsSLrc/jDKSYRwITDLhwJZqHCWR4ChRpZfmq2CiaYVKbuj3dKLhWmUoHBISQAAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/flickr.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAA00lEQVQ4y+2RsU4CQRCGv9mQ4BP4HHTeNbTGEAidIbG7t8DF4liewlwHAUogcLE3uh25V7D0AUwsLkvhRheFa+iIfzXJP//M/P/AP+S7SmwE9AAHzMmi17DRYWLg1mumgrY/AxKbAoO90UpGPF7pL/HQgNz/Wj4U9IOQ2Bh4+XObEi4/Phtvs2epl+U2PDZAtwbcVVi84YjSo6VODVEB4wo+BzYV/Fr5tNMDpHmfNIuLsl8AowN8KuhF+Ma29+yAJ7JoGXY7TAe49pnkgl6dav9csAMKtzFdmKOL7gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMF+X9+UAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDAuyk9ZAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7PT7/3zF6/9Ptu//RbHx/0227/+Tzvb/9vv5/97h0f9JeBz/NHoA/z98Av9AfAD/PHsA/0F6AP8AAAAA/vz7/1+33/8Mp+z/FrHw/xWy8f8bs/T/Hqrx/3zE7v////7/t8qp/zF2A/87gwH/P4ID/z59AP8+egD/Q3kA/97s8v8botj/ELn3/wy58f8PtfL/D7Lw/xuz9P8vq+f/8/n///779v9KhR3/OYYA/0GFAv88hgD/QIAC/z17AP/0+/j/N6bM/wC07/8Cxf7/CsP7/wm+9v8Aqur/SrDb//7+/v///P7/VZEl/zSJAP87jQD/PYYA/0OBBf8+fQH///3//9Dp8/84sM7/CrDf/wC14/8CruL/KqnW/9ns8f/8/v//4OjX/z+GDf85kAD/PIwD/z2JAv8+hQD/PoEA/9C7pv/97uv////+/9Xw+v+w3ej/ls/e/+rz9///////+/z6/22mSf8qjQH/OJMA/zuQAP85iwL/PIgA/zyFAP+OSSL/nV44/7J+Vv/AkG7/7trP//7//f/9//7/6/Lr/2uoRv8tjQH/PJYA/zuTAP87kwD/PY8A/z2KAP89hAD/olkn/6RVHP+eSgj/mEgR//Ho3//+/v7/5Ozh/1GaJv8tlAD/OZcC/zuXAv84lAD/O5IC/z2PAf89iwL/OIkA/6hWFf+cTxD/pm9C/76ihP/8/v//+////8nav/8fdwL/NZsA/zeZAP83mgD/PJQB/zyUAf84jwD/PYsB/z6HAf+fXif/1r6s//79///58u//3r+g/+3i2v/+//3/mbiF/yyCAP87mgP/OpgD/zeWAP85lgD/OpEB/z+TAP9ChwH/7eHb/////v/28ej/tWwo/7tUAP+5XQ7/5M+5/////v+bsZn/IHAd/zeVAP89lgP/O5MA/zaJCf8tZTr/DyuK//3////9////0qmC/7lTAP/KZAT/vVgC/8iQWf/+//3///j//ygpx/8GGcL/ESax/xEgtv8FEMz/AALh/wAB1f///f7///z//758O//GXQL/yGYC/8RaAv/Ojlf/+/////////9QU93/BAD0/wAB//8DAP3/AAHz/wAA5f8DAtr///////v7+/+2bCT/yGMA/89mAP/BWQD/0q+D///+/////P7/Rkbg/wEA+f8AA/z/AQH5/wMA8P8AAev/AADf///7/P////7/uINQ/7lXAP/MYwL/vGIO//Lm3P/8/v//1dT2/woM5/8AAP3/AwH+/wAB/f8AAfb/BADs/wAC4P8AAAAA//z7/+LbzP+mXyD/oUwE/9Gshv/8//3/7/H5/zo/w/8AAdX/AgL6/wAA/f8CAP3/AAH2/wAA7v8AAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOfmANUBAN8AANoCA+UAAOACAOECAOwABO4AAOsBAPAAA/QABPMBAPkAAfYBAPkBAf0AAP0AAv0AA/0BAPoCAv8BAP4BA8wQBfwDAOcMCsIZBoorD7YgEQhKnrEmERFImARMoSJJjhBPnABTuQBUu8cpKABXuQJYvQBZwRVWqBxVpAJaxAJdxg5duSdZogBjyAJjzA5ivCBfpgRkyidenwJ3HzplLQJmyABmzwN2MR1wIDhencM/OgB6NAB5QwB6PgB6QQB7PAB7PQB8QAJ8PwB9PgF9PgCCLAKAQACBPhx4SSRstgWBQwOCPwGDOwCEPShstQCFPACFPgCGOQCGPAKFQQCGPQGHPgGHQgCIPACJNACJOOBGRgKJPQCKPQ2GPwmJNgKLOQGLPQGNKgKLPQGNLQOMPACNO0JvpgCPOB2FSgCPPQGPPQCQOQCQOwGROgCULQKSOwCTOACTOwCTPwCUOAGUPACVNwCWNwCWOQCWPN1TUAOWPQKXOQKXOwCZNwOYOgCaNwCbNTt8vgOaOyWRVVZ+slCDuCaaUVeOzlmQyG6QwEmmbUaoa4SivoKp0tiiG8ymN4as0YOv0tapKpmxm+ynDIW4meqqAOKuAs6wON+wCuerL/GqHuO1ANuwSvCxFvCyD++0APGyFfSzG/K1D/GxRaa70PG5DN+3X/e5EO+2TaC/3u+2T6y+1va+CfvDCqnKt/7FAu7EfOvFfLnP5N7PlvbOk7/ayczb4s/a7vbU1ejdsNHh3tvh7dri7dfo4Nzm8t/o8eHs5PPp0PHs2fLs3uvu/ejx9uvy6/rw1e/y+fnx7/fz6vv07P/58/j79P/4//b7/vn79vv7+/z7//r8+/v8/vv8//78///8//79///9/v/9//7+/v/+/P/+//3//P3//v7//f//+/7//////f///////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAAAQABAAAAj+AP9dwxXjQyRwy3YAmPAAQoMD/6iRM1TiBQxg3nRheFBBQgMDBMxNU+LixglJ37BtYXDBQQIEAbRlE7TChgpE48zpUUAhwoIBAsqVcyRCholE4aCRyNBhg4UCAHqRO/ZkBAta5CjlsLNHzpcaGma02qZsla9wlowM+nMHj5s5V1CEONPI27hbNAL5AVSnDpowVlqk4OAhWDdhh97w6UMHzpoxWkDoKKQoVzhxyBiRySNHjpouTkwZI5dsVy1m5qotEhOnDRgsULgNy6SpE6ZJxLz98sKmDJcoSJ5BChXrlatLnrphI5TFTJUlRYo9SnWKFKhRm5xFSyOFypQjQawloar0SdQoTrLIwcLRhAkRHz3+NZvFqpQqW9J4JeExRAiQH/8EBAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAADCklEQVQ4yyXSy2ucVRjA4d97zvdNJpPJbTJJE9rYaCINShZtRCFIA1bbLryBUlyoLQjqVl12W7UbN4qb1gtuYhFRRBCDBITaesFbbI3RFBLSptEY05l0ZjLfnMvrov/Bs3gAcF71x6VVHTk+o8nDH+hrH89rUK9Z9Yaen57S3wVtGaMBNGC0IegWKIDxTtVaOHVugZVmH3HX3Zz+4l+W1xvkOjuZfPsspY4CNkZELEgEIJKwYlBjEwjec/mfCMVuorVs76R8+P0KYMmP30U2dT8eIZqAR2ipRcWjEYxGSCRhV08e04oYMoxYLi97EI9YCJ0FHBYbIVGDlUBLwRlLIuYW6chEmQt/rJO09RJjhjEJEYvJYGNhkbUhw43OXtIWDFRq9G87nAaSK6sVRm8r8fzRMWbOX2Xx7ypd7ZET03sQhDOz73DqSJOrd+7HSo4QIu0Nx/4rOzx+cRXZ9+z7+uqJ+3hiepxK3fHZT2tMjXYzOtzL6dmznPzhLexgN0QlxAAYxAlqUqRmkf5j59RlNQ6MFHhgcpCTTx8EUb5e+plD7x4jjg1ANCAgrRQAdR7xKXjBlGyLYi7PxaUmb8z8xcpGHVXLHaXdjI0egKyJiQYTEhSPREVIEUBNC+Mqm+xpz3j0njLPHB2nsh1QgeG+IS48dYbD5YNoo0ZUAbVEuTUoKuBSZOarX/WhyQn6eg2+usDWf0s0tq8zNPYk+WI/Lnge++hlvlyfQ3NdECzGRWKwEEA0qNY251n69kV6+Y0kbaCZoebG2X3oU7pKoyxuXOPe945zs9DCeosGIXoBDyaLdf6ce4Hbk+/Y299ksKtAuaeNsiyw8c1LKIZ95b0MdgxA5giixACpTxEPSau6QdFfI5/2cLPmEW+JAQrtJUJzDXF1dkwHzVodJMX4HFEcQQMaFdPeM0Jb/4PUtzzaLKAhRyJFwo6lbegRNFfk819muV5dR4JBQoQdQ2xFiDmSNDHiaptamR9Gq5cQ18AledrGDpOfeI5Lq8u88smbhMRisoSAgAYghdfn5H/JkHuR1YqVZQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMzozNzoxNiswMzowMCsjukkAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMDktMTZUMTk6MDY6NTIrMDM6MDDbHvNzAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google_profile.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7PT7/3zF6/9Ptu//RbHx/0227/+Tzvb/9vv5/97h0f9JeBz/NHoA/z98Av9AfAD/PHsA/0F6AP8AAAAA/vz7/1+33/8Mp+z/FrHw/xWy8f8bs/T/Hqrx/3zE7v////7/t8qp/zF2A/87gwH/P4ID/z59AP8+egD/Q3kA/97s8v8botj/ELn3/wy58f8PtfL/D7Lw/xuz9P8vq+f/8/n///779v9KhR3/OYYA/0GFAv88hgD/QIAC/z17AP/0+/j/N6bM/wC07/8Cxf7/CsP7/wm+9v8Aqur/SrDb//7+/v///P7/VZEl/zSJAP87jQD/PYYA/0OBBf8+fQH///3//9Dp8/84sM7/CrDf/wC14/8CruL/KqnW/9ns8f/8/v//4OjX/z+GDf85kAD/PIwD/z2JAv8+hQD/PoEA/9C7pv/97uv////+/9Xw+v+w3ej/ls/e/+rz9///////+/z6/22mSf8qjQH/OJMA/zuQAP85iwL/PIgA/zyFAP+OSSL/nV44/7J+Vv/AkG7/7trP//7//f/9//7/6/Lr/2uoRv8tjQH/PJYA/zuTAP87kwD/PY8A/z2KAP89hAD/olkn/6RVHP+eSgj/mEgR//Ho3//+/v7/5Ozh/1GaJv8tlAD/OZcC/zuXAv84lAD/O5IC/z2PAf89iwL/OIkA/6hWFf+cTxD/pm9C/76ihP/8/v//+////8nav/8fdwL/NZsA/zeZAP83mgD/PJQB/zyUAf84jwD/PYsB/z6HAf+fXif/1r6s//79///58u//3r+g/+3i2v/+//3/mbiF/yyCAP87mgP/OpgD/zeWAP85lgD/OpEB/z+TAP9ChwH/7eHb/////v/28ej/tWwo/7tUAP+5XQ7/5M+5/////v+bsZn/IHAd/zeVAP89lgP/O5MA/zaJCf8tZTr/DyuK//3////9////0qmC/7lTAP/KZAT/vVgC/8iQWf/+//3///j//ygpx/8GGcL/ESax/xEgtv8FEMz/AALh/wAB1f///f7///z//758O//GXQL/yGYC/8RaAv/Ojlf/+/////////9QU93/BAD0/wAB//8DAP3/AAHz/wAA5f8DAtr///////v7+/+2bCT/yGMA/89mAP/BWQD/0q+D///+/////P7/Rkbg/wEA+f8AA/z/AQH5/wMA8P8AAev/AADf///7/P////7/uINQ/7lXAP/MYwL/vGIO//Lm3P/8/v//1dT2/woM5/8AAP3/AwH+/wAB/f8AAfb/BADs/wAC4P8AAAAA//z7/+LbzP+mXyD/oUwE/9Gshv/8//3/7/H5/zo/w/8AAdX/AgL6/wAA/f8CAP3/AAH2/wAA7v8AAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google_profile.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOfmANUBAN8AANoCA+UAAOACAOECAOwABO4AAOsBAPAAA/QABPMBAPkAAfYBAPkBAf0AAP0AAv0AA/0BAPoCAv8BAP4BA8wQBfwDAOcMCsIZBoorD7YgEQhKnrEmERFImARMoSJJjhBPnABTuQBUu8cpKABXuQJYvQBZwRVWqBxVpAJaxAJdxg5duSdZogBjyAJjzA5ivCBfpgRkyidenwJ3HzplLQJmyABmzwN2MR1wIDhencM/OgB6NAB5QwB6PgB6QQB7PAB7PQB8QAJ8PwB9PgF9PgCCLAKAQACBPhx4SSRstgWBQwOCPwGDOwCEPShstQCFPACFPgCGOQCGPAKFQQCGPQGHPgGHQgCIPACJNACJOOBGRgKJPQCKPQ2GPwmJNgKLOQGLPQGNKgKLPQGNLQOMPACNO0JvpgCPOB2FSgCPPQGPPQCQOQCQOwGROgCULQKSOwCTOACTOwCTPwCUOAGUPACVNwCWNwCWOQCWPN1TUAOWPQKXOQKXOwCZNwOYOgCaNwCbNTt8vgOaOyWRVVZ+slCDuCaaUVeOzlmQyG6QwEmmbUaoa4SivoKp0tiiG8ymN4as0YOv0tapKpmxm+ynDIW4meqqAOKuAs6wON+wCuerL/GqHuO1ANuwSvCxFvCyD++0APGyFfSzG/K1D/GxRaa70PG5DN+3X/e5EO+2TaC/3u+2T6y+1va+CfvDCqnKt/7FAu7EfOvFfLnP5N7PlvbOk7/ayczb4s/a7vbU1ejdsNHh3tvh7dri7dfo4Nzm8t/o8eHs5PPp0PHs2fLs3uvu/ejx9uvy6/rw1e/y+fnx7/fz6vv07P/58/j79P/4//b7/vn79vv7+/z7//r8+/v8/vv8//78///8//79///9/v/9//7+/v/+/P/+//3//P3//v7//f//+/7//////f///////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAAAQABAAAAj+AP9dwxXjQyRwy3YAmPAAQoMD/6iRM1TiBQxg3nRheFBBQgMDBMxNU+LixglJ37BtYXDBQQIEAbRlE7TChgpE48zpUUAhwoIBAsqVcyRCholE4aCRyNBhg4UCAHqRO/ZkBAta5CjlsLNHzpcaGma02qZsla9wlowM+nMHj5s5V1CEONPI27hbNAL5AVSnDpowVlqk4OAhWDdhh97w6UMHzpoxWkDoKKQoVzhxyBiRySNHjpouTkwZI5dsVy1m5qotEhOnDRgsULgNy6SpE6ZJxLz98sKmDJcoSJ5BChXrlatLnrphI5TFTJUlRYo9SnWKFKhRm5xFSyOFypQjQawloar0SdQoTrLIwcLRhAkRHz3+NZvFqpQqW9J4JeExRAiQH/8EBAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/google_profile.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAADCklEQVQ4yyXSy2ucVRjA4d97zvdNJpPJbTJJE9rYaCINShZtRCFIA1bbLryBUlyoLQjqVl12W7UbN4qb1gtuYhFRRBCDBITaesFbbI3RFBLSptEY05l0ZjLfnMvrov/Bs3gAcF71x6VVHTk+o8nDH+hrH89rUK9Z9Yaen57S3wVtGaMBNGC0IegWKIDxTtVaOHVugZVmH3HX3Zz+4l+W1xvkOjuZfPsspY4CNkZELEgEIJKwYlBjEwjec/mfCMVuorVs76R8+P0KYMmP30U2dT8eIZqAR2ipRcWjEYxGSCRhV08e04oYMoxYLi97EI9YCJ0FHBYbIVGDlUBLwRlLIuYW6chEmQt/rJO09RJjhjEJEYvJYGNhkbUhw43OXtIWDFRq9G87nAaSK6sVRm8r8fzRMWbOX2Xx7ypd7ZET03sQhDOz73DqSJOrd+7HSo4QIu0Nx/4rOzx+cRXZ9+z7+uqJ+3hiepxK3fHZT2tMjXYzOtzL6dmznPzhLexgN0QlxAAYxAlqUqRmkf5j59RlNQ6MFHhgcpCTTx8EUb5e+plD7x4jjg1ANCAgrRQAdR7xKXjBlGyLYi7PxaUmb8z8xcpGHVXLHaXdjI0egKyJiQYTEhSPREVIEUBNC+Mqm+xpz3j0njLPHB2nsh1QgeG+IS48dYbD5YNoo0ZUAbVEuTUoKuBSZOarX/WhyQn6eg2+usDWf0s0tq8zNPYk+WI/Lnge++hlvlyfQ3NdECzGRWKwEEA0qNY251n69kV6+Y0kbaCZoebG2X3oU7pKoyxuXOPe945zs9DCeosGIXoBDyaLdf6ce4Hbk+/Y299ksKtAuaeNsiyw8c1LKIZ95b0MdgxA5giixACpTxEPSau6QdFfI5/2cLPmEW+JAQrtJUJzDXF1dkwHzVodJMX4HFEcQQMaFdPeM0Jb/4PUtzzaLKAhRyJFwo6lbegRNFfk819muV5dR4JBQoQdQ2xFiDmSNDHiaptamR9Gq5cQ18AledrGDpOfeI5Lq8u88smbhMRisoSAgAYghdfn5H/JkHuR1YqVZQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMF+X9+UAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDAuyk9ZAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/launchpad.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEgSURBVDiNpZO7SgNBGIW/2awDaTRJs7FaEdfCylcQsbT2AcTSN/ABtvAJAj6AlfYWIjaCjYWwBC0kWISQgBd0sxfntwi6Jibrmpxy5sx3Dv/MKBERZpA1upAkCXEcTwcIggDf92m1WtMBoijCGFP48C/AqKR/j3m9AkkwT2fI+y0wPDI7D5A+HGC6xyhdR+L2IHFhg7m1UyjN/93gO2WlgV6/plTfwzyfkz4eFmvwJau2PTAvLfPRPkJeLrK9IoAsroayq0jSzQdMelvydoOkPVTZy5g/DVprADqdDp6XmdK7XVAa0zsBoLS4Px7gui6O4xCG4XBy2ETCJqq8iu01sCqbQ3UnKg52pH+Za5H/DXGMcq/Rqm6h7EouQM36nT8B8aKcEoKd93oAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/launchpad.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKUtAICAgIKCgpeXl7u7u/jDAPjDAsTExPnHE/nIFPnIF/nJGPnNKvrROvrRO8/Pz/rSPvrSQfrWT9XV1frXV9bW1vvaYvvbZfvbZ/vbaNra2tvb2/vgffzonP3tsf3tsv3vuv3vvP3yx/7zy/70z/T09P710/732/n5+fr6+v/77f/88f/++v///v///////////////////////////////////////////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZbwJZwSCwWUSejkhLQKI0OgPNJjDpNodWnxIJKWxOCgkCAqIpWMMEjshA26G9YmCo84s658LCIZ9RCIwQRRRIABmoVGAkEIEUkAgNqDQgMHVSAmEN6mi0cF52aQQA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/launchpad.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAQAAAAEABcxq3DAAABGUlEQVQ4y6WTu0rDUBzGf6eJgS7adkmdImIcnHwFEUdnH0AcfQMfIINPUPABnHR3EHERXByEUHSQ4FBCC17QNBfP36FQjaaxNt94+Phu5xwlIkIF1H4epGlKkiSzCfi+j+d5BEEwm0Acx2itq1X4Dhneo1+vQFL00xnyfgvkJzPLBLKHA3T/GGW1kaQ3clzYYG7tFIz5vxOMXVY6WOvXGO099PM52ePhdAnGPVvbI/LSMh+9I+TlYroNfkdpocwmkvbLBSa9LXm7QbIBqu4WV7AsC4AwDHHdL1J2twvKQg9OADAW94sFHMfBtm2iKMo7R10k6qLqq5huh1pjMxd3IhJ/R4aXpRT534hFu5ZeX3MLZTZKBVTV7/wJ8aKcEsn59zUAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDBfl/flAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwLspPWQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/linkedin.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAAAAAgAAAAAQAgAAAAAABABAAAEwsAABMLAAAAAAAAAAAAALKAAECygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAGCygAC/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAC/soAAv7OBAP+8kCD/2cCA/9nAgP+8kCD/z7Bg/9nAgP/PsGD/s4EA/7OBAP/ZwID/2cCA/8agQP+zgQD/soAAv7KAAL+zgQD/xqFA////////////xqFA/+zgv///////7OC//7OBAP+zgQD////////////ZwID/s4EA/7KAAL+ygAC/tIIA/8ahQP///////////8ahQP/s4L///////+zgv/+0ggD/tIIA////////////2cCA/7SCAP+ygAC/soAAv7WDAP/HokD////////////HokD/7OC////////s4L//tYMA/7WDAP///////////9rBgP+1gwD/soAAv7KAAL+2hAD/yKNA////////////yKNA/+3gv///////7eC//7aEAP+2hAD////////////awoD/toQA/7KAAL+ygAC/uIcA/8mlQP///////////8mlQP/t4b/////////////JpUD/17tw////////////zq1Q/7iHAP+ygAC/soAAv7qKAP/Lp0D////////////Lp0D/7uK//////////////////////////////////8egMP+6igD/soAAv7KAAL+9jwD/zqtA////////////zqtA/+/jv///////9/Hf//fx3////////////+PPj/+9jwD/vY8A/7KAAL+ygAC/wpUB/8KVAf/Rr0D/zagw/8KVAf/ClQH/wpUB/8KVAf/ClQH/wpUB/8KVAf/ClQH/wpUB/8KVAf+ygAC/soAAv8edFf/cwmz////////////Rr0D/x50V/8edFf/HnRX/x50V/8edFf/HnRX/x50V/8edFf/HnRX/soAAv7KAAL/Opzr/4cmF////////////17hg/86nOv/Opzr/zqc6/86nOv/Opzr/zqc6/86nOv/Opzr/zqc6/7KAAL+ygAC/1rRj/9a0Y//m0aL/5tGi/9a0Y//WtGP/1rRj/9a0Y//WtGP/1rRj/9a0Y//WtGP/1rRj/9a0Y/+ygAC/soAAr9e2b//gxIv/4MSL/+DEi//gxIv/4MSL/+DEi//gxIv/4MSL/+DEi//gxIv/4MSL/+DEi//au3j/soAAv7KAADCygACvsoAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAEAAAG0uAABwbAAAcHIAAHQuAABjawAALmMAAGF0AAA8LwAAeT4AAAk8AAByaQAAPmMAAC5hAABsZQAAb2IAAGNrKAAAACAAAABAAAAAAQAgAAAAAACAEAAAEwsAABMLAAAAAAAAAAAAAAAAAACygAAwsoAAn7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAr7KAAFAAAAAAsoAAMLKAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAFCygACfsoAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAAv7KAAL+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAC/soAAv7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAL+ygAC/s4EA/7OBAP+zgQD/s4EA/97Ij//s4L//7OC//+zgv//s4L//s4EA/7OBAP/QsGD/7OC//+zgv//s4L//7OC//8GZMP+zgQD/s4EA/7OBAP+zgQD/7OC//+zgv//s4L//7OC//97Ij/+zgQD/s4EA/7OBAP+zgQD/soAAv7KAAL+zgQD/s4EA/7OBAP+zgQD/7OC///////////////////////+zgQD/s4EA/9nAgP//////////////////////xqFA/7OBAP+zgQD/s4EA/7OBAP//////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+ygAC/soAAv7OBAP+zgQD/s4EA/7OBAP/s4L///////////////////////7OBAP+zgQD/2cCA///////////////////////GoUD/s4EA/7OBAP+zgQD/s4EA///////////////////////s4L//s4EA/7OBAP+zgQD/s4EA/7KAAL+ygAC/s4EA/7OBAP+zgQD/s4EA/+zgv///////////////////////s4EA/7OBAP/ZwID//////////////////////8ahQP+zgQD/s4EA/7OBAP+zgQD//////////////////////+zgv/+zgQD/s4EA/7OBAP+zgQD/soAAv7KAAL+zgQD/tIIA/7SCAP+0ggD/7OC///////////////////////+0ggD/tIIA/9rBgP//////////////////////x6FA/7SCAP+0ggD/tIIA/7SCAP//////////////////////7OC//7SCAP+0ggD/tIIA/7OBAP+ygAC/soAAv7OBAP+0ggD/tIIA/7SCAP/s4L///////////////////////7SCAP+0ggD/2sGA///////////////////////HoUD/tIIA/7SCAP+0ggD/tIIA///////////////////////s4L//tIIA/7SCAP+0ggD/s4EA/7KAAL+ygAC/tIIA/7WDAP+1gwD/tYMA/+3gv///////////////////////tYMA/7WDAP/awYD//////////////////////8iiQP+1gwD/tYMA/7WDAP+1gwD//////////////////////+3gv/+1gwD/tYMA/7WDAP+0ggD/soAAv7KAAL+0ggD/toQA/7aEAP+2hAD/7eC///////////////////////+2hAD/toQA/9rBgP//////////////////////yKJA/7aEAP+2hAD/toQA/7aEAP//////////////////////7eC//7aEAP+2hAD/toQA/7SCAP+ygAC/soAAv7SCAP+2hAD/toQA/7aEAP/t4L///////////////////////7aEAP+2hAD/28KA///////////////////////WunD/toQA/7aEAP+2hAD/toQA///////////////////////t4L//toQA/7aEAP+2hAD/tIIA/7KAAL+ygAC/tIMA/7eGAP+3hgD/t4YA/+3hv///////////////////////t4YA/7eGAP/bwoD//////////////////////+TRn/+3hgD/t4YA/7eGAP+7jRD//////////////////////+3hv/+3hgD/t4YA/7eGAP+0gwD/soAAv7KAAL+1hAD/uIcA/7iHAP+4hwD/7eG///////////////////////+4hwD/uIcA/9vDgP///////////////////////////86tUP+4hwD/uIcA/+TSn///////////////////////7eG//7iHAP+4hwD/uIcA/7WEAP+ygAC/soAAv7aEAP+5iQD/uYkA/7mJAP/u4b///////////////////////7mJAP+5iQD/3MSA///////////////////////////////////////////////////////////////////////gy4//uYkA/7mJAP+5iQD/toQA/7KAAL+ygAC/toUA/7uKAP+7igD/u4oA/+7iv///////////////////////u4oA/7uKAP/dxYD//////////////////////////////////////////////////////////////////////8yoQP+7igD/u4oA/7uKAP+2hQD/soAAv7KAAL+3hgD/vI0A/7yNAP+8jQD/7uK///////////////////////+8jQD/vI0A/93GgP//////////////////////8ejP///////////////////////////////////////u4r//vI0A/7yNAP+8jQD/vI0A/7eGAP+ygAC/soAAv7iHAP+9jwD/vY8A/72PAP/v47///////////////////////72PAP+9jwD/3seA///////////////////////Oq0D/486P////////////////////////////59Wf/8GWEP+9jwD/vY8A/72PAP+9jwD/uIcA/7KAAL+ygAC/uYkA/8CTAP/AkwD/wJMA/8CTAP/AkwD/wJMA/8CTAP/AkwD/wJMA/8CTAP/AkwD/wJMA/8CTAP/AkwD/wJMA/8CTAP/AkwD/xJkQ/9CuQP/QrkD/0K5A/8SZEP/AkwD/wJMA/8CTAP/AkwD/wJMA/8CTAP+5iQD/soAAv7KAAL+6iwD/wpUA/8KVAP/ClQD/wpUA/8qiIP/Rr0D/zakw/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/8KVAP/ClQD/wpUA/7qLAP+ygAC/soAAv7uNBP/EmQj/xJkI/8SZCP/av2P/////////////////6dih/8SZCP/EmQj/xJkI/8SZCP/EmQj/xJkI/8SZCP/EmQj/xJkI/8SZCP/EmQj/xJkI/8SZCP/EmQj/xJkI/8SZCP/EmQj/xJkI/8SZCP/EmQj/u40E/7KAAL+ygAC/vY8L/8eeFv/Hnhb/x54W//v58P//////////////////////2Lxf/8eeFv/Hnhb/x54W/8eeFv/Hnhb/x54W/8eeFv/Hnhb/x54W/8eeFv/Hnhb/x54W/8eeFv/Hnhb/x54W/8eeFv/Hnhb/x54W/8eeFv+9jwv/soAAv7KAAL++kRP/yqIm/8qiJv/Koib////////////////////////////l0JL/yqIm/8qiJv/Koib/yqIm/8qiJv/Koib/yqIm/8qiJv/Koib/yqIm/8qiJv/Koib/yqIm/8qiJv/Koib/yqIm/8qiJv/Koib/yqIm/76RE/+ygAC/soAAv8CUHf/Opzv/zqc7/86nO//59Of//////////////////////9e4YP/Opzv/zqc7/86nO//Opzv/zqc7/86nO//Opzv/zqc7/86nO//Opzv/zqc7/86nO//Opzv/zqc7/86nO//Opzv/zqc7/86nO//Opzv/wJQd/7KAAL+ygAC/wpYo/9KtT//SrU//0q1P/9q8cf/69er////////////jzJP/0q1P/9KtT//SrU//0q1P/9KtT//SrU//0q1P/9KtT//SrU//0q1P/9KtT//SrU//0q1P/9KtT//SrU//0q1P/9KtT//SrU//0q1P/9KtT//Clij/soAAv7KAAL/EmjL/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/9a0ZP/WtGT/1rRk/8SaMv+ygAC/soAAv8aeO//au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/2rt2/9q7dv/au3b/xp47/7KAAL+ygACfvZAh/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/gxIr/4MSK/+DEiv/GnTz/soAAv7KAAECygAD/vpMm/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/y6ZN/8umTf/Lpk3/xZw6/7KAAP+ygABwAAAAALKAAECygACvsoAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAYAAAAACAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAASgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAALKAABCygABwsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAICygACAsoAAgLKAAGCygAAQAAAAAAAAAAAAAAAAsoAAULKAAO+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygADvsoAAMAAAAACygAAgsoAA77KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA77KAABCygACPsoAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAHCygAC/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAICygAC/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAICygAC/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAICygAC/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/////////////////////////////////+zgv/+zgQD/s4EA/7OBAP/GoUD/////////////////////////////////7OC//7OBAP+zgQD/s4EA/7OBAP+zgQD/s4EA/7OBAP//////////////////////////////////////s4EA/7OBAP+zgQD/s4EA/7OBAP+zgQD/soAA/7KAAICygAC/soAA/7SCAP+0ggD/tIIA/7SCAP+0ggD/tIIA/////////////////////////////////+zgv/+0ggD/tIIA/7SCAP/HoUD/////////////////////////////////7OC//7SCAP+0ggD/tIIA/7SCAP+0ggD/tIIA/7SCAP//////////////////////////////////////tIIA/7SCAP+0ggD/tIIA/7SCAP+zgQD/soAA/7KAAICygAC/soAA/7SCAP+0ggD/tIIA/7SCAP+0ggD/tIIA/////////////////////////////////+zgv/+0ggD/tIIA/7SCAP/HoUD/////////////////////////////////7OC//7SCAP+0ggD/tIIA/7SCAP+0ggD/tIIA/7SCAP//////////////////////////////////////tIIA/7SCAP+0ggD/tIIA/7SCAP+zgQD/soAA/7KAAICygAC/soAA/7SCAP+1gwD/tYMA/7WDAP+1gwD/tYMA/////////////////////////////////+zgv/+1gwD/tYMA/7WDAP/HokD/////////////////////////////////7OC//7WDAP+1gwD/tYMA/7WDAP+1gwD/tYMA/7WDAP//////////////////////////////////////tYMA/7WDAP+1gwD/tYMA/7WDAP+zgQD/soAA/7KAAICygAC/soAA/7SCAP+1gwD/tYMA/7WDAP+1gwD/tYMA/////////////////////////////////+3gv/+1gwD/tYMA/7WDAP/IokD/////////////////////////////////7eC//7WDAP+1gwD/tYMA/7WDAP+1gwD/tYMA/7WDAP//////////////////////////////////////tYMA/7WDAP+1gwD/tYMA/7WDAP+0ggD/soAA/7KAAICygAC/soAA/7SCAP+1gwD/tYMA/7WDAP+1gwD/tYMA/////////////////////////////////+3gv/+1gwD/tYMA/7WDAP/IokD/////////////////////////////////7eC//7WDAP+1gwD/tYMA/7WDAP+1gwD/tYMA/7WDAP//////////////////////////////////////tYMA/7WDAP+1gwD/tYMA/7WDAP+0ggD/soAA/7KAAICygAC/soAA/7WDAP+2hAD/toQA/7aEAP+2hAD/toQA/////////////////////////////////+3gv/+2hAD/toQA/7aEAP/Io0D/////////////////////////////////7eC//7aEAP+2hAD/toQA/7aEAP+2hAD/toQA/7aEAP//////////////////////////////////////toQA/7aEAP+2hAD/toQA/7aEAP+0ggD/soAA/7KAAICygAC/soAA/7WDAP+2hAD/toQA/7aEAP+2hAD/toQA/////////////////////////////////+3gv/+2hAD/toQA/7aEAP/Io0D/////////////////////////////////9vDf/7aEAP+2hAD/toQA/7aEAP+2hAD/toQA/7aEAP//////////////////////////////////////toQA/7aEAP+2hAD/toQA/7aEAP+0ggD/soAA/7KAAICygAC/soAA/7WEAP+2hQD/toUA/7aFAP+2hQD/toUA/////////////////////////////////+3hv/+2hQD/toUA/7aFAP/IpED//////////////////////////////////////7uNEP+2hQD/toUA/7aFAP+2hQD/toUA/8ScMP//////////////////////////////////////toUA/7aFAP+2hQD/toUA/7aFAP+0gwD/soAA/7KAAICygAC/soAA/7aFAP+3hwD/t4cA/7eHAP+3hwD/t4cA/////////////////////////////////+3hv/+3hwD/t4cA/7eHAP/JpUD//////////////////////////////////////9vDgP+3hwD/t4cA/7eHAP+3hwD/t4cA/9vDgP//////////////////////////////////////t4cA/7eHAP+3hwD/t4cA/7eHAP+1gwD/soAA/7KAAICygAC/soAA/7eFAP+4hwD/uIcA/7iHAP+4hwD/uIcA/////////////////////////////////+3hv/+4hwD/uIcA/7iHAP/KpUD///////////////////////////////////////v47//OrVD/uIcA/7iHAP+4hwD/yqVA//v47//////////////////////////////////t4b//uIcA/7iHAP+4hwD/uIcA/7iHAP+1hAD/soAA/7KAAICygAC/soAA/7eGAP+5iAD/uYgA/7mIAP+5iAD/uYgA/////////////////////////////////+3hv/+5iAD/uYgA/7mIAP/KpkD/////////////////////////////////////////////////9vDf/+3hv//y6c/////////////////////////////////////////////l05//uYgA/7mIAP+5iAD/uYgA/7mIAP+1hAD/soAA/7KAAICygAC/soAA/7iHAP+6igD/uooA/7qKAP+6igD/uooA/////////////////////////////////+7iv/+6igD/uooA/7qKAP/Lp0D////////////////////////////////////////////////////////////////////////////////////////////////////////////UtmD/uooA/7qKAP+6igD/uooA/7qKAP+2hQD/soAA/7KAAICygAC/soAA/7mIAP+7igD/u4oA/7uKAP+7igD/u4oA/////////////////////////////////+7iv/+7igD/u4oA/7uKAP/Mp0D///////////////////////////////////////////////////////////////////////////////////////////////////////v47/+/khD/u4oA/7uKAP+7igD/u4oA/7uKAP+2hQD/soAA/7KAAICygAC/soAA/7mJAP+7jAD/u4wA/7uMAP+7jAD/u4wA/////////////////////////////////+7iv/+7jAD/u4wA/7uMAP/MqUD/////////////////////////////////8efP/////////////////////////////////////////////////////////////////93FgP+7jAD/u4wA/7uMAP+7jAD/u4wA/7uMAP+3hgD/soAA/7KAAICygAC/soAA/7qKAP+8jQD/vI0A/7yNAP+8jQD/vI0A/////////////////////////////////+7jv/+8jQD/vI0A/7yNAP/NqkD/////////////////////////////////3cWA/9GyYP//////////////////////////////////////////////////////5tSf/7yNAP+8jQD/vI0A/7yNAP+8jQD/vI0A/7yNAP+3hwD/soAA/7KAAICygAC/soAA/7uMAP++kAD/vpAA/76QAP++kAD/vpAA/////////////////////////////////+/jv/++kAD/vpAA/76QAP/Oq0D/////////////////////////////////3seA/76QAP/OrED/7+O///////////////////////////////////fx3//WumD/vpAA/76QAP++kAD/vpAA/76QAP++kAD/vpAA/76QAP+4iAD/soAA/7KAAICygAC/soAA/7yNAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/8efIP/TtFD/38mA/9/JgP/TtFD/y6Yw/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+/kgD/v5IA/7+SAP+5iQD/soAA/7KAAICygAC/soAA/72PAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP/BlAD/wZQA/8GUAP+6igD/soAA/7KAAICygAC/soAA/76QAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/GnBD/1bZQ/+HKgP/RsED/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP/ClgD/wpYA/8KWAP+6iwD/soAA/7KAAICygAC/soAA/7+SAv/EmAP/xJgD/8SYA//EmAP/xJgD/9a4Uf/7+e//////////////////9OzP/8+rMv/EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA//EmAP/xJgD/8SYA/+7jAL/soAA/7KAAICygAC/soAA/8CUCv/Fmw7/xZsO/8WbDv/Fmw7/zKcr//v58P////////////////////////////Ts0f/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv/Fmw7/xZsO/8WbDv+8jgf/soAA/7KAAICygAC/soAA/8KWEf/Inhf/yJ4X/8ieF//Inhf/486L///////////////////////////////////////VtlH/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF//Inhf/yJ4X/8ieF/+9jwz/soAA/7KAAICygAC/soAA/8OYGf/JoSH/yaEh/8mhIf/JoSH/8ufI///////////////////////////////////////hyoL/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf/JoSH/yaEh/8mhIf++kBH/soAA/7KAAICygAC/soAA/8WbI//MpC//zKQv/8ykL//MpC//5dKX///////////////////////////////////////Zu2P/zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL//MpC//zKQv/8ykL/+/khj/soAA/7KAAICygAC/soAA/8eeLv/OqD3/zqg9/86oPf/OqD3/2r5u//////////////////////////////////z68//RrUn/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/OqD3/zqg9/86oPf/AlB7/soAA/7KAAICygAC/soAA/8mhOP/RrEv/0axL/9GsS//RrEv/0axL/+LLj////////////////////////Pr0/9q7bf/RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//RrEv/0axL/9GsS//CliX/soAA/7KAAICygAC/soAA/8ukQ//UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/fxIT/6tiu//Lnzf/q2K7/2bpv/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/UsFn/1LBZ/9SwWf/DmC3/soAA/7KAAICygAC/soAA/82nTP/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/WtGX/1rRl/9a0Zf/EmjL/soAA/7KAAICygAC/soAA/8+rVf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/ZuXH/2blx/9m5cf/GnTn/soAA/7KAAICygAC/soAA/9KvX//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//cv3//3L9//9y/f//Hnz//soAA/7KAAICygACPsoAA/8OaNP/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf/hxY3/4cWN/+HFjf+9kSP/soAA/7KAAICygABAsoAA/7KAAP/EnDj/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/9e4c//XuHP/17hz/8GXL/+ygAD/soAA/7KAACAAAAAAsoAAYLKAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAA/7KAAP+ygAD/soAAYAAAAAAAAAAAAAAAALKAAECygACfsoAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAL+ygAC/soAAv7KAAJ+ygAAwAAAAAAAAAADAAAAAAAM+AIAAAAAAAT4AAAAAAAAAPwAAAAAAAAA/AAAAAAAAAEAAAAAAAAAAQQAAAAAAAABBAAAAAAAAAEIAAAAAAAAAQgAAAAAAAABDAAAAAAAAAEQAAAAAAAAARAAAAAAAAABFAAAAAAAAAEUAAAAAAAAARgAAAAAAAABHAAAAAAAAAEcAAAAAAAAASAAAAAAAAABIAAAAAAAAAEkAAAAAAAAASgAAAAAAAABKAAAAAAAAAEsAAAAAAAAASwAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAMAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAcAAAAAAAAACAAAAAAAAAAJAAAAAAAAAAoAAAAAAAAACwAAAAAAAAAMAAAAAAAAAA4AAAAAAAAADwAAAAAAAAAQAAAAAAAAABEAAAAAAAAAEgAAAAAAAAATAAAAAAAAABUAAAAAAAAAFgAAAAAAAAAXAIAAAAAAARgAwAAAAAADGQA=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/linkedin.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKUrAACAsgCBswCCtACDtQCEtgCHuACKugCPvQGVwiCQvBWdxzCgx0CgxkChxkCix0CjyDCozUClyTqnzkCny0CrzkCv0VCtzmCwz2O01mC412+213C713i72mzC3IDA2YDB2oDC2ovE4IXJ4Y/P46LR5r/g7L/g7b/h7b/i7r/j79/x9////////////////////////////////////////////////////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAaTwB9gSCwWhZqQcslUcoYYDIkUrVoxQ4lotcpIvmDwUNHhVhTodHqIQFQg7bgcMTxQuJTUSqXijg4HQwYTXBMoXIgrCwZDBRFcESeQG1wWBUMED1wPJismBARcIARDAw5cDiUrJQMDXB8DQwINXA2qJQICXB4CQwG0K7arAQG7Ab4JHh4JFx4XxMoMx0bURkLV1D9BADs=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/linkedin.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABUUlEQVQ4y52PvU7CYBiFH0wTf6IEYhxMMEETV9LJuAmzCzfgNShXAGyOLF4Ai5MTs5EyOOgiRhMJDNRgZLFSfyiU0tah9APUEOCd3nNOzvN+X4BMQQbSQIjZJysB6eO93WQkuDxTU+v0OL2uIAGhb8elohscbHmPKDX0qUESwNNXl8OddY5imwBcNT+otjrTA2qGSdO0hKl2etQMc3rAW9fi7OGVR62Nbva519qzfcHtWcQjYYrJGACJizvS+9vEIyHUzy4A0eASALnyCymlKgALAFg29O0htm+D64qiXwY4kSPI4RWvIwC2A44zBDiOAAAkzm9JXVaEjq4tep1xgDsCcGEgled3lLpG7qYuYnljVQAkwLs2ctHbff0rG1i+NwHAZP0HMGn+y8cAgNoyyJaqYs+XG5RUDVU3RMfPFVUTXoBMoQjEmW8UCcjOWQbI/wBO5aPAfdTbeQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0xNFQxNjo0ODo0NSswMzowMBaqYCMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMTRUMTY6NDg6NDUrMDM6MDBn99ifAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/livejournal.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAQAEBAQAAAAAAAoAQAARgAAABAQAAAAAAAAaAMAAG4BAAAgIBAAAAAAAOgCAADWBAAAICAAAAAAAACoDAAAvgcAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAABEQAAAAAAERERAAAAABEiHNEAAAABER3d0AAAABExHd4QAAABEzEd3hAAABEzMRERAAABEzMTOxEAABEzMTOxEAABEzMTOxEAABEdMTOxEAAAEd3TOxEAAAARHf0xEAAAABJT/dEAAAAAASUdEAAAAAAAEREAAAAAAD/+P///8D///8A///+Af///AH///gB///wA///4AP//8AH//+AD///AB///wA///8Af///AP///4H////D////KAAAABAAAAAgAAAAAQAYAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAGYzAGYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAGYzAGYzAGYzAGYzAGYzAGYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAGYzAHx6e5PB5JzW/5nK8GYzAGYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAH1GF8OJTo6NiJrX/5rO/5vT/2YzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAHxFF9Cdas6UWo2Ed5jW/57Z/5G532YzAAAAAAAAAAAAAAAAAAAAAAAAAGYzAH9IGs+caNajcLB6RH5kSYeKiYqjtn2Fi2YzAAAAAAAAAAAAAAAAAAAAAGYzAIFKG9GeadShbrSATbB/Teazf+m1fMWTXlslAGYzAAAAAAAAAAAAAAAAAGYzAIFKHdCdadShbrJ/TLOCT/vNmv/Zpv/Un5JbL2YzAAAAAAAAAAAAAAAAAGYzAH9IGtKfa9ShbrB9SrSDUfrNmv/VovrNmYhTJ2YzAAAAAAAAAAAAAAAAAGYzAGxBI5BeLdikcLF+S7KBT/rNm//UofrOmopUKGYzAAAAAAAAAAAAAAAAAGYzAGYzAMDAwH9XNZRdKcKRX/zQnf/VofnNmIdRJWYzAAAAAAAAAAAAAAAAAAAAAGYzAHhQM8DAwMDAwGs9FcCMWP/ZpfnOmYdRJGYzAAAAAAAAAAAAAAAAAAAAAAAAAGYzAHthg4VhQ////////49qS5lqOoJLHmYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAHdffntihZNwVf///8DAwGAxDmYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAHZcenxljnlSO2YzAGYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYzAGYzAGYzAGYzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4////gP///wD///4B///8Af//+AH///AB///gA///wAf//4AP//8AH///AD///wB///8A////gf///8P///8oAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABERAAAAAAAAAAAAAAAAEREREQAAAAAAAAAAAAABEREREREAAAAAAAAAAAAREREi4tERAAAAAAAAAAABERIuLi4tEAAAAAAAAAAAERES4uLi4RAAAAAAAAAAAREzEi4uLi0QAAAAAAAAABETMxLi4uLhAAAAAAAAAAERMzMSLi4uEQAAAAAAAAAREzMzEuLi4tEAAAAAAAABETMzMxIuLi4RAAAAAAAAERMzMzERERES0AAAAAAAAREzMzMROzs5ERAAAAAAABETMzMxE7Ozs5EQAAAAAAERMzMzETs7OzkRAAAAAAAREzMzMROzs7OREAAAAAABETMzMxE7Ozs5EQAAAAAAEREzMzETs7OzkRAAAAAAAREdEzMROzs7OREAAAAAABER3RMxE7Ozs5EQAAAAAAARHd3RETs7OzkRAAAAAAABER3d0ROzs7OREAAAAAAAARJR3d0TOzs5EQAAAAAAAAESUd3f0ROzkRAAAAAAAAABElEd//0REREAAAAAAAAAABJlE///3dEQAAAAAAAAAAARJlE//d0RAAAAAAAAAAAAARJlE93REAAAA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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/livejournal.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMZVAAAlWwAzZg4xYBU9ayNBbBdFfBdGfRpIfxtKgR1KgR5LgiRRhyVRhzNQeCdTiChUijtSeTVXfy9bkildlC1ekENhhUlkfjpqmXpcdktqj35fd4Nhe4Vie1Vwk45lfER6sEp9sEt+sUx/sk1/sE2AtE+Bsnt6fE+Cs1GDtE6Jw3eEjViMwIuFfYmKh1+Rwl6TxVqUzoiNjmicz2md0Gqd0Gme0Wuf0m6h1HCj1nCk2Lajin+z5ny16d+5kcDAwJjN+eTBk5nN+prN+prN+5vN+pnO+ZrO+p3Q/J/U/6HU/6HV/6LV//DKmaXZ/6bZ///Omv/Tm//WmP/WnP/Xmv/Znv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAH8ALAAAAAAQABAAAAePgH9/AYQBgoeIggEYHhCEiYgBGhwdVT4ChpCDGxVVVRkXCpmJAQ0+PgMrTUULo4eEPhETLkdKPwyuigQUOSElRElGD7mDBzY3IChCS0EOxAEJMzciJ0NOSBLPCDU3JCM7PC8AzwcyOB8WLTosxIMFNDAqUVQ97YMGKTFTT1D2gwEmgEhh8kjTv0IFDb4iFAgAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/livejournal.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAB8klEQVQ4y43TT2iScRzH8ffzPD4+/lmWYLNpE5urGKygnjEYQQRBGJM1yFOXbs+lQVu0or+XYB2iGgUFHus0wYoOO3SohKKTRbBoraW1qNDQUUuWz6M+nZRKM7/334vv7/P9fgVqpWomv1cqJtBGCbXHp/vW4bFbSeQrPP2QbxsRUTXzfL8bp1XmmdPLk8QUjy8fwlXVG7tqCgCyaOGh6SB+dQyAS/EX9A8NEdiw8b+ICHBvucK5w7tIJpN07h5jTc8OjhzVOHPhJL2BTS0RESD1sQDA5M1HeIJ9KLLIz9UKNsXK8bPH2NwCqYcYcllxdPeyd1+YtwtvsEgCkUgYqyJT0g2uTE0zn1lsCFaspf3uu04+t4xh6IRCIYxyldnZB5RKBjZFZuLUOFuDPQ2d/DkmVTO7vX4iBw8gWyyk02kkSWB4OExHh4WSAdMXr/Nyfq7eSeOcVc30e/2MREeRJYlM5j2YZXYODFIRJZbSi9y6dgNcTkjFhOaLomqmb30XI9FRbIrC3OsF5Nxz9myxs61L4tXSCpN3spCKCWJTIBUTPn/9wt2ZBLqu0+kLsD24lhMRN/sHPUQHPH+F+A8kW8iRmEnwo1jEbRdAEKFYJuhztAHUkHyW+/HbrOQLfMqVwCbybbVa/2pbF9dqE9sDWoC/AGhTr/sh3MP5AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwX5f35QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMC7KT1kAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/myopenid.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAMAEBAQAAEABAAoAQAANgAAABAQAAABAAgAaAUAAF4BAAAQEAAAAQAgAGgEAADGBgAAKAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA/wD/AP8AAP//AP///wAAd3d3d3d3AAB3d3d3d3cAAHcAAAAAdwAAd4iIiAB3AAB3iIiIAHcAAHcAAAAAdwAAd3d3d3d3AAB3d3d3d3cAAAAAAAB3AAAAB3AAAHcAAAAHcAAAdwAAAAdwAAB3AAAAB3cAB3cAAAAAd3d3cAAAAAAHd3cAAAAAAAAAAAAAAMADjafAA8ADz/PAA8Azz/PAM8Azz/PAM8ADz/PAA8AD/8/AA+fP/8/nz+fP58/nz+OP58/wH+OP+D/wH///+D8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAdmpeAK6ilgC2qp4Auq6mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAQEBAQAAAQEBAQEBAQEAAAEBAQEAAADAgICAgIEBAAABAQEBAAAAgEBAQEBBAQAAAQEBAQAAAQEBAQEBAQEAAAEBAQEAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAABAQEBAQEBAAABAQEBAQAAAQEBAQEBAQAAAQEBAQEAAAEBAQEBAQEAAAEBAQEBAAABAQEBAQEBAAAAAQEBAAAAAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBATAA42nwAPAA8/zwAPAM8/zwDPAM8/zwDPAA8/zwAPAA//PwAPnz//P58/nz+fP58/jj+fP8B/jj/g/8B////g/KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmpd/3ZqXf92al3/dmpd/3ZqXf92al3/dmpd/3ZqXf92al3/dmpd/3ZqXf92al3/AAAAAAAAAAAAAAAAAAAAAHZqXf92al38gXNn/4FzZ/+Bc2f/gXNn/4FzZ/+Bc2f/gXNn/4FzZ/92al38dmpd/wAAAAAAAAAAAAAAAAAAAAB2al3/gXNn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhnlt/3ZqXf8AAAAAAAAAAAAAAAAAAAAAdWlc/4FzZ/+6r6WBtKmelLSpnpS0qZ6UtKmelLSpnpe7sKV2AAAAAIZ5bf92al3/AAAAAAAAAAAAAAAAAAAAAHVpXP+Bc2f/tKmegayhlpSsoZaUrKGWlKyhlpSsoZaXtKmedgAAAACGeW3/dmpd/wAAAAAAAAAAAAAAAAAAAAB2al3/gXNn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhnlt/3ZqXf8AAAAAAAAAAAAAAAAAAAAAdmpd/3RoW/yGeW3/hnlt/4Z5bf+GeW3/hnlt/4Z5bf+GeW3/hnlt/3ZqXfx2al3/AAAAAAAAAAAAAAAAAAAAAHZqXf92al3/dmpd/3ZqXf92al3/dmpd/3ZqXf92al3/dmpd/3ZqXf92al3/dmpd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZqXW12al3/dmpdbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZqXZR2al3/dmpdTwAAAAAAAAAAAAAAAAAAAAB2al2Admpd/3ZqXYEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2al2Gdmpd/3ZqXYUAAAAAAAAAAAAAAAAAAAAAdmpdf3ZqXf92al2FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmpdQ3ZqXf92al2JAAAAAAAAAAAAAAAAAAAAAHZqXYl2al3/dmpdQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2al3/dmpd/3ZqXR8AAAAAAAAAAHZqXR52al3/dmpd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmpdbXZqXf92al3/dmpdy3ZqXeR2al3/dmpd/3ZqXW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2al1Ydmpd/3ZqXf92al3/dmpd/3ZqXVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAA42nwAPAA8/zwAPAE8/zwBPAM8/zwDPAA8/zwAPAA//HwAPjx//P48fnz+PH58/xj+fP8A/jj/gf8B////g/]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/myopenid.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKECAICAgMDAwP///////yH5BAEKAAIALAAAAAAQABAAAAIplI+pwKzY4hPt1AWSwzpz6E0gFpUhZZbjsxlMAMfu+cbwvH5zeu28VwAAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/myopenid.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABKElEQVQ4y2NgoBAwYhOMzSqLYGBgWI4mHLl4WtcKdLXMWDTnMjAwzIVyzzAwMPxnYGDgY2BgCNE3tX536fTRU8jqmbA4YBKUVlg8rct08bQuGQYGBnk0OewGxGaVOUOZXYundT2EiS+e1vWIgYGhC00NVhfAJP9gcdk3KO2EzwA+KH0KiwGwAEcxnAWZs3haVw4DA0MOA3bwFkq/wWYqQ2xW2X8GEsDiaV2MGC749+/fXyFBIWZ8Gj98/PCXASn6UQzg4eZlntxexYjPgNzKtv8fPn7ADIP//yE+mLdyS+OPHz+E0fQxc3Bw3E8K9+lCN5AFXYCdjQ2rzezs7FjF4QYwMkJcHh3oVk9KYKK44Nv3r3/TixvxxgbeQGRgYGD+9v0rIUtRYgkASV5SNRLmmvsAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDBfl/flAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwLspPWQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/openid.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwAnZ2dAJ6engChoaEApaWlAKampgCoqKgAqampAKqqqgCvr68AsbGxALS0tAC1tbUAuLi4ALm5uQC7u7sAvLy8AL29vQC+vr4AwMDAAMHBwQDExMQAyMjIAMvLywDMzMwA19fXANnZ2QDf398A5eXlAOnp6QDq6uoA6+vrAO3t7QDu7u4A7+/vAPLy8gAek/cAVq75APn5+QD6+voApdT8APz8/AD+/v4A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrKysrKysrKysrKysrKysrKycZDwQlKysrKysrKysrKxgCAAcEJCQrKysrKysrKwsCAxsrKyQkKysrKysrKxYCBScrKyskJCsrKysrKysCAhorKysrJCQrKysrKysrAgIbKysrKyQkKysrKysrKxACCSsrKyskJCsqHhsRCBwpBgIJIisrJCQrKxMFDBIdKykQAgAOKyQkKw0BAhchIysrKyAVCiskJCsKFB8rJyYrKysrKysrJCQrKysrKysrKysrKysrKyQkKysrKysrKysrKysrKyskJCsrKysrKysrKysrKysrKCQrKysrKysrKysrKysrKysoKysrKysrKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/openid.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKUrAJycnJ2dnZ6enveTHqGhoaWlpaampqioqKmpqaqqqq+vr7GxsbS0tLW1tfmuVri4uLm5ubu7u7y8vL29vb6+vsDAwMHBwcTExMjIyMvLy8zMzNfX19nZ2fzUpd/f3+Xl5enp6erq6uvr6+3t7e7u7u/v7/Ly8vn5+fr6+vz8/P7+/v///////////////////////////////////////////////////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZlwJVwKOwQj8fOAMlcDZbN4zMqhTZHl4VzubCIVqjTKiURACDb1SMgyJBMqYNAURJOVxVDgwIqK4hTKiEeEwkfAgIegFZEiByLTBgCBihDd0gMAgSKaU0aZggFl0woGxEFDlSqQ0EAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/openid.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABRElEQVQ4y6WSv2rCUBSHv5RLbQchgnETBbcrgpurm5vY0sfoC/SBWim41BdofAAXaXExYoM4BM0iiHhzcztIS4s0UfvbDuec7/zFpCh6e0z0X5Ag/f6Een1ICiERkJacCjhG/waIn0YYhozHY1arFe12+1dgv9/Htm2klOTzeZRSGGP2AK01ruvi+z5xHFMsFg8qZTIZJpMJnudRq9WoVCoIIRBaa3q9HpvNhlwuR7PZxLbtA0Cr1WIwGLBYLAiCgPV6TbVaRbiu+53c6XT+nNUYg5SSUqnEdDpluVwSRRHC930A6vV64rIsy8JxHBzHoVwuH15ht9udd0YpJQDD4RCl1OmARqNBoVBgu93S7XaZzWYnASxjjPnqYDQaEccx2WyWKIq4DfevfHX/kQ4AUErheR7z+ZwgCLi7fuHy5vm4Ds7VJ2jvzRjIo1onAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTEwLTAxVDIzOjM3OjE2KzAzOjAwKyO6SQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0wOS0xNlQxOTowMjowNSswMzowMF+yY+MAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/rambler.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///43////H8PDw/fDv7/3////H////jQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////jO7u7f69urn/pqKh/5yYlv+bl5X/pKCf/7e0s//m5eT/////jAAAAAAAAAAAAAAAAAAAAAAAAAAA////o9TS0v+Yk5L/iIOC/4qFhf+Wk5X/l5SW/4yIh/+HgoH/lI+O/8nGxv////+jAAAAAAAAAAAAAAAA////jNHPzv9/eXj/ioWD/6emq//Q0tz/5ePh/+fk3//T1d3/ra2z/4yHhf97dXP/y8jI/////4wAAAAAAAAAAP////Py8vL/s6+r/66uuP/4+fn///bP///zzP//9dL///fR//z89/+3ucP/u7i1//X09P/////zAAAAAP///43HxMT/yMXF//7/////////+NiP/+/Nhv/35cH/+OrO//HVmv/11Yz////5//7////AvLv/uLW0/////43////HqKSj/3lzcv/R2Or//+ej/+OsNv/y2aP/9eG3//biu//03q//57lV///hlv/X2+j/fXd3/6Gdm//////H7ezs/qWhoP+Oioz/3ODt//fFVf/goxb/7Mh7//DUlv/x1Zn/7s6J/+W0Qv/xuTz/6OPb/5qaov+ZlZT/7ezs/u7t7f6moaH/jouM/+Lp+//qs0b/14sA/+WxOv/kskT/47JD/+WyQf/gnQv/56cf/+rn5/+bmqH/mZWU/+7t7f7////Hraqp/4aBgP/U4Pb/8MuW/7VYAP/fnwv/3ZkA/9qVAP/ioxD/vWIA/+u7b//g6///ioaF/6Shn//////H////jcnHx/+JhIP/oqKm//n+///Ym0b/wnIA/+7GaP/wy3L/yoIA/8yDJf/+/fz/rbC6/4eBgP+8ubj/////jQAAAAD4+Pj+npqZ/4mCfv+vs7z/9PX0/+3JlP/qzaP/7dOx/+zFjP/38uj/ub/L/4uEgP+VkI//7u3s/wAAAAAAAAAA////qd/d3f+RjIv/iYJ//6Okqv/M1ej/8vH0//Tx8v/P2On/qqy1/4qEgf+NiIb/09DQ/////4wAAAAAAAAAAAAAAAD///+j3Nva/52ZmP+JhIP/dnBu/+Li5P/q6+z/eHNz/4eCgf+YlJP/0c/P/////6MAAAAAAAAAAAAAAAAAAAAAAAAAAP///6329vb9xcLC/52YmP/l5OT/6+rq/52ZmP+/vbz/7+7u/v///4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///43////H////8P////D////H////jQAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAOAHAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADgBwAA+B8AAA==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/rambler.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOeoAABYtQBivQBywgCCym5wdgCL13JzeXNzeCWDzHN1e3d3fXh5fwCV2gCZ3YCBhoCBh36CiX+CiYGChwud4IKDiICEi4GEioOEiQuf34OFioWFioWGioWHjIaIjYeIjBCj4haj4IyKjoyLjouMkUab2B+n546PlI+QlZKTmJWTlpOUmJaUl5SVmZWXmzas45aYnJiYnZiZnZmanjqx5aGam6KampudoUGy5UOy40Sy5EK05Uaz6p+gpJ+hpKChpaGhpqGipjy58aaioqOkqKqko1W556ump6mqrbWsqrOtrW+766uvs7iurlXF97qwrbO0t7yzr2jG7rS1uLW4u7i5vLm6vXvI7HLL8MO5t4zF7Lu8wLy9v5TJ7YbN78u/uYnO7sLCxZbL8MTEx8XFyKPN6sbGycfHyYzV9cjIy5bU8JnV8ZrV8Y/Y+LHT7c7P0c/P0aPZ8tDQ09LS1Jbh/9zS0K/e9N3V0+jVzLfh9aPn/9rb3OnYz7vi9urY0d3d3+jb18Hl99vj6OTi4u3g3OHj5d/k5/bg1OTk5eTl5s7q+Ofn6urq6+zr6szz/+zs7fvp4uzt7u3t7u3u7u7u79L1/8/2///r4O/v8NH3//Dw8Ojy9/Lx9PTx8vLy8vT09fT19Pb29vj4+Pn5+Pf8/Pz9/vn////++f///v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAAAQABAAAAjvAP8JFIiqoMGBCP+hAgUGxqFFMbZMQpUQlZ4YFwgIYnRAgoo3FAn6GRGByB1Om/YgsdAhTshQMiBA+cSFTJssmrxUOAFJoZkLQkyREBDlygAEpJw8oFLwiANDYQBgaMDgQwAlljb0QBXph4hHOwrMyIHjxoQSimiwiOTIR4hBTUBYSaPmi44ggWqwcIRqiIE+eVzAwcOnTpE5fxTYKChmzClUbLoASrTmTKlTWqRQRNVpCRNRlRpRwjQKyxRPIVG5WZDBCB1Chewk4ZAATUiFclBQ0JBihQcJJsrcJiipCpAXLXg8QTQcYcFMlwomDAgAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/rambler.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAC/ElEQVQ4y4WT3U9bdRjHP79zegr0jdKCe8MJNWEsQkidWl4mZs4aw4wxuzDRwJW3XgkX/hGriVfCxRLfsmQXusXEC3VFITIyUiSOsU06YBHmStv1FFra08Lp44XDYGLcN3nuns9z83y+8B8RkZiIzIpI/vHMikiMJ0VEvi6VSvb09IyMj1+UjY0Hkk5nZHziolyL/yS5nFkTkQsHGccB+MvkvZXzk5NTZDJZMtlHvDkURVNCcjnJ5maaO3d+V6cH+kZF5JBSagRAPYYvr67ef+ebK99SLFk8FzrKYPgkntYOamiUHyZJ3EqSuHsfw6Ez9Mbr9PR0xZRSYwrAsqza519cUg9SGQbDHfS+GuWzWxUaHTY+p05yWxjudrM+P813Mzdp9LgYGXmX5mBAaSISW1j4TaXTGTrbjnD23BDnL23wweUlZioOpiydsfgqL3+yRHgwSn9XiK2tbRKJXxGRmAb0/7G+gW3bvD34PJ/Ol/khvoK7+2nGF00+nkvjbz9Mcm2L0clHRAdOYRg6D1MpgH5HLmdGrHIFj6seo8HH1VQVToXoCThxKUEQamjMDTzL1eweH+25aG1uolDcIZczIw6Rv5cQ2C5XaQy08NThEmcO1XHM40BXinzFRmlQNVwU98ooZP9zaMFg4Iau6/y5mcG2dngrVE9bg05nk5N2r0HIa9DhdxI0NN7r9OG1TJZW1qmrrycYDNxwANfb257pDbW30XKim2Eg29XCerHMcY+B11CsZXaJtPp4/zg4OcFr0bNUKhbA9X0PCoVCwfN9fAqv7HLm3BC37TpsG5waiAYdhk0i/iPb4uCV0/243a6iUsq7b+LEvZW10fm5BG6Pm4J1hXDXSYymFmpKo7aV5drdZW4ur5HLmQT9fiKRFyb+MXFf5cXFpeGfp34hn8+jaxp+nwelFFvFHarVXbxeL72RF+nre+mrf6l84MiFnGl+mEgsqFRqk51SCRHB1dBAc3OQcLiHY0ePxJRSY09qZUxEZvP5vG2aefv/6vwX/Nh1E0n/FeUAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjM6MzQ6MDIrMDM6MDD48SXHAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTEwLTAxVDIzOjM0OjAyKzAzOjAwiaydewAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/technorati.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAIAEBAAAAAAAABoBQAAJgAAABAQAAAAAAAAaAMAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAA////AKTjuQAPtUcAALA7ACa8WQDz+/YAT8h4ADnCZwC16MYA/P79APn9+gB+15wA5ffrAG7SjwCS3asAze/YAAizQQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwIGAwMDAwMDAwMDAgMDAwMDAAgEAwMDAwMDAwIDAwMDAwwAAAEPDw8PCwQCAwMDAwMIAAAAAAAAAAAACAMDAwMGAAAAAAAAAAAAAAADAwMEAAAAAAsHAwIHDgAAAwMDAQAADAQDAwMDAwMHAAMDAgAAAAcDAwMDAwMDAw0DAwcAAAwDAwMDAwMDAwMCAwMHAAAMAwMDAwMDAwMDBAMDAgAAAAYDAwMDAwMDAwsDAwMBAAAABwMDAwMDAwYAAwIDBAAAAAABBgcHBggAAwMDAwMDAwMDAwMDAwMDAwOAAWQ8AACxRAAAmGAAAAAAAAAAFQAABFYAAAAAAAAAIAAAZCwAAETQAAANRgAAH+YAAAABAAAABoABY6D//wAAKAAAABAAAAAgAAAAAQAYAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAACwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwAAAACwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOw+1RwCwOwCwOwCwOwCwOw+1R0/IeACwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOw+1RwCwOwCwOwCwOwCwOwizQf///7Xoxia8WQCwOwCwOwCwOwCwOwCwOwCwOwCwOw+1RwCwOwCwOwCwOwCwOwCwO+X36/////n9+qTjuc3v2M3v2M3v2M3v2H7XnCa8WQ+1RwCwOwCwOwCwOwCwOwCwO83v2P///////////////////////////////////7XoxgCwOwCwOwCwOwCwO0/IePn9+v///////////////////////////////////////wCwOwCwOwCwOya8Wfn9+v////////P79n7XnDnCZwCwOw+1RznCZ5Ldq/z+/f///wCwOwCwOwCwO6Tjuf///////+X36ya8WQCwOwCwOwCwOwCwOwCwOwCwOznCZ/n9+gCwOwCwOw+1R/n9+v///////znCZwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwO27SjwCwOwCwOznCZ////////+X36wCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOw+1RwCwOwCwOznCZ////////+X36wCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOwCwOya8WQCwOwCwOw+1R/n9+v///////0/IeACwOwCwOwCwOwCwOwCwOwCwOwCwOwCwO37XnACwOwCwOwCwO6Tjuf////////P79jnCZwCwOwCwOwCwOwCwOwCwOwCwO0/IePz+/QAAAA+1RwCwOya8WfP79v///////////6TjuU/IeDnCZznCZ0/IeLXoxv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABZDwAALFEAACYYAAAAAAAAAAVAAAEVgAAAAAAAAAgAABkLAAARNAAAA1GAAAf5gAAAAEAAAAGgAFjoP//AAA=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/technorati.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMMADuwAEe1D1m8JmfCOXjIT4/SbpzXfqvdkrnjpMbotdjvzev35f///////////////yH5BAEKAA8ALAAAAAAQABAAAARZ8MlJqwxAsM0QGQORMA9gItxgrgDBmAFHsKxhDttCs8Kd7ysMILZRAQsrFGPRo+FWGo5BFRgcNiwXZ8uhjbicBG2xQSjOCoNAuGIkmjT2cAYc1oGB0p31iAAAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/technorati.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABh0lEQVQ4y6WTTyiDYRzHP+/snalHb/7EmsxcJn+uOyxJSsgBKQelODlwcnRxWG6OzpIDyRzswIG0w+hNcrIUSZKtDU3jLeydzUHe0ab58z3+fr/v5/k9354H/ikJoHtTyWh6AodwsdB+RIlZGAPb18sEwj7ukzcAlFmq6HOO46nuRZIkydy6QUbTEwCMNcwY5qeUxpTaRSiu5pwajPpps/Xzmk5lTB9FISt02IeMIe/RSF7zZ8jiqRcD4CxtQjZZALh7jhCM+gvefze8mgX8RfGXWBZw+XiCnk4CUGm101LuKQjoqR3NAjQ9QSDiM5qz7nUcwvWtuaXcw2TzHFLrBpmPokO4WOo4NrJ4SmmsnM9xeLtDKK4iZAVnaROdNcMM1k9gkoq+AgDabP143WsGpJByQgxG/Vw8hH5kVmNbmPM1Kqw2APR0kkDER51o/NLfi/rZDa8Sf4nlAixFViqtdtTYFvOhKa60s283ELKSB2AqZvpg4EcPCcgN8TcSsvL+G/8K2R9AegNdtYBxjzTlKwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMF+X9+UAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDAuyk9ZAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/twitter.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAMAICAAAAEAIACoEAAANgAAABgYAAABACAAiAkAAN4QAAAQEAAAAQAgAGgEAABmGgAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTEP3LU3D9y1O//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctTr/3LU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU4D9y1Pv/d+U//3vyf/9/PT//f////3////9/////f////3////9/////f////3////9/////f////389P/97L///dJp//3LU58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LUxD9y1O//duJ//356v/9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/PT//dh+//3LU58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTv/3flP/9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/PT//dJp//3LU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU4D924n//f////3////9/////fz0//3inv/90mn//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3Yfv/99d///f////3////97L///ctTrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1MQ/ctT7/356v/9/////f////313//9zl7//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3Vc//9/////f////389P/9y1P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU3D935T//f////3////9+er//c5e//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//356v/9/////f////3Saf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTv/3vyf/9/////f////3flP/9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//fnq//3////9/////dJp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////c5e//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3Vc//9/////f////389P/9y1P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//92H7//fXf//3////9/////ey///3LU68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//3////9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//356v/9/////f////3////9/////f////3////9/////f////3////9/////f////389P/90mn//ctTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////ctT//3LU//9y1P//ctT//3LU//9y1P//f////3////9/////f////3////9/////f////3////9/////f////3////9/PT//dVz//3LU48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3////9/////f////3////9/////f////3////9/////f////3Yfv/9y1PfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//3////9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3////9/////f////3////9/////f////3////9/////f////3////9/////fz0//3Vc//9y1OPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////ctT//3LU//9y1P//ctT//3LU//9y1P//f////3////9/////f////3////9/////f////3////9/////f////3////9/////fz0//3Saf/9y1NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//92H7//fXf//3////9/////ey///3LU68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//3////9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//92H7//f////3////9/PT//ctT/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9+er//f////3////90mn/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//356v/9/////f////3Saf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//3////9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//91XP//f////3////9/PT//ctT/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//dh+//313//9/////f////3sv//9y1OvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/PT//dJp//3LU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//3////9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3////9/////f////3////9/////f////3////9/////f////3////9/////fz0//3Yfv/9y1OfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P//f////3////9/////ctT//3LU//9y1P//ctT//3LU//9y1P//f////3////9/////f////3////9/////f////3////9/////f////3sv//90mn//ctTnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctTr/3LU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctT//389P/9/////f////3Yfv/9y1P//ctT//3LU//9y1P//dh+//3////9/////fnq//3LU98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1Ov/ey///3////9/////fXf//3Yfv/9y1P//ctT//3Yfv/9/PT//f////3////96LT//ctTnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU0D90mn//fz0//3////9/////f////3////9/////f////3////9/////fz0//3OXv/9y1MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU4/91XP//fz0//3////9/////f////3////9/////f////389P/91XP//ctTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU5/90mn//ey///389P/9/////f////389P/97L///c5e//3LU48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU0D9y1Ov/ctT//3LU//9y1P//ctT//3LU6/9y1NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAB//gAAP/gAAB/4AAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAB/gAAA/4AAAH+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAH+AAAD/gAAB/4AB//+AAf//gAH//8AD///gB///8A////////ygAAAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LUxD9y1Nw/ctTz/3Yfv/92H7//dh+//3Yfv/92H7//dh+//3Yfv/92H7//dh+//3PX9/9y1NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTMP3PX9/97L///fz0//3////9/////f////3////9/////f////3////9/////f////389P/94p7//ctTnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1Mw/dV17/389P/9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/////eKe//3LU2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9z1/f/fz0//3////9/PT//eWp//3Saf/9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//c5e//3vyf/9/////fz0//3PYM8AAAAAAAAAAAAAAAAAAAAAAAAAAP3LU2D97L///f////389P/91XP//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3OXv/9/////f////3Yfv8AAAAAAAAAAAAAAAAAAAAAAAAAAP3LU7/9/PT//f////3lqf/9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3Yfv8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3Saf/9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3Saf/9/////f////3Yfv8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//9y1P//dh+//3Yfv/92H7//dh+//3Yfv/92H7//duJ//313//9/////fz0//3LU78AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//92H7//f////3////9/////f////3////9/////f////3////9/////duJ//3LU0AAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//92H7//f////3////9/////f////3////9/////f////3////935T//ctTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//92H7//f////3////9/////f////3////9/////f////3////9+er//dJq7/3LUxAAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//90mn//eWp//3lqf/95an//eWp//3lqf/95an//ey///3////9/////fLU//3LU58AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3bif/9/////f////3Vde8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3Yfv8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9/////f////3Yfv8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3inv/9/////f////3Sau8AAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//90mn//eWp//3lqf/95an//eWp//3lqf/95an//fXf//3////9/////e/J//3LU4AAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//92H7//f////3////9/////f////3////9/////f////3////99d///c9gz/3LUxAAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3LU//9y1P//ctT//3LU//92H7//f////3////98tT//fLU//3y1P/98tT//e/J//3flP/9y1O//ctTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3Yfv/9/////f////3OXv/9y1P//ctT//3LU//95an//f////356v/9y1O//ctTgP3LU4D9y1OA/ctTgP3LUzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3PYM/9/PT//f////3y1P/9zl7//ctT//3Yfv/9/PT//f////3sv//9y1NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU1D94p7//f////3////9/////f////3////9/////fz0//3PX9/9y1MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1Of/eKe//389P/9/////f////3////99d///dV17/3LUzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTYP3PX9/92H7//dh+//3Vc//9y1Ov/ctTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AB8A8AAPAOAABwDgAAcAwAAHAMAABwDAAAcAwAAHAMAABwDAAA8AwAAHAMAABwDAAAcAwAAHAMAABwDAAAcAwAAHAMAABwDAAA8AwAA/AMAH/wDAB/8A4A//APAf/wAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU4D9y1Pf/ctT//3OXf/9zVj//c1Y//3OXf/9y1P//ctTjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3LU8/+24n///nq//////////////////////////////z0//7Yfv/9y1OPAAAAAAAAAAAAAAAAAAAAAP3LU4D+24n///z0//7Yfv/9y1P//ctT//3LU//9y1P//ctT//3Vc////PT//ctT/wAAAAAAAAAAAAAAAAAAAAD9y1Pf//nq//7Yfv/9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P///nq//3QZP8AAAAAAAAAAAAAAAAAAAAA/ctT///////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//dVz///89P/9y1P/AAAAAAAAAAAAAAAAAAAAAP3OXv///////ctT//3LU//9y1P////////////////////////89P/+2H7//ctTjwAAAAAAAAAAAAAAAAAAAAD9y1P///////3LU//9y1P//ctT/////////////////////////PT//t+U//3LU48AAAAAAAAAAAAAAAAAAAAA/ctT///////9y1P//ctT//3LU//9y1P//ctT//3LU//9y1P//dVz///89P/9y1P/AAAAAAAAAAAAAAAAAAAAAP3LU////////ctT//3LU//9y1P//ctT//3LU//9y1P//ctT//3LU////PT//c9e/wAAAAAAAAAAAAAAAAAAAAD9y1P///////3LU//9y1P//ctT//3LU//9y1P//ctT//3LU//91XP///z0//3LU/8AAAAAAAAAAAAAAAAAAAAA/ctT///////9y1P//ctT//3LU/////////////////////////z0//3Vc//9y1OPAAAAAAAAAAAAAAAAAAAAAP3LU////////ctT//3LU//9y1P///////3Vc//9y1P//ctT//3LU+/9y1OAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1P///z0//3Vc//9y1P//dVz///89P/9y1P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ctTj/7Yfv///PT///nq///89P/+2H7//ctTjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9y1OP/ctT//3QZP/9y1P//ctTjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAHAADgAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAcAAMB/AADAfwAA4P8AAP//AAA=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/twitter.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMMAFPL/VjN/V3O/V7O/V7P/WTQ/XPV/X7Y/onb/pTf/ur5//T8/////////////////yH5BAEKAA8ALAAAAAAQABAAAARP8MlJKwWgYHvPUssBcBKwGICxjCTAYC4KVy7M3MzJli8Mq7tHzQdbEC49IhBpwy0SwUESlxMxianVRSHCKgoXREipDSuo1WAJIwgEBBtJBAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/twitter.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABKklEQVQ4y6WTsU7CUBSGv1K7lBjlDTqYmOgqT1J3XgFC4gg4mpiAT6Du8iTXhIkE49LohoMO0ATpvcehhbRwISX+0/mTe797zp974J9y8iZUug80ax58LwEYDOtuqxQpVLrfmRiZJSLThcgsEelMjGTQUgCZJSLtsZZQaWmPUx8qLfvuHeVN1YUoTusoTn3gp/DsyA/wMKy7PSvApvuLyrqea067b6YbKn2yymYv4PrVFHzgw+15hcbINIEWQIUDtBqvmnv2IEDgZ6MkO0Lc1MtVkT/X8PQpAIOtDqpuuS6mi6JfdzDXh4Qo1hCjr1+4PHbYpSiGWEPNs4f4/Pgh3Jw5OyGBD7673pNthUqP7t6NTBdilW0/HAukBzSAwHdhmX1iz0nbZ2ND/wAYuaFJt3J0ogAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0xNFQxNTo0MzoyMyswMzowMPY/y6cAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMTRUMTU6NDM6MTcrMDM6MDD9olDrAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/verisign.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAQAICAAAAEACACoCAAARgAAACAgEAABAAQA6AIAAO4IAAAQEAAAAQAIAGgFAADWCwAAEBAQAAEABAAoAQAAPhEAACgAAAAgAAAAQAAAAAEACAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgHAAkJCQAUFBMAFxkUABgYFwAdHh0AICEdAAcHKQABADkAJyYnACgqJgApKigANDQtAD0/OABCQz8AAABVAAAAXQAAAGEACQlkAAEAaQAJB2gAEQ9tAAAAdAAMBXMADw9yAAAAewAMDHkAFw16ABMTdgAeHHIAGxR6ACQdfgAqKngALyp6ADMrfgBGN3wATU5NAFdYVABGQHoAS05/AGNlYgBra2oAc3VmAHBvcwB1cnkAeXl4AIB/fgB+gHwAAACFABAKiQAbF4cAAACQACEZgAAlF5IALyaDAC4oiAA1JYsAMyqIADsujwA9OoQANzSMADsxjQBCPIMARjyOAEtNhQBCQIkATEeLAEhHjgBOUIUASUaSAExMlQBQR5YAVU6XAFRMnQBbVZ4AZV6aAGlpgwB0aY4AcHGIAHVtkAB+f5sASUeiAEpIpABHQ6oAX0unAFdQogBcVqAAY2GgAGVhpgBoY6QAdnWpAHt6rQB5ZLUAeXmxAIh8rACAdrQAf4C0AIaIggCGiIYAi42HAIuKkACZmpcAmpuaAKGknACRiqoAgoG1AIeDuACNhroAkoy9AKOkogCrqqIAqKioAKyosACvq7oAtbWyALa1tQC/v78AvsC6AJCJwgCYksMAn53AAJmTzgChmMAAoJ/MAKWiwgCsqMAAqKTKAK+lzACsq8wAsKzGALeuzACurNEAt7TUAL6z1wDDxMEAzs7KANDRxwDFw9EAxsDfAMnC3gDQz9EAz9HSANPT0wDa29gA3+XRANzg2ADi49sA6OzcAM3D4gDTzOUA09LlAN7f5ADc1usA3dnrAN3V9gDg4eAA5ODlAOnp4gDm5OoA7OztAO7x5gDv8uoA9PfjAPHy7gDn4/EA8PD2APX19AD5/fIA/v/2APb1+gD79v0A/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8ArKysrKysrKysrKyLXktGSUZaYZWsrKysrKysrKysrKysrKysrKysrKxtRBIRERERERERFlyLrKysrKysrKysrKysrKysrKylRxERERI1OTkcFhUREBVsrKysrKysrKysrKysrKyspz8QEhJZi6Grq6eYf0QSERBZrKysrKysrKysrKysrGAhED17maysrKysrKysrItZERJJlqysrKysrKysrKyBERE3nqysrKysrKysrKysrKxsEhBArKysrKysrKyspxkRFoOsrKysrKxuZ6ysrKysrKxeERBLrKysrKysrKx/ERJhqaysrKysaAAAZKysrKysrJ4cERGMrKysrKysrCMSS6esrKysrJwDAAACnKysrKysrH4VEVisrKysrKyLERWKrKysrKysLgAAAABjrKysrKysqUoRI6ysrKysrGEQPpOsrKysrKcGAAAAAAanrKysrKysexEVp6ysrKyrShFZqaysrKysdQAAAAAAAGOsrKysrKyNFxOLrKysrKoZEmmsrKysrKcOAAAKBgAAAHSsrKysrJw7EV6srKysphUSbqisrKysKgAAA48sAAAAJaysrKysnkMRYaysrKymFRJnqKysrG4AAAB0rG4AAAADpKysrKyTRhFhrKysrKofEl+prKx1AAAAbqysnAAAAABurKysrJw2EXesrKysrFkRQJOsjwAABm6srKysZgAAAAx0rKypchoYmaysrKyseBIcdKmkKS6crKysrKysDgAAAAGNrKNMGjOqrKysrKymGRJPkaysrKysrKysrKyIAAAAACWHjzYaUqysrKysrKxhER5xnqysrKysrKysrKxmAQAABytdNBprrKysrKysrJcSFThypKysrKysrKysrKxmAAAmDQg0VKqsrKysrKysrFcREj90nqmsrKysrKysrKQOAAAAABObrKysrKysrKysqkcRGExviKSsrKysrKysqXQALiUAAIesrKysrKysrKysrEcRFSJQaIiTnp6UlIhuVQlNDgAAAnWsrKysrKysrKysrGsSERIWIjwoQUE8ODIxMScPC24AYqysrKysrKysrKysrItJFRESEhUVFRcXF1J6rKycC3UOrKysrKysrKysrKysrKynYSAZGRkbG1Z8rKysjylkKi0up6ysrKysrKysrKysrKysqqenpqemrKysrKyPdKwAJGWnrKysrKysrKysrKysrKysrKysrKysrKysrKysrGYILKyEeaysrKysrKysrKysrKysrKysrKysrKysrKysrHQqL1GBrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwEToasrKysrKysrKysrKysrKysrKysrKysrKysrKysrKeFfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGkAAACAAICAgADAwMAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVVVVVQzIiM0VVVVVVVVVVVVVVMREREREjRVVVVVVVVVVVQxEiIiIhESNVVVVVVVVVVRESNFVVRCESNVVVVVVVVTESRFVVVVVUMiNFVVVVVVQRJVVVVVVVVVMiNVVVVVVSEkVVVVNFVVVVMiNVVVVVQhNVVVVAA1VVVUIiRVVVVSI1VVVVAABVVVVTITVVVVQiRVVVUwAARVVVVRIlVVVTIlVVVVAAAAVVVVVCJVVVUyNVVVVAAAADVVVVQiRVVVIjVVVVAAAAAEVVVVIjVVVSFFVVUwAEMAA1VVVBI1VVUiNVVUAARUAABVVVUyNVVVIjVVQAA1VAAARVVUIkVVVTI0VAAEVVUwAARVVCFFVVUyJFQzRVVVUAAARVMiVVVVUiNFVVVVVVQAADRCI1VVVVMiRVVV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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/verisign.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMZVAAAAAAcICA4PD0cEBGgEBGQFBmsGCXwHCSAjIn4MD2oTE3AUFigoKG8ZHHgXG3EaG3UdIXkhInklKXUnJjg5OT9AQIAyNJQyNGVARVdFSYk6Pp82OE9QUI1DRolESYhMUVpbW2BbW2BjYphUV6pTXGRqaHR2daxzdqV4fax5fK56fbB9gLR/f7eFh5aVlpyVlbiPkZiZmcSNmKGioq2fob6cnb6co8KeocaenqapqM2rr7m0tby7u9q6vMHCwsy/wNu/wcvExtvFx+bCxs/Kyt/HyuLPz+XW1uPZ29jd3enb2uzf4N/j4+Lj4u7l5ujo6PXs7vjx8+318/H19P7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAH8ALAAAAAAQABAAAAe4gFSCg4SDPjaFiYIvLjWFSi0sLD1UTzkZPIRLHQUNExEJGzQmIoRGCx87T1NSSRghADODUwseTIRMAggDQ4M4E0mEUgwAJSQXgxooTxQ5giYAFFM/B1GCBkFUMQAuSQAATZUOQIIFRIIiAOkVglMQlFQWN4JPAgABwVRIBFCCKh2DQAAAMWjFhEFOCsAQ1IRDOCpHCrQg1EKBjimEikwYkUiIggcnZLDQUCCFIipLWliYIGGEkUSBAAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/verisign.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAChElEQVQ4y5WTXUiTYRTH/6vXzVVqpKxIobSY1oWCeOGSaqSRxijLIGJdiG3ix42EilBBBGJeSVB+UAyUZmVIXRgWQn4kfmbelFo2xA3tRd1o6gum7fl3Ib021o0PPDfPn/N7zjn/czRCCGKb50N/PwLfZmEusELabrCjoQHr0CBJpwOAUMCi6zs+tbUjsL4GADBmnMTRrDNYWFjA+94edL3ugL3yJsyZmQAAzd8SfLNuNNsKMdnXg90xBmgjd0Fa/42wRS/ijx9DZHExBic/Y8nrhePxk60fhRB0j4+zLMbA+5ZLfNfxhrIs06+s0quscMrlot18lvlWKwGwuaWFQgj1wq+ssizGwNqsHM54PEGiEIIzHg8jo6J4+EgCz0kS5/sGggEDDgcrEo2ccrlCgr3KCpOSkgiAtpIituVd58PUtGBA7YlTdFbdoSzLTDeZ2PriuSqWV1YQANNNJvqVVX7s7uFtnZ5r/pUtQKlWz9H+zbQam5oIgPWP6jnlchEAAdDtcVMIQVmWWbU/ltPdvSpA+sUAJO2mm4V2O4ZGhlFSWoL8GwUAgNNmM+Ji4wAA+og9CGi14MbGlgt3U9PY52hWibIsMzIqigCoCw8P6o3n6zSLJInKkk9925GcnYNRp1MFGgwGWCwWAEBeXh6M8fGqNvbUiYgjCdDv27uVgW9unrYwLd/WPVCpbo+bF3Nz1dqFEJybmKAtTMvO6ppgF4QQ7KyuYUl0NMdevqJfWQ2dhcERViQa2XjlaoimjrJrcBh1FyzQ6cKRcc2KAwcT8HP5B750dWN6dAjZ5ZW4XH0vZLk0/66zb9aN0dZnGG5vh6IsQxI7cSglGedvVSEuJeW/2/kH/Cr7Hi38ksIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDBfl/flAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwLspPWQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/vidoop.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYHYEAQkeLABogjABESpUAGiGYAB0imgBESp8AHiOhADtCswAiKroAUVjBACIqxgBCSccAY2rJACYv3QBJUd4AVF3fAG523wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDgkHAwAACg4ODgoAAAAKDg4OCwQADg4ODg4OCgARDhAAAAAGCA4QAAAAEQ4KDw4AAAAAAA8OAAAAAAAODg8OAAAAAAAPDgAAAAAADg4PDgAAAAAADw4AAAAAAA4OEQ4KAAAAEA4OAQAAABAOCgARDg4ODg4PDwIFCw4OEQAAABEPDw8RAAANDA8PEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAMGDAACAAQAAHDgAAD58AAA+fAAAPnwAABw4AACAAQAAwYMAAP//AAD//wAA//8AAP//AAA=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/vidoop.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAIQSAIEdGIwgGpghGpoiHaEjHroqIsYqIt0vJotHQpVKRLNCO59KRMdJQsFYUd5RSd9dVMlqY992bv///////////////////////////////////////////////////////yH5BAEKAB8ALAAAAAAQABAAAAVG4CeOZGmeaKqukeNGIsS8Y3TctxsMxg3bjdHjhhAeGo5DKVnKKUlMknP5HPkOj9FCga0dPw2cQQDA4YKicIGQSJ9X8Lg8BAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/vidoop.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABHElEQVQ4y82SPU8CURBFz6wSqSho2AIsNFusYGFiY7SgE2MsbEhIcH+CpT1/hZCQUFhDR0MojSRgQYBmGxoSt/AjrDsWyMYAVlvIq15yZu7cue9JJWMS5RiRurdCYHd5cUpF1eEwBGJZVOsNASjcXGswmZCK760xqWRMnFJRg1ZzTV0ODgF4fHomYeyQi8dIxRYzjcsC1XpDZPJwr0GriWtnaXe6EjrKX2jQ6y0EzDRvg8Eac+0sMr69Uh2PqM08WXVwd3ryJysnE7odr2CIZYV7/Qb7xzntv3obmVMqKrDIoJIxyZ+fafqlHxZM5z699w+mfkA5mdg4eRm6AdDudMW1swCM5j7DT58v+whAajMvZKvN8PMP/jfEqALfYSRuuiPI9dsAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTAtMTAtMDFUMjE6MzU6MzMrMDM6MDBfl/flAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwLspPWQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/wordpress.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmWYzYJlmM7+ZZjP/mWYzv5lmM7+ZZjP/mWYzv5lmM2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZZjMgmWYzz5lmM7+ZZjNQAAAAAAAAAAAAAAAAAAAAAJlmM1CZZjO/mWYzz5lmMyAAAAAAAAAAAAAAAACZZjMgmWYz75lmM3CZZjMQmWYzMJlmM5+ZZjP/mWYz/5lmM8+ZZjMQmWYzEJlmM3CZZjPvmWYzIAAAAAAAAAAAmWYzz5lmM3CZZjMwmWYzz5lmM2CZZjNwmWYz/5lmM/+ZZjOvmWYzEJlmM8+ZZjMwmWYzcJlmM88AAAAAmWYzYJlmM7+ZZjMQmWYzz5lmM+8AAAAAmWYzIJlmM/+ZZjP/mWYzYAAAAACZZjOvmWYzz5lmMxCZZjO/mWYzYJlmM7+ZZjNQmWYzcJlmM/+ZZjOfmWYzEJlmMyCZZjO/mWYz75lmMxCZZjMwmWYzYJlmM/+ZZjNwmWYzUJlmM7+ZZjP/AAAAAJlmM8+ZZjP/mWYzQJlmM2CZZjOPmWYzYJlmM5+ZZjMQmWYz35lmMxCZZjPvmWYzzwAAAACZZjP/mWYzvwAAAACZZjP/mWYz3wAAAACZZjOvmWYz35lmMxCZZjMwmWYzYJlmM/+ZZjMwmWYzn5lmM/8AAAAAmWYzv5lmM78AAAAAmWYz/5lmM4+ZZjMQmWYz/5lmM/+ZZjMwAAAAAJlmM5+ZZjP/mWYzgJlmM1CZZjP/AAAAAJlmM7+ZZjP/AAAAAJlmM8+ZZjMgmWYzYJlmM/+ZZjP/mWYzcAAAAACZZjPvmWYz/5lmM4AAAAAAmWYzzwAAAACZZjP/mWYzv5lmM1CZZjMwAAAAAJlmM5+ZZjP/mWYz/5lmMyCZZjNAmWYz/5lmM/+ZZjNQAAAAAJlmM3CZZjNQmWYzv5lmM2CZZjO/AAAAAJlmM8+ZZjPvmWYz/5lmM/+ZZjP/mWYz/5lmM/+ZZjP/mWYzIAAAAAAAAAAAmWYzv5lmM2AAAAAAmWYzz5lmM3CZZjMwmWYzz5lmM/+ZZjP/mWYz/5lmM/+ZZjP/mWYz/5lmM78AAAAAmWYzcJlmM88AAAAAAAAAAJlmMyCZZjPvmWYzcJlmMxCZZjNwmWYzz5lmM/+ZZjP/mWYzz5lmM3CZZjMQmWYzcJlmM++ZZjMgAAAAAAAAAAAAAAAAmWYzIJlmM8+ZZjO/mWYzUAAAAAAAAAAAAAAAAAAAAACZZjNQmWYzv5lmM8+ZZjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmWYzYJlmM7+ZZjP/mWYzv5lmM7+ZZjP/mWYzv5lmM2AAAAAAAAAAAAAAAAAAAAAA8A90csPDZz6AAQkJgAFleQQgb20AAHBwQAIucEgCbnRAgmljQIp0LhAIZW0gDHJhgAkva4ABPgrDwwk88A9yYQ==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/wordpress.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAIABADNmmf///yH5BAEKAAEALAAAAAAQABAAAAIyjA2px5HtQJNooUOVzndbB1YZVYVPJKVqJILPS65w567sbdYly5nvBUTFJiRMkeFpFAAAOw==]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/wordpress.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABX0lEQVQ4y62TwW2DQBBFn1EKcAmkAxAN4ApsVwC+sEfiCqJU4HBkL7YrsFOBSQErUwIlUEIO/EUrpBwiZSUkNDP/75+ZvysWJ6vaEiiAHOgU9v9XZ80lrF8FwBi4ASPQOGvuC+IdUANrYO+sGWYCgZ/AB3ABvIpE+B64Brl3IHXWDC8quAncAY8A6E+ib+us2WRV6zFppJ5HZ80ncAZifj8HANWOWdWWkaQ2WdUmzpoUCHt/BTYLJWRV+wY0QBEBuQZ21iy+A8DOWdNpsDMBUAiTR8GqEk05VOBzc0zb8ERdtOhx56wZBRiAIavaJFB1B7YhIGIyiV9VnFVtDnyp2O9+JlSsFyZfZVX70EBi4KRdH5kMc5bcV+UTxY4iqyMmg9QC9kEbSN1asV7ye9XWwNU78SmiTjc0Ap6C3g9MJjuIuHDWpN6JeyYro73HusGfOMiVyMrwX49pUVjyh+f8A/bojW0aXKwBAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTEwLTAxVDIxOjM1OjMzKzAzOjAwX5f35QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0xMC0wMVQyMTozNTozMyswMzowMC7KT1kAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yahoo.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgJqAIoCdgCaAnoAnhKCAKYijgCuLpIAskKeALpSpgC+Yq4AzHy8ANqezgDmvt4A7tLqAPz5+wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKlRFIoABWAKERERE6ADcKMzzu2hOgAAhERK8REWCWBERE36ERMHMEREvo6iEgY6hEn6Pu0mAzqkz/xjMzoDNwpERERDoAMzAKlERIoAAzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAOQAAgBkAAAAPAAAACQAAAAkAAAAIAAAACAAAAAgAAIAYAADAOAAA//8AAP//AAD//wAA]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yahoo.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMOAGoCbnYCinoCmoISno4ippIurp5CsqZSuq5ivrx8zM6e2t6+5urS7vv5/P///////yH5BAEKAA8ALAAAAAAQABAAAARb8MlJq70414SGH0cyCeSTfKggPqQ6LI6zFK3KCsbhIU4iNA1GoHA7fRSNQyMRAAQeNOOH0QNYBQ8DVvdJOKxWIoLoIy2AjATARlGDwWzchEOwglYPAlHD7/slEQA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yahoo.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABaElEQVQ4y92SsUtCcRDHP8obHR4iYmFi4CQOEk4VpGLQEFLREjRJf0BDkygYiVNzQ1SDNEmJhEOEmUGEg4HIQ4jEJMQkpEKEIgwb5D16Wn9A3XT87u5zd7/vwZ83jexkQoVeu9FGStVUCTa3GaNdjy/qUnKD2t2eCpAJFXrXO6Vfu7y/dvEGJxSICiAXrx7NMe4ZAeD+4pH0ep6m1FKBZIgMsLlNCE/lZwAOl09xLFhZ3PdQzTZoSi023wIAvNy22XbuUT55UAEtk6MIlVxdeZBSNazTd8yEncjgy60iZ7EsHerUpX6eyWFQphMG901vXGF2GVg5nuU8fEMyFldiAiIAOkO/zBd1abQ2t3no00qJKoCqWO4MIFp1ii8Y7XqVdGuZecamjHQ/PokUI5QSVZKxOCIO7H4LlGDpwKtIqsg42O27iTiGZLS5TQSyfo0g7yIfUi3XpFLL90cWnT8eksGqo9Pq8k/sC60TjgSiUNwZAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTEwLTAxVDIzOjM3OjE2KzAzOjAwKyO6SQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0wOS0xNlQxOTowNjo1MiswMzowMNse83MAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yandex.ico</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AB0d/wAqJ/8AQkP/AE5Q/wBfX/8AfHr/AISG/wCXmP8Apqn9AL6+/gDk5P8A8vL/APz//gAAAAAA7u7u7u7u///ugF7uAu7v/+7TG+4C7u//7uoD7gLu7v/u7kC+Au7u/+7tsD4C7u7v7u7jEQLu7u/u7kBWAu7u7u7oB+4C7u7u7uMM7gLu7u/u4QruAu7u7+7jDO4C7u7/7ucZ7gLu7v/u7RKJAu7v/+7uxhAH7u//7u7u7u7u//8ADwAAAAcAAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAADAAAAAwAAAAcAAAAHAAAADwAA]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yandex.ico.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOMPAP8AAP8ACf8dHf8nKv9DQv9QTv9fX/96fP+GhP+Yl/2ppv6+vv/k5P/y8v7//P///yH5BAEKAA8ALAAAAAAQABAAAARV0MlJ5buPMhMAOBM2NYGAJIAQXtMRJFJKsdIAMLG6Tp2SV5na7TebID7EyoQAKBhkSsog0NGFRgvAwAG9LgELrtVBcyi0SXKwMQ2LV8FjYdIVRWeYCAA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images.small/yandex.ico.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAA9ElEQVQ4y6WTMQrCMBSG35MuDh6hg1PAKwgOuouzSwVvoQ4O0iPYnkDwEgqCVxA6uVRwTsGp9nd4thpNscXAI+Ql7wv/nxfOkIJqjAY7bKw/D/DlSjyZEnOLmB2J+bLY/7owQ4o8oDVATcB1AX8FhAFABLgu3s+VA2YLAYTBK2cBGBADoDpSEMeVAaYH0Vmgx8NPM3OICVBtoXZ71V/FWHljmddhpeIMKehTGwZ90T0aAp5X6kHhhS0pZjafUQ74ksDJjWh/IIpORKpNQFJNh01CttvV74P7diMFqlO/kaB1oT2/vQxglQB/VbhvSPoB4H+/8wP+nNARb6BscgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMC0xMC0wMVQyMzoxMTo1MCswMzowMJnLSA8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTAtMTAtMDFUMjM6MTE6NTArMDM6MDDolvCzAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images/openid-inputicon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAO3t7eHh4srKyvz8/P5pDP9rENLS0v/28P/17tXV1dHEvPDw8M3Nzfn5+d3d3f5jA97Syvnv6MfLzcfHx/1mCPx4Kc/S1Pf189C+tP+xgv/k1N3OxfHy9NLV1/39/f///yH5BAAAAAAALAAAAAAQABAAAAVq4CeOZGme6KhlSDoexdO6H0IUR+otwUYRkMDCUwIYJhLFTyGZJACAwQcgEAQ4kVuEE2AIGAOPQQAQwXCfS8KQGAwMjIYIUSi03B7iJ+AcnmclHg4TAh0QDzIpCw4WGBUZeikDFzk0lpcjIQA7]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images/openid-providers-en.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images/openid-providers-ru.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/images/openid-providers-uk.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/openid-selector_1_2/js/openid-jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKU2ltcGxlIE9wZW5JRCBQbHVnaW4KaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wZW5pZC1zZWxlY3Rvci8KClRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLgoqLwoKdmFyIHByb3ZpZGVyczsKCnZhciBvcGVuaWQgPSB7Cgl2ZXJzaW9uOiAnMS4yJywgLy8gdmVyc2lvbiBjb25zdGFudAoJZGVtbzogZmFsc2UsCglkZW1vX3RleHQ6IG51bGwsCgljb29raWVfZXhwaXJlczogNiozMCwJLy8gNiBtb250aHMuCgljb29raWVfbmFtZTogJ29wZW5pZF9wcm92aWRlcicsCgljb29raWVfcGF0aDogJy8nLAoJCglpbWdfcGF0aDogJ2ltYWdlcy8nLAoJbGFuZzogbnVsbCwgLy8gbGFuZ3VhZ2UsIGlzIHNldCBpbiBvcGVuaWQtanF1ZXJ5LTxsYW5nPi5qcwoJc2lnbmluX3RleHQ6IG51bGwsIC8vIHRleHQgb24gc3VibWl0IGJ1dHRvbiBvbiB0aGUgZm9ybQoJaW5wdXRfaWQ6IG51bGwsCglwcm92aWRlcl91cmw6IG51bGwsCglwcm92aWRlcl9pZDogbnVsbCwKCWFsbF9zbWFsbDogZmFsc2UsIC8vIG91dHB1dCBsYXJnZSBwcm92aWRlcnMgdy8gc21hbGwgaWNvbnMKCW5vX3Nwcml0ZTogZmFsc2UsIC8vIGRvbid0IHVzZSBzcHJpdGUgaW1hZ2UKCWltYWdlX3RpdGxlOiAne3Byb3ZpZGVyfScsIC8vIGZvciBpbWFnZSB0aXRsZQoJCiAgICBpbml0OiBmdW5jdGlvbihpbnB1dF9pZCkgewogICAgICAgIHByb3ZpZGVycyA9ICQuZXh0ZW5kKHt9LCBwcm92aWRlcnNfbGFyZ2UsIHByb3ZpZGVyc19zbWFsbCk7CiAgICAgICAgCiAgICAgICAgdmFyIG9wZW5pZF9idG5zID0gJCgnI29wZW5pZF9idG5zJyk7CiAgICAgICAgCiAgICAgICAgdGhpcy5pbnB1dF9pZCA9IGlucHV0X2lkOwogICAgICAgIAogICAgICAgICQoJyNvcGVuaWRfY2hvaWNlJykuc2hvdygpOwogICAgICAgICQoJyNvcGVuaWRfaW5wdXRfYXJlYScpLmVtcHR5KCk7CiAgICAgICAgCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIC8vIGFkZCBib3ggZm9yIGVhY2ggcHJvdmlkZXIKICAgICAgICBmb3IgKGlkIGluIHByb3ZpZGVyc19sYXJnZSkgewogICAgICAgIAlpZiAodGhpcy5hbGxfc21hbGwpIHsKICAgICAgICAJCW9wZW5pZF9idG5zLmFwcGVuZCh0aGlzLmdldEJveEhUTUwoaWQsIHByb3ZpZGVyc19sYXJnZVtpZF0sICdzbWFsbCcsIGkrKykpOwkKICAgICAgICAJfSBlbHNlCiAgICAgICAgICAgCW9wZW5pZF9idG5zLmFwcGVuZCh0aGlzLmdldEJveEhUTUwoaWQsIHByb3ZpZGVyc19sYXJnZVtpZF0sICdsYXJnZScsIGkrKykpOwogICAgICAgIH0KICAgICAgICBpZiAocHJvdmlkZXJzX3NtYWxsKSB7CiAgICAgICAgCW9wZW5pZF9idG5zLmFwcGVuZCgnPGJyLz4nKTsKICAgICAgICAJCgkgICAgICAgIGZvciAoaWQgaW4gcHJvdmlkZXJzX3NtYWxsKSB7CgkgICAgICAgIAoJICAgICAgICAgICAJb3BlbmlkX2J0bnMuYXBwZW5kKHRoaXMuZ2V0Qm94SFRNTChpZCwgcHJvdmlkZXJzX3NtYWxsW2lkXSwgJ3NtYWxsJywgaSsrKSk7CgkgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICQoJ2Zvcm0ub3BlbmlkX2Zvcm0nKS5zdWJtaXQodGhpcy5zdWJtaXQpOyAvKiogQ01TTVMgT3BlbklEIE1vZHVsZSA6IENoYW5nZWQgZnJvbSBpZCBzZWxlY3RvciAjb3BlbmlkX2Zvcm0gdG8gY2xhc3Mgc2VsZWN0b3IgZm9ybS5vcGVuaWRfZm9ybSAqLwoKICAgICAgICB2YXIgYm94X2lkID0gdGhpcy5yZWFkQ29va2llKCk7CiAgICAgICAgaWYgKGJveF9pZCkgewogICAgICAgIAl0aGlzLnNpZ25pbihib3hfaWQsIHRydWUpOwogICAgICAgIH0gIAogICAgfSwKICAgIGdldEJveEhUTUw6IGZ1bmN0aW9uKGJveF9pZCwgcHJvdmlkZXIsIGJveF9zaXplLCBpbmRleCkgewogICAgCWlmICh0aGlzLm5vX3Nwcml0ZSkgewogICAgCSAgdmFyIGltYWdlX2V4dCA9IGJveF9zaXplID09ICdzbWFsbCcgPyAnLmljby5naWYnIDogJy5naWYnOwogIAkgICAgICByZXR1cm4gJzxhIHRpdGxlPSInK3RoaXMuaW1hZ2VfdGl0bGUucmVwbGFjZSgne3Byb3ZpZGVyfScsIHByb3ZpZGVyWyJuYW1lIl0pKyciIGhyZWY9ImphdmFzY3JpcHQ6b3BlbmlkLnNpZ25pbihcJycrIGJveF9pZCArJ1wnKTsiJyArCiAgICAJCQknIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGIHVybCgnICsgdGhpcy5pbWdfcGF0aCArICcuLi9pbWFnZXMuJyArIGJveF9zaXplICsgJy8nICsgYm94X2lkICsgaW1hZ2VfZXh0ICsgJykgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIiICcgKyAKICAgIAkJCSdjbGFzcz0iJyArIGJveF9pZCArICcgb3BlbmlkXycgKyBib3hfc2l6ZSArICdfYnRuIj48L2E+JzsgICAgCiAgICAJfQogICAJICAJdmFyIHggPSBib3hfc2l6ZSA9PSAnc21hbGwnID8gLWluZGV4KjI0IDogLWluZGV4KjEwMDsKICAgCSAgCXZhciB5ID0gYm94X3NpemUgPT0gJ3NtYWxsJyA/IC02MCA6IDA7CiAgICAgICAgcmV0dXJuICc8YSB0aXRsZT0iJyt0aGlzLmltYWdlX3RpdGxlLnJlcGxhY2UoJ3twcm92aWRlcn0nLCBwcm92aWRlclsibmFtZSJdKSsnIiBocmVmPSJqYXZhc2NyaXB0Om9wZW5pZC5zaWduaW4oXCcnICsgYm94X2lkICsgJ1wnKTsiJyArCiAgICAJCQknIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGIHVybCgnICsgdGhpcy5pbWdfcGF0aCArICdvcGVuaWQtcHJvdmlkZXJzLScgKyB0aGlzLmxhbmcgKyAnLnBuZyk7IGJhY2tncm91bmQtcG9zaXRpb246ICcgKyB4ICsgJ3B4ICcgKyB5ICsgJ3B4IiAnICsKICAgIAkJCSdjbGFzcz0iJyArIGJveF9pZCArICcgb3BlbmlkXycgKyBib3hfc2l6ZSArICdfYnRuIj48L2E+JzsKICAgIH0sCiAgICAvKiBQcm92aWRlciBpbWFnZSBjbGljayAqLwogICAgc2lnbmluOiBmdW5jdGlvbihib3hfaWQsIG9ubG9hZCkgewoKICAgIAl2YXIgcHJvdmlkZXIgPSBwcm92aWRlcnNbYm94X2lkXTsKICAJCWlmICghIHByb3ZpZGVyKSB7CiAgCQkJcmV0dXJuOwogIAkJfQoJCQoJCXRoaXMuaGlnaGxpZ2h0KGJveF9pZCk7CgkJdGhpcy5zZXRDb29raWUoYm94X2lkKTsKCQkKCQl0aGlzLnByb3ZpZGVyX2lkID0gYm94X2lkOwoJCXRoaXMucHJvdmlkZXJfdXJsID0gcHJvdmlkZXJbJ3VybCddOwoKCQkvLyBwcm9tcHQgdXNlciBmb3IgaW5wdXQ/CgkJaWYgKHByb3ZpZGVyWydsYWJlbCddKSB7CgkJCXRoaXMudXNlSW5wdXRCb3gocHJvdmlkZXIpOwoJCX0gZWxzZSB7CgkJCSQoJyNvcGVuaWRfaW5wdXRfYXJlYScpLmVtcHR5KCk7CgkJCWlmICghIG9ubG9hZCkgewoJCQkJJCgnZm9ybS5vcGVuaWRfZm9ybScpLnN1Ym1pdCgpOyAvKiogQ01TTVMgT3BlbklEIE1vZHVsZSA6IENoYW5nZWQgZnJvbSBpZCBzZWxlY3RvciAjb3BlbmlkX2Zvcm0gdG8gY2xhc3Mgc2VsZWN0b3IgZm9ybS5vcGVuaWRfZm9ybSAqLwoJCQl9CgkJfQogICAgfSwKICAgIC8qIFNpZ24taW4gYnV0dG9uIGNsaWNrICovCiAgICBzdWJtaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIAogICAgCXZhciB1cmwgPSBvcGVuaWQucHJvdmlkZXJfdXJsOwogICAgCWlmICh1cmwpIHsKICAgIAkJdXJsID0gdXJsLnJlcGxhY2UoJ3t1c2VybmFtZX0nLCAkKCcjb3BlbmlkX3VzZXJuYW1lJykudmFsKCkpOwogICAgCQlvcGVuaWQuc2V0T3BlbklkVXJsKHVybCk7CiAgICAJfQogICAgCWlmKG9wZW5pZC5kZW1vKSB7CiAgICAJCWFsZXJ0KG9wZW5pZC5kZW1vX3RleHQgKyAiXHJcbiIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcGVuaWQuaW5wdXRfaWQpLnZhbHVlKTsKICAgIAkJcmV0dXJuIGZhbHNlOwogICAgCX0KICAgICAgICBpZiAodXJsLmluZGV4T2YoImphdmFzY3JpcHQ6IikgPT0gMCkgewogICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKCJqYXZhc2NyaXB0OiIubGVuZ3RoKTsKICAgICAgICAgICAgZXZhbCh1cmwpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgCXJldHVybiB0cnVlOwogICAgfSwKICAgIHNldE9wZW5JZFVybDogZnVuY3Rpb24gKHVybCkgewogICAgCiAgICAJdmFyIGhpZGRlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW5wdXRfaWQpOwogICAgCWlmIChoaWRkZW4gIT0gbnVsbCkgewogICAgCQloaWRkZW4udmFsdWUgPSB1cmw7CiAgICAJfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8qKiBDTVNNUyBPcGVuSUQgTW9kdWxlIDogQ2hhbmdlZCBmcm9tIGlkIHNlbGVjdG9yICNvcGVuaWRfZm9ybSB0byBjbGFzcyBzZWxlY3RvciBmb3JtLm9wZW5pZF9mb3JtICovCiAgICAJCSQoJ2Zvcm0ub3BlbmlkX2Zvcm0nKS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSInICsgdGhpcy5pbnB1dF9pZCArICciIG5hbWU9IicgKyB0aGlzLmlucHV0X2lkICsgJyIgdmFsdWU9IicrdXJsKyciLz4nKTsKICAgIAl9CiAgICB9LAogICAgaGlnaGxpZ2h0OiBmdW5jdGlvbiAoYm94X2lkKSB7CiAgICAJCiAgICAJLy8gcmVtb3ZlIHByZXZpb3VzIGhpZ2hsaWdodC4KICAgIAl2YXIgaGlnaGxpZ2h0ID0gJCgnI29wZW5pZF9oaWdobGlnaHQnKTsKICAgIAlpZiAoaGlnaGxpZ2h0KSB7CiAgICAJCWhpZ2hsaWdodC5yZXBsYWNlV2l0aCgkKCcjb3BlbmlkX2hpZ2hsaWdodCBhJylbMF0pOwogICAgCX0KICAgIAkvLyBhZGQgbmV3IGhpZ2hsaWdodC4KICAgIAkkKCcuJytib3hfaWQpLndyYXAoJzxkaXYgaWQ9Im9wZW5pZF9oaWdobGlnaHQiPjwvZGl2PicpOwogICAgfSwKICAgIHNldENvb2tpZTogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAKCQl2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CgkJZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpKyh0aGlzLmNvb2tpZV9leHBpcmVzKjI0KjYwKjYwKjEwMDApKTsKCQl2YXIgZXhwaXJlcyA9ICI7IGV4cGlyZXM9IitkYXRlLnRvR01UU3RyaW5nKCk7CgkJCgkJZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVfbmFtZSsiPSIrdmFsdWUrZXhwaXJlcysiOyBwYXRoPSIgKyB0aGlzLmNvb2tpZV9wYXRoOwogICAgfSwKICAgIHJlYWRDb29raWU6IGZ1bmN0aW9uICgpIHsKCQl2YXIgbmFtZUVRID0gdGhpcy5jb29raWVfbmFtZSArICI9IjsKCQl2YXIgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsKCQlmb3IodmFyIGk9MDtpIDwgY2EubGVuZ3RoO2krKykgewoJCQl2YXIgYyA9IGNhW2ldOwoJCQl3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykgYyA9IGMuc3Vic3RyaW5nKDEsYy5sZW5ndGgpOwoJCQlpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsYy5sZW5ndGgpOwoJCX0KCQlyZXR1cm4gbnVsbDsKICAgIH0sCiAgICB1c2VJbnB1dEJveDogZnVuY3Rpb24gKHByb3ZpZGVyKSB7CiAgIAkKCQl2YXIgaW5wdXRfYXJlYSA9ICQoJyNvcGVuaWRfaW5wdXRfYXJlYScpOwoJCQoJCXZhciBodG1sID0gJyc7CgkJdmFyIGlkID0gJ29wZW5pZF91c2VybmFtZSc7CgkJdmFyIHZhbHVlID0gJyc7CgkJdmFyIGxhYmVsID0gcHJvdmlkZXJbJ2xhYmVsJ107CgkJdmFyIHN0eWxlID0gJyc7CgkJCgkJaWYgKGxhYmVsKSB7CgkJCWh0bWwgPSAnPHA+JyArIGxhYmVsICsgJzwvcD4nOwoJCX0KCQlpZiAocHJvdmlkZXJbJ25hbWUnXSA9PSAnT3BlbklEJykgewoJCQlpZCA9IHRoaXMuaW5wdXRfaWQ7CgkJCXZhbHVlID0gJ2h0dHA6Ly8nOwoJCQlzdHlsZSA9ICdiYWNrZ3JvdW5kOiNGRkYgdXJsKCcrdGhpcy5pbWdfcGF0aCsnb3BlbmlkLWlucHV0aWNvbi5naWYpIG5vLXJlcGVhdCBzY3JvbGwgMCA1MCU7IHBhZGRpbmctbGVmdDoxOHB4Oyc7CgkJfQoJCWh0bWwgKz0gJzxpbnB1dCBpZD0iJytpZCsnIiB0eXBlPSJ0ZXh0IiBzdHlsZT0iJytzdHlsZSsnIiBuYW1lPSInK2lkKyciIHZhbHVlPSInK3ZhbHVlKyciIC8+JyArIAoJCQkJCSc8aW5wdXQgaWQ9Im9wZW5pZF9zdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IicrdGhpcy5zaWduaW5fdGV4dCsnIi8+JzsKCQkKCQlpbnB1dF9hcmVhLmVtcHR5KCk7CgkJaW5wdXRfYXJlYS5hcHBlbmQoaHRtbCk7CgoJCSQoJyMnK2lkKS5mb2N1cygpOwogICAgfSwKICAgIHNldERlbW9Nb2RlOiBmdW5jdGlvbiAoZGVtb01vZGUpIHsKICAgIAl0aGlzLmRlbW8gPSBkZW1vTW9kZTsKICAgIH0KfTsK]]></data>
	</file>
	<file>
	  <filename>/openid-selector_1_2/README.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[T1ZFUlZJRVcKLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGlzIGEgc2ltcGxlIEphdmFzY3JpcHQgT3BlbklEIHNlbGVjdG9yLiBJdCBoYXMgYmVlbiBkZXNpZ25lZCBzbyAKdGhhdCB1c2VycyBkbyBub3QgZXZlbiBuZWVkIHRvIGtub3cgd2hhdCBPcGVuSUQgaXMgdG8gdXNlIGl0LCB0aGV5IApzaW1wbHkgc2VsZWN0IHRoZWlyIGFjY291bnQgYnkgYSByZWNvZ25pc2FibGUgbG9nby4KClVTQUdFCi0tLS0tLS0tLS0tLS0tLS0tLS0KU2VlIGRlbW8uaHRtbCBzb3VyY2UKClRST1VCTEVTSE9PVElORwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClBsZWFzZSByZW1lbWJlciBhZnRlciB5b3UgY2hhbmdlIGxpc3Qgb2YgcHJvdmlkZXJzLCB5b3UgbXVzdCBydW4gCmdlbmVyYXRlLXNwcml0ZS5qcyA8bGFuZz4gdG8gcmVmcmVzaCBzcHJpdGUgaW1hZ2UKCmdlbmVyYXRlLXNwcml0ZS5qcyByZXF1aXJlcyBJbWFnZU1hZ2ljayB0byBiZSBpbnN0YWxsZWQgYW5kIHdvcmtzCm9ubHkgaW4gV2luZG93cyAoTGludXggYW5kIEFwcGxlIHVzZXJzIGNhbiBydW4gaW4gVk0pCgpCZWZvcmUgcnVubmluZyBnZW5lcmF0ZS1zcHJpdGUuanMgZm9yIHRoZSBmaXJzdCB0aW1lLCBjaGVjayBpdHMKc291cmNlIGNvZGUgYW5kIGNvcnJlY3QgbGluZSAxNiAodmFyIGltYWdlbWFnaWNrID0gJzwuLi4+JzspIHRvIApwb2ludCB0byBJbWFnZU1hZ2ljayBpbnN0YWxsIGRpci4KCkxJQ0VOU0UKLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4KCg==]]></data>
	</file>
	<file>
	  <filename>/OpenID.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqICAgICAgQ29weXJpZ2h0IDIwMTAgSGVucmlrIExlbm5hcnRzc29uCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICovCgpnbG9iYWwgJGdDbXM7CiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgppZiAoT3BlbklEOjpHZXRDb25maWdCb29sKCdvcGVuaWQuYnVnZ3kuZ21wJykpIHsKICAgIE9wZW5JRDo6TG9nKCdPcGVuSUQubW9kdWxlLnBocCA6IEFkYXB0aW5nIHRvIGJ1Z2d5IEdNUCBpbXBsZW1lbnRhdGlvbicpOwogICAgLy8gU2VlIFJFQURNRSBmb3IgaW5mbywgcmVxdWlyZWQgYmVjYXVzZSBvZiBidWdneSBHTVAKICAgIGRlZmluZSgnQXV0aF9PcGVuSURfQlVHR1lfR01QJywgVFJVRSk7Cn0KCmlmIChPcGVuSUQ6OkdldENvbmZpZ0Jvb2woJ29wZW5pZC5pbnNlY3VyZS5yYW5kJykpIHsKICAgIE9wZW5JRDo6TG9nKCdPcGVuSUQubW9kdWxlLnBocCA6IFVzaW5nIGluc2VjdXJlIHJhbmQgZnVuY3Rpb24nKTsKICAgIC8vIFNob3VsZCB1c2UgaW5zZWN1cmUgcmFuZG9tIHNvdXJjZSBvbiB3aW5kb3dzCiAgICBkZWZpbmUoJ0F1dGhfT3BlbklEX1JBTkRfU09VUkNFJywgbnVsbCk7Cn0KCmlmIChPcGVuSUQ6OkdldENvbmZpZ0Jvb2woJ29wZW5pZC5jYS5vdmVycmlkZScpKSB7CiAgICBPcGVuSUQ6OkxvZygnT3BlbklELm1vZHVsZS5waHAgOiBPdmVycmlkaW5nIGRlZmF1bHQgQ0EgZmlsZScpOwogICAgLy8gQWRkZWQgdG8gc3VwcG9ydCBjdXJsIHdpdGggb2xkIHJvb3QgY2VydCBmaWxlCiAgICAvLyBEb3dubG9hZCBjYWNlcnQucGVtIGZyb20gaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NhZXh0cmFjdC5odG1sIGFuZCBwbGFjZSBpdCBpbiB5b3VyIE9wZW5JRCBkaXJlY3RvcnkKCiAgICBkZWZpbmUoJ0F1dGhfT3BlbklEX0NVUkxPUFRfQ0FJTkZPJywgJGNvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL21vZHVsZXMvT3BlbklEL2NhY2VydC5wZW0nKTsKfQoKZGVmaW5lKCdPcGVuSURNb2R1bGVfT1BFTklEX0RJUicsICdvcGVuaWQtcGhwLW9wZW5pZC03ODIyMjRkLycpOwoKJHBhdGhfZXh0cmEgPSBkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpKTsKJHBhdGggPSBpbmlfZ2V0KCdpbmNsdWRlX3BhdGgnKTsKJHBhdGggPSAkcGF0aF9leHRyYSAuIFBBVEhfU0VQQVJBVE9SIC4gZGlybmFtZShfX0ZJTEVfXykgLiBQQVRIX1NFUEFSQVRPUiAuICRwYXRoIC4gUEFUSF9TRVBBUkFUT1IgLiBkaXJuYW1lKF9fRklMRV9fKSAuICcvJyAuIE9wZW5JRE1vZHVsZV9PUEVOSURfRElSOwppbmlfc2V0KCdpbmNsdWRlX3BhdGgnLCAkcGF0aCk7CgpyZXF1aXJlX29uY2UgT3BlbklETW9kdWxlX09QRU5JRF9ESVIgLiAiQXV0aC9PcGVuSUQvQ29uc3VtZXIucGhwIjsKCiRkaXJuYW1lID0gZGlybmFtZShfX0ZJTEVfXyk7CnJlcXVpcmVfb25jZSgkZGlybmFtZSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliL2NsYXNzLkNNU01TRGF0YWJhc2VDb25uZWN0aW9uLnBocCcpOwpyZXF1aXJlX29uY2UgT3BlbklETW9kdWxlX09QRU5JRF9ESVIgLiAiQXV0aC9PcGVuSUQvTXlTUUxTdG9yZS5waHAiOwoKcmVxdWlyZV9vbmNlIE9wZW5JRE1vZHVsZV9PUEVOSURfRElSIC4gIkF1dGgvT3BlbklEL1NSZWcucGhwIjsKcmVxdWlyZV9vbmNlIE9wZW5JRE1vZHVsZV9PUEVOSURfRElSIC4gIkF1dGgvT3BlbklEL0FYLnBocCI7CnJlcXVpcmVfb25jZSBPcGVuSURNb2R1bGVfT1BFTklEX0RJUiAuICJBdXRoL09wZW5JRC9QQVBFLnBocCI7CgpnbG9iYWwgJHBhcGVfcG9saWN5X3VyaXM7CiRwYXBlX3BvbGljeV91cmlzID0gYXJyYXkoCiAgICBQQVBFX0FVVEhfTVVMVElfRkFDVE9SX1BIWVNJQ0FMLAogICAgUEFQRV9BVVRIX01VTFRJX0ZBQ1RPUiwKICAgIFBBUEVfQVVUSF9QSElTSElOR19SRVNJU1RBTlQKKTsKCnJlcXVpcmVfb25jZSAnZmFjZWJvb2tfMl8xXzIvZmFjZWJvb2sucGhwJzsKCmNsYXNzIE9wZW5JRCBleHRlbmRzIENNU01vZHVsZSB7CgogICAgLy8gQkVHSU4gTW9kdWxlIEludGVyZmFjZQoKICAgIGZ1bmN0aW9uIEdldE5hbWUoKSB7CiAgICAgICAgcmV0dXJuICdPcGVuSUQnOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7CiAgICAgICAgcmV0dXJuICcxLjEuMCc7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0SGVscCgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBHZXRBdXRob3IoKSB7CiAgICAgICAgcmV0dXJuICdIZW5yaWsgTGVubmFydHNzb24nOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgewogICAgICAgIHJldHVybiAnb3BlbmlkQGxlbm5hcnRzc29ucy5uZXQnOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogICAgfQoKICAgIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIEhhc0FkbWluKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsKICAgICAgICByZXR1cm4gJ3VzZXJzZ3JvdXBzJzsKICAgIH0KCiAgICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKICAgIH0KCiAgICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0RGFzaGJvYXJkT3V0cHV0KCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnZGFzaGJvYXJkX291dHB1dCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldE5vdGlmaWNhdGlvbk91dHB1dCgkcHJpb3JpdHk9MikgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7CiAgICAgICAgcmV0dXJuICIxLjAiOwogICAgfQoKICAgIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKSB7CiAgICAgICAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ29wZW5pZF91c2VybmFtZScsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ29wZW5pZF9pZGVudGlmaWVyJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWFjdCcsIENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3BhZ2UnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwcm92aWRlcicsIENMRUFOX1NUUklORyk7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbigkZXZlbnRuYW1lKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9pbmZvXycgLiAkZXZlbnRuYW1lKTsKICAgIH0KCiAgICBmdW5jdGlvbiBHZXRFdmVudEhlbHAoJGV2ZW50bmFtZSkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaGVscF8nIC4gJGV2ZW50bmFtZSk7CiAgICB9CgogICAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgICRzbWFydHkgPSAmICRnQ21zLT5HZXRTbWFydHkoKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ29wZW5pZGFjdGlvbmlkJywgJGlkKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ29wZW5pZGFjdGlvbnBhcmFtcycsICRwYXJhbXMpOwogICAgICAgICRzbWFydHktPmFzc2lnbignb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGgnLCAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIC4gJy9tb2R1bGVzL09wZW5JRC9qUXVlcnlPcGVuSWRQbHVnaW4nKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ29wZW5pZF9tb2R1bGVfcGF0aCcsICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gLiAnL21vZHVsZXMvT3BlbklEJyk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdvcGVuaWRfc2VsZWN0b3JfcGF0aCcsICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gLiAnL21vZHVsZXMvT3BlbklEL29wZW5pZC1zZWxlY3Rvcl8xXzInKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJHRoaXMtPkdldE5hbWUoKSwgJHRoaXMpOwogICAgICAgIHBhcmVudDo6RG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwogICAgfQoKICAgIC8vIEVORCBNb2R1bGUgSW50ZXJmYWNlCgogICAgZnVuY3Rpb24gX0dldEFzc29jaWF0aW9uc1RhYmxlTmFtZSgpIHsKICAgICAgICByZXR1cm4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9vcGVuaWRfYXNzb2NpYXRpb25zIjsKICAgIH0KCiAgICBmdW5jdGlvbiBfR2V0Tm9uY2VzVGFibGVOYW1lKCkgewogICAgICAgIHJldHVybiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX29wZW5pZF9ub25jZXMiOwogICAgfQoKICAgIGZ1bmN0aW9uIF9HZXRTdG9yZU15c3FsKCkgewoKICAgICAgICAvLyBDcmVhdGUgZGF0YWJhc2UgY29ubmVjdGlvbiBiYXNlZCBvbiBDTVNNUyBjb25uZWN0aW9uCiAgICAgICAgJGRiID0gbmV3IENNU01TRGF0YWJhc2VDb25uZWN0aW9uKCk7CgogICAgICAgIC8vIGNyZWF0ZSBNeVNRTCBkYXRhYmFzZSBzdG9yYWdlIGFyZWEgZm9yIE9wZW5JRCBkYXRhCiAgICAgICAgJHN0b3JlID0gbmV3IEF1dGhfT3BlbklEX015U1FMU3RvcmUoJGRiLCAkdGhpcy0+X0dldEFzc29jaWF0aW9uc1RhYmxlTmFtZSgpLCAkdGhpcy0+X0dldE5vbmNlc1RhYmxlTmFtZSgpKTsKCiAgICAgICAgcmV0dXJuICRzdG9yZTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gT3BlbklEIGNvbnN1bWVyCiAgICAgKiBAcmV0dXJuIEF1dGhfT3BlbklEX0NvbnN1bWVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdldENvbnN1bWVyKCkgewogICAgICAgICRzdG9yZSA9ICR0aGlzLT5fR2V0U3RvcmVNeXNxbCgpOwogICAgICAgICRjb25zdW1lciA9IG5ldyBBdXRoX09wZW5JRF9Db25zdW1lcigkc3RvcmUpOwogICAgICAgIHJldHVybiAkY29uc3VtZXI7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2NoZW1lKCkgewogICAgICAgICRzY2hlbWUgPSAnaHR0cCc7CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSBhbmQgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJykgewogICAgICAgICAgICAkc2NoZW1lIC49ICdzJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzY2hlbWU7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWRlbnRpdHlfdXJsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm92aWRlcgogICAgICogQHJldHVybiBpbnQgdGhlIHVpZCBvZiB0aGUgdXNlciwgZmFsc2UgaWYgbm90IGZvdW5kCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdldFVzZXJJZCgkaWRlbnRpdHlfdXJsKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgIC8qIEB2YXIgJGRiIEFET0Nvbm5lY3Rpb24gKi8KICAgICAgICAkZGIgPSAmICR0aGlzLT5HZXREYigpOwogICAgICAgICRwcm92aWRlciA9ICR0aGlzLT5fR2V0UHJvdmlkZXJJZCgkaWRlbnRpdHlfdXJsKTsKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGlkIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfb3BlbmlkX3VzZXJzIHdoZXJlIG9wZW5pZF9pZGVudGl0eSA9ID8gYW5kIHByb3ZpZGVyID0gPyI7CiAgICAgICAgJHRoaXMtPkxvZygkcXVlcnkgLiAiICIgLiAkaWRlbnRpdHlfdXJsIC4gIiAiIC4gJHByb3ZpZGVyKTsKICAgICAgICAvKiBAdmFyICRyZXN1bHQgcGVhcl9SZXN1bHRTZXQgKi8KICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZW50aXR5X3VybCwgJHByb3ZpZGVyKSk7CiAgICAgICAgaWYgKCEkcmVzdWx0IHx8ICRyZXN1bHQtPk51bVJvd3MoKSA9PSAwKSB7CiAgICAgICAgICAgICR0aGlzLT5Mb2coIkNvdWxkIG5vdCBmaW5kIHVzZXIgZm9yIGlkZW50aXR5ICIgLiAkaWRlbnRpdHlfdXJsIC4gIiBhbmQgcHJvdmlkZXIgIiAuICRwcm92aWRlcik7CiAgICAgICAgfQogICAgICAgICRycyA9ICRyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgICAgcmV0dXJuICRycyA/ICRyc1snaWQnXSA6IEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhcnJheSBjb250YWluaW5nIG9uZSBhcnJheSBmb3IgZWFjaCBPcGVuSUQgcHJvdmlkZXIgdGhlIHVzZXIKICAgICAqIGhhcyByZWdpc3RlcmVkLiBBcnJheSB2YWx1ZXMgYXJlCiAgICAgKiAgIHByb3ZpZGVyIDogVGhlIGlkIG9mIHRoZSBPcGVuSUQgcHJvdmlkZXIKICAgICAqICAgb3BlbmlkX2lkZW50aXR5IDogVGhlIGlkZW50aWZpZXIgc3VwcGxpZWQgYnkgdGhlIHByb3ZpZGVyIHVwb24gc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbgogICAgICogICBlbWFpbCA6IFRoZSB1c2VyIGVtYWlsIGlmIHNlbnQgYnkgdGhlIE9wZW5JRCBwcm92aWRlcgogICAgICoKICAgICAqIFJldHVybnMgZW1wdHkgYXJyYXkgaWYgdXNlciBpcyBub3QgbG9nZ2VkIGluCiAgICAgKiAKICAgICAqIEByZXR1cm4gYXJyYXkgCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdldFJlZ2lzdGVyZWRPcGVuSURzKCkgewogICAgICAgICRvcGVuaWRzID0gYXJyYXkoKTsKICAgICAgICBnbG9iYWwgJGdDbXM7CiAgICAgICAgLyogQHZhciAkZmV1IEZyb250RW5kVXNlcnMgKi8KICAgICAgICAkZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgICAgaWYgKCEkZmV1LT5Mb2dnZWRJbigpKSB7CiAgICAgICAgICAgIHJldHVybiAkb3BlbmlkczsKICAgICAgICB9CiAgICAgICAgJHVpZCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKICAgICAgICAvKiBAdmFyICRkYiBBRE9Db25uZWN0aW9uICovCiAgICAgICAgJGRiID0gJiAkdGhpcy0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIG9wZW5pZF9pZGVudGl0eSwgcHJvdmlkZXIsIGVtYWlsIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfb3BlbmlkX3VzZXJzIHdoZXJlIGlkID0gPyI7CiAgICAgICAgJHRoaXMtPkxvZygkcXVlcnkgLiAiICIgLiAkdWlkKTsKICAgICAgICAvKiBAdmFyICRyZXN1bHQgcGVhcl9SZXN1bHRTZXQgKi8KICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHVpZCkpOwogICAgICAgIGlmICghJHJlc3VsdCB8fCAkcmVzdWx0LT5OdW1Sb3dzKCkgPT0gMCkgewogICAgICAgICAgICAkdGhpcy0+TG9nKCJObyBwcm92aWRlcnMgcmVnaXN0ZXJlZCBmb3IgdXNlciAiIC4gJHVpZCk7CiAgICAgICAgICAgIHJldHVybiAkb3BlbmlkczsKICAgICAgICB9CiAgICAgICAgZm9yICgkaW5kZXggPSAwOyAkaW5kZXggPCAkcmVzdWx0LT5OdW1Sb3dzKCk7ICRpbmRleCsrKSB7CiAgICAgICAgICAgICRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpOwogICAgICAgICAgICAkb3Blbmlkc1tdID0gJHJvdzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvcGVuaWRzOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgYW4gT3BlbklEIGlkZW50aXR5IHNlcnZlZCBieSBhIHByb3ZpZGVyIHdpdGggYSB1c2VyLgogICAgICoKICAgICAqIEBwYXJhbSA8dHlwZT4gJHVpZCBUaGUgdW5pcXVlIHVzZXIgaWRlbnRpZmllcgogICAgICogQHBhcmFtIDx0eXBlPiAkaWRlbnRpdHlfdXJsIFRoZSBpZGVudGl0eSBVUkwgcHJvdmlkZWQgYnkgT3BlbklECiAgICAgKiBAcGFyYW0gc3RyaW5nIGVtYWlsIFRoZSB1c2VycyBlbWFpbCwgY2FuIGJlIGVtcHR5CiAgICAgKi8KICAgIGZ1bmN0aW9uIFJlZ2lzdGVyT3BlbklEKCR1aWQsICRpZGVudGl0eV91cmwsICRlbWFpbCA9ICcnKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgIC8qIEB2YXIgJGRiIEFET0Nvbm5lY3Rpb24gKi8KICAgICAgICAkZGIgPSAmICR0aGlzLT5HZXREYigpOwogICAgICAgICRwcm92aWRlciA9ICR0aGlzLT5fR2V0UHJvdmlkZXJJZCgkaWRlbnRpdHlfdXJsKTsKICAgICAgICAkdGhpcy0+TG9nKCJSZWdpc3Rlck9wZW5JRCA6IHVpZCA9ICR1aWQgdXJsID0gJGlkZW50aXR5X3VybCBlbWFpbCA9ICRlbWFpbCBwcm92aWRlciA9ICRwcm92aWRlciIpOwogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgQ09VTlQoKikgQVMgY291bnQgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9vcGVuaWRfdXNlcnMgd2hlcmUgaWQgPSA/IGFuZCBwcm92aWRlciA9ID8iOwogICAgICAgICRycyA9ICRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJHVpZCwgJHByb3ZpZGVyKSk7CiAgICAgICAgT3BlbklEOjpMb2coInJlc3VsdCA6ICIgLiBwcmludF9yKCRycywgVFJVRSkpOwogICAgICAgICRyZWdpc3RlcmVkID0gJHJzICYmICRyc1snY291bnQnXSA+IDA7CiAgICAgICAgT3BlbklEOjpMb2coInJlZ2lzdGVyZWQgOiAiIC4gcHJpbnRfcigkcmVnaXN0ZXJlZCwgVFJVRSkpOwogICAgICAgIGlmICgkcmVnaXN0ZXJlZCkgewogICAgICAgICAgICAkcXVlcnkgPSAiVVBEQVRFICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX29wZW5pZF91c2VycwogICAgICAgICAgICAgICAgIFNFVCBvcGVuaWRfaWRlbnRpdHkgPSA/LCBlbWFpbCA9ID8gd2hlcmUgaWQgPSA/IGFuZCBwcm92aWRlciA9ID8iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9vcGVuaWRfdXNlcnMKICAgICAgICAgICAgICAgIChvcGVuaWRfaWRlbnRpdHksIGVtYWlsLCBpZCwgcHJvdmlkZXIpIFZBTFVFUyAoPywgPywgPywgPykiOwogICAgICAgIH0KICAgICAgICBPcGVuSUQ6OkxvZygicXVlcnkgOiAiIC4gJHF1ZXJ5KTsKICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkZW50aXR5X3VybCwgJGVtYWlsLCAkdWlkLCAkcHJvdmlkZXIpKTsKICAgICAgICBpZiAoISRyZXN1bHQpIHsKICAgICAgICAgICAgZWNobyAiREVCVUc6IFNRTCA9ICIgLiAkZGItPnNxbCAuICI8YnIvPiI7CiAgICAgICAgICAgIGRpZSgkZGItPkVycm9yTXNnKCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcGFyYW0gbG9uZyAkdWlkIFRoZSB1bmlxdWUgdXNlciBpZGVudGlmaWVyCiAgICAgKiBAcGFyYW0gU3RyaW5nICRwcm92aWRlciBUaGUgbmFtZSBvZiB0aGUgT3BlbklEIHByb3ZpZGVyCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVFJVRSBpZiBzdWNjZXNmdWwsIEZBTFNFIG90aGVyd2lzZQogICAgICovCiAgICBmdW5jdGlvbiBSZW1vdmVPcGVuSUQoJHVpZCwgJHByb3ZpZGVyKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgIC8qIEB2YXIgJGRiIEFET0Nvbm5lY3Rpb24gKi8KICAgICAgICAkZGIgPSAmICR0aGlzLT5HZXREYigpOwogICAgICAgICR0aGlzLT5Mb2coIlJlbW92ZU9wZW5JRCA6IHVpZCA9ICR1aWQgcHJvdmlkZXIgPSAkcHJvdmlkZXIiKTsKICAgICAgICAkcXVlcnkgPSAiREVMRVRFIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfb3BlbmlkX3VzZXJzIHdoZXJlIGlkID0gPyBhbmQgcHJvdmlkZXIgPSA/IjsKICAgICAgICBPcGVuSUQ6OkxvZygicXVlcnkgOiAiIC4gJHF1ZXJ5KTsKICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHVpZCwgJHByb3ZpZGVyKSk7CiAgICAgICAgaWYgKCEkcmVzdWx0KSB7CiAgICAgICAgICAgIGVjaG8gIkRFQlVHOiBTUUwgPSAiIC4gJGRiLT5zcWwgLiAiPGJyLz4iOwogICAgICAgICAgICAkdGhpcy0+TG9nKCJSZW1vdmVPcGVuSUQgOiBDb3VsZCBub3QgcmVtb3ZlIHByb3ZpZGVyICRwcm92aWRlciBmb3IgdXNlciAkdWlkLiBDYXVzZSA6ICIgLiAkZGItPnNxbCk7CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZGVudGl0eSB0aGUgb3BlbklEIGlkZW50aXR5IHRoZSB1c2VyIGhhcyBwcm92aWRlZAogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIE9wZW5JRCBwcm92aWRlciBsaWtlICdnb29nbGUnIG9yICdvcGVuaWQnCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9HZXRQcm92aWRlcklkKCRpZGVudGl0eSkgewogICAgICAgIGlmIChzdWJzdHJfY291bnQoJGlkZW50aXR5LCAnLnlhaG9vLmNvbS8nKSkgewogICAgICAgICAgICByZXR1cm4gJ3lhaG9vJzsKICAgICAgICB9IGVsc2UgaWYgKHN1YnN0cl9jb3VudCgkaWRlbnRpdHksICcuZ29vZ2xlLmNvbS8nKSkgewogICAgICAgICAgICByZXR1cm4gJ2dvb2dsZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdWJzdHJfY291bnQoJGlkZW50aXR5LCAnLm15b3BlbmlkLmNvbScpKSB7CiAgICAgICAgICAgIHJldHVybiAnbXlvcGVuaWQnOwogICAgICAgIH0gZWxzZSBpZiAoc3Vic3RyX2NvdW50KCRpZGVudGl0eSwgJy5hb2wuY29tLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnYW9sJzsKICAgICAgICB9IGVsc2UgaWYgKHN1YnN0cl9jb3VudCgkaWRlbnRpdHksICdteXNwYWNlLmNvbScpKSB7CiAgICAgICAgICAgIHJldHVybiAnbXlzcGFjZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdWJzdHJfY291bnQoJGlkZW50aXR5LCAnZmFjZWJvb2s6JykpIHsKICAgICAgICAgICAgcmV0dXJuICdmYWNlYm9vayc7CiAgICAgICAgfSBlbHNlIGlmIChzdWJzdHJfY291bnQoJGlkZW50aXR5LCAndHdpdHRlcjonKSkgewogICAgICAgICAgICByZXR1cm4gJ3R3aXR0ZXInOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAnb3BlbmlkJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvdmlkZXIgVGhlIGlkIGZvciB0aGUgcHJvdmlkZXIKICAgICAqIEByZXR1cm4gPHR5cGU+CiAgICAgKi8KICAgIGZ1bmN0aW9uIERpc3BsYXlQcm92aWRlcigkcHJvdmlkZXIpIHsKICAgICAgICAkcHJlZmVyZW5jZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdlbmFibGVfcHJvdmlkZXJfJyAuICRwcm92aWRlciwgJzAnKTsKICAgICAgICByZXR1cm4hZW1wdHkoJHByZWZlcmVuY2UpOwogICAgfQoKICAgIC8qKgogICAgICogTG9nIG1lc3NhZ2UgdG8gZXJyb3IgbG9nIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZCBpbiBtb2R1bGUgc2V0dGluZ3MKICAgICAqIEBwYXJhbSBTdHJpbmcgJG1lc3NhZ2UKICAgICAqLwogICAgZnVuY3Rpb24gTG9nKCRtZXNzYWdlKSB7CiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgICRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CiAgICAgICAgaWYgKE9wZW5JRDo6R2V0Q29uZmlnQm9vbCgnb3BlbmlkLmRlYnVnJykpIHsKICAgICAgICAgICAgZXJyb3JfbG9nKCRtZXNzYWdlKTsKICAgICAgICAgICAgLy8gZGVidWdfZGlzcGxheSgkbWVzc2FnZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gU3RyaW5nIHRoZSBGYWNlYm9vayBVUkwgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHJlbW90ZSBsb2dpbiBhbmQgcmVkaXJlY3QKICAgICAqIGJhY2sgdG8gYWN0aW9uLmZhY2Vib29rLnBocCAKICAgICAqLwogICAgZnVuY3Rpb24gRmFjZWJvb2tMb2dpblVybCgkaWQsICRhY3Rpb24sICRyZXR1cm5pZCkgewogICAgICAgIC8qKiBAdmFyIHRoaXMgT3BlbklEICovCiAgICAgICAgLy8gQ3JlYXRlIGxpbmsgdG8gYWN0aW9uLmZhY2Vib29rLnBocC4gSWYgdGhlcmUncyBhIHJlZGlyZWN0IGNvbmZpZ3VyZWQgd2Ugd2FudCBhIGxpbmsgdG8gbW9kdWxlaW50ZXJmYWNlLnBocAogICAgICAgICRyZWRpcmVjdElkID0gJHRoaXMtPkdldFJlZGlyZWN0TG9naW5QYWdlSWQoKTsKICAgICAgICBpZiAoJHJlZGlyZWN0SWQpIHsKICAgICAgICAgICAgJG5leHQgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICRhY3Rpb24sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHRydWUsIGZhbHNlLCBudWxsLCBudWxsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbmV4dCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCBudWxsLCBudWxsLCBudWxsLCB0cnVlLCB0cnVlLCBudWxsLCBudWxsKTsKICAgICAgICB9CiAgICAgICAgLy8gVXNlIGN1cnJlbnQgcGFnZSBhcyBjYW5jZWwtVVJMCiAgICAgICAgZ2xvYmFsICRnQ21zOwogICAgICAgICRjdXJyZW50VXJsID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKS0+Z2V0Tm9kZUJ5SWQoJGdDbXMtPnZhcmlhYmxlc1snY29udGVudF9pZCddKS0+R2V0Q29udGVudCgpLT5HZXRVUkwoKTsKICAgICAgICAvLyBHZW5lcmF0ZSBsb2dpbiBVUkwKICAgICAgICAvKiBAdmFyIGZhY2Vib29rIEZhY2Vib29rICovCiAgICAgICAgJGZhY2Vib29rID0gbmV3IEZhY2Vib29rKGFycmF5KAogICAgICAgICAgICAgICAgICAgICdhcHBJZCcgPT4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZhY2Vib29rX2FwcF9pZCcsICcnKSwKICAgICAgICAgICAgICAgICAgICAnc2VjcmV0JyA9PiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmFjZWJvb2tfYXBwX3NlY3JldCcsICcnKSwKICAgICAgICAgICAgICAgICAgICAnY29va2llJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgLy8gRml4OiBSZW1vdmUgeG1sIGVuY29kZWQgYW1wcyBiZWZvcmUgcGFzc2luZyB0byBmYWNlYm9vayBsaWJyYXJ5CiAgICAgICAgJGxvZ2luVXJsID0gJGZhY2Vib29rLT5nZXRMb2dpblVybChhcnJheSgKICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX3VybCcgPT4gc3RyX3JlcGxhY2UoJ2FtcDsnLCAnJywgJGN1cnJlbnRVcmwpLAogICAgICAgICAgICAgICAgICAgICduZXh0JyA9PiBzdHJfcmVwbGFjZSgnYW1wOycsICcnLCAkbmV4dCkpKTsKICAgICAgICAvLyBGaXg6IFJlcGxhY2UgYW1wcyBpbiBvcmRlciB0byBiZSB4aHRtbCBjb21wbGlhbnQKICAgICAgICAkbG9naW5VcmwgPSBzdHJfcmVwbGFjZSgnJicsICcmYW1wOycsICRsb2dpblVybCk7CiAgICAgICAgJHRoaXMtPkxvZygnRmFjZWJvb2tMb2dpblVybCA6ICcgLiAkbG9naW5VcmwpOwogICAgICAgIHJldHVybiAkbG9naW5Vcmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBDdXN0b20gbWV0aG9kIGZvciBnZXR0aW5nIGEgYm9vbCB2YWx1ZSBmcm9tIHRoZSBDTVMgY29uZmlndXJhdGlvbi4KICAgICAqIEluIENNU01TIDEuOSB0aGUgYXJyYXkgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhbiBvYmplY3QgaW1wbGVtZW50aW5nCiAgICAgKiBBcnJheUFjY2Vzcy4gSWYgQ01TTVMgaXMgaW4gZGVidWcgbW9kZSB0aGUgY2xhc3Mgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KICAgICAqIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuIFRoaXMgbWV0aG9kIHdpbGwgY2hlY2sgaWYgdGhlIGtleSBleGlzdHMgYmVmb3JlCiAgICAgKiByZXR1cm5pbmcgdGhlIHZhbHVlIChpZiBhbnkpIHRvIHdvcmsgYXJvdW5kIHRoZSBleGNlcHRpb24uCiAgICAgKiBAcGFyYW0gU3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gQm9vbGVhbiB0cnVlIG9mIHRoZSBrZXkgaXMgc2V0IGluIHRoZSBjb25maWcgYXJyYXkgYW5kIHNldCB0byBub24tZmFsc2UgdmFsdWUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHZXRDb25maWdCb29sKCRrZXkpIHsKICAgICAgICBnbG9iYWwgJGdDbXM7CiAgICAgICAgJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKICAgICAgICBpZiAoJGNvbmZpZyBpbnN0YW5jZW9mIEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgIHJldHVybiAkY29uZmlnLT5vZmZzZXRFeGlzdHMoJGtleSkgJiYgJGNvbmZpZ1ska2V5XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkY29uZmlnKSAmJiAkY29uZmlnWyRrZXldOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0UmVkaXJlY3RMb2dpblBhZ2VJZCgpIHsKICAgICAgICAkcmVkaXJlY3RMb2dpbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb2dpbl9yZWRpcmVjdCcsICdub25lJyk7CiAgICAgICAgJHJlZGlyZWN0TG9naW5QYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2xvZ2luX3JlZGlyZWN0X3BhZ2VpZCcpOwogICAgICAgICRmZXVSZWRpcmVjdCA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nKTsKICAgICAgICAkdGhpcy0+TG9nKCJSZWRpcmVjdCBhZnRlciBsb2dpbiBpcyBzZXQgdG8gJHJlZGlyZWN0TG9naW4gKGN1c3RvbSBwYWdlL2lkID0gJHJlZGlyZWN0TG9naW5QYWdlIGFuZCBGcm9udEVuZFVzZXIgcmVkaXJlY3QgPSAkZmV1UmVkaXJlY3QiKTsKICAgICAgICBpZiAoJ25vbmUnID09ICRyZWRpcmVjdExvZ2luIG9yICEkcmVkaXJlY3RMb2dpbikgewogICAgICAgICAgICAkdGhpcy0+TG9nKCJOb3QgdXNpbmcgYW55IHJlZGlyZWN0IGFmdGVyIGxvZ2luIik7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9IGVsc2UgaWYgKCdmZXUnID09ICRyZWRpcmVjdExvZ2luKSB7CiAgICAgICAgICAgICRpZCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoJGZldVJlZGlyZWN0KTsKICAgICAgICAgICAgJHRoaXMtPkxvZygiVXNpbmcgcmVkaXJlY3Qgc2V0dGluZyAkZmV1UmVkaXJlY3QgZnJvbSBGcm9udEVuZFVzZXMuIFJlc29sdmVkIHRoaXMgdG8gSUQgJGlkIik7CiAgICAgICAgICAgIGlmICghJGlkKSB7CiAgICAgICAgICAgICAgICBkaWUoIklsbGVnYWwgc2V0dGluZyBpbiBGcm9udEVuZFVzZXJzLCBwYWdlIHdpdGggaWQvYWxpYXMgJGZldVJlZGlyZWN0IG5vdCBmb3VuZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcygkcmVkaXJlY3RMb2dpblBhZ2UpOwogICAgICAgICAgICAkdGhpcy0+TG9nKCJVc2luZyBjdXN0b20gT3BlbklEIG1vZHVsZSByZWRpcmVjdCAkcmVkaXJlY3RMb2dpblBhZ2UuIFJlc29sdmVkIHRoaXMgdG8gSUQgJGlkIik7CiAgICAgICAgICAgIGlmICghJGlkKSB7CiAgICAgICAgICAgICAgICBkaWUoIklsbGVnYWwgc2V0dGluZyBpbiBPcGVuSUQgbW9kdWxlLCBwYWdlIHdpdGggaWQvYWxpYXMgJHJlZGlyZWN0TG9naW5QYWdlIG5vdCBmb3VuZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkaWQ7CiAgICAgICAgfQogICAgfQoKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/scripts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/scripts/jquery.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC4yCiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBTYXQgRmViIDEzIDIyOjMzOjQ4IDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihBLHcpe2Z1bmN0aW9uIG1hKCl7aWYoIWMuaXNSZWFkeSl7dHJ5e3MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChtYSwxKTtyZXR1cm59Yy5yZWFkeSgpfX1mdW5jdGlvbiBRYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJsOmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxFdmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBYKGEsYixkLGYsZSxqKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYj09PSJvYmplY3QiKXtmb3IodmFyIG8gaW4gYilYKGEsbyxiW29dLGYsZSxkKTtyZXR1cm4gYX1pZihkIT09dyl7Zj0haiYmZiYmYy5pc0Z1bmN0aW9uKGQpO2ZvcihvPTA7bzxpO28rKyllKGFbb10sYixmP2QuY2FsbChhW29dLG8sZShhW29dLGIpKTpkLGopO3JldHVybiBhfXJldHVybiBpPwplKGFbMF0sYik6d31mdW5jdGlvbiBKKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gWSgpe3JldHVybiBmYWxzZX1mdW5jdGlvbiBaKCl7cmV0dXJuIHRydWV9ZnVuY3Rpb24gbmEoYSxiLGQpe2RbMF0udHlwZT1hO3JldHVybiBjLmV2ZW50LmhhbmRsZS5hcHBseShiLGQpfWZ1bmN0aW9uIG9hKGEpe3ZhciBiLGQ9W10sZj1bXSxlPWFyZ3VtZW50cyxqLGksbyxrLG4scjtpPWMuZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IWl8fCFpLmxpdmV8fGEuYnV0dG9uJiZhLnR5cGU9PT0iY2xpY2siKSl7YS5saXZlRmlyZWQ9dGhpczt2YXIgdT1pLmxpdmUuc2xpY2UoMCk7Zm9yKGs9MDtrPHUubGVuZ3RoO2srKyl7aT11W2tdO2kub3JpZ1R5cGUucmVwbGFjZShPLCIiKT09PWEudHlwZT9mLnB1c2goaS5zZWxlY3Rvcik6dS5zcGxpY2Uoay0tLDEpfWo9YyhhLnRhcmdldCkuY2xvc2VzdChmLGEuY3VycmVudFRhcmdldCk7bj0wO2ZvcihyPQpqLmxlbmd0aDtuPHI7bisrKWZvcihrPTA7azx1Lmxlbmd0aDtrKyspe2k9dVtrXTtpZihqW25dLnNlbGVjdG9yPT09aS5zZWxlY3Rvcil7bz1qW25dLmVsZW07Zj1udWxsO2lmKGkucHJlVHlwZT09PSJtb3VzZWVudGVyInx8aS5wcmVUeXBlPT09Im1vdXNlbGVhdmUiKWY9YyhhLnJlbGF0ZWRUYXJnZXQpLmNsb3Nlc3QoaS5zZWxlY3RvcilbMF07aWYoIWZ8fGYhPT1vKWQucHVzaCh7ZWxlbTpvLGhhbmRsZU9iajppfSl9fW49MDtmb3Iocj1kLmxlbmd0aDtuPHI7bisrKXtqPWRbbl07YS5jdXJyZW50VGFyZ2V0PWouZWxlbTthLmRhdGE9ai5oYW5kbGVPYmouZGF0YTthLmhhbmRsZU9iaj1qLmhhbmRsZU9iajtpZihqLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShqLmVsZW0sZSk9PT1mYWxzZSl7Yj1mYWxzZTticmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIHBhKGEsYil7cmV0dXJuImxpdmUuIisoYSYmYSE9PSIqIj9hKyIuIjoiIikrYi5yZXBsYWNlKC9cLi9nLCJgIikucmVwbGFjZSgvIC9nLAoiJiIpfWZ1bmN0aW9uIHFhKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiByYShhLGIpe3ZhciBkPTA7Yi5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZT09PShhW2RdJiZhW2RdLm5vZGVOYW1lKSl7dmFyIGY9Yy5kYXRhKGFbZCsrXSksZT1jLmRhdGEodGhpcyxmKTtpZihmPWYmJmYuZXZlbnRzKXtkZWxldGUgZS5oYW5kbGU7ZS5ldmVudHM9e307Zm9yKHZhciBqIGluIGYpZm9yKHZhciBpIGluIGZbal0pYy5ldmVudC5hZGQodGhpcyxqLGZbal1baV0sZltqXVtpXS5kYXRhKX19fSl9ZnVuY3Rpb24gc2EoYSxiLGQpe3ZhciBmLGUsajtiPWImJmJbMF0/YlswXS5vd25lckRvY3VtZW50fHxiWzBdOnM7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT1zJiYhdGEudGVzdChhWzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhdWEudGVzdChhWzBdKSkpe2U9CnRydWU7aWYoaj1jLmZyYWdtZW50c1thWzBdXSlpZihqIT09MSlmPWp9aWYoIWYpe2Y9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5jbGVhbihhLGIsZixkKX1pZihlKWMuZnJhZ21lbnRzW2FbMF1dPWo/ZjoxO3JldHVybntmcmFnbWVudDpmLGNhY2hlYWJsZTplfX1mdW5jdGlvbiBLKGEsYil7dmFyIGQ9e307Yy5lYWNoKHZhLmNvbmNhdC5hcHBseShbXSx2YS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2RbdGhpc109YX0pO3JldHVybiBkfWZ1bmN0aW9uIHdhKGEpe3JldHVybiJzY3JvbGxUbyJpbiBhJiZhLmRvY3VtZW50P2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ZmFsc2V9dmFyIGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGMuZm4uaW5pdChhLGIpfSxSYT1BLmpRdWVyeSxTYT1BLiQscz1BLmRvY3VtZW50LFQsVGE9L15bXjxdKig8W1x3XFddKz4pW14+XSokfF4jKFtcdy1dKykkLyxVYT0vXi5bXjojXFtcLixdKiQvLFZhPS9cUy8sCldhPS9eKFxzfFx1MDBBMCkrfChcc3xcdTAwQTApKyQvZyxYYT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLFA9bmF2aWdhdG9yLnVzZXJBZ2VudCx4YT1mYWxzZSxRPVtdLEwsJD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGFhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYmE9QXJyYXkucHJvdG90eXBlLnB1c2gsUj1BcnJheS5wcm90b3R5cGUuc2xpY2UseWE9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y7Yy5mbj1jLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihhLGIpe3ZhciBkLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YTt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFiKXt0aGlzLmNvbnRleHQ9czt0aGlzWzBdPXMuYm9keTt0aGlzLnNlbGVjdG9yPSJib2R5Ijt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoKGQ9VGEuZXhlYyhhKSkmJgooZFsxXXx8IWIpKWlmKGRbMV0pe2Y9Yj9iLm93bmVyRG9jdW1lbnR8fGI6cztpZihhPVhhLmV4ZWMoYSkpaWYoYy5pc1BsYWluT2JqZWN0KGIpKXthPVtzLmNyZWF0ZUVsZW1lbnQoYVsxXSldO2MuZm4uYXR0ci5jYWxsKGEsYix0cnVlKX1lbHNlIGE9W2YuY3JlYXRlRWxlbWVudChhWzFdKV07ZWxzZXthPXNhKFtkWzFdXSxbZl0pO2E9KGEuY2FjaGVhYmxlP2EuZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpOmEuZnJhZ21lbnQpLmNoaWxkTm9kZXN9cmV0dXJuIGMubWVyZ2UodGhpcyxhKX1lbHNle2lmKGI9cy5nZXRFbGVtZW50QnlJZChkWzJdKSl7aWYoYi5pZCE9PWRbMl0pcmV0dXJuIFQuZmluZChhKTt0aGlzLmxlbmd0aD0xO3RoaXNbMF09Yn10aGlzLmNvbnRleHQ9czt0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9ZWxzZSBpZighYiYmL15cdyskLy50ZXN0KGEpKXt0aGlzLnNlbGVjdG9yPWE7dGhpcy5jb250ZXh0PXM7YT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO3JldHVybiBjLm1lcmdlKHRoaXMsCmEpfWVsc2UgcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxUKS5maW5kKGEpOmMoYikuZmluZChhKTtlbHNlIGlmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gVC5yZWFkeShhKTtpZihhLnNlbGVjdG9yIT09dyl7dGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yO3RoaXMuY29udGV4dD1hLmNvbnRleHR9cmV0dXJuIGMubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS40LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpcy5zbGljZShhKVswXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWMoKTtjLmlzQXJyYXkoYSk/YmEuYXBwbHkoZixhKTpjLm1lcmdlKGYsYSk7Zi5wcmV2T2JqZWN0PXRoaXM7Zi5jb250ZXh0PXRoaXMuY29udGV4dDtpZihiPT09CiJmaW5kIilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStkO2Vsc2UgaWYoYilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2QrIikiO3JldHVybiBmfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2MuYmluZFJlYWR5KCk7aWYoYy5pc1JlYWR5KWEuY2FsbChzLGMpO2Vsc2UgUSYmUS5wdXNoKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhSLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLFIuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYy5tYXAodGhpcywKZnVuY3Rpb24oYixkKXtyZXR1cm4gYS5jYWxsKGIsZCxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8YyhudWxsKX0scHVzaDpiYSxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX07Yy5mbi5pbml0LnByb3RvdHlwZT1jLmZuO2MuZXh0ZW5kPWMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHx7fSxiPTEsZD1hcmd1bWVudHMubGVuZ3RoLGY9ZmFsc2UsZSxqLGksbztpZih0eXBlb2YgYT09PSJib29sZWFuIil7Zj1hO2E9YXJndW1lbnRzWzFdfHx7fTtiPTJ9aWYodHlwZW9mIGEhPT0ib2JqZWN0IiYmIWMuaXNGdW5jdGlvbihhKSlhPXt9O2lmKGQ9PT1iKXthPXRoaXM7LS1ifWZvcig7YjxkO2IrKylpZigoZT1hcmd1bWVudHNbYl0pIT1udWxsKWZvcihqIGluIGUpe2k9YVtqXTtvPWVbal07aWYoYSE9PW8paWYoZiYmbyYmKGMuaXNQbGFpbk9iamVjdChvKXx8Yy5pc0FycmF5KG8pKSl7aT1pJiYoYy5pc1BsYWluT2JqZWN0KGkpfHwKYy5pc0FycmF5KGkpKT9pOmMuaXNBcnJheShvKT9bXTp7fTthW2pdPWMuZXh0ZW5kKGYsaSxvKX1lbHNlIGlmKG8hPT13KWFbal09b31yZXR1cm4gYX07Yy5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYSl7QS4kPVNhO2lmKGEpQS5qUXVlcnk9UmE7cmV0dXJuIGN9LGlzUmVhZHk6ZmFsc2UscmVhZHk6ZnVuY3Rpb24oKXtpZighYy5pc1JlYWR5KXtpZighcy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGMucmVhZHksMTMpO2MuaXNSZWFkeT10cnVlO2lmKFEpe2Zvcih2YXIgYSxiPTA7YT1RW2IrK107KWEuY2FsbChzLGMpO1E9bnVsbH1jLmZuLnRyaWdnZXJIYW5kbGVyJiZjKHMpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIXhhKXt4YT10cnVlO2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIGMucmVhZHkoKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpe3MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCkwsZmFsc2UpO0EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYy5yZWFkeSxmYWxzZSl9ZWxzZSBpZihzLmF0dGFjaEV2ZW50KXtzLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEwpO0EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYy5yZWFkeSk7dmFyIGE9ZmFsc2U7dHJ5e2E9QS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goYil7fXMuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZhJiZtYSgpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fCQuY2FsbChhKSE9PSJbb2JqZWN0IE9iamVjdF0ifHxhLm5vZGVUeXBlfHxhLnNldEludGVydmFsKXJldHVybiBmYWxzZTtpZihhLmNvbnN0cnVjdG9yJiYhYWEuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhYWEuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwKImlzUHJvdG90eXBlT2YiKSlyZXR1cm4gZmFsc2U7dmFyIGI7Zm9yKGIgaW4gYSk7cmV0dXJuIGI9PT13fHxhYS5jYWxsKGEsYil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBhO30scGFyc2VKU09OOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhIT09InN0cmluZyJ8fCFhKXJldHVybiBudWxsO2E9Yy50cmltKGEpO2lmKC9eW1xdLDp7fVxzXSokLy50ZXN0KGEucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCJAIikucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csIl0iKS5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csIiIpKSlyZXR1cm4gQS5KU09OJiZBLkpTT04ucGFyc2U/QS5KU09OLnBhcnNlKGEpOihuZXcgRnVuY3Rpb24oInJldHVybiAiKwphKSkoKTtlbHNlIGMuZXJyb3IoIkludmFsaWQgSlNPTjogIithKX0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXtpZihhJiZWYS50ZXN0KGEpKXt2YXIgYj1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fHMuZG9jdW1lbnRFbGVtZW50LGQ9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtkLnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoYy5zdXBwb3J0LnNjcmlwdEV2YWwpZC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGEpKTtlbHNlIGQudGV4dD1hO2IuaW5zZXJ0QmVmb3JlKGQsYi5maXJzdENoaWxkKTtiLnJlbW92ZUNoaWxkKGQpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZixlPTAsaj1hLmxlbmd0aCxpPWo9PT13fHxjLmlzRnVuY3Rpb24oYSk7aWYoZClpZihpKWZvcihmIGluIGEpe2lmKGIuYXBwbHkoYVtmXSwKZCk9PT1mYWxzZSlicmVha31lbHNlIGZvcig7ZTxqOyl7aWYoYi5hcHBseShhW2UrK10sZCk9PT1mYWxzZSlicmVha31lbHNlIGlmKGkpZm9yKGYgaW4gYSl7aWYoYi5jYWxsKGFbZl0sZixhW2ZdKT09PWZhbHNlKWJyZWFrfWVsc2UgZm9yKGQ9YVswXTtlPGomJmIuY2FsbChkLGUsZCkhPT1mYWxzZTtkPWFbKytlXSk7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBsYWNlKFdhLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7Yj1ifHxbXTtpZihhIT1udWxsKWEubGVuZ3RoPT1udWxsfHx0eXBlb2YgYT09PSJzdHJpbmcifHxjLmlzRnVuY3Rpb24oYSl8fHR5cGVvZiBhIT09ImZ1bmN0aW9uIiYmYS5zZXRJbnRlcnZhbD9iYS5jYWxsKGIsYSk6Yy5tZXJnZShiLGEpO3JldHVybiBifSxpbkFycmF5OmZ1bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKXJldHVybiBiLmluZGV4T2YoYSk7Zm9yKHZhciBkPTAsZj1iLmxlbmd0aDtkPGY7ZCsrKWlmKGJbZF09PT0KYSlyZXR1cm4gZDtyZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmxlbmd0aCxmPTA7aWYodHlwZW9mIGIubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBlPWIubGVuZ3RoO2Y8ZTtmKyspYVtkKytdPWJbZl07ZWxzZSBmb3IoO2JbZl0hPT13OylhW2QrK109YltmKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlPTAsaj1hLmxlbmd0aDtlPGo7ZSsrKSFkIT09IWIoYVtlXSxlKSYmZi5wdXNoKGFbZV0pO3JldHVybiBmfSxtYXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlLGo9MCxpPWEubGVuZ3RoO2o8aTtqKyspe2U9YihhW2pdLGosZCk7aWYoZSE9bnVsbClmW2YubGVuZ3RoXT1lfXJldHVybiBmLmNvbmNhdC5hcHBseShbXSxmKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYixkKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilpZih0eXBlb2YgYj09PSJzdHJpbmciKXtkPWE7YT1kW2JdO2I9d31lbHNlIGlmKGImJgohYy5pc0Z1bmN0aW9uKGIpKXtkPWI7Yj13fWlmKCFiJiZhKWI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShkfHx0aGlzLGFyZ3VtZW50cyl9O2lmKGEpYi5ndWlkPWEuZ3VpZD1hLmd1aWR8fGIuZ3VpZHx8Yy5ndWlkKys7cmV0dXJuIGJ9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7YT0vKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGEpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhhKXx8IS9jb21wYXRpYmxlLy50ZXN0KGEpJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmFbMV18fCIiLHZlcnNpb246YVsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO1A9Yy51YU1hdGNoKFApO2lmKFAuYnJvd3Nlcil7Yy5icm93c2VyW1AuYnJvd3Nlcl09dHJ1ZTtjLmJyb3dzZXIudmVyc2lvbj1QLnZlcnNpb259aWYoYy5icm93c2VyLndlYmtpdCljLmJyb3dzZXIuc2FmYXJpPQp0cnVlO2lmKHlhKWMuaW5BcnJheT1mdW5jdGlvbihhLGIpe3JldHVybiB5YS5jYWxsKGIsYSl9O1Q9YyhzKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpTD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsTCxmYWxzZSk7Yy5yZWFkeSgpfTtlbHNlIGlmKHMuYXR0YWNoRXZlbnQpTD1mdW5jdGlvbigpe2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpe3MuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsTCk7Yy5yZWFkeSgpfX07KGZ1bmN0aW9uKCl7Yy5zdXBwb3J0PXt9O3ZhciBhPXMuZG9jdW1lbnRFbGVtZW50LGI9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksZj0ic2NyaXB0IitKKCk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CnZhciBlPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxqPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighKCFlfHwhZS5sZW5ndGh8fCFqKSl7Yy5zdXBwb3J0PXtsZWFkaW5nV2hpdGVzcGFjZTpkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KGouZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpqLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NSQvLnRlc3Qoai5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWouc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjpkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpzLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKHMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLnNlbGVjdGVkLApwYXJlbnROb2RlOmQucmVtb3ZlQ2hpbGQoZC5hcHBlbmRDaGlsZChzLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSkucGFyZW50Tm9kZT09PW51bGwsZGVsZXRlRXhwYW5kbzp0cnVlLGNoZWNrQ2xvbmU6ZmFsc2Usc2NyaXB0RXZhbDpmYWxzZSxub0Nsb25lRXZlbnQ6dHJ1ZSxib3hNb2RlbDpudWxsfTtiLnR5cGU9InRleHQvamF2YXNjcmlwdCI7dHJ5e2IuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrZisiPTE7IikpfWNhdGNoKGkpe31hLmluc2VydEJlZm9yZShiLGEuZmlyc3RDaGlsZCk7aWYoQVtmXSl7Yy5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgQVtmXX10cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChvKXtjLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz1mYWxzZX1hLnJlbW92ZUNoaWxkKGIpO2lmKGQuYXR0YWNoRXZlbnQmJmQuZmlyZUV2ZW50KXtkLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbiBrKCl7Yy5zdXBwb3J0Lm5vQ2xvbmVFdmVudD0KZmFsc2U7ZC5kZXRhY2hFdmVudCgib25jbGljayIsayl9KTtkLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKX1kPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2VkPSdjaGVja2VkJy8+IjthPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2EuYXBwZW5kQ2hpbGQoZC5maXJzdENoaWxkKTtjLnN1cHBvcnQuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSh0cnVlKS5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmNoZWNrZWQ7YyhmdW5jdGlvbigpe3ZhciBrPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5zdHlsZS53aWR0aD1rLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO3MuYm9keS5hcHBlbmRDaGlsZChrKTtjLmJveE1vZGVsPWMuc3VwcG9ydC5ib3hNb2RlbD1rLm9mZnNldFdpZHRoPT09MjtzLmJvZHkucmVtb3ZlQ2hpbGQoaykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTthPWZ1bmN0aW9uKGspe3ZhciBuPQpzLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2s9Im9uIitrO3ZhciByPWsgaW4gbjtpZighcil7bi5zZXRBdHRyaWJ1dGUoaywicmV0dXJuOyIpO3I9dHlwZW9mIG5ba109PT0iZnVuY3Rpb24ifXJldHVybiByfTtjLnN1cHBvcnQuc3VibWl0QnViYmxlcz1hKCJzdWJtaXQiKTtjLnN1cHBvcnQuY2hhbmdlQnViYmxlcz1hKCJjaGFuZ2UiKTthPWI9ZD1lPWo9bnVsbH19KSgpO2MucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdGFiaW5kZXg6InRhYkluZGV4Iix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIn07dmFyIEc9ImpRdWVyeSIrSigpLFlhPTAsemE9e307Yy5leHRlbmQoe2NhY2hlOnt9LGV4cGFuZG86Ryxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OnRydWUsCmFwcGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZj1hW0ddLGU9Yy5jYWNoZTtpZighZiYmdHlwZW9mIGI9PT0ic3RyaW5nIiYmZD09PXcpcmV0dXJuIG51bGw7Znx8KGY9KytZYSk7aWYodHlwZW9mIGI9PT0ib2JqZWN0Iil7YVtHXT1mO2VbZl09Yy5leHRlbmQodHJ1ZSx7fSxiKX1lbHNlIGlmKCFlW2ZdKXthW0ddPWY7ZVtmXT17fX1hPWVbZl07aWYoZCE9PXcpYVtiXT1kO3JldHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZD1hW0ddLGY9Yy5jYWNoZSxlPWZbZF07aWYoYil7aWYoZSl7ZGVsZXRlIGVbYl07Yy5pc0VtcHR5T2JqZWN0KGUpJiZjLnJlbW92ZURhdGEoYSl9fWVsc2V7aWYoYy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8pZGVsZXRlIGFbYy5leHBhbmRvXTsKZWxzZSBhLnJlbW92ZUF0dHJpYnV0ZSYmYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZltkXX19fX0pO2MuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGE9PT0idW5kZWZpbmVkIiYmdGhpcy5sZW5ndGgpcmV0dXJuIGMuZGF0YSh0aGlzWzBdKTtlbHNlIGlmKHR5cGVvZiBhPT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLGEpfSk7dmFyIGQ9YS5zcGxpdCgiLiIpO2RbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihiPT09dyl7dmFyIGY9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrZFsxXSsiISIsW2RbMF1dKTtpZihmPT09dyYmdGhpcy5sZW5ndGgpZj1jLmRhdGEodGhpc1swXSxhKTtyZXR1cm4gZj09PXcmJmRbMV0/dGhpcy5kYXRhKGRbMF0pOmZ9ZWxzZSByZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXREYXRhIitkWzFdKyIhIixbZFswXSxiXSkuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLAphLGIpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSk7Yy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixkKXtpZihhKXtiPShifHwiZngiKSsicXVldWUiO3ZhciBmPWMuZGF0YShhLGIpO2lmKCFkKXJldHVybiBmfHxbXTtpZighZnx8Yy5pc0FycmF5KGQpKWY9Yy5kYXRhKGEsYixjLm1ha2VBcnJheShkKSk7ZWxzZSBmLnB1c2goZCk7cmV0dXJuIGZ9fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBkPWMucXVldWUoYSxiKSxmPWQuc2hpZnQoKTtpZihmPT09ImlucHJvZ3Jlc3MiKWY9ZC5zaGlmdCgpO2lmKGYpe2I9PT0iZngiJiZkLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTtmLmNhbGwoYSxmdW5jdGlvbigpe2MuZGVxdWV1ZShhLGIpfSl9fX0pO2MuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09InN0cmluZyIpe2I9YTthPSJmeCJ9aWYoYj09PQp3KXJldHVybiBjLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWMucXVldWUodGhpcyxhLGIpO2E9PT0iZngiJiZkWzBdIT09ImlucHJvZ3Jlc3MiJiZjLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Yy5meD9jLmZ4LnNwZWVkc1thXXx8YTphO2I9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGQsYil9LGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9fSk7dmFyIEFhPS9bXG5cdF0vZyxjYT0vXHMrLyxaYT0vXHIvZywkYT0vaHJlZnxzcmN8c3R5bGUvLGFiPS8oYnV0dG9ufGlucHV0KS9pLGJiPS8oYnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpL2ksCmNiPS9eKGF8YXJlYSkkL2ksQmE9L3JhZGlvfGNoZWNrYm94LztjLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBYKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNhbGwodGhpcyxuLHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChjYSksZD0wLGY9dGhpcy5sZW5ndGg7ZDxmO2QrKyl7dmFyIGU9dGhpc1tkXTtpZihlLm5vZGVUeXBlPT09MSlpZihlLmNsYXNzTmFtZSl7Zm9yKHZhciBqPSIgIitlLmNsYXNzTmFtZSsiICIsCmk9ZS5jbGFzc05hbWUsbz0wLGs9Yi5sZW5ndGg7bzxrO28rKylpZihqLmluZGV4T2YoIiAiK2Jbb10rIiAiKTwwKWkrPSIgIitiW29dO2UuY2xhc3NOYW1lPWMudHJpbShpKX1lbHNlIGUuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGspe3ZhciBuPWModGhpcyk7bi5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxrLG4uYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nInx8YT09PXcpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoY2EpLGQ9MCxmPXRoaXMubGVuZ3RoO2Q8ZjtkKyspe3ZhciBlPXRoaXNbZF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaj0oIiAiK2UuY2xhc3NOYW1lKyIgIikucmVwbGFjZShBYSwiICIpLGk9MCxvPWIubGVuZ3RoO2k8bztpKyspaj1qLnJlcGxhY2UoIiAiK2JbaV0rIiAiLAoiICIpO2UuY2xhc3NOYW1lPWMudHJpbShqKX1lbHNlIGUuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGY9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGo9Yyh0aGlzKTtqLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGUsai5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGQ9PT0ic3RyaW5nIilmb3IodmFyIGUsaj0wLGk9Yyh0aGlzKSxvPWIsaz1hLnNwbGl0KGNhKTtlPWtbaisrXTspe289Zj9vOiFpLmhhc0NsYXNzKGUpO2lbbz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQifHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKTt0aGlzLmNsYXNzTmFtZT0KdGhpcy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1tiXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKEFhLCIgIikuaW5kZXhPZihhKT4tMSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZihhPT09dyl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIpKXJldHVybihiLmF0dHJpYnV0ZXMudmFsdWV8fHt9KS5zcGVjaWZpZWQ/Yi52YWx1ZTpiLnRleHQ7aWYoYy5ub2RlTmFtZShiLCJzZWxlY3QiKSl7dmFyIGQ9Yi5zZWxlY3RlZEluZGV4LGY9W10sZT1iLm9wdGlvbnM7Yj1iLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZDwwKXJldHVybiBudWxsO3ZhciBqPWI/ZDowO2ZvcihkPWI/ZCsxOmUubGVuZ3RoO2o8ZDtqKyspe3ZhciBpPQplW2pdO2lmKGkuc2VsZWN0ZWQpe2E9YyhpKS52YWwoKTtpZihiKXJldHVybiBhO2YucHVzaChhKX19cmV0dXJuIGZ9aWYoQmEudGVzdChiLnR5cGUpJiYhYy5zdXBwb3J0LmNoZWNrT24pcmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmIudmFsdWU7cmV0dXJuKGIudmFsdWV8fCIiKS5yZXBsYWNlKFphLCIiKX1yZXR1cm4gd312YXIgbz1jLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihrKXt2YXIgbj1jKHRoaXMpLHI9YTtpZih0aGlzLm5vZGVUeXBlPT09MSl7aWYobylyPWEuY2FsbCh0aGlzLGssbi52YWwoKSk7aWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtpZihjLmlzQXJyYXkocikmJkJhLnRlc3QodGhpcy50eXBlKSl0aGlzLmNoZWNrZWQ9Yy5pbkFycmF5KG4udmFsKCkscik+PTA7ZWxzZSBpZihjLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgdT1jLm1ha2VBcnJheShyKTtjKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPQpjLmluQXJyYXkoYyh0aGlzKS52YWwoKSx1KT49MH0pO2lmKCF1Lmxlbmd0aCl0aGlzLnNlbGVjdGVkSW5kZXg9LTF9ZWxzZSB0aGlzLnZhbHVlPXJ9fSl9fSk7Yy5leHRlbmQoe2F0dHJGbjp7dmFsOnRydWUsY3NzOnRydWUsaHRtbDp0cnVlLHRleHQ6dHJ1ZSxkYXRhOnRydWUsd2lkdGg6dHJ1ZSxoZWlnaHQ6dHJ1ZSxvZmZzZXQ6dHJ1ZX0sYXR0cjpmdW5jdGlvbihhLGIsZCxmKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KXJldHVybiB3O2lmKGYmJmIgaW4gYy5hdHRyRm4pcmV0dXJuIGMoYSlbYl0oZCk7Zj1hLm5vZGVUeXBlIT09MXx8IWMuaXNYTUxEb2MoYSk7dmFyIGU9ZCE9PXc7Yj1mJiZjLnByb3BzW2JdfHxiO2lmKGEubm9kZVR5cGU9PT0xKXt2YXIgaj0kYS50ZXN0KGIpO2lmKGIgaW4gYSYmZiYmIWope2lmKGUpe2I9PT0idHlwZSImJmFiLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSYmYy5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7CmFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9kZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKSkmJmIuc3BlY2lmaWVkP2IudmFsdWU6YmIudGVzdChhLm5vZGVOYW1lKXx8Y2IudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6dztyZXR1cm4gYVtiXX1pZighYy5zdXBwb3J0LnN0eWxlJiZmJiZiPT09InN0eWxlIil7aWYoZSlhLnN0eWxlLmNzc1RleHQ9IiIrZDtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fWUmJmEuc2V0QXR0cmlidXRlKGIsIiIrZCk7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZmJiZqP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7cmV0dXJuIGE9PT1udWxsP3c6YX1yZXR1cm4gYy5zdHlsZShhLGIsZCl9fSk7dmFyIE89L1wuKC4qKSQvLGRiPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1teXHdcc1wuXHxgXS9nLApmdW5jdGlvbihiKXtyZXR1cm4iXFwiK2J9KX07Yy5ldmVudD17YWRkOmZ1bmN0aW9uKGEsYixkLGYpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KSl7aWYoYS5zZXRJbnRlcnZhbCYmYSE9PUEmJiFhLmZyYW1lRWxlbWVudClhPUE7dmFyIGUsajtpZihkLmhhbmRsZXIpe2U9ZDtkPWUuaGFuZGxlcn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihqPWMuZGF0YShhKSl7dmFyIGk9ai5ldmVudHM9ai5ldmVudHN8fHt9LG89ai5oYW5kbGU7aWYoIW8pai5oYW5kbGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYhYy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLGFyZ3VtZW50cyk6d307by5lbGVtPWE7Yj1iLnNwbGl0KCIgIik7Zm9yKHZhciBrLG49MCxyO2s9YltuKytdOyl7aj1lP2MuZXh0ZW5kKHt9LGUpOntoYW5kbGVyOmQsZGF0YTpmfTtpZihrLmluZGV4T2YoIi4iKT4tMSl7cj1rLnNwbGl0KCIuIik7Cms9ci5zaGlmdCgpO2oubmFtZXNwYWNlPXIuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKX1lbHNle3I9W107ai5uYW1lc3BhY2U9IiJ9ai50eXBlPWs7ai5ndWlkPWQuZ3VpZDt2YXIgdT1pW2tdLHo9Yy5ldmVudC5zcGVjaWFsW2tdfHx7fTtpZighdSl7dT1pW2tdPVtdO2lmKCF6LnNldHVwfHx6LnNldHVwLmNhbGwoYSxmLHIsbyk9PT1mYWxzZSlpZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGssbyxmYWxzZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrayxvKX1pZih6LmFkZCl7ei5hZGQuY2FsbChhLGopO2lmKCFqLmhhbmRsZXIuZ3VpZClqLmhhbmRsZXIuZ3VpZD1kLmd1aWR9dS5wdXNoKGopO2MuZXZlbnQuZ2xvYmFsW2tdPXRydWV9YT1udWxsfX19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGQsZil7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpKXt2YXIgZSxqPTAsaSxvLGssbixyLHUsej1jLmRhdGEoYSksCkM9eiYmei5ldmVudHM7aWYoeiYmQyl7aWYoYiYmYi50eXBlKXtkPWIuaGFuZGxlcjtiPWIudHlwZX1pZighYnx8dHlwZW9mIGI9PT0ic3RyaW5nIiYmYi5jaGFyQXQoMCk9PT0iLiIpe2I9Ynx8IiI7Zm9yKGUgaW4gQyljLmV2ZW50LnJlbW92ZShhLGUrYil9ZWxzZXtmb3IoYj1iLnNwbGl0KCIgIik7ZT1iW2orK107KXtuPWU7aT1lLmluZGV4T2YoIi4iKTwwO289W107aWYoIWkpe289ZS5zcGxpdCgiLiIpO2U9by5zaGlmdCgpO2s9bmV3IFJlZ0V4cCgiKF58XFwuKSIrYy5tYXAoby5zbGljZSgwKS5zb3J0KCksZGIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWlmKHI9Q1tlXSlpZihkKXtuPWMuZXZlbnQuc3BlY2lhbFtlXXx8e307Zm9yKEI9Znx8MDtCPHIubGVuZ3RoO0IrKyl7dT1yW0JdO2lmKGQuZ3VpZD09PXUuZ3VpZCl7aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Zj09bnVsbCYmci5zcGxpY2UoQi0tLDEpO24ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEsdSl9aWYoZiE9Cm51bGwpYnJlYWt9fWlmKHIubGVuZ3RoPT09MHx8ZiE9bnVsbCYmci5sZW5ndGg9PT0xKXtpZighbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsbyk9PT1mYWxzZSlDYShhLGUsei5oYW5kbGUpO2RlbGV0ZSBDW2VdfX1lbHNlIGZvcih2YXIgQj0wO0I8ci5sZW5ndGg7QisrKXt1PXJbQl07aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Yy5ldmVudC5yZW1vdmUoYSxuLHUuaGFuZGxlcixCKTtyLnNwbGljZShCLS0sMSl9fX1pZihjLmlzRW1wdHlPYmplY3QoQykpe2lmKGI9ei5oYW5kbGUpYi5lbGVtPW51bGw7ZGVsZXRlIHouZXZlbnRzO2RlbGV0ZSB6LmhhbmRsZTtjLmlzRW1wdHlPYmplY3QoeikmJmMucmVtb3ZlRGF0YShhKX19fX19LHRyaWdnZXI6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9YS50eXBlfHxhO2lmKCFmKXthPXR5cGVvZiBhPT09Im9iamVjdCI/YVtHXT9hOmMuZXh0ZW5kKGMuRXZlbnQoZSksYSk6Yy5FdmVudChlKTtpZihlLmluZGV4T2YoIiEiKT49MCl7YS50eXBlPQplPWUuc2xpY2UoMCwtMSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50Lmdsb2JhbFtlXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbZV0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhpcy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT04KXJldHVybiB3O2EucmVzdWx0PXc7YS50YXJnZXQ9ZDtiPWMubWFrZUFycmF5KGIpO2IudW5zaGlmdChhKX1hLmN1cnJlbnRUYXJnZXQ9ZDsoZj1jLmRhdGEoZCwiaGFuZGxlIikpJiZmLmFwcGx5KGQsYik7Zj1kLnBhcmVudE5vZGV8fGQub3duZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZV0mJmRbIm9uIitlXS5hcHBseShkLGIpPT09ZmFsc2UpYS5yZXN1bHQ9ZmFsc2V9Y2F0Y2goail7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJgpmKWMuZXZlbnQudHJpZ2dlcihhLGIsZix0cnVlKTtlbHNlIGlmKCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtmPWEudGFyZ2V0O3ZhciBpLG89Yy5ub2RlTmFtZShmLCJhIikmJmU9PT0iY2xpY2siLGs9Yy5ldmVudC5zcGVjaWFsW2VdfHx7fTtpZigoIWsuX2RlZmF1bHR8fGsuX2RlZmF1bHQuY2FsbChkLGEpPT09ZmFsc2UpJiYhbyYmIShmJiZmLm5vZGVOYW1lJiZjLm5vRGF0YVtmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSl7dHJ5e2lmKGZbZV0pe2lmKGk9Zlsib24iK2VdKWZbIm9uIitlXT1udWxsO2MuZXZlbnQudHJpZ2dlcmVkPXRydWU7ZltlXSgpfX1jYXRjaChuKXt9aWYoaSlmWyJvbiIrZV09aTtjLmV2ZW50LnRyaWdnZXJlZD1mYWxzZX19fSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGIsZCxmLGU7YT1hcmd1bWVudHNbMF09Yy5ldmVudC5maXgoYXx8QS5ldmVudCk7YS5jdXJyZW50VGFyZ2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTsKaWYoIWIpe2Q9YS50eXBlLnNwbGl0KCIuIik7YS50eXBlPWQuc2hpZnQoKTtmPW5ldyBSZWdFeHAoIihefFxcLikiK2Quc2xpY2UoMCkuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWU9Yy5kYXRhKHRoaXMsImV2ZW50cyIpO2Q9ZVthLnR5cGVdO2lmKGUmJmQpe2Q9ZC5zbGljZSgwKTtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPWRbZV07aWYoYnx8Zi50ZXN0KGkubmFtZXNwYWNlKSl7YS5oYW5kbGVyPWkuaGFuZGxlcjthLmRhdGE9aS5kYXRhO2EuaGFuZGxlT2JqPWk7aT1pLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGkhPT13KXthLnJlc3VsdD1pO2lmKGk9PT1mYWxzZSl7YS5wcmV2ZW50RGVmYXVsdCgpO2Euc3RvcFByb3BhZ2F0aW9uKCl9fWlmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319fXJldHVybiBhLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIG9yaWdpbmFsVGFyZ2V0IHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLApmaXg6ZnVuY3Rpb24oYSl7aWYoYVtHXSlyZXR1cm4gYTt2YXIgYj1hO2E9Yy5FdmVudChiKTtmb3IodmFyIGQ9dGhpcy5wcm9wcy5sZW5ndGgsZjtkOyl7Zj10aGlzLnByb3BzWy0tZF07YVtmXT1iW2ZdfWlmKCFhLnRhcmdldClhLnRhcmdldD1hLnNyY0VsZW1lbnR8fHM7aWYoYS50YXJnZXQubm9kZVR5cGU9PT0zKWEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWEucmVsYXRlZFRhcmdldCYmYS5mcm9tRWxlbWVudClhLnJlbGF0ZWRUYXJnZXQ9YS5mcm9tRWxlbWVudD09PWEudGFyZ2V0P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ7aWYoYS5wYWdlWD09bnVsbCYmYS5jbGllbnRYIT1udWxsKXtiPXMuZG9jdW1lbnRFbGVtZW50O2Q9cy5ib2R5O2EucGFnZVg9YS5jbGllbnRYKyhiJiZiLnNjcm9sbExlZnR8fGQmJmQuc2Nyb2xsTGVmdHx8MCktKGImJmIuY2xpZW50TGVmdHx8ZCYmZC5jbGllbnRMZWZ0fHwwKTthLnBhZ2VZPWEuY2xpZW50WSsoYiYmYi5zY3JvbGxUb3B8fApkJiZkLnNjcm9sbFRvcHx8MCktKGImJmIuY2xpZW50VG9wfHxkJiZkLmNsaWVudFRvcHx8MCl9aWYoIWEud2hpY2gmJihhLmNoYXJDb2RlfHxhLmNoYXJDb2RlPT09MD9hLmNoYXJDb2RlOmEua2V5Q29kZSkpYS53aGljaD1hLmNoYXJDb2RlfHxhLmtleUNvZGU7aWYoIWEubWV0YUtleSYmYS5jdHJsS2V5KWEubWV0YUtleT1hLmN0cmxLZXk7aWYoIWEud2hpY2gmJmEuYnV0dG9uIT09dylhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjA7cmV0dXJuIGF9LGd1aWQ6MUU4LHByb3h5OmMucHJveHksc3BlY2lhbDp7cmVhZHk6e3NldHVwOmMuYmluZFJlYWR5LHRlYXJkb3duOmMubm9vcH0sbGl2ZTp7YWRkOmZ1bmN0aW9uKGEpe2MuZXZlbnQuYWRkKHRoaXMsYS5vcmlnVHlwZSxjLmV4dGVuZCh7fSxhLHtoYW5kbGVyOm9hfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7dmFyIGI9dHJ1ZSxkPWEub3JpZ1R5cGUucmVwbGFjZShPLCIiKTtjLmVhY2goYy5kYXRhKHRoaXMsCiJldmVudHMiKS5saXZlfHxbXSxmdW5jdGlvbigpe2lmKGQ9PT10aGlzLm9yaWdUeXBlLnJlcGxhY2UoTywiIikpcmV0dXJuIGI9ZmFsc2V9KTtiJiZjLmV2ZW50LnJlbW92ZSh0aGlzLGEub3JpZ1R5cGUsb2EpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYodGhpcy5zZXRJbnRlcnZhbCl0aGlzLm9uYmVmb3JldW5sb2FkPWQ7cmV0dXJuIGZhbHNlfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe2lmKHRoaXMub25iZWZvcmV1bmxvYWQ9PT1iKXRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbH19fX07dmFyIENhPXMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsZCxmYWxzZSl9OmZ1bmN0aW9uKGEsYixkKXthLmRldGFjaEV2ZW50KCJvbiIrYixkKX07Yy5FdmVudD1mdW5jdGlvbihhKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdClyZXR1cm4gbmV3IGMuRXZlbnQoYSk7aWYoYSYmYS50eXBlKXt0aGlzLm9yaWdpbmFsRXZlbnQ9CmE7dGhpcy50eXBlPWEudHlwZX1lbHNlIHRoaXMudHlwZT1hO3RoaXMudGltZVN0YW1wPUooKTt0aGlzW0ddPXRydWV9O2MuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPVo7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKGEpe2EucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKTthLnJldHVyblZhbHVlPWZhbHNlfX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1aO3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksCmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOll9O3ZhciBEYT1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQ7dHJ5e2Zvcig7YiYmYiE9PXRoaXM7KWI9Yi5wYXJlbnROb2RlO2lmKGIhPT10aGlzKXthLnR5cGU9YS5kYXRhO2MuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19Y2F0Y2goZCl7fX0sRWE9ZnVuY3Rpb24oYSl7YS50eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2MuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Yy5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpmdW5jdGlvbihkKXtjLmV2ZW50LmFkZCh0aGlzLGIsZCYmZC5zZWxlY3Rvcj9FYTpEYSxhKX0sdGVhcmRvd246ZnVuY3Rpb24oZCl7Yy5ldmVudC5yZW1vdmUodGhpcyxiLGQmJmQuc2VsZWN0b3I/RWE6RGEpfX19KTtpZighYy5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMpYy5ldmVudC5zcGVjaWFsLnN1Ym1pdD0Ke3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09ImZvcm0iKXtjLmV2ZW50LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJzdWJtaXQifHxkPT09ImltYWdlIikmJmMoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aClyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSk7Yy5ldmVudC5hZGQodGhpcywia2V5cHJlc3Muc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoKGQ9PT0idGV4dCJ8fGQ9PT0icGFzc3dvcmQiKSYmYyhiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZhLmtleUNvZGU9PT0xMylyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19OwppZighYy5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3ZhciBkYT0vdGV4dGFyZWF8aW5wdXR8c2VsZWN0L2ksZWEsRmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBlLGQ9YS52YWx1ZTtpZihiPT09InJhZGlvInx8Yj09PSJjaGVja2JveCIpZD1hLmNoZWNrZWQ7ZWxzZSBpZihiPT09InNlbGVjdC1tdWx0aXBsZSIpZD1hLnNlbGVjdGVkSW5kZXg+LTE/Yy5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGYpe3JldHVybiBmLnNlbGVjdGVkfSkuam9pbigiLSIpOiIiO2Vsc2UgaWYoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09InNlbGVjdCIpZD1hLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGR9LGZhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZixlO2lmKCEoIWRhLnRlc3QoZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtmPWMuZGF0YShkLCJfY2hhbmdlX2RhdGEiKTtlPUZhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsCmUpO2lmKCEoZj09PXd8fGU9PT1mKSlpZihmIT1udWxsfHxlKXthLnR5cGU9ImNoYW5nZSI7cmV0dXJuIGMuZXZlbnQudHJpZ2dlcihhLGIsZCl9fX07Yy5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6ZmEsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoZD09PSJyYWRpbyJ8fGQ9PT0iY2hlY2tib3gifHxiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxrZXlkb3duOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGQ9Yi50eXBlO2lmKGEua2V5Q29kZT09PTEzJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0idGV4dGFyZWEifHxhLmtleUNvZGU9PT0zMiYmKGQ9PT0iY2hlY2tib3gifHxkPT09InJhZGlvIil8fGQ9PT0ic2VsZWN0LW11bHRpcGxlIilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0O2MuZGF0YShhLAoiX2NoYW5nZV9kYXRhIixGYShhKSl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBhIGluIGVhKWMuZXZlbnQuYWRkKHRoaXMsYSsiLnNwZWNpYWxDaGFuZ2UiLGVhW2FdKTtyZXR1cm4gZGEudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtjLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVybiBkYS50ZXN0KHRoaXMubm9kZU5hbWUpfX07ZWE9Yy5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzfXMuYWRkRXZlbnRMaXN0ZW5lciYmYy5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoZil7Zj1jLmV2ZW50LmZpeChmKTtmLnR5cGU9YjtyZXR1cm4gYy5ldmVudC5oYW5kbGUuY2FsbCh0aGlzLGYpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYSwKZCx0cnVlKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLHRydWUpfX19KTtjLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZixlKXtpZih0eXBlb2YgZD09PSJvYmplY3QiKXtmb3IodmFyIGogaW4gZCl0aGlzW2JdKGosZixkW2pdLGUpO3JldHVybiB0aGlzfWlmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d312YXIgaT1iPT09Im9uZSI/Yy5wcm94eShlLGZ1bmN0aW9uKGspe2ModGhpcykudW5iaW5kKGssaSk7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk6ZTtpZihkPT09InVubG9hZCImJmIhPT0ib25lIil0aGlzLm9uZShkLGYsZSk7ZWxzZXtqPTA7Zm9yKHZhciBvPXRoaXMubGVuZ3RoO2o8bztqKyspYy5ldmVudC5hZGQodGhpc1tqXSxkLGksZil9cmV0dXJuIHRoaXN9fSk7Yy5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT09Im9iamVjdCImJgohYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVuYmluZChkLGFbZF0pO2Vsc2V7ZD0wO2Zvcih2YXIgZj10aGlzLmxlbmd0aDtkPGY7ZCsrKWMuZXZlbnQucmVtb3ZlKHRoaXNbZF0sYSxiKX1yZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIHRoaXMubGl2ZShiLGQsZixhKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMudW5iaW5kKCJsaXZlIik6dGhpcy5kaWUoYixudWxsLGQsYSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pe2E9Yy5FdmVudChhKTthLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0pO3JldHVybiBhLnJlc3VsdH19LAp0b2dnbGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWFyZ3VtZW50cyxkPTE7ZDxiLmxlbmd0aDspYy5wcm94eShhLGJbZCsrXSk7cmV0dXJuIHRoaXMuY2xpY2soYy5wcm94eShhLGZ1bmN0aW9uKGYpe3ZhciBlPShjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSk7Zi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ZmFsc2V9KSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBHYT17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07Yy5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkLGYsZSxqKXt2YXIgaSxvPTAsayxuLHI9anx8dGhpcy5zZWxlY3RvciwKdT1qP3RoaXM6Yyh0aGlzLmNvbnRleHQpO2lmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d31mb3IoZD0oZHx8IiIpLnNwbGl0KCIgIik7KGk9ZFtvKytdKSE9bnVsbDspe2o9Ty5leGVjKGkpO2s9IiI7aWYoail7az1qWzBdO2k9aS5yZXBsYWNlKE8sIiIpfWlmKGk9PT0iaG92ZXIiKWQucHVzaCgibW91c2VlbnRlciIraywibW91c2VsZWF2ZSIrayk7ZWxzZXtuPWk7aWYoaT09PSJmb2N1cyJ8fGk9PT0iYmx1ciIpe2QucHVzaChHYVtpXStrKTtpKz1rfWVsc2UgaT0oR2FbaV18fGkpK2s7Yj09PSJsaXZlIj91LmVhY2goZnVuY3Rpb24oKXtjLmV2ZW50LmFkZCh0aGlzLHBhKGkscikse2RhdGE6ZixzZWxlY3RvcjpyLGhhbmRsZXI6ZSxvcmlnVHlwZTppLG9yaWdIYW5kbGVyOmUscHJlVHlwZTpufSl9KTp1LnVuYmluZChwYShpLHIpLGUpfX1yZXR1cm4gdGhpc319KTtjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksCmZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoYixkKTp0aGlzLnRyaWdnZXIoYil9O2lmKGMuYXR0ckZuKWMuYXR0ckZuW2JdPXRydWV9KTtBLmF0dGFjaEV2ZW50JiYhQS5hZGRFdmVudExpc3RlbmVyJiZBLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gYy5jYWNoZSlpZihjLmNhY2hlW2FdLmhhbmRsZSl0cnl7Yy5ldmVudC5yZW1vdmUoYy5jYWNoZVthXS5oYW5kbGUuZWxlbSl9Y2F0Y2goYil7fX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGEoZyl7Zm9yKHZhciBoPSIiLGwsbT0wO2dbbV07bSsrKXtsPWdbbV07aWYobC5ub2RlVHlwZT09PTN8fGwubm9kZVR5cGU9PT00KWgrPWwubm9kZVZhbHVlO2Vsc2UgaWYobC5ub2RlVHlwZSE9PTgpaCs9YShsLmNoaWxkTm9kZXMpfXJldHVybiBofWZ1bmN0aW9uIGIoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTsKaWYodCl7dD10W2ddO2Zvcih2YXIgeT1mYWxzZTt0Oyl7aWYodC5zaXpjYWNoZT09PWwpe3k9bVt0LnNpenNldF07YnJlYWt9aWYodC5ub2RlVHlwZT09PTEmJiFwKXt0LnNpemNhY2hlPWw7dC5zaXpzZXQ9cX1pZih0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oKXt5PXQ7YnJlYWt9dD10W2ddfW1bcV09eX19fWZ1bmN0aW9uIGQoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTtpZih0KXt0PXRbZ107Zm9yKHZhciB5PWZhbHNlO3Q7KXtpZih0LnNpemNhY2hlPT09bCl7eT1tW3Quc2l6c2V0XTticmVha31pZih0Lm5vZGVUeXBlPT09MSl7aWYoIXApe3Quc2l6Y2FjaGU9bDt0LnNpenNldD1xfWlmKHR5cGVvZiBoIT09InN0cmluZyIpe2lmKHQ9PT1oKXt5PXRydWU7YnJlYWt9fWVsc2UgaWYoay5maWx0ZXIoaCxbdF0pLmxlbmd0aD4wKXt5PXQ7YnJlYWt9fXQ9dFtnXX1tW3FdPXl9fX12YXIgZj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKZT0wLGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPWZhbHNlLG89dHJ1ZTtbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7bz1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGcsaCxsLG0pe2w9bHx8W107dmFyIHE9aD1ofHxzO2lmKGgubm9kZVR5cGUhPT0xJiZoLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGchPT0ic3RyaW5nIilyZXR1cm4gbDtmb3IodmFyIHA9W10sdix0LHksUyxIPXRydWUsTT14KGgpLEk9ZzsoZi5leGVjKCIiKSx2PWYuZXhlYyhJKSkhPT1udWxsOyl7ST12WzNdO3AucHVzaCh2WzFdKTtpZih2WzJdKXtTPXZbM107YnJlYWt9fWlmKHAubGVuZ3RoPjEmJnIuZXhlYyhnKSlpZihwLmxlbmd0aD09PTImJm4ucmVsYXRpdmVbcFswXV0pdD1nYShwWzBdK3BbMV0saCk7ZWxzZSBmb3IodD1uLnJlbGF0aXZlW3BbMF1dP1toXTprKHAuc2hpZnQoKSxoKTtwLmxlbmd0aDspe2c9cC5zaGlmdCgpO2lmKG4ucmVsYXRpdmVbZ10pZys9cC5zaGlmdCgpOwp0PWdhKGcsdCl9ZWxzZXtpZighbSYmcC5sZW5ndGg+MSYmaC5ub2RlVHlwZT09PTkmJiFNJiZuLm1hdGNoLklELnRlc3QocFswXSkmJiFuLm1hdGNoLklELnRlc3QocFtwLmxlbmd0aC0xXSkpe3Y9ay5maW5kKHAuc2hpZnQoKSxoLE0pO2g9di5leHByP2suZmlsdGVyKHYuZXhwcix2LnNldClbMF06di5zZXRbMF19aWYoaCl7dj1tP3tleHByOnAucG9wKCksc2V0OnoobSl9OmsuZmluZChwLnBvcCgpLHAubGVuZ3RoPT09MSYmKHBbMF09PT0ifiJ8fHBbMF09PT0iKyIpJiZoLnBhcmVudE5vZGU/aC5wYXJlbnROb2RlOmgsTSk7dD12LmV4cHI/ay5maWx0ZXIodi5leHByLHYuc2V0KTp2LnNldDtpZihwLmxlbmd0aD4wKXk9eih0KTtlbHNlIEg9ZmFsc2U7Zm9yKDtwLmxlbmd0aDspe3ZhciBEPXAucG9wKCk7dj1EO2lmKG4ucmVsYXRpdmVbRF0pdj1wLnBvcCgpO2Vsc2UgRD0iIjtpZih2PT1udWxsKXY9aDtuLnJlbGF0aXZlW0RdKHksdixNKX19ZWxzZSB5PVtdfXl8fCh5PXQpO3l8fGsuZXJyb3IoRHx8CmcpO2lmKGouY2FsbCh5KT09PSJbb2JqZWN0IEFycmF5XSIpaWYoSClpZihoJiZoLm5vZGVUeXBlPT09MSlmb3IoZz0wO3lbZ10hPW51bGw7ZysrKXtpZih5W2ddJiYoeVtnXT09PXRydWV8fHlbZ10ubm9kZVR5cGU9PT0xJiZFKGgseVtnXSkpKWwucHVzaCh0W2ddKX1lbHNlIGZvcihnPTA7eVtnXSE9bnVsbDtnKyspeVtnXSYmeVtnXS5ub2RlVHlwZT09PTEmJmwucHVzaCh0W2ddKTtlbHNlIGwucHVzaC5hcHBseShsLHkpO2Vsc2Ugeih5LGwpO2lmKFMpe2soUyxxLGwsbSk7ay51bmlxdWVTb3J0KGwpfXJldHVybiBsfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZyl7aWYoQil7aT1vO2cuc29ydChCKTtpZihpKWZvcih2YXIgaD0xO2g8Zy5sZW5ndGg7aCsrKWdbaF09PT1nW2gtMV0mJmcuc3BsaWNlKGgtLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVzPWZ1bmN0aW9uKGcsaCl7cmV0dXJuIGsoZyxudWxsLG51bGwsaCl9O2suZmluZD1mdW5jdGlvbihnLGgsbCl7dmFyIG0scTtpZighZylyZXR1cm5bXTsKZm9yKHZhciBwPTAsdj1uLm9yZGVyLmxlbmd0aDtwPHY7cCsrKXt2YXIgdD1uLm9yZGVyW3BdO2lmKHE9bi5sZWZ0TWF0Y2hbdF0uZXhlYyhnKSl7dmFyIHk9cVsxXTtxLnNwbGljZSgxLDEpO2lmKHkuc3Vic3RyKHkubGVuZ3RoLTEpIT09IlxcIil7cVsxXT0ocVsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO209bi5maW5kW3RdKHEsaCxsKTtpZihtIT1udWxsKXtnPWcucmVwbGFjZShuLm1hdGNoW3RdLCIiKTticmVha319fX1tfHwobT1oLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3JldHVybntzZXQ6bSxleHByOmd9fTtrLmZpbHRlcj1mdW5jdGlvbihnLGgsbCxtKXtmb3IodmFyIHE9ZyxwPVtdLHY9aCx0LHksUz1oJiZoWzBdJiZ4KGhbMF0pO2cmJmgubGVuZ3RoOyl7Zm9yKHZhciBIIGluIG4uZmlsdGVyKWlmKCh0PW4ubGVmdE1hdGNoW0hdLmV4ZWMoZykpIT1udWxsJiZ0WzJdKXt2YXIgTT1uLmZpbHRlcltIXSxJLEQ7RD10WzFdO3k9ZmFsc2U7dC5zcGxpY2UoMSwxKTtpZihELnN1YnN0cihELmxlbmd0aC0KMSkhPT0iXFwiKXtpZih2PT09cClwPVtdO2lmKG4ucHJlRmlsdGVyW0hdKWlmKHQ9bi5wcmVGaWx0ZXJbSF0odCx2LGwscCxtLFMpKXtpZih0PT09dHJ1ZSljb250aW51ZX1lbHNlIHk9ST10cnVlO2lmKHQpZm9yKHZhciBVPTA7KEQ9dltVXSkhPW51bGw7VSsrKWlmKEQpe0k9TShELHQsVSx2KTt2YXIgSGE9bV4hIUk7aWYobCYmSSE9bnVsbClpZihIYSl5PXRydWU7ZWxzZSB2W1VdPWZhbHNlO2Vsc2UgaWYoSGEpe3AucHVzaChEKTt5PXRydWV9fWlmKEkhPT13KXtsfHwodj1wKTtnPWcucmVwbGFjZShuLm1hdGNoW0hdLCIiKTtpZigheSlyZXR1cm5bXTticmVha319fWlmKGc9PT1xKWlmKHk9PW51bGwpay5lcnJvcihnKTtlbHNlIGJyZWFrO3E9Z31yZXR1cm4gdn07ay5lcnJvcj1mdW5jdGlvbihnKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2c7fTt2YXIgbj1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKS8sCkNMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylccyooPzooXFM/PSlccyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCotXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5nZXRBdHRyaWJ1dGUoImhyZWYiKX19LApyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIixtPWwmJiEvXFcvLnRlc3QoaCk7bD1sJiYhbTtpZihtKWg9aC50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHE9Zy5sZW5ndGgscDttPHE7bSsrKWlmKHA9Z1ttXSl7Zm9yKDsocD1wLnByZXZpb3VzU2libGluZykmJnAubm9kZVR5cGUhPT0xOyk7Z1ttXT1sfHxwJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP3B8fGZhbHNlOnA9PT1ofWwmJmsuZmlsdGVyKGgsZyx0cnVlKX0sIj4iOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIjtpZihsJiYhL1xXLy50ZXN0KGgpKXtoPWgudG9Mb3dlckNhc2UoKTtmb3IodmFyIG09MCxxPWcubGVuZ3RoO208cTttKyspe3ZhciBwPWdbbV07aWYocCl7bD1wLnBhcmVudE5vZGU7Z1ttXT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP2w6ZmFsc2V9fX1lbHNle209MDtmb3IocT1nLmxlbmd0aDttPHE7bSsrKWlmKHA9Z1ttXSlnW21dPQpsP3AucGFyZW50Tm9kZTpwLnBhcmVudE5vZGU9PT1oO2wmJmsuZmlsdGVyKGgsZyx0cnVlKX19LCIiOmZ1bmN0aW9uKGcsaCxsKXt2YXIgbT1lKysscT1kO2lmKHR5cGVvZiBoPT09InN0cmluZyImJiEvXFcvLnRlc3QoaCkpe3ZhciBwPWg9aC50b0xvd2VyQ2FzZSgpO3E9Yn1xKCJwYXJlbnROb2RlIixoLG0sZyxwLGwpfSwifiI6ZnVuY3Rpb24oZyxoLGwpe3ZhciBtPWUrKyxxPWQ7aWYodHlwZW9mIGg9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChoKSl7dmFyIHA9aD1oLnRvTG93ZXJDYXNlKCk7cT1ifXEoInByZXZpb3VzU2libGluZyIsaCxtLGcscCxsKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcsaCxsKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhbClyZXR1cm4oZz1oLmdldEVsZW1lbnRCeUlkKGdbMV0pKT9bZ106W119LE5BTUU6ZnVuY3Rpb24oZyxoKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgbD1bXTsKaD1oLmdldEVsZW1lbnRzQnlOYW1lKGdbMV0pO2Zvcih2YXIgbT0wLHE9aC5sZW5ndGg7bTxxO20rKyloW21dLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09Z1sxXSYmbC5wdXNoKGhbbV0pO3JldHVybiBsLmxlbmd0aD09PTA/bnVsbDpsfX0sVEFHOmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihwKXJldHVybiBnO3A9MDtmb3IodmFyIHY7KHY9aFtwXSkhPW51bGw7cCsrKWlmKHYpaWYocV4odi5jbGFzc05hbWUmJigiICIrdi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcbl0vZywiICIpLmluZGV4T2YoZyk+PTApKWx8fG0ucHVzaCh2KTtlbHNlIGlmKGwpaFtwXT1mYWxzZTtyZXR1cm4gZmFsc2V9LElEOmZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnJlcGxhY2UoL1xcL2csIiIpfSxUQUc6ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMV0udG9Mb3dlckNhc2UoKX0sCkNISUxEOmZ1bmN0aW9uKGcpe2lmKGdbMV09PT0ibnRoIil7dmFyIGg9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1oWzFdKyhoWzJdfHwxKS0wO2dbM109aFszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtoPWdbMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIXAmJm4uYXR0ck1hcFtoXSlnWzFdPW4uYXR0ck1hcFtoXTtpZihnWzJdPT09In49IilnWzRdPSIgIitnWzRdKyIgIjtyZXR1cm4gZ30sUFNFVURPOmZ1bmN0aW9uKGcsaCxsLG0scSl7aWYoZ1sxXT09PSJub3QiKWlmKChmLmV4ZWMoZ1szXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChnWzNdKSlnWzNdPWsoZ1szXSxudWxsLG51bGwsaCk7ZWxzZXtnPWsuZmlsdGVyKGdbM10saCxsLHRydWVecSk7bHx8bS5wdXNoLmFwcGx5KG0sCmcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG4ubWF0Y2guUE9TLnRlc3QoZ1swXSl8fG4ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZ30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1mYWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihnKXtyZXR1cm4gZy5jaGVja2VkPT09dHJ1ZX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFnLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihnLGgsbCl7cmV0dXJuISFrKGxbM10sZykubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oZyl7cmV0dXJuL2hcZC9pLnRlc3QoZy5ub2RlTmFtZSl9LAp0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFkaW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5jdGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihnKXtyZXR1cm4ic3VibWl0Ij09PWcudHlwZX0saW1hZ2U6ZnVuY3Rpb24oZyl7cmV0dXJuImltYWdlIj09PWcudHlwZX0scmVzZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuInJlc2V0Ij09PWcudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24iPT09Zy50eXBlfHxnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oZyl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGcubm9kZU5hbWUpfX0sCnNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGg9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaCxsLG0pe3JldHVybiBoPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGgpe3JldHVybiBoJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaCUyPT09MX0sbHQ6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPGxbM10tMH0sZ3Q6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPmxbM10tMH0sbnRoOmZ1bmN0aW9uKGcsaCxsKXtyZXR1cm4gbFszXS0wPT09aH0sZXE6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBsWzNdLTA9PT1ofX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oZyxoLGwsbSl7dmFyIHE9aFsxXSxwPW4uZmlsdGVyc1txXTtpZihwKXJldHVybiBwKGcsbCxoLG0pO2Vsc2UgaWYocT09PSJjb250YWlucyIpcmV0dXJuKGcudGV4dENvbnRlbnR8fGcuaW5uZXJUZXh0fHxhKFtnXSl8fCIiKS5pbmRleE9mKGhbM10pPj0wO2Vsc2UgaWYocT09PSJub3QiKXtoPQpoWzNdO2w9MDtmb3IobT1oLmxlbmd0aDtsPG07bCsrKWlmKGhbbF09PT1nKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1lbHNlIGsuZXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrcSl9LENISUxEOmZ1bmN0aW9uKGcsaCl7dmFyIGw9aFsxXSxtPWc7c3dpdGNoKGwpe2Nhc2UgIm9ubHkiOmNhc2UgImZpcnN0Ijpmb3IoO209bS5wcmV2aW91c1NpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtpZihsPT09ImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOmw9aFsyXTt2YXIgcT1oWzNdO2lmKGw9PT0xJiZxPT09MClyZXR1cm4gdHJ1ZTtoPWhbMF07dmFyIHA9Zy5wYXJlbnROb2RlO2lmKHAmJihwLnNpemNhY2hlIT09aHx8IWcubm9kZUluZGV4KSl7dmFyIHY9MDtmb3IobT1wLmZpcnN0Q2hpbGQ7bTttPQptLm5leHRTaWJsaW5nKWlmKG0ubm9kZVR5cGU9PT0xKW0ubm9kZUluZGV4PSsrdjtwLnNpemNhY2hlPWh9Zz1nLm5vZGVJbmRleC1xO3JldHVybiBsPT09MD9nPT09MDpnJWw9PT0wJiZnL2w+PTB9fSxJRDpmdW5jdGlvbihnLGgpe3JldHVybiBnLm5vZGVUeXBlPT09MSYmZy5nZXRBdHRyaWJ1dGUoImlkIik9PT1ofSxUQUc6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaD09PSIqIiYmZy5ub2RlVHlwZT09PTF8fGcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWh9LENMQVNTOmZ1bmN0aW9uKGcsaCl7cmV0dXJuKCIgIisoZy5jbGFzc05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaCk+LTF9LEFUVFI6ZnVuY3Rpb24oZyxoKXt2YXIgbD1oWzFdO2c9bi5hdHRySGFuZGxlW2xdP24uYXR0ckhhbmRsZVtsXShnKTpnW2xdIT1udWxsP2dbbF06Zy5nZXRBdHRyaWJ1dGUobCk7bD1nKyIiO3ZhciBtPWhbMl07aD1oWzRdO3JldHVybiBnPT1udWxsP209PT0iIT0iOm09PT0KIj0iP2w9PT1oOm09PT0iKj0iP2wuaW5kZXhPZihoKT49MDptPT09In49Ij8oIiAiK2wrIiAiKS5pbmRleE9mKGgpPj0wOiFoP2wmJmchPT1mYWxzZTptPT09IiE9Ij9sIT09aDptPT09Il49Ij9sLmluZGV4T2YoaCk9PT0wOm09PT0iJD0iP2wuc3Vic3RyKGwubGVuZ3RoLWgubGVuZ3RoKT09PWg6bT09PSJ8PSI/bD09PWh8fGwuc3Vic3RyKDAsaC5sZW5ndGgrMSk9PT1oKyItIjpmYWxzZX0sUE9TOmZ1bmN0aW9uKGcsaCxsLG0pe3ZhciBxPW4uc2V0RmlsdGVyc1toWzJdXTtpZihxKXJldHVybiBxKGcsbCxoLG0pfX19LHI9bi5tYXRjaC5QT1M7Zm9yKHZhciB1IGluIG4ubWF0Y2gpe24ubWF0Y2hbdV09bmV3IFJlZ0V4cChuLm1hdGNoW3VdLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO24ubGVmdE1hdGNoW3VdPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStuLm1hdGNoW3VdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csZnVuY3Rpb24oZywKaCl7cmV0dXJuIlxcIisoaC0wKzEpfSkpfXZhciB6PWZ1bmN0aW9uKGcsaCl7Zz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnLDApO2lmKGgpe2gucHVzaC5hcHBseShoLGcpO3JldHVybiBofXJldHVybiBnfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKX1jYXRjaChDKXt6PWZ1bmN0aW9uKGcsaCl7aD1ofHxbXTtpZihqLmNhbGwoZyk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZyk7ZWxzZSBpZih0eXBlb2YgZy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIGw9MCxtPWcubGVuZ3RoO2w8bTtsKyspaC5wdXNoKGdbbF0pO2Vsc2UgZm9yKGw9MDtnW2xdO2wrKyloLnB1c2goZ1tsXSk7cmV0dXJuIGh9fXZhciBCO2lmKHMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKUI9ZnVuY3Rpb24oZyxoKXtpZighZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8CiFoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtpZihnPT1oKWk9dHJ1ZTtyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfWc9Zy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihoKSY0Py0xOmc9PT1oPzA6MTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9O2Vsc2UgaWYoInNvdXJjZUluZGV4ImluIHMuZG9jdW1lbnRFbGVtZW50KUI9ZnVuY3Rpb24oZyxoKXtpZighZy5zb3VyY2VJbmRleHx8IWguc291cmNlSW5kZXgpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLnNvdXJjZUluZGV4Py0xOjF9Zz1nLnNvdXJjZUluZGV4LWguc291cmNlSW5kZXg7aWYoZz09PTApaT10cnVlO3JldHVybiBnfTtlbHNlIGlmKHMuY3JlYXRlUmFuZ2UpQj1mdW5jdGlvbihnLGgpe2lmKCFnLm93bmVyRG9jdW1lbnR8fCFoLm93bmVyRG9jdW1lbnQpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLm93bmVyRG9jdW1lbnQ/LTE6MX12YXIgbD1nLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxtPQpoLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtsLnNldFN0YXJ0KGcsMCk7bC5zZXRFbmQoZywwKTttLnNldFN0YXJ0KGgsMCk7bS5zZXRFbmQoaCwwKTtnPWwuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxtKTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9OyhmdW5jdGlvbigpe3ZhciBnPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksaD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtnLmlubmVySFRNTD0iPGEgbmFtZT0nIitoKyInLz4iO3ZhciBsPXMuZG9jdW1lbnRFbGVtZW50O2wuaW5zZXJ0QmVmb3JlKGcsbC5maXJzdENoaWxkKTtpZihzLmdldEVsZW1lbnRCeUlkKGgpKXtuLmZpbmQuSUQ9ZnVuY3Rpb24obSxxLHApe2lmKHR5cGVvZiBxLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFwKXJldHVybihxPXEuZ2V0RWxlbWVudEJ5SWQobVsxXSkpP3EuaWQ9PT1tWzFdfHx0eXBlb2YgcS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJgpxLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09bVsxXT9bcV06dzpbXX07bi5maWx0ZXIuSUQ9ZnVuY3Rpb24obSxxKXt2YXIgcD10eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJm0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbS5ub2RlVHlwZT09PTEmJnAmJnAubm9kZVZhbHVlPT09cX19bC5yZW1vdmVDaGlsZChnKTtsPWc9bnVsbH0pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFwcGVuZENoaWxkKHMuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCluLmZpbmQuVEFHPWZ1bmN0aW9uKGgsbCl7bD1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKGhbMV0pO2lmKGhbMV09PT0iKiIpe2g9W107Zm9yKHZhciBtPTA7bFttXTttKyspbFttXS5ub2RlVHlwZT09PTEmJmgucHVzaChsW21dKTtsPWh9cmV0dXJuIGx9O2cuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IjsKaWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpbi5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaCl7cmV0dXJuIGguZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTtzLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGc9ayxoPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7aC5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighKGgucXVlcnlTZWxlY3RvckFsbCYmaC5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApKXtrPWZ1bmN0aW9uKG0scSxwLHYpe3E9cXx8cztpZighdiYmcS5ub2RlVHlwZT09PTkmJiF4KHEpKXRyeXtyZXR1cm4geihxLnF1ZXJ5U2VsZWN0b3JBbGwobSkscCl9Y2F0Y2godCl7fXJldHVybiBnKG0scSxwLHYpfTtmb3IodmFyIGwgaW4gZylrW2xdPWdbbF07aD1udWxsfX0oKTsKKGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7bi5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO24uZmluZC5DTEFTUz1mdW5jdGlvbihoLGwsbSl7aWYodHlwZW9mIGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhbSlyZXR1cm4gbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMV0pfTtnPW51bGx9fX0pKCk7dmFyIEU9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihnLGgpe3JldHVybiEhKGcuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaCkmMTYpfToKZnVuY3Rpb24oZyxoKXtyZXR1cm4gZyE9PWgmJihnLmNvbnRhaW5zP2cuY29udGFpbnMoaCk6dHJ1ZSl9LHg9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9KGc/Zy5vd25lckRvY3VtZW50fHxnOjApLmRvY3VtZW50RWxlbWVudCk/Zy5ub2RlTmFtZSE9PSJIVE1MIjpmYWxzZX0sZ2E9ZnVuY3Rpb24oZyxoKXt2YXIgbD1bXSxtPSIiLHE7Zm9yKGg9aC5ub2RlVHlwZT9baF06aDtxPW4ubWF0Y2guUFNFVURPLmV4ZWMoZyk7KXttKz1xWzBdO2c9Zy5yZXBsYWNlKG4ubWF0Y2guUFNFVURPLCIiKX1nPW4ucmVsYXRpdmVbZ10/ZysiKiI6ZztxPTA7Zm9yKHZhciBwPWgubGVuZ3RoO3E8cDtxKyspayhnLGhbcV0sbCk7cmV0dXJuIGsuZmlsdGVyKG0sbCl9O2MuZmluZD1rO2MuZXhwcj1rLnNlbGVjdG9ycztjLmV4cHJbIjoiXT1jLmV4cHIuZmlsdGVycztjLnVuaXF1ZT1rLnVuaXF1ZVNvcnQ7Yy50ZXh0PWE7Yy5pc1hNTERvYz14O2MuY29udGFpbnM9RX0pKCk7dmFyIGViPS9VbnRpbCQvLGZiPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLApnYj0vLC87Uj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIElhPWZ1bmN0aW9uKGEsYixkKXtpZihjLmlzRnVuY3Rpb24oYikpcmV0dXJuIGMuZ3JlcChhLGZ1bmN0aW9uKGUsail7cmV0dXJuISFiLmNhbGwoZSxqLGUpPT09ZH0pO2Vsc2UgaWYoYi5ub2RlVHlwZSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1iPT09ZH0pO2Vsc2UgaWYodHlwZW9mIGI9PT0ic3RyaW5nIil7dmFyIGY9Yy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7aWYoVWEudGVzdChiKSlyZXR1cm4gYy5maWx0ZXIoYixmLCFkKTtlbHNlIGI9Yy5maWx0ZXIoYixmKX1yZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGMuaW5BcnJheShlLGIpPj0wPT09ZH0pfTtjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxmPTAsZT10aGlzLmxlbmd0aDtmPGU7ZisrKXtkPWIubGVuZ3RoOwpjLmZpbmQoYSx0aGlzW2ZdLGIpO2lmKGY+MClmb3IodmFyIGo9ZDtqPGIubGVuZ3RoO2orKylmb3IodmFyIGk9MDtpPGQ7aSsrKWlmKGJbaV09PT1iW2pdKXtiLnNwbGljZShqLS0sMSk7YnJlYWt9fXJldHVybiBifSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9YyhhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGQ9MCxmPWIubGVuZ3RoO2Q8ZjtkKyspaWYoYy5jb250YWlucyh0aGlzLGJbZF0pKXJldHVybiB0cnVlfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soSWEodGhpcyxhLGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhJYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2lmKGMuaXNBcnJheShhKSl7dmFyIGQ9W10sZj10aGlzWzBdLGUsaj0Ke30saTtpZihmJiZhLmxlbmd0aCl7ZT0wO2Zvcih2YXIgbz1hLmxlbmd0aDtlPG87ZSsrKXtpPWFbZV07altpXXx8KGpbaV09Yy5leHByLm1hdGNoLlBPUy50ZXN0KGkpP2MoaSxifHx0aGlzLmNvbnRleHQpOmkpfWZvcig7ZiYmZi5vd25lckRvY3VtZW50JiZmIT09Yjspe2ZvcihpIGluIGope2U9altpXTtpZihlLmpxdWVyeT9lLmluZGV4KGYpPi0xOmMoZikuaXMoZSkpe2QucHVzaCh7c2VsZWN0b3I6aSxlbGVtOmZ9KTtkZWxldGUgaltpXX19Zj1mLnBhcmVudE5vZGV9fXJldHVybiBkfXZhciBrPWMuZXhwci5tYXRjaC5QT1MudGVzdChhKT9jKGEsYnx8dGhpcy5jb250ZXh0KTpudWxsO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuLHIpe2Zvcig7ciYmci5vd25lckRvY3VtZW50JiZyIT09Yjspe2lmKGs/ay5pbmRleChyKT4tMTpjKHIpLmlzKGEpKXJldHVybiByO3I9ci5wYXJlbnROb2RlfXJldHVybiBudWxsfSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PQoic3RyaW5nIilyZXR1cm4gYy5pbkFycmF5KHRoaXNbMF0sYT9jKGEpOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKSk7cmV0dXJuIGMuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe2E9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhpcy5jb250ZXh0KTpjLm1ha2VBcnJheShhKTtiPWMubWVyZ2UodGhpcy5nZXQoKSxhKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socWEoYVswXSl8fHFhKGJbMF0pP2I6Yy51bmlxdWUoYikpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJlbnROb2RlIiwKZCl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT8KYS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpjLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZil7dmFyIGU9Yy5tYXAodGhpcyxiLGQpO2ViLnRlc3QoYSl8fChmPWQpO2lmKGYmJnR5cGVvZiBmPT09InN0cmluZyIpZT1jLmZpbHRlcihmLGUpO2U9dGhpcy5sZW5ndGg+MT9jLnVuaXF1ZShlKTplO2lmKCh0aGlzLmxlbmd0aD4xfHxnYi50ZXN0KGYpKSYmZmIudGVzdChhKSllPWUucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUi5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KTtjLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixkKXtpZihkKWE9Ijpub3QoIithKyIpIjtyZXR1cm4gYy5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj1bXTtmb3IoYT1hW2JdO2EmJmEubm9kZVR5cGUhPT05JiYoZD09PXd8fGEubm9kZVR5cGUhPT0xfHwhYyhhKS5pcyhkKSk7KXthLm5vZGVUeXBlPT09CjEmJmYucHVzaChhKTthPWFbYl19cmV0dXJuIGZ9LG50aDpmdW5jdGlvbihhLGIsZCl7Yj1ifHwxO2Zvcih2YXIgZj0wO2E7YT1hW2RdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2Y9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPVtdO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmZC5wdXNoKGEpO3JldHVybiBkfX0pO3ZhciBKYT0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFY9L15ccysvLEthPS8oPChbXHc6XSspW14+XSo/KVwvPi9nLGhiPS9eKD86YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkkL2ksTGE9LzwoW1x3Ol0rKS8saWI9Lzx0Ym9keS9pLGpiPS88fCYjP1x3KzsvLHRhPS88c2NyaXB0fDxvYmplY3R8PGVtYmVkfDxvcHRpb258PHN0eWxlL2ksdWE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTWE9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBoYi50ZXN0KGQpPwphOmIrIj48LyIrZCsiPiJ9LEY9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Ri5vcHRncm91cD1GLm9wdGlvbjtGLnRib2R5PUYudGZvb3Q9Ri5jb2xncm91cD1GLmNhcHRpb249Ri50aGVhZDtGLnRoPUYudGQ7aWYoIWMuc3VwcG9ydC5odG1sU2VyaWFsaXplKUYuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il07Yy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGQ9CmModGhpcyk7ZC50ZXh0KGEuY2FsbCh0aGlzLGIsZC50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT09Im9iamVjdCImJmEhPT13KXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gYy50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe2ModGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxkKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1jKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSh0cnVlKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pO2IubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXM7ZC5maXJzdENoaWxkJiZkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xOylkPWQuZmlyc3RDaGlsZDtyZXR1cm4gZH0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sCndyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtjKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Yyh0aGlzKSxkPWIuY29udGVudHMoKTtkLmxlbmd0aD9kLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS53cmFwQWxsKGEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Yyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LApwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix0aGlzKX0pO2Vsc2UgaWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Yyhhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYiwKdGhpcy5uZXh0U2libGluZyl9KTtlbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGMoYXJndW1lbnRzWzBdKS50b0FycmF5KCkpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPTAsZjsoZj10aGlzW2RdKSE9bnVsbDtkKyspaWYoIWF8fGMuZmlsdGVyKGEsW2ZdKS5sZW5ndGgpe2lmKCFiJiZmLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEoZi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtjLmNsZWFuRGF0YShbZl0pfWYucGFyZW50Tm9kZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfXJldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsrKWZvcihiLm5vZGVUeXBlPT09MSYmYy5jbGVhbkRhdGEoYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtiLmZpcnN0Q2hpbGQ7KWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKTsKcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFwKGZ1bmN0aW9uKCl7aWYoIWMuc3VwcG9ydC5ub0Nsb25lRXZlbnQmJiFjLmlzWE1MRG9jKHRoaXMpKXt2YXIgZD10aGlzLm91dGVySFRNTCxmPXRoaXMub3duZXJEb2N1bWVudDtpZighZCl7ZD1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZU5vZGUodHJ1ZSkpO2Q9ZC5pbm5lckhUTUx9cmV0dXJuIGMuY2xlYW4oW2QucmVwbGFjZShKYSwiIikucmVwbGFjZSgvPShbXj0iJz5cc10rXC8pPi9nLCc9IiQxIj4nKS5yZXBsYWNlKFYsIiIpXSxmKVswXX1lbHNlIHJldHVybiB0aGlzLmNsb25lTm9kZSh0cnVlKX0pO2lmKGE9PT10cnVlKXtyYSh0aGlzLGIpO3JhKHRoaXMuZmluZCgiKiIpLGIuZmluZCgiKiIpKX1yZXR1cm4gYn0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09dylyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShKYSwKIiIpOm51bGw7ZWxzZSBpZih0eXBlb2YgYT09PSJzdHJpbmciJiYhdGEudGVzdChhKSYmKGMuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVYudGVzdChhKSkmJiFGWyhMYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoS2EsTWEpO3RyeXtmb3IodmFyIGI9MCxkPXRoaXMubGVuZ3RoO2I8ZDtiKyspaWYodGhpc1tiXS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKHRoaXNbYl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7dGhpc1tiXS5pbm5lckhUTUw9YX19Y2F0Y2goZil7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBjLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBqPWModGhpcyksaT1qLmh0bWwoKTtqLmVtcHR5KCkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGUsaSl9KX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJgp0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWModGhpcyksZj1kLmh0bWwoKTtkLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZikpfSk7aWYodHlwZW9mIGEhPT0ic3RyaW5nIilhPWMoYSkuZGV0YWNoKCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsZD10aGlzLnBhcmVudE5vZGU7Yyh0aGlzKS5yZW1vdmUoKTtiP2MoYikuYmVmb3JlKGEpOmMoZCkuYXBwZW5kKGEpfSl9ZWxzZSByZXR1cm4gdGhpcy5wdXNoU3RhY2soYyhjLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSx0cnVlKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYodSl7cmV0dXJuIGMubm9kZU5hbWUodSwidGFibGUiKT91LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHwKdS5hcHBlbmRDaGlsZCh1Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6dX12YXIgZSxqLGk9YVswXSxvPVtdLGs7aWYoIWMuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGk9PT0ic3RyaW5nIiYmdWEudGVzdChpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS5kb21NYW5pcChhLGIsZCx0cnVlKX0pO2lmKGMuaXNGdW5jdGlvbihpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHUpe3ZhciB6PWModGhpcyk7YVswXT1pLmNhbGwodGhpcyx1LGI/ei5odG1sKCk6dyk7ei5kb21NYW5pcChhLGIsZCl9KTtpZih0aGlzWzBdKXtlPWkmJmkucGFyZW50Tm9kZTtlPWMuc3VwcG9ydC5wYXJlbnROb2RlJiZlJiZlLm5vZGVUeXBlPT09MTEmJmUuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD97ZnJhZ21lbnQ6ZX06c2EoYSx0aGlzLG8pO2s9ZS5mcmFnbWVudDtpZihqPWsuY2hpbGROb2Rlcy5sZW5ndGg9PT0KMT8oaz1rLmZpcnN0Q2hpbGQpOmsuZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGosInRyIik7Zm9yKHZhciBuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKWQuY2FsbChiP2YodGhpc1tuXSxqKTp0aGlzW25dLG4+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/ay5jbG9uZU5vZGUodHJ1ZSk6ayl9by5sZW5ndGgmJmMuZWFjaChvLFFhKX1yZXR1cm4gdGhpc319KTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCl7dmFyIGY9W107ZD1jKGQpO3ZhciBlPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGUmJmUubm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmQubGVuZ3RoPT09MSl7ZFtiXSh0aGlzWzBdKTsKcmV0dXJuIHRoaXN9ZWxzZXtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPShlPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtjLmZuW2JdLmFwcGx5KGMoZFtlXSksaSk7Zj1mLmNvbmNhdChpKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGQuc2VsZWN0b3IpfX19KTtjLmV4dGVuZCh7Y2xlYW46ZnVuY3Rpb24oYSxiLGQsZil7Yj1ifHxzO2lmKHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PT0idW5kZWZpbmVkIiliPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxzO2Zvcih2YXIgZT1bXSxqPTAsaTsoaT1hW2pdKSE9bnVsbDtqKyspe2lmKHR5cGVvZiBpPT09Im51bWJlciIpaSs9IiI7aWYoaSl7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIWpiLnRlc3QoaSkpaT1iLmNyZWF0ZVRleHROb2RlKGkpO2Vsc2UgaWYodHlwZW9mIGk9PT0ic3RyaW5nIil7aT1pLnJlcGxhY2UoS2EsTWEpO3ZhciBvPShMYS5leGVjKGkpfHxbIiIsCiIiXSlbMV0udG9Mb3dlckNhc2UoKSxrPUZbb118fEYuX2RlZmF1bHQsbj1rWzBdLHI9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3Ioci5pbm5lckhUTUw9a1sxXStpK2tbMl07bi0tOylyPXIubGFzdENoaWxkO2lmKCFjLnN1cHBvcnQudGJvZHkpe249aWIudGVzdChpKTtvPW89PT0idGFibGUiJiYhbj9yLmZpcnN0Q2hpbGQmJnIuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP3IuY2hpbGROb2RlczpbXTtmb3Ioaz1vLmxlbmd0aC0xO2s+PTA7LS1rKWMubm9kZU5hbWUob1trXSwidGJvZHkiKSYmIW9ba10uY2hpbGROb2Rlcy5sZW5ndGgmJm9ba10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvW2tdKX0hYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZWLnRlc3QoaSkmJnIuaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoVi5leGVjKGkpWzBdKSxyLmZpcnN0Q2hpbGQpO2k9ci5jaGlsZE5vZGVzfWlmKGkubm9kZVR5cGUpZS5wdXNoKGkpO2Vsc2UgZT0KYy5tZXJnZShlLGkpfX1pZihkKWZvcihqPTA7ZVtqXTtqKyspaWYoZiYmYy5ub2RlTmFtZShlW2pdLCJzY3JpcHQiKSYmKCFlW2pdLnR5cGV8fGVbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWYucHVzaChlW2pdLnBhcmVudE5vZGU/ZVtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVbal0pOmVbal0pO2Vsc2V7ZVtqXS5ub2RlVHlwZT09PTEmJmUuc3BsaWNlLmFwcGx5KGUsW2orMSwwXS5jb25jYXQoYy5tYWtlQXJyYXkoZVtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSk7ZC5hcHBlbmRDaGlsZChlW2pdKX1yZXR1cm4gZX0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGY9Yy5jYWNoZSxlPWMuZXZlbnQuc3BlY2lhbCxqPWMuc3VwcG9ydC5kZWxldGVFeHBhbmRvLGk9MCxvOyhvPWFbaV0pIT1udWxsO2krKylpZihkPW9bYy5leHBhbmRvXSl7Yj1mW2RdO2lmKGIuZXZlbnRzKWZvcih2YXIgayBpbiBiLmV2ZW50cyllW2tdPwpjLmV2ZW50LnJlbW92ZShvLGspOkNhKG8sayxiLmhhbmRsZSk7aWYoailkZWxldGUgb1tjLmV4cGFuZG9dO2Vsc2Ugby5yZW1vdmVBdHRyaWJ1dGUmJm8ucmVtb3ZlQXR0cmlidXRlKGMuZXhwYW5kbyk7ZGVsZXRlIGZbZF19fX0pO3ZhciBrYj0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxOYT0vYWxwaGFcKFteKV0qXCkvLE9hPS9vcGFjaXR5PShbXildKikvLGhhPS9mbG9hdC9pLGlhPS8tKFthLXpdKS9pZyxsYj0vKFtBLVpdKS9nLG1iPS9eLT9cZCsoPzpweCk/JC9pLG5iPS9eLT9cZC8sb2I9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LHBiPVsiTGVmdCIsIlJpZ2h0Il0scWI9WyJUb3AiLCJCb3R0b20iXSxyYj1zLmRlZmF1bHRWaWV3JiZzLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUsUGE9Yy5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQiLGphPQpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFgodGhpcyxhLGIsdHJ1ZSxmdW5jdGlvbihkLGYsZSl7aWYoZT09PXcpcmV0dXJuIGMuY3VyQ1NTKGQsZik7aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmIWtiLnRlc3QoZikpZSs9InB4IjtjLnN0eWxlKGQsZixlKX0pfTtjLmV4dGVuZCh7c3R5bGU6ZnVuY3Rpb24oYSxiLGQpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0dXJuIHc7aWYoKGI9PT0id2lkdGgifHxiPT09ImhlaWdodCIpJiZwYXJzZUZsb2F0KGQpPDApZD13O3ZhciBmPWEuc3R5bGV8fGEsZT1kIT09dztpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSIpe2lmKGUpe2Yuem9vbT0xO2I9cGFyc2VJbnQoZCwxMCkrIiI9PT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK2QqMTAwKyIpIjthPWYuZmlsdGVyfHxjLmN1ckNTUyhhLCJmaWx0ZXIiKXx8IiI7Zi5maWx0ZXI9Ck5hLnRlc3QoYSk/YS5yZXBsYWNlKE5hLGIpOmJ9cmV0dXJuIGYuZmlsdGVyJiZmLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wP3BhcnNlRmxvYXQoT2EuZXhlYyhmLmZpbHRlcilbMV0pLzEwMCsiIjoiIn1pZihoYS50ZXN0KGIpKWI9UGE7Yj1iLnJlcGxhY2UoaWEsamEpO2lmKGUpZltiXT1kO3JldHVybiBmW2JdfSxjc3M6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYj09PSJ3aWR0aCJ8fGI9PT0iaGVpZ2h0Iil7dmFyIGUsaj1iPT09IndpZHRoIj9wYjpxYjtmdW5jdGlvbiBpKCl7ZT1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2YhPT0iYm9yZGVyIiYmYy5lYWNoKGosZnVuY3Rpb24oKXtmfHwoZS09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJwYWRkaW5nIit0aGlzLHRydWUpKXx8MCk7aWYoZj09PSJtYXJnaW4iKWUrPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luIit0aGlzLHRydWUpKXx8MDtlbHNlIGUtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwKImJvcmRlciIrdGhpcysiV2lkdGgiLHRydWUpKXx8MH0pfWEub2Zmc2V0V2lkdGghPT0wP2koKTpjLnN3YXAoYSxvYixpKTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKGUpKX1yZXR1cm4gYy5jdXJDU1MoYSxiLGQpfSxjdXJDU1M6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmLGU9YS5zdHlsZTtpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSImJmEuY3VycmVudFN0eWxlKXtmPU9hLnRlc3QoYS5jdXJyZW50U3R5bGUuZmlsdGVyfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjoiIjtyZXR1cm4gZj09PSIiPyIxIjpmfWlmKGhhLnRlc3QoYikpYj1QYTtpZighZCYmZSYmZVtiXSlmPWVbYl07ZWxzZSBpZihyYil7aWYoaGEudGVzdChiKSliPSJmbG9hdCI7Yj1iLnJlcGxhY2UobGIsIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZT1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7aWYoIWUpcmV0dXJuIG51bGw7aWYoYT1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlmPQphLmdldFByb3BlcnR5VmFsdWUoYik7aWYoYj09PSJvcGFjaXR5IiYmZj09PSIiKWY9IjEifWVsc2UgaWYoYS5jdXJyZW50U3R5bGUpe2Q9Yi5yZXBsYWNlKGlhLGphKTtmPWEuY3VycmVudFN0eWxlW2JdfHxhLmN1cnJlbnRTdHlsZVtkXTtpZighbWIudGVzdChmKSYmbmIudGVzdChmKSl7Yj1lLmxlZnQ7dmFyIGo9YS5ydW50aW1lU3R5bGUubGVmdDthLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQ7ZS5sZWZ0PWQ9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDA7Zj1lLnBpeGVsTGVmdCsicHgiO2UubGVmdD1iO2EucnVudGltZVN0eWxlLmxlZnQ9an19cmV0dXJuIGZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPXt9O2Zvcih2YXIgZSBpbiBiKXtmW2VdPWEuc3R5bGVbZV07YS5zdHlsZVtlXT1iW2VdfWQuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZltlXX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKXtjLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9CmEub2Zmc2V0V2lkdGgsZD1hLm9mZnNldEhlaWdodCxmPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJ0ciI7cmV0dXJuIGI9PT0wJiZkPT09MCYmIWY/dHJ1ZTpiPjAmJmQ+MCYmIWY/ZmFsc2U6Yy5jdXJDU1MoYSwiZGlzcGxheSIpPT09Im5vbmUifTtjLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFjLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9fXZhciBzYj1KKCksdGI9LzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9naSx1Yj0vc2VsZWN0fHRleHRhcmVhL2ksdmI9L2NvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2Vlay9pLE49Lz1cPygmfCQpLyxrYT0vXD8vLHdiPS8oXD98JilfPS4qPygmfCQpLyx4Yj0vXihcdys6KT9cL1wvKFteXC8/I10rKS8seWI9LyUyMC9nLHpiPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0KInN0cmluZyIpcmV0dXJuIHpiLmNhbGwodGhpcyxhKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZj1hLmluZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZT1hLnNsaWNlKGYsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGYpfWY9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rpb24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PSJvYmplY3QiKXtiPWMucGFyYW0oYixjLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7Zj0iUE9TVCJ9dmFyIGo9dGhpcztjLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIsZGF0YTpiLGNvbXBsZXRlOmZ1bmN0aW9uKGksbyl7aWYobz09PSJzdWNjZXNzInx8bz09PSJub3Rtb2RpZmllZCIpai5odG1sKGU/YygiPGRpdiAvPiIpLmFwcGVuZChpLnJlc3BvbnNlVGV4dC5yZXBsYWNlKHRiLCIiKSkuZmluZChlKTppLnJlc3BvbnNlVGV4dCk7ZCYmai5lYWNoKGQsW2kucmVzcG9uc2VUZXh0LG8saV0pfX0pO3JldHVybiB0aGlzfSwKc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9jLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fHViLnRlc3QodGhpcy5ub2RlTmFtZSl8fHZiLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXthPWModGhpcykudmFsKCk7cmV0dXJuIGE9PW51bGw/bnVsbDpjLmlzQXJyYXkoYSk/Yy5tYXAoYSxmdW5jdGlvbihkKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6ZH19KTp7bmFtZTpiLm5hbWUsdmFsdWU6YX19KS5nZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLApmdW5jdGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuYmluZChiLGQpfX0pO2MuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYy5pc0Z1bmN0aW9uKGIpKXtmPWZ8fGQ7ZD1iO2I9bnVsbH1yZXR1cm4gYy5hamF4KHt0eXBlOiJHRVQiLHVybDphLGRhdGE6YixzdWNjZXNzOmQsZGF0YVR5cGU6Zn0pfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQsImpzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxmKXtpZihjLmlzRnVuY3Rpb24oYikpe2Y9Znx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmZ9KX0sYWpheFNldHVwOmZ1bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLApnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSx4aHI6QS5YTUxIdHRwUmVxdWVzdCYmKEEubG9jYXRpb24ucHJvdG9jb2whPT0iZmlsZToifHwhQS5BY3RpdmVYT2JqZWN0KT9mdW5jdGlvbigpe3JldHVybiBuZXcgQS5YTUxIdHRwUmVxdWVzdH06ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBBLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYSl7fX0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHNjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLHRleHQ6InRleHQvcGxhaW4iLF9kZWZhdWx0OiIqLyoifX0sbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7ZS5zdWNjZXNzJiYKZS5zdWNjZXNzLmNhbGwoayxvLGkseCk7ZS5nbG9iYWwmJmYoImFqYXhTdWNjZXNzIixbeCxlXSl9ZnVuY3Rpb24gZCgpe2UuY29tcGxldGUmJmUuY29tcGxldGUuY2FsbChrLHgsaSk7ZS5nbG9iYWwmJmYoImFqYXhDb21wbGV0ZSIsW3gsZV0pO2UuZ2xvYmFsJiYhLS1jLmFjdGl2ZSYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfWZ1bmN0aW9uIGYocSxwKXsoZS5jb250ZXh0P2MoZS5jb250ZXh0KTpjLmV2ZW50KS50cmlnZ2VyKHEscCl9dmFyIGU9Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxqLGksbyxrPWEmJmEuY29udGV4dHx8ZSxuPWUudHlwZS50b1VwcGVyQ2FzZSgpO2lmKGUuZGF0YSYmZS5wcm9jZXNzRGF0YSYmdHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKWUuZGF0YT1jLnBhcmFtKGUuZGF0YSxlLnRyYWRpdGlvbmFsKTtpZihlLmRhdGFUeXBlPT09Impzb25wIil7aWYobj09PSJHRVQiKU4udGVzdChlLnVybCl8fChlLnVybCs9KGthLnRlc3QoZS51cmwpPwoiJiI6Ij8iKSsoZS5qc29ucHx8ImNhbGxiYWNrIikrIj0/Iik7ZWxzZSBpZighZS5kYXRhfHwhTi50ZXN0KGUuZGF0YSkpZS5kYXRhPShlLmRhdGE/ZS5kYXRhKyImIjoiIikrKGUuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7ZS5kYXRhVHlwZT0ianNvbiJ9aWYoZS5kYXRhVHlwZT09PSJqc29uIiYmKGUuZGF0YSYmTi50ZXN0KGUuZGF0YSl8fE4udGVzdChlLnVybCkpKXtqPWUuanNvbnBDYWxsYmFja3x8Impzb25wIitzYisrO2lmKGUuZGF0YSllLmRhdGE9KGUuZGF0YSsiIikucmVwbGFjZShOLCI9IitqKyIkMSIpO2UudXJsPWUudXJsLnJlcGxhY2UoTiwiPSIraisiJDEiKTtlLmRhdGFUeXBlPSJzY3JpcHQiO0Fbal09QVtqXXx8ZnVuY3Rpb24ocSl7bz1xO2IoKTtkKCk7QVtqXT13O3RyeXtkZWxldGUgQVtqXX1jYXRjaChwKXt9eiYmei5yZW1vdmVDaGlsZChDKX19aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZlLmNhY2hlPT09bnVsbCllLmNhY2hlPWZhbHNlO2lmKGUuY2FjaGU9PT0KZmFsc2UmJm49PT0iR0VUIil7dmFyIHI9SigpLHU9ZS51cmwucmVwbGFjZSh3YiwiJDFfPSIrcisiJDIiKTtlLnVybD11Kyh1PT09ZS51cmw/KGthLnRlc3QoZS51cmwpPyImIjoiPyIpKyJfPSIrcjoiIil9aWYoZS5kYXRhJiZuPT09IkdFVCIpZS51cmwrPShrYS50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmRhdGE7ZS5nbG9iYWwmJiFjLmFjdGl2ZSsrJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO3I9KHI9eGIuZXhlYyhlLnVybCkpJiYoclsxXSYmclsxXSE9PWxvY2F0aW9uLnByb3RvY29sfHxyWzJdIT09bG9jYXRpb24uaG9zdCk7aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZuPT09IkdFVCImJnIpe3ZhciB6PXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8cy5kb2N1bWVudEVsZW1lbnQsQz1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0Muc3JjPWUudXJsO2lmKGUuc2NyaXB0Q2hhcnNldClDLmNoYXJzZXQ9ZS5zY3JpcHRDaGFyc2V0O2lmKCFqKXt2YXIgQj0KZmFsc2U7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZighQiYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0ZT09PSJsb2FkZWQifHx0aGlzLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKSl7Qj10cnVlO2IoKTtkKCk7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt6JiZDLnBhcmVudE5vZGUmJnoucmVtb3ZlQ2hpbGQoQyl9fX16Lmluc2VydEJlZm9yZShDLHouZmlyc3RDaGlsZCk7cmV0dXJuIHd9dmFyIEU9ZmFsc2UseD1lLnhocigpO2lmKHgpe2UudXNlcm5hbWU/eC5vcGVuKG4sZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpOngub3BlbihuLGUudXJsLGUuYXN5bmMpO3RyeXtpZihlLmRhdGF8fGEmJmEuY29udGVudFR5cGUpeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGUuY29udGVudFR5cGUpO2lmKGUuaWZNb2RpZmllZCl7Yy5sYXN0TW9kaWZpZWRbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIiwKYy5sYXN0TW9kaWZpZWRbZS51cmxdKTtjLmV0YWdbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGMuZXRhZ1tlLnVybF0pfXJ8fHguc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7eC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGUuZGF0YVR5cGUmJmUuYWNjZXB0c1tlLmRhdGFUeXBlXT9lLmFjY2VwdHNbZS5kYXRhVHlwZV0rIiwgKi8qIjplLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKGdhKXt9aWYoZS5iZWZvcmVTZW5kJiZlLmJlZm9yZVNlbmQuY2FsbChrLHgsZSk9PT1mYWxzZSl7ZS5nbG9iYWwmJiEtLWMuYWN0aXZlJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7eC5hYm9ydCgpO3JldHVybiBmYWxzZX1lLmdsb2JhbCYmZigiYWpheFNlbmQiLFt4LGVdKTt2YXIgZz14Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihxKXtpZigheHx8eC5yZWFkeVN0YXRlPT09MHx8cT09PSJhYm9ydCIpe0V8fApkKCk7RT10cnVlO2lmKHgpeC5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUUmJngmJih4LnJlYWR5U3RhdGU9PT00fHxxPT09InRpbWVvdXQiKSl7RT10cnVlO3gub25yZWFkeXN0YXRlY2hhbmdlPWMubm9vcDtpPXE9PT0idGltZW91dCI/InRpbWVvdXQiOiFjLmh0dHBTdWNjZXNzKHgpPyJlcnJvciI6ZS5pZk1vZGlmaWVkJiZjLmh0dHBOb3RNb2RpZmllZCh4LGUudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtpZihpPT09InN1Y2Nlc3MiKXRyeXtvPWMuaHR0cERhdGEoeCxlLmRhdGFUeXBlLGUpfWNhdGNoKHYpe2k9InBhcnNlcmVycm9yIjtwPXZ9aWYoaT09PSJzdWNjZXNzInx8aT09PSJub3Rtb2RpZmllZCIpanx8YigpO2Vsc2UgYy5oYW5kbGVFcnJvcihlLHgsaSxwKTtkKCk7cT09PSJ0aW1lb3V0IiYmeC5hYm9ydCgpO2lmKGUuYXN5bmMpeD1udWxsfX07dHJ5e3ZhciBoPXguYWJvcnQ7eC5hYm9ydD1mdW5jdGlvbigpe3gmJmguY2FsbCh4KTsKZygiYWJvcnQiKX19Y2F0Y2gobCl7fWUuYXN5bmMmJmUudGltZW91dD4wJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eCYmIUUmJmcoInRpbWVvdXQiKX0sZS50aW1lb3V0KTt0cnl7eC5zZW5kKG49PT0iUE9TVCJ8fG49PT0iUFVUInx8bj09PSJERUxFVEUiP2UuZGF0YTpudWxsKX1jYXRjaChtKXtjLmhhbmRsZUVycm9yKGUseCxudWxsLG0pO2QoKX1lLmFzeW5jfHxnKCk7cmV0dXJuIHh9fSxoYW5kbGVFcnJvcjpmdW5jdGlvbihhLGIsZCxmKXtpZihhLmVycm9yKWEuZXJyb3IuY2FsbChhLmNvbnRleHR8fGEsYixkLGYpO2lmKGEuZ2xvYmFsKShhLmNvbnRleHQ/YyhhLmNvbnRleHQpOmMuZXZlbnQpLnRyaWdnZXIoImFqYXhFcnJvciIsW2IsYSxmXSl9LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4hYS5zdGF0dXMmJmxvY2F0aW9uLnByb3RvY29sPT09ImZpbGU6Inx8YS5zdGF0dXM+PTIwMCYmYS5zdGF0dXM8MzAwfHxhLnN0YXR1cz09PTMwNHx8YS5zdGF0dXM9PT0KMTIyM3x8YS5zdGF0dXM9PT0wfWNhdGNoKGIpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmllZDpmdW5jdGlvbihhLGIpe3ZhciBkPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSxmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTtpZihkKWMubGFzdE1vZGlmaWVkW2JdPWQ7aWYoZiljLmV0YWdbYl09ZjtyZXR1cm4gYS5zdGF0dXM9PT0zMDR8fGEuc3RhdHVzPT09MH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixlPWI9PT0ieG1sInx8IWImJmYuaW5kZXhPZigieG1sIik+PTA7YT1lP2EucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQ7ZSYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQmJmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoYj09PQoianNvbiJ8fCFiJiZmLmluZGV4T2YoImpzb24iKT49MClhPWMucGFyc2VKU09OKGEpO2Vsc2UgaWYoYj09PSJzY3JpcHQifHwhYiYmZi5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApYy5nbG9iYWxFdmFsKGEpO3JldHVybiBhfSxwYXJhbTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoaSxvKXtpZihjLmlzQXJyYXkobykpYy5lYWNoKG8sZnVuY3Rpb24oayxuKXtifHwvXFtcXSQvLnRlc3QoaSk/ZihpLG4pOmQoaSsiWyIrKHR5cGVvZiBuPT09Im9iamVjdCJ8fGMuaXNBcnJheShuKT9rOiIiKSsiXSIsbil9KTtlbHNlIWImJm8hPW51bGwmJnR5cGVvZiBvPT09Im9iamVjdCI/Yy5lYWNoKG8sZnVuY3Rpb24oayxuKXtkKGkrIlsiK2srIl0iLG4pfSk6ZihpLG8pfWZ1bmN0aW9uIGYoaSxvKXtvPWMuaXNGdW5jdGlvbihvKT9vKCk6bztlW2UubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoaSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChvKX12YXIgZT1bXTtpZihiPT09dyliPWMuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwppZihjLmlzQXJyYXkoYSl8fGEuanF1ZXJ5KWMuZWFjaChhLGZ1bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcih2YXIgaiBpbiBhKWQoaixhW2pdKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZSh5YiwiKyIpfX0pO3ZhciBsYT17fSxBYj0vdG9nZ2xlfHNob3d8aGlkZS8sQmI9L14oWystXT0pPyhbXGQrLS5dKykoLiopJC8sVyx2YT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtjLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoSygic2hvdyIsMyksYSxiKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXt2YXIgZD1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpOwp0aGlzW2FdLnN0eWxlLmRpc3BsYXk9ZHx8IiI7aWYoYy5jc3ModGhpc1thXSwiZGlzcGxheSIpPT09Im5vbmUiKXtkPXRoaXNbYV0ubm9kZU5hbWU7dmFyIGY7aWYobGFbZF0pZj1sYVtkXTtlbHNle3ZhciBlPWMoIjwiK2QrIiAvPiIpLmFwcGVuZFRvKCJib2R5Iik7Zj1lLmNzcygiZGlzcGxheSIpO2lmKGY9PT0ibm9uZSIpZj0iYmxvY2siO2UucmVtb3ZlKCk7bGFbZF09Zn1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsZil9fWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpfHwiIjtyZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oYSxiKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKEsoImhpZGUiLDMpLGEsYik7ZWxzZXthPTA7Zm9yKGI9dGhpcy5sZW5ndGg7YTxiO2ErKyl7dmFyIGQ9Yy5kYXRhKHRoaXNbYV0sIm9sZGRpc3BsYXkiKTshZCYmZCE9PSJub25lIiYmYy5kYXRhKHRoaXNbYV0sCiJvbGRkaXNwbGF5IixjLmNzcyh0aGlzW2FdLCJkaXNwbGF5IikpfWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOmMuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhPT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIpKXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxsfHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWQ/YTpjKHRoaXMpLmlzKCI6aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoSygidG9nZ2xlIiwzKSxhLGIpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxkKX0sCmFuaW1hdGU6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9Yy5zcGVlZChiLGQsZik7aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZS5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBqPWMuZXh0ZW5kKHt9LGUpLGksbz10aGlzLm5vZGVUeXBlPT09MSYmYyh0aGlzKS5pcygiOmhpZGRlbiIpLGs9dGhpcztmb3IoaSBpbiBhKXt2YXIgbj1pLnJlcGxhY2UoaWEsamEpO2lmKGkhPT1uKXthW25dPWFbaV07ZGVsZXRlIGFbaV07aT1ufWlmKGFbaV09PT0iaGlkZSImJm98fGFbaV09PT0ic2hvdyImJiFvKXJldHVybiBqLmNvbXBsZXRlLmNhbGwodGhpcyk7aWYoKGk9PT0iaGVpZ2h0Inx8aT09PSJ3aWR0aCIpJiZ0aGlzLnN0eWxlKXtqLmRpc3BsYXk9Yy5jc3ModGhpcywiZGlzcGxheSIpO2oub3ZlcmZsb3c9dGhpcy5zdHlsZS5vdmVyZmxvd31pZihjLmlzQXJyYXkoYVtpXSkpeyhqLnNwZWNpYWxFYXNpbmc9Cmouc3BlY2lhbEVhc2luZ3x8e30pW2ldPWFbaV1bMV07YVtpXT1hW2ldWzBdfX1pZihqLm92ZXJmbG93IT1udWxsKXRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ai5jdXJBbmltPWMuZXh0ZW5kKHt9LGEpO2MuZWFjaChhLGZ1bmN0aW9uKHIsdSl7dmFyIHo9bmV3IGMuZngoayxqLHIpO2lmKEFiLnRlc3QodSkpelt1PT09InRvZ2dsZSI/bz8ic2hvdyI6ImhpZGUiOnVdKGEpO2Vsc2V7dmFyIEM9QmIuZXhlYyh1KSxCPXouY3VyKHRydWUpfHwwO2lmKEMpe3U9cGFyc2VGbG9hdChDWzJdKTt2YXIgRT1DWzNdfHwicHgiO2lmKEUhPT0icHgiKXtrLnN0eWxlW3JdPSh1fHwxKStFO0I9KHV8fDEpL3ouY3VyKHRydWUpKkI7ay5zdHlsZVtyXT1CK0V9aWYoQ1sxXSl1PShDWzFdPT09Ii09Ij8tMToxKSp1K0I7ei5jdXN0b20oQix1LEUpfWVsc2Ugei5jdXN0b20oQix1LCIiKX19KTtyZXR1cm4gdHJ1ZX0pfSxzdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy50aW1lcnM7YSYmdGhpcy5xdWV1ZShbXSk7CnRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgZj1kLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGRbZl0uZWxlbT09PXRoaXMpe2ImJmRbZl0odHJ1ZSk7ZC5zcGxpY2UoZiwxKX19KTtifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhpc319KTtjLmVhY2goe3NsaWRlRG93bjpLKCJzaG93IiwxKSxzbGlkZVVwOksoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOksoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsZCxmKX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/YTp7Y29tcGxldGU6ZHx8IWQmJmJ8fGMuaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpkJiZifHxiJiYhYy5pc0Z1bmN0aW9uKGIpJiZifTtmLmR1cmF0aW9uPWMuZngub2ZmPzA6dHlwZW9mIGYuZHVyYXRpb249PT0KIm51bWJlciI/Zi5kdXJhdGlvbjpjLmZ4LnNwZWVkc1tmLmR1cmF0aW9uXXx8Yy5meC5zcGVlZHMuX2RlZmF1bHQ7Zi5vbGQ9Zi5jb21wbGV0ZTtmLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Zi5xdWV1ZSE9PWZhbHNlJiZjKHRoaXMpLmRlcXVldWUoKTtjLmlzRnVuY3Rpb24oZi5vbGQpJiZmLm9sZC5jYWxsKHRoaXMpfTtyZXR1cm4gZn0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIGQrZiphfSxzd2luZzpmdW5jdGlvbihhLGIsZCxmKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMiswLjUpKmYrZH19LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsZCl7dGhpcy5vcHRpb25zPWI7dGhpcy5lbGVtPWE7dGhpcy5wcm9wPWQ7aWYoIWIub3JpZyliLm9yaWc9e319fSk7Yy5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKTsoYy5meC5zdGVwW3RoaXMucHJvcF18fApjLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PT0iaGVpZ2h0Inx8dGhpcy5wcm9wPT09IndpZHRoIikmJnRoaXMuZWxlbS5zdHlsZSl0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT0iYmxvY2sifSxjdXI6ZnVuY3Rpb24oYSl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3JldHVybihhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCxhKSkpJiZhPi0xMDAwMD9hOnBhcnNlRmxvYXQoYy5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYoail7cmV0dXJuIGUuc3RlcChqKX10aGlzLnN0YXJ0VGltZT1KKCk7dGhpcy5zdGFydD1hO3RoaXMuZW5kPWI7dGhpcy51bml0PWR8fHRoaXMudW5pdHx8InB4Ijt0aGlzLm5vdz10aGlzLnN0YXJ0Owp0aGlzLnBvcz10aGlzLnN0YXRlPTA7dmFyIGU9dGhpcztmLmVsZW09dGhpcy5lbGVtO2lmKGYoKSYmYy50aW1lcnMucHVzaChmKSYmIVcpVz1zZXRJbnRlcnZhbChjLmZ4LnRpY2ssMTMpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPUooKSxkPXRydWU7aWYoYXx8Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz0KdGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO2Zvcih2YXIgZiBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSlpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtmXSE9PXRydWUpZD1mYWxzZTtpZihkKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxheSE9bnVsbCl7dGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93PXRoaXMub3B0aW9ucy5vdmVyZmxvdzthPWMuZGF0YSh0aGlzLmVsZW0sIm9sZGRpc3BsYXkiKTt0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT1hP2E6dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoYy5jc3ModGhpcy5lbGVtLCJkaXNwbGF5Iik9PT0ibm9uZSIpdGhpcy5lbGVtLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWMuc3R5bGUodGhpcy5lbGVtLAplLHRoaXMub3B0aW9ucy5vcmlnW2VdKTt0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2U9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWUvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2E9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxhXSh0aGlzLnN0YXRlLGUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRhdGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9Yy50aW1lcnMsYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKXx8YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHwKYy5meC5zdG9wKCl9LHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFcpO1c9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Yy5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7aWYoYS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbClhLmVsZW0uc3R5bGVbYS5wcm9wXT0oYS5wcm9wPT09IndpZHRoInx8YS5wcm9wPT09ImhlaWdodCI/TWF0aC5tYXgoMCxhLm5vdyk6YS5ub3cpK2EudW5pdDtlbHNlIGEuZWxlbVthLnByb3BdPWEubm93fX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKWMuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBjLmdyZXAoYy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gcy5kb2N1bWVudEVsZW1lbnQ/CmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsZSl9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGMub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGQ9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWIub3duZXJEb2N1bWVudDtiPWYuYm9keTtmPWYuZG9jdW1lbnRFbGVtZW50O3JldHVybnt0b3A6ZC50b3ArKHNlbGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmZi5zY3JvbGxUb3B8fGIuc2Nyb2xsVG9wKS0oZi5jbGllbnRUb3B8fGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoc2VsZi5wYWdlWE9mZnNldHx8Yy5zdXBwb3J0LmJveE1vZGVsJiZmLnNjcm9sbExlZnR8fGIuc2Nyb2xsTGVmdCktKGYuY2xpZW50TGVmdHx8Yi5jbGllbnRMZWZ0fHwwKX19OmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLHIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgZD1iLm9mZnNldFBhcmVudCxmPWIsZT1iLm93bmVyRG9jdW1lbnQsaixpPWUuZG9jdW1lbnRFbGVtZW50LG89ZS5ib2R5O2Y9KGU9ZS5kZWZhdWx0Vmlldyk/ZS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGU7Zm9yKHZhciBrPWIub2Zmc2V0VG9wLG49Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1vJiZiIT09aTspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZi5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7aj1lP2UuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlOwprLT1iLnNjcm9sbFRvcDtuLT1iLnNjcm9sbExlZnQ7aWYoYj09PWQpe2srPWIub2Zmc2V0VG9wO24rPWIub2Zmc2V0TGVmdDtpZihjLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKGMub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoYi5ub2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGouYm9yZGVyVG9wV2lkdGgpfHwwO24rPXBhcnNlRmxvYXQoai5ib3JkZXJMZWZ0V2lkdGgpfHwwfWY9ZDtkPWIub2Zmc2V0UGFyZW50fWlmKGMub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmai5vdmVyZmxvdyE9PSJ2aXNpYmxlIil7ays9cGFyc2VGbG9hdChqLmJvcmRlclRvcFdpZHRoKXx8MDtuKz1wYXJzZUZsb2F0KGouYm9yZGVyTGVmdFdpZHRoKXx8MH1mPWp9aWYoZi5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGYucG9zaXRpb249PT0ic3RhdGljIil7ays9by5vZmZzZXRUb3A7bis9by5vZmZzZXRMZWZ0fWlmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmCmYucG9zaXRpb249PT0iZml4ZWQiKXtrKz1NYXRoLm1heChpLnNjcm9sbFRvcCxvLnNjcm9sbFRvcCk7bis9TWF0aC5tYXgoaS5zY3JvbGxMZWZ0LG8uc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDprLGxlZnQ6bn19O2Mub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9cy5ib2R5LGI9cy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLGYsZSxqPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luVG9wIix0cnVlKSl8fDA7Yy5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KTtiLmlubmVySFRNTD0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKYS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2Y9ZC5maXJzdENoaWxkO2U9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9yZGVyPWYub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPWUub2Zmc2V0VG9wPT09NTtmLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7Zi5zdHlsZS50b3A9IjIwcHgiO3RoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYub2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0VG9wPT09MTU7Zi5zdHlsZS5wb3NpdGlvbj1mLnN0eWxlLnRvcD0iIjtkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Quc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNldFRvcD09PS01O3RoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3AhPT1qO2EucmVtb3ZlQ2hpbGQoYik7CmMub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mub2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGEsIm1hcmdpbkxlZnQiLHRydWUpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixkKXtpZigvc3RhdGljLy50ZXN0KGMuY3VyQ1NTKGEsInBvc2l0aW9uIikpKWEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt2YXIgZj1jKGEpLGU9Zi5vZmZzZXQoKSxqPXBhcnNlSW50KGMuY3VyQ1NTKGEsInRvcCIsdHJ1ZSksMTApfHwwLGk9cGFyc2VJbnQoYy5jdXJDU1MoYSwibGVmdCIsdHJ1ZSksMTApfHwwO2lmKGMuaXNGdW5jdGlvbihiKSliPWIuY2FsbChhLApkLGUpO2Q9e3RvcDpiLnRvcC1lLnRvcCtqLGxlZnQ6Yi5sZWZ0LWUubGVmdCtpfTsidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxkKTpmLmNzcyhkKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxmPS9eYm9keXxodG1sJC9pLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkLmxlZnQtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luTGVmdCIsdHJ1ZSkpfHwwO2YudG9wKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlclRvcFdpZHRoIix0cnVlKSl8fDA7Zi5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSkpfHwwO3JldHVybnt0b3A6ZC50b3AtCmYudG9wLGxlZnQ6ZC5sZWZ0LWYubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8cy5ib2R5O2EmJiEvXmJvZHl8aHRtbCQvaS50ZXN0KGEubm9kZU5hbWUpJiZjLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyI7KWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KTtjLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxiKXt2YXIgZD0ic2Nyb2xsIitiO2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXSxqO2lmKCFlKXJldHVybiBudWxsO2lmKGYhPT13KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihqPXdhKHRoaXMpKWouc2Nyb2xsVG8oIWE/ZjpjKGopLnNjcm9sbExlZnQoKSxhP2Y6YyhqKS5zY3JvbGxUb3AoKSk7ZWxzZSB0aGlzW2RdPWZ9KTtlbHNlIHJldHVybihqPXdhKGUpKT8icGFnZVhPZmZzZXQiaW4gaj9qW2E/InBhZ2VZT2Zmc2V0IjoKInBhZ2VYT2Zmc2V0Il06Yy5zdXBwb3J0LmJveE1vZGVsJiZqLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8ai5kb2N1bWVudC5ib2R5W2RdOmVbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTtjLmZuWyJpbm5lciIrYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXT9jLmNzcyh0aGlzWzBdLGQsZmFsc2UsInBhZGRpbmciKTpudWxsfTtjLmZuWyJvdXRlciIrYl09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXNbMF0/Yy5jc3ModGhpc1swXSxkLGZhbHNlLGY/Im1hcmdpbiI6ImJvcmRlciIpOm51bGx9O2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXTtpZighZSlyZXR1cm4gZj09bnVsbD9udWxsOnRoaXM7aWYoYy5pc0Z1bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7dmFyIGk9Yyh0aGlzKTtpW2RdKGYuY2FsbCh0aGlzLGosaVtkXSgpKSl9KTtyZXR1cm4ic2Nyb2xsVG8iaW4KZSYmZS5kb2N1bWVudD9lLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCImJmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2JdfHxlLmRvY3VtZW50LmJvZHlbImNsaWVudCIrYl06ZS5ub2RlVHlwZT09PTk/TWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYl0sZS5ib2R5WyJzY3JvbGwiK2JdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2JdLGUuYm9keVsib2Zmc2V0IitiXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitiXSk6Zj09PXc/Yy5jc3MoZSxkKTp0aGlzLmNzcyhkLHR5cGVvZiBmPT09InN0cmluZyI/ZjpmKyJweCIpfX0pO0EualF1ZXJ5PUEuJD1jfSkod2luZG93KTsK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_tab_providers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cgp7aWYgaXNzZXQoJG1lc3NhZ2UpIH08cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQo8ZmllbGRzZXQ+CjxsZWdlbmQ+QWN0aXZlIHByb3ZpZGVyczo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+R29vZ2xlPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQk8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2ltYWdlcy9nb29nbGVXLnBuZyIgYWx0PSJHb29nbGUiIC8+CiAgICAgICAgICAgICAgICAgICAgeyRpbnB1dF9nb29nbGV9CiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gOiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2ludGwvZW4vYXBpcy9hY2NvdW50cy9kb2NzL09wZW5JRC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+RmVkZXJhdGVkIExvZ2luIGZvciBHb29nbGUgQWNjb3VudCBVc2VyczwvYT4KICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPllhaG9vPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQk8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2ltYWdlcy95YWhvb1cucG5nIiBhbHQ9IllhaG9vIiAvPgogICAgICAgICAgICAgICAgICAgIHskaW5wdXRfeWFob299CiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgUHVibGljIE9wZW5JRCBwYWdlIDogPGEgaHJlZj0iaHR0cDovL29wZW5pZC55YWhvby5jb20vIiB0YXJnZXQ9Il9ibGFuayI+b3BlbmlkLnlhaG9vLmNvbS88L2E+PGJyLz4KICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiA6IDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL29wZW5pZC8iIHRhcmdldD0iX2JsYW5rIj5EZXZlbG9wZXIgZG9jdW1lbnRhdGlvbjwvYT4KICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFtZXJpY2FuIE9ubGluZTwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJPGxhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvYW9sVy5wbmciIGFsdD0iQU9MIiAvPgogICAgICAgICAgICAgICAgICAgIHskaW5wdXRfYW9sfQogICAgICAgICAgICAgICAgICAgIGVuYWJsZWQKICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5NeU9wZW5JRDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbXlvcGVuaWRXLnBuZyIgYWx0PSJNeU9wZW5JRCIgLz57JGlucHV0X215b3BlbmlkfQogICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5GbGlja3I8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL2ZsaWNrclcucG5nIiBhbHQ9IkZsaWNrciIgLz4mbmJzcDt7JGlucHV0X2ZsaWNrcn0KICAgICAgICAgICAgICAgIGVuYWJsZWQKICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+TXlzcGFjZTwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbXlzcGFjZVcucG5nIiBhbHQ9Ik15c3BhY2UiIC8+Jm5ic3A7eyRpbnB1dF9teXNwYWNlfQogICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5GYWNlYm9vazwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvZmFjZWJvb2tXLnBuZyIgYWx0PSJGYWNlYm9vayIgLz4mbmJzcDt7JGlucHV0X2ZhY2Vib29rfQogICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBCZWZvcmUgZW5hYmxpbmcgRmFjZWJvb2sgYXMgaWRlbnRpdHkgcHJvdmlkZXIgeW91IG11c3QgcmVnaXN0ZXIgeW91ciBhcHBsaWNhdGlvbiBhbmQgY29uZmlndXJlIHRoZSBBUEkga2V5cyBvbiB0aGUgc2V0dGluZ3MgdGFiLgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Ud2l0dGVyPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgPGltZyBzcmM9Inskb3BlbmlkX21vZHVsZV9wYXRofS9pbWFnZXMvdHdpdHRlclcucG5nIiBhbHQ9IlR3aXR0ZXIiIC8+Jm5ic3A7eyRpbnB1dF90d2l0dGVyfQogICAgICAgICAgICAgICAgbWVkaXVtIGltYWdlCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZF9tb2R1bGVfcGF0aH0vaW1hZ2VzL3R3aXR0ZXIucG5nIiBhbHQ9IlR3aXR0ZXIgc21hbGwiIC8+Jm5ic3A7eyRpbnB1dF90d2l0dGVyX3NtYWxsfQogICAgICAgICAgICAgICAgaWNvbgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBCZWZvcmUgZW5hYmxpbmcgVHdpdHRlciBhcyBpZGVudGl0eSBwcm92aWRlciB5b3UgbXVzdCByZWdpc3RlciB5b3VyIGFwcGxpY2F0aW9uIGFuZCBjb25maWd1cmUgdGhlIEFQSSBrZXlzIG9uIHRoZSBzZXR0aW5ncyB0YWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+VGVjaG5vcmF0aTwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvdGVjaG5vcmF0aS5wbmciIGFsdD0iVGVjaG5vcmF0aSIgLz4mbmJzcDt7JGlucHV0X3RlY2hub3JhdGl9CiAgICAgICAgICAgICAgICBlbmFibGVkCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPldvcmRwcmVzczwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvd29yZHByZXNzLnBuZyIgYWx0PSJXb3JkcHJlc3MiIC8+Jm5ic3A7eyRpbnB1dF93b3JkcHJlc3N9CiAgICAgICAgICAgICAgICBlbmFibGVkCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkJsb2dnZXI8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL2Jsb2dnZXIucG5nIiBhbHQ9IkJsb2dnZXIiIC8+Jm5ic3A7eyRpbnB1dF9ibG9nZ2VyfQogICAgICAgICAgICAgICAgZW5hYmxlZAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5MaXZlam91cm5hbDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbGl2ZWpvdXJuYWwucG5nIiBhbHQ9IkxpdmVqb3VybmFsIiAvPiZuYnNwO3skaW5wdXRfYmxvZ2dlcn0KICAgICAgICAgICAgICAgIGVuYWJsZWQKICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q2xhaW1JRDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvY2xhaW1pZC5wbmciIGFsdD0iQ2xhaW1JRCIgLz4mbmJzcDt7JGlucHV0X2NsYWltaWR9CiAgICAgICAgICAgICAgICBlbmFibGVkCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlZpZG9vcDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvdmlkb29wLnBuZyIgYWx0PSJWaWRvb3AiIC8+Jm5ic3A7eyRpbnB1dF92aWRvb3B9CiAgICAgICAgICAgICAgICBlbmFibGVkCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlZlcmlzaWduPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgPGltZyBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2ltYWdlcy92ZXJpc2lnbi5wbmciIGFsdD0iVmVyaXNpZ24iIC8+Jm5ic3A7eyRpbnB1dF92ZXJpc2lnbn0KICAgICAgICAgICAgICAgIGVuYWJsZWQKICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KCjwvZmllbGRzZXQ+CgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHN1Ym1pdH17JGNhbmNlbH08L3A+Cgk8L2Rpdj4KCnskZW5kZm9ybX0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_tab_settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CntpZiBpc3NldCgkbWVzc2FnZSkgfTxwPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydGZvcm19CjxmaWVsZHNldD4KPGxlZ2VuZD5WaXN1YWwgZnJhbWV3b3JrOjwvbGVnZW5kPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCTxsYWJlbD4KICAgICAgICAgICAgICAgICAgICB7JGlucHV0X3Zpc3VhbH0KICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyLz4KICAgICAgICAgICAgPC9wPgoJPC9kaXY+CjwvZmllbGRzZXQ+CjxmaWVsZHNldD4KPGxlZ2VuZD5PcGVuSUQgbGlicmFyeSBzZXR0aW5nczo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+QnVnZ3kgR01QIHN1cHBvcnQ8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCTxsYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnskYnVnZ3lfZ21wX3N0YXR1c308L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBGcm9tIHRoZSBPcGVuSUQgUEhQIGxpYnJhcnkgcmVhZG1lLWZpbGU6PGJyLz48aT5JbiBzb21lIGNhc2VzLCBidWdzIGluIHRoZSBHTVAgbWF0aCBsaWJyYXJ5IHdpbGwgcmVzdWx0IGluIHNpZ25hdHVyZQp2YWxpZGF0aW9uIGVycm9ycyB3aGVuIHVzaW5nIHRoaXMgbGlicmFyeS4gU2luY2UgR01QIGlzIHByZWZlcnJlZApvdmVyIGJjbWF0aCAoZm9yIHBlcmZvcm1hbmNlKSwgeW91IHdpbGwgaGF2ZSB0byBkZWZpbmUKQXV0aF9PcGVuSURfQlVHR1lfR01QIGluIHlvdXIgYXBwbGljYXRpb24gKmJlZm9yZSogaW1wb3J0aW5nIGFueSBvZgp0aGUgbGlicmFyeSBjb2RlPC9pPjwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgICAgICBFbmFibGUgdGhpcyBvcHRpb24gYnkgc2V0dGluZyA8aT5vcGVuaWQuYnVnZ3kuZ21wPC9pPiB0byBUUlVFIGluIGNvbmZpZy5waHAKICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlJhbmRvbSBudW1iZXIgc291cmNlPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQk8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57JGluc2VjdXJlX3JhbmRfc3RhdHVzfTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9sYWJlbD48YnIvPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBGcm9tIHRoZSBPcGVuSUQgUEhQIGxpYnJhcnkgcmVhZG1lLWZpbGU6PGJyLz48aT5PbiBzb21lIHN5c3RlbXMsIFBIUCBiYXNlZGlyIHJlc3RyaWN0aW9ucyBwcmV2ZW50IHdlYiBzZXJ2ZXJzIGZyb20Kb3BlbmluZyBhIHNvdXJjZSBvZiByYW5kb21uZXNzLCBzdWNoIGFzIC9kZXYvdXJhbmRvbS4gIElmIHlvdXIgUEhQCk9wZW5JRCBsaWJyYXJ5IGhhcyB0cm91YmxlIGdldHRpbmcgYSBzYXRpc2ZhY3Rvcnkgc291cmNlIG9mCnJhbmRvbW5lc3MsIGNoZWNrIHlvdXIgQXBhY2hlIGFuZCBQSFAgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZSB0aGF0CnRoZSByYW5kb21uZXNzIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIHBhdGhzIGZvciB0aGUKIm9wZW5fYmFzZWRpciIgb3B0aW9uPC9pPjxici8+CiAgICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2V0IHRoZSByYW5kb20gc291cmNlIHRvIG51bGwsIGZvcmNpbmcgdGhlIE9wZW5JRCBsaWJyYXJ5IHRvIGZhbGxiYWNrIHRvIGEgcHNldWRvcmFuZG9tIG51bWJlciBzb3VyY2UuPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgIEVuYWJsZSB0aGlzIG9wdGlvbiBieSBzZXR0aW5nIDxpPm9wZW5pZC5pbnNlY3VyZS5yYW5kPC9pPiB0byBUUlVFIGluIGNvbmZpZy5waHAKICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Sb290IENBIGNlcnRpZmljYXRlIGZpbGU8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCTxsYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnskY2FfZmlsZV9vdmVycmlkZV9zdGF0dXN9PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBTeXN0ZW1zIHVzaW5nIG9sZGVyIHZlcnNpb25zIG9mIGN1cmwgY2Fubm90IHZlcmlmeSBzb21lIHByb3ZpZGVycyB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlbSB1c2luZyBodHRwcyBzaW5jZSB0aGUKICAgICAgICAgICAgcm9vdCBjZXJ0aWZpY2F0ZSBmaWxlIGJ1bmRsZWQgd2l0aCBjdXJsIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJvb3QgY2VydGlmaWNhdGUgZm9yIHRoZSBodHRwcyBjZXJ0aWZpY2F0ZSB0aGF0IHRoZSBwcm92aWRlciBpcyB1c2luZy4KICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHlvdSdsbCBoYXZlIHRvIGRvd25sb2FkIGNhY2VydC5wZW0gZnJvbSA8YSBocmVmPSJodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY2FleHRyYWN0Lmh0bWwiPnRoZSBjdXJsIHNpdGU8L2E+IGFuZCBwbGFjZSBpbiAvbW9kdWxlcy9PcGVuSUQvCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9wPgoJPC9kaXY+CjwvZmllbGRzZXQ+CjxmaWVsZHNldD4KICAgIDxsZWdlbmQ+UmVkaXJlY3QgYWZ0ZXIgbG9naW46PC9sZWdlbmQ+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPjwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJPGxhYmVsPgogICAgICAgICAgICAgICAgICAgIHskaW5wdXRfbG9naW5fcmVkaXJlY3R9CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPlJlZGlyZWN0IHRvIHBhZ2UtSUQvLWFsaWFzIGFmdGVyIHN1Y2Nlc3NmdWwgT3BlbklEIGxvZ2luOjwvcD4KICAgICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgIHskaW5wdXRfbG9naW5fcmVkaXJlY3RfcGFnZWlkfQogICAgICAgICAgICAgIDwvcD4KCTwvZGl2Pgo8L2ZpZWxkc2V0Pgo8ZmllbGRzZXQ+CjxsZWdlbmQ+RmFjZWJvb2s6PC9sZWdlbmQ+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFwcGxpY2F0aW9uIElEPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQk8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgeyRpbnB1dF9mYWNlYm9va19hcHBfaWR9CiAgICAgICAgICAgICAgICA8L2xhYmVsPjxici8+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBJRCBpcyB0aGUgdW5pcXVlIElEIHRoYXQgaWRlbnRpZmllcyB5b3VyIGFwcGxpY2F0aW9uIHdoZW4gbG9nZ2luZyBpbiB1c2luZyBGYWNlYm9vay4gR2V0IGl0IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL2RldmVsb3BlcnMvIiB0YXJnZXQ9Il9ibGFuayI+RmFjZWJvb2sgRGV2ZWxvcGVyczwvYT4KICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPkFwcGxpY2F0aW9uIHNlY3JldDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJPGxhYmVsPgogICAgICAgICAgICAgICAgICAgIHskaW5wdXRfZmFjZWJvb2tfYXBwX3NlY3JldH0KICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyLz4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNlY3JldCBpcyBhIHZhbHVlIHRoYXQgaXMga25vd24gb25seSBieSB5b3UgYW5kIEZhY2Vib29rLgogICAgICAgICAgICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGdlbmVyYXRlIGNoZWNrc3VtcyB0aGF0IGJvdGggeW91IGFuZCBGYWNlYm9vayBjYW4gdmFsaWRhdGUuCiAgICAgICAgICAgIFlvdSBnZXQgaXQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYXBwbGljYXRpb24gSUQuCiAgICAgICAgICAgIDwvcD4KCTwvZGl2Pgo8L2ZpZWxkc2V0Pgo8ZmllbGRzZXQ+CjxsZWdlbmQ+VHdpdHRlcjo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Q29uc3VtZXIga2V5PC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQk8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgeyRpbnB1dF90d2l0dGVyX2NvbnN1bWVyX2tleX0KICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyLz4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgIFRoZSBUd2l0dGVyIGNvbnN1bWVyIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHlvdXIgYXBwbGljYXRpb24uIFJlZ2lzdGVyIHlvdXIgYXBwIGFuZCBnZXQgYSBrZXkgYXQgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL29hdXRoX2NsaWVudHMvIj5Ud2l0dGVyIE9BdXRoIENsaWVudHM8L2E+CiAgICAgICAgICAgIDwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij5Db25zdW1lciBzZWNyZXQ8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCTxsYWJlbD4KICAgICAgICAgICAgICAgICAgICB7JGlucHV0X3R3aXR0ZXJfY29uc3VtZXJfc2VjcmV0fQogICAgICAgICAgICAgICAgPC9sYWJlbD48YnIvPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICBUaGUgY29uc3VtZXIgc2VjcmV0IGlzIGEgdmFsdWUgdGhhdCBpcyBrbm93biBvbmx5IGJ5IHlvdSBhbmQgVHdpdHRlci4KICAgICAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZW5lcmF0ZSBjaGVja3N1bXMgdGhhdCBib3RoIHlvdSBhbmQgVHdpdHRlciBjYW4gdmFsaWRhdGUuCiAgICAgICAgICAgIFlvdSBnZXQgaXQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgY29uc3VtZXIga2V5LgogICAgICAgICAgICA8L3A+Cgk8L2Rpdj4KPC9maWVsZHNldD4KPGZpZWxkc2V0Pgo8bGVnZW5kPkRlYnVnZ2luZzo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgoJCTxsYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnskZGVidWdfc3RhdHVzfTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICAgICAgICAgIEVuYWJsZSBkZWJ1Z2dpbmcgYnkgc2V0dGluZyA8aT5vcGVuaWQuZGVidWc8L2k+IHRvIFRSVUUgaW4gY29uZmlnLnBocAogICAgICAgICAgICAgICAgPC9wPgoJPC9kaXY+CjwvZmllbGRzZXQ+CgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHN1Ym1pdH17JGNhbmNlbH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_tab_users.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjxoMT5Vc2VyczwvaDE+]]></data>
	</file>
	<file>
	  <filename>/templates/list_providers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5pbmZvLCAuc3VjY2VzcywgLndhcm5pbmcsIC5lcnJvciwgLnZhbGlkYXRpb24gewogICAgYm9yZGVyOiAxcHggc29saWQ7CiAgICBtYXJnaW46IDEwcHggMHB4OwogICAgcGFkZGluZzoxNXB4IDEwcHggMTVweCA1MHB4OwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwcHggY2VudGVyOwp9Ci5pbmZvIHsKICAgIGNvbG9yOiAjMDA1MjlCOwogICAgYmFja2dyb3VuZC1jb2xvcjogI0JERTVGODsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbW9kdWxlcy9PcGVuSUQvaW1hZ2VzL2ljb25zL2luZm8ucG5nJyk7Cn0KLnN1Y2Nlc3MgewogICAgY29sb3I6ICM0RjhBMTA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjREZGMkJGOwogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ21vZHVsZXMvT3BlbklEL2ltYWdlcy9pY29ucy9zdWNjZXNzLnBuZycpOwp9Ci53YXJuaW5nIHsKICAgIGNvbG9yOiAjOUY2MDAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFRUZCMzsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbW9kdWxlcy9PcGVuSUQvaW1hZ2VzL2ljb25zL3dhcm5pbmcucG5nJyk7Cn0KLmVycm9yIHsKICAgIGNvbG9yOiAjRDgwMDBDOwogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGQkFCQTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbW9kdWxlcy9PcGVuSUQvaW1hZ2VzL2ljb25zL2Vycm9yLnBuZycpOwp9Cjwvc3R5bGU+CnsvbGl0ZXJhbH0Ke2lmICRtZXNzYWdlICE9ICcnfQogICA8ZGl2IGNsYXNzPSJ7JG1lc3NhZ2VfdHlwZX0iPnskbWVzc2FnZX08L2Rpdj4Key9pZn0KPGgxPnskbW9kLT5MYW5nKCdsaXN0X3JlZ2lzdGVyZWRfcHJvdmlkZXJzJyl9PC9oMT4KPHA+CiAgICB7JG1vZC0+TGFuZygnbGlzdF9pbmZvcm1hdGlvbicpfQo8L3A+CjxwPgo8dWw+CiAgICB7Zm9yZWFjaCBmcm9tPSRtb2QtPkdldFJlZ2lzdGVyZWRPcGVuSURzKCkgaXRlbT1vcGVuaWR9CiAgICAgICAgPGxpIGNsYXNzPSJ7JG9wZW5pZC5wcm92aWRlcn0gUHJvdmlkZXIiPnskb3BlbmlkLm9wZW5pZF9pZGVudGl0eX08YnIvPnskb3BlbmlkLmVtYWlsID8gJG9wZW5pZC5lbWFpbCA6ICcmbmJzcDsnfQogICAgICAgICAgICA8YSBocmVmPSJ7JHJlbW92ZV9saW5rfSZwcm92aWRlcj17JG9wZW5pZC5wcm92aWRlcn0iPlt7JG1vZC0+TGFuZygnbGlzdF9saW5rX3JlbW92ZScpfV08L2E+CiAgICAgICAgPC9saT4KICAgIHsvZm9yZWFjaH0KPC91bD4KPC9wPgo8aDE+eyRtb2QtPkxhbmcoJ2xpc3RfYWRkJyl9PC9oMT4KPHA+CiAgICB7JG1vZC0+TGFuZygnbGlzdF9hZGRfaW5mb3JtYXRpb24nKX0KICAgIAo8L3A+CntpbmNsdWRlIGZpbGU9JHJvb3RfcGF0aHxjYXQ6Jy9tb2R1bGVzL09wZW5JRC90ZW1wbGF0ZXMvbG9naW5fZm9ybS50cGwnfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/login_form.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9PcGVuSUQvc2NyaXB0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2pxdWVyeS5vcGVuaWQuanMiPjwvc2NyaXB0Pg0KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vb3BlbmlkLmNzcyIgLz4NCjxkaXYgaWQ9Im9wZW5pZCI+DQp7JHN0YXJ0Zm9ybX0NCiAgPGRpdj48dWwgY2xhc3M9InByb3ZpZGVycyI+DQogIDxsaSBjbGFzcz0ib3BlbmlkIiB0aXRsZT0iT3BlbklEIj48aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL29wZW5pZFcucG5nIiBhbHQ9Imljb24iIC8+DQogIDxzcGFuPjxzdHJvbmc+aHR0cDovL3tsaXRlcmFsfXt5b3VyLW9wZW5pZC11cmx9ey9saXRlcmFsfTwvc3Ryb25nPjwvc3Bhbj48L2xpPg0KICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdnb29nbGUnKX0NCiAgPGxpIGNsYXNzPSJkaXJlY3QiIHRpdGxlPSJHb29nbGUiPg0KCQk8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL2dvb2dsZVcucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9hY2NvdW50cy9vOC9pZDwvc3Bhbj48L2xpPg0KICB7L2lmfQ0KICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcigneWFob28nKX0NCiAgPGxpIGNsYXNzPSJkaXJlY3QiIHRpdGxlPSJZYWhvbyI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMveWFob29XLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHBzOi8veWFob28uY29tLzwvc3Bhbj48L2xpPg0KICB7L2lmfQ0KICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcignYW9sJyl9DQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJBT0wgc2NyZWVuIG5hbWUiPg0KCQk8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL2FvbFcucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL29wZW5pZC5hb2wuY29tLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz48L3NwYW4+PC9saT4NCiAgICB7L2lmfQ0KICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcignbXlvcGVuaWQnKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9Ik15T3BlbklEIHVzZXIgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbXlvcGVuaWRXLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lm15b3BlbmlkLmNvbS88L3NwYW4+PC9saT4NCiAgICB7L2lmfQ0KICAgICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdteXNwYWNlJyl9DQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJNeXNwYWNlIHVzZXIgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbXlzcGFjZVcucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovL3d3dy5teXNwYWNlLmNvbS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+PC9zcGFuPjwvbGk+DQogICAgey9pZn0NCiAgICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdmYWNlYm9vaycpfQ0KICA8bGkgY2xhc3M9IiIgdGl0bGU9IkZhY2Vib29rIHVzZXJuYW1lIj4NCiAgICAgIDxhIGhyZWY9InskZmFjZWJvb2tMb2dpblVybH0iPjxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvZmFjZWJvb2tXLnBuZyIgYWx0PSJpY29uIiAvPjwvYT48c3Bhbj57JGZhY2Vib29rTG9naW5Vcmx9PHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPjwvc3Bhbj48L2xpPg0KICAgIHsvaWZ9DQogICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcigndHdpdHRlcicpfQ0KICA8bGkgY2xhc3M9IiIgdGl0bGU9IlR3aXR0ZXIgdXNlcm5hbWUiPg0KICAgICAgPGEgaHJlZj0ieyR0d2l0dGVyTG9naW5Vcmx9Ij48aW1nIHNyYz0ieyRvcGVuaWRfbW9kdWxlX3BhdGh9L2ltYWdlcy90d2l0dGVyVy5wbmciIGFsdD0iaWNvbiIgLz48L2E+PHNwYW4+eyR0d2l0dGVyTG9naW5Vcmx9PHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPjwvc3Bhbj48L2xpPg0KICAgIHsvaWZ9DQogICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdmbGlja3InKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkZsaWNrciB1c2VyIG5hbWUiPg0KCQk8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL2ZsaWNrci5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vZmxpY2tyLmNvbS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lzwvc3Bhbj48L2xpPg0KICB7L2lmfQ0KICAgIHtpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ3R3aXR0ZXJfc21hbGwnKX0NCiAgPGxpIGNsYXNzPSIiIHRpdGxlPSJUd2l0dGVyIHVzZXJuYW1lIj4NCiAgICAgIDxhIGhyZWY9InskdHdpdHRlckxvZ2luVXJsfSI+PGltZyBzcmM9Inskb3BlbmlkX21vZHVsZV9wYXRofS9pbWFnZXMvdHdpdHRlci5wbmciIGFsdD0iaWNvbiIgLz48L2E+PHNwYW4+eyR0d2l0dGVyTG9naW5Vcmx9PHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPjwvc3Bhbj48L2xpPg0KICAgIHsvaWZ9DQogICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd0ZWNobm9yYXRpJyl9DQogIDxsaSBjbGFzcz0idXNlcm5hbWUiIHRpdGxlPSJUZWNobm9yYXRpIHVzZXIgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvdGVjaG5vcmF0aS5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vdGVjaG5vcmF0aS5jb20vcGVvcGxlL3RlY2hub3JhdGkvPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi88L3NwYW4+PC9saT4NCiAgIHsvaWZ9DQogICB7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd3b3JkcHJlc3MnKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IldvcmRwcmVzcyBibG9nIG5hbWUiPg0KCQk8aW1nIHNyYz0ieyRvcGVuaWRqcXVlcnlwbHVnaW5fcGF0aH0vaW1hZ2VzL3dvcmRwcmVzcy5wbmciIGFsdD0iaWNvbiIgLz48c3Bhbj5odHRwOi8vPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPi53b3JkcHJlc3MuY29tPC9zcGFuPjwvbGk+DQogICAgey9pZn0NCiAgIHtpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ2Jsb2dnZXInKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkJsb2dnZXIgYmxvZyBuYW1lIj4NCgkJPGltZyBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2ltYWdlcy9ibG9nZ2VyLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+LmJsb2dzcG90LmNvbS88L3NwYW4+PC9saT4NCiAgICB7L2lmfQ0KICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcignbGl2ZWpvdXJuYWwnKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkxpdmVKb3VybmFsIGJsb2cgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvbGl2ZWpvdXJuYWwucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ubGl2ZWpvdXJuYWwuY29tPC9zcGFuPjwvbGk+DQogICAgey9pZn0NCiAgIHtpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ2NsYWltaWQnKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IkNsYWltSUQgdXNlciBuYW1lIj4NCgkJPGltZyBzcmM9Inskb3BlbmlkanF1ZXJ5cGx1Z2luX3BhdGh9L2ltYWdlcy9jbGFpbWlkLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly9jbGFpbWlkLmNvbS88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+PC9zcGFuPjwvbGk+DQogICAgey9pZn0NCiAgIHtpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ3ZpZG9vcCcpfQ0KICA8bGkgY2xhc3M9InVzZXJuYW1lIiB0aXRsZT0iVmlkb29wIHVzZXIgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvdmlkb29wLnBuZyIgYWx0PSJpY29uIiAvPjxzcGFuPmh0dHA6Ly88c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+Lm15dmlkb29wLmNvbS88L3NwYW4+PC9saT4NCiAgICB7L2lmfQ0KICAge2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcigndmVyaXNpZ24nKX0NCiAgPGxpIGNsYXNzPSJ1c2VybmFtZSIgdGl0bGU9IlZlcmlzaWduIHVzZXIgbmFtZSI+DQoJCTxpbWcgc3JjPSJ7JG9wZW5pZGpxdWVyeXBsdWdpbl9wYXRofS9pbWFnZXMvdmVyaXNpZ24ucG5nIiBhbHQ9Imljb24iIC8+PHNwYW4+aHR0cDovLzxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4ucGlwLnZlcmlzaWdubGFicy5jb20vPC9zcGFuPjwvbGk+DQogIHsvaWZ9DQogIDwvdWw+PC9kaXY+DQogIDxmaWVsZHNldD4NCiAgPGxhYmVsIGZvcj0ib3BlbmlkX3VzZXJuYW1lIj57JG1vZC0+TGFuZygnbG9naW5fZW50ZXJfeW91cicpfSA8c3Bhbj57JG1vZC0+TGFuZygnbG9naW5fcHJvdmlkZXJfdXNlcl9uYW1lJyl9PC9zcGFuPjwvbGFiZWw+DQogIDxkaXY+PHNwYW4+PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ib3BlbmlkX3VzZXJuYW1lIiBuYW1lPSJvcGVuaWRfdXNlcm5hbWUiIC8+PHNwYW4+PC9zcGFuPg0KICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2xvZ2luX2xvZ2luJyl9IiAvPjwvZGl2Pg0KICA8L2ZpZWxkc2V0Pg0KICA8ZmllbGRzZXQ+DQogIDxsYWJlbCBmb3I9Im9wZW5pZF9pZGVudGlmaWVyIj57JG1vZC0+TGFuZygnbG9naW5fZW50ZXJfeW91cicpfSA8YSBjbGFzcz0ib3BlbmlkX2xvZ28iIGhyZWY9Imh0dHA6Ly9vcGVuaWQubmV0Ij57JG1vZC0+TGFuZygnbG9naW5fb3BlbmlkJyl9PC9hPjwvbGFiZWw+DQogIDxkaXY+PGlucHV0IHR5cGU9InRleHQiIGlkPSJvcGVuaWRfaWRlbnRpZmllciIgbmFtZT0ib3BlbmlkX2lkZW50aWZpZXIiIC8+DQogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnbG9naW5fbG9naW4nKX0iIC8+PC9kaXY+DQogIDwvZmllbGRzZXQ+DQo8L2Zvcm0+DQp7bGl0ZXJhbH0NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAkKGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCdmb3JtLm9wZW5pZF9mb3JtJykub3BlbmlkKCk7DQogICAgfSk7DQo8L3NjcmlwdD4NCnsvbGl0ZXJhbH0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/login_form_openid_selector.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBUT0RPIEluY2x1ZGUgaW4gYSBiZXR0ZXIgd2F5IC0tPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9PcGVuSUQvc2NyaXB0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyRvcGVuaWRfc2VsZWN0b3JfcGF0aH0vY3NzL29wZW5pZC5jc3MiIC8+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JG9wZW5pZF9zZWxlY3Rvcl9wYXRofS9qcy9vcGVuaWQtanF1ZXJ5LmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAvLyA8IVtDREFUQVsNCiAgICBvcGVuaWRbJ2ltZ19wYXRoJ10gPSAneyRvcGVuaWRfc2VsZWN0b3JfcGF0aH0vaW1hZ2VzLyc7DQogICAgb3BlbmlkWydub19zcHJpdGUnXSA9IHRydWU7DQogICAgdmFyIHByb3ZpZGVyc19sYXJnZSA9IG5ldyBBcnJheSgpOw0Ke2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcignZ29vZ2xlJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX2xhcmdlWydnb29nbGUnXSA9IHsNCgkJbmFtZSA6ICdHb29nbGUnLA0KCQl1cmwgOiAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9hY2NvdW50cy9vOC9pZCcNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd5YWhvbycpfXtsaXRlcmFsfQ0KCXByb3ZpZGVyc19sYXJnZVsneWFob28nXSA9IHsNCgkJbmFtZSA6ICdZYWhvbycsDQoJCXVybCA6ICdodHRwOi8vbWUueWFob28uY29tLycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdhb2wnKX17bGl0ZXJhbH0NCglwcm92aWRlcnNfbGFyZ2VbJ2FvbCddID0gew0KCQluYW1lIDogJ0FPTCcsDQoJCWxhYmVsIDogJ0VudGVyIHlvdXIgQU9MIHNjcmVlbm5hbWUuJywNCgkJdXJsIDogJ2h0dHA6Ly9vcGVuaWQuYW9sLmNvbS97dXNlcm5hbWV9Jw0KCX07DQp7L2xpdGVyYWx9ey9pZn0NCntpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ215b3BlbmlkJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX2xhcmdlWydteW9wZW5pZCddID0gew0KCQluYW1lIDogJ015T3BlbklEJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBNeU9wZW5JRCB1c2VybmFtZS4nLA0KCQl1cmwgOiAnaHR0cDovL3t1c2VybmFtZX0ubXlvcGVuaWQuY29tLycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7Kg0KCXByb3ZpZGVyc19sYXJnZVsnb3BlbmlkJ10gPSB7DQoJCW5hbWUgOiAnT3BlbklEJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBPcGVuSUQuJywNCgkJdXJsIDogbnVsbA0KCX07DQoqfQ0Ke2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcignZmFjZWJvb2snKX17bGl0ZXJhbH0NCiAgcHJvdmlkZXJzX2xhcmdlWydmYWNlYm9vayddID0gew0KICAgICBuYW1lOiAnRmFjZWJvb2snLA0KICAgICB1cmw6ICJqYXZhc2NyaXB0OmZhY2Vib29rX2NsaWNrKCk7Ig0KICAgfTsNCmZ1bmN0aW9uIGZhY2Vib29rX2NsaWNrKCkgew0KICAgIHdpbmRvdy5sb2NhdGlvbiA9ICJ7L2xpdGVyYWx9eyRmYWNlYm9va0xvZ2luVXJsfXtsaXRlcmFsfSI7DQp9DQp7L2xpdGVyYWx9ey9pZn0NCnZhciBwcm92aWRlcnNfc21hbGwgPSBuZXcgQXJyYXkoKTsNCntpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ2xpdmVqb3VybmFsJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX3NtYWxsWydsaXZlam91cm5hbCddID0gew0KCQluYW1lIDogJ0xpdmVKb3VybmFsJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBMaXZlam91cm5hbCB1c2VybmFtZS4nLA0KCQl1cmwgOiAnaHR0cDovL3t1c2VybmFtZX0ubGl2ZWpvdXJuYWwuY29tLycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd0d2l0dGVyX3NtYWxsJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX3NtYWxsWyd0d2l0dGVyJ10gPSB7DQoJCW5hbWUgOiAnVHdpdHRlcicsDQoJCXVybDogImphdmFzY3JpcHQ6dHdpdHRlcl9jbGljaygpOyINCiAgICAgICAgfTsNCiAgICAgICAgZnVuY3Rpb24gdHdpdHRlcl9jbGljaygpIHsNCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICJ7L2xpdGVyYWx9eyR0d2l0dGVyTG9naW5Vcmx9e2xpdGVyYWx9IjsNCiAgICAgICAgfQ0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdmbGlja3InKX17bGl0ZXJhbH0NCglwcm92aWRlcnNfc21hbGxbJ2ZsaWNrciddID0gew0KCSAgICBuYW1lOiAnRmxpY2tyJywNCgkgICAgbGFiZWw6ICdFbnRlciB5b3VyIEZsaWNrciB1c2VybmFtZS4nLA0KCSAgICB1cmw6ICdodHRwOi8vZmxpY2tyLmNvbS97dXNlcm5hbWV9LycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd0ZWNobm9yYXRpJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX3NtYWxsWyd0ZWNobm9yYXRpJ10gPSB7DQoJICAgIG5hbWU6ICdUZWNobm9yYXRpJywNCgkgICAgbGFiZWw6ICdFbnRlciB5b3VyIFRlY2hub3JhdGkgdXNlcm5hbWUuJywNCgkgICAgdXJsOiAnaHR0cDovL3RlY2hub3JhdGkuY29tL3Blb3BsZS90ZWNobm9yYXRpL3t1c2VybmFtZX0vJw0KCX07DQp7L2xpdGVyYWx9ey9pZn0NCntpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ3dvcmRwcmVzcycpfXtsaXRlcmFsfQ0KCXByb3ZpZGVyc19zbWFsbFsnd29yZHByZXNzJ10gPSB7DQoJCW5hbWUgOiAnV29yZHByZXNzJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBXb3JkcHJlc3MuY29tIHVzZXJuYW1lLicsDQoJCXVybCA6ICdodHRwOi8ve3VzZXJuYW1lfS53b3JkcHJlc3MuY29tLycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCdibG9nZ2VyJyl9e2xpdGVyYWx9DQoJcHJvdmlkZXJzX3NtYWxsWydibG9nZ2VyJ10gPSB7DQoJCW5hbWUgOiAnQmxvZ2dlcicsDQoJCWxhYmVsIDogJ1lvdXIgQmxvZ2dlciBhY2NvdW50JywNCgkJdXJsIDogJ2h0dHA6Ly97dXNlcm5hbWV9LmJsb2dzcG90LmNvbS8nDQoJfTsNCnsvbGl0ZXJhbH17L2lmfQ0Ke2lmICRPcGVuSUQtPkRpc3BsYXlQcm92aWRlcigndmVyaXNpZ24nKX17bGl0ZXJhbH0NCglwcm92aWRlcnNfc21hbGxbJ3ZlcmlzaWduJ10gPSB7DQoJCW5hbWUgOiAnVmVyaXNpZ24nLA0KCQlsYWJlbCA6ICdZb3VyIFZlcmlzaWduIHVzZXJuYW1lJywNCgkJdXJsIDogJ2h0dHA6Ly97dXNlcm5hbWV9LnBpcC52ZXJpc2lnbmxhYnMuY29tLycNCgl9Ow0Key9saXRlcmFsfXsvaWZ9DQp7aWYgJE9wZW5JRC0+RGlzcGxheVByb3ZpZGVyKCd2aWRvb3AnKX17bGl0ZXJhbH0NCglwcm92aWRlcnNfc21hbGxbJ3ZpZG9vcCddID0gew0KCSAgICBuYW1lOiAnVmlkb29wJywNCgkgICAgbGFiZWw6ICdZb3VyIFZpZG9vcCB1c2VybmFtZScsDQoJICAgIHVybDogJ2h0dHA6Ly97dXNlcm5hbWV9Lm15dmlkb29wLmNvbS8nDQoJfTsNCnsvbGl0ZXJhbH17L2lmfQ0KeyoJcHJvdmlkZXJzX3NtYWxsWydsYXVuY2hwYWQnXSA9IHsNCgkgICAgbmFtZTogJ0xhdW5jaHBhZCcsDQoJICAgIGxhYmVsOiAnWW91ciBMYXVuY2hwYWQgdXNlcm5hbWUnLA0KCSAgICB1cmw6ICdodHRwczovL2xhdW5jaHBhZC5uZXQvfnt1c2VybmFtZX0nDQoJfTsgKn0NCntpZiAkT3BlbklELT5EaXNwbGF5UHJvdmlkZXIoJ2NsYWltaWQnKX17bGl0ZXJhbH0NCglwcm92aWRlcnNfc21hbGxbJ2NsYWltaWQnXSA9IHsNCgkJbmFtZSA6ICdDbGFpbUlEJywNCgkJbGFiZWwgOiAnWW91ciBDbGFpbUlEIHVzZXJuYW1lJywNCgkJdXJsIDogJ2h0dHA6Ly9jbGFpbWlkLmNvbS97dXNlcm5hbWV9Jw0KCX07DQp7L2xpdGVyYWx9ey9pZn0NCntsaXRlcmFsfQ0KCXByb3ZpZGVyc19zbWFsbFsnb3BlbmlkJ10gPSB7DQoJCW5hbWUgOiAnT3BlbklEJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBPcGVuSUQuJywNCgkJdXJsIDogbnVsbA0KCX07DQp7L2xpdGVyYWx9DQp7Kg0KCWNsaWNrcGFzcyA6IHsNCgkJbmFtZSA6ICdDbGlja1Bhc3MnLA0KCQlsYWJlbCA6ICdFbnRlciB5b3VyIENsaWNrUGFzcyB1c2VybmFtZScsDQoJCXVybCA6ICdodHRwOi8vY2xpY2twYXNzLmNvbS9wdWJsaWMve3VzZXJuYW1lfScNCgl9LA0KCWdvb2dsZV9wcm9maWxlIDogew0KCQluYW1lIDogJ0dvb2dsZSBQcm9maWxlJywNCgkJbGFiZWwgOiAnRW50ZXIgeW91ciBHb29nbGUgUHJvZmlsZSB1c2VybmFtZScsDQoJCXVybCA6ICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vcHJvZmlsZXMve3VzZXJuYW1lfScNCgl9DQoqfQ0Ke2xpdGVyYWx9DQpvcGVuaWQubGFuZyA9ICdlbic7DQpvcGVuaWQuZGVtb190ZXh0ID0gJ0luIGNsaWVudCBkZW1vIG1vZGUuIE5vcm1hbGx5IHdvdWxkIGhhdmUgc3VibWl0dGVkIE9wZW5JRDonOw0Kb3BlbmlkLnNpZ25pbl90ZXh0ID0gIHsvbGl0ZXJhbH0neyRtb2QtPkxhbmcoJ2xvZ2luX3NpZ25pbicpfScge2xpdGVyYWx9Ow0Kb3BlbmlkLmltYWdlX3RpdGxlID0gJ2xvZyBpbiB3aXRoIHtwcm92aWRlcn0nOw0KDQoJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQoJICAgIG9wZW5pZC5pbml0KCdvcGVuaWRfaWRlbnRpZmllcicpOw0KCX0pOw0KICAgIHsvbGl0ZXJhbH0NCiAgICAgICAgLy9dXT4NCgk8L3NjcmlwdD4NCgk8ZGl2IGlkPSJvcGVuaWQiPg0KeyRzdGFydGZvcm19DQo8IS0tIFNpbXBsZSBPcGVuSUQgU2VsZWN0b3IgLS0+DQoJPGZpZWxkc2V0Pg0KICAgIAkJPGxlZ2VuZD57JG1vZC0+TGFuZygnbG9naW5fc2lnbmluJyl9PC9sZWdlbmQ+DQoNCiAgICAJCTxkaXYgaWQ9Im9wZW5pZF9jaG9pY2UiPg0KCSAgICAJCTxwPnskbW9kLT5MYW5nKCdsb2dpbl9jbGlja19wcm92aWRlcicpfTo8L3A+DQoJICAgIAkJPGRpdiBpZD0ib3BlbmlkX2J0bnMiPjwvZGl2Pg0KCQkJPC9kaXY+DQoNCgkJCTxkaXYgaWQ9Im9wZW5pZF9pbnB1dF9hcmVhIj4NCgkJCQk8aW5wdXQgaWQ9Im9wZW5pZF9pZGVudGlmaWVyIiBuYW1lPSJvcGVuaWRfaWRlbnRpZmllciIgdHlwZT0idGV4dCIgdmFsdWU9Imh0dHA6Ly8iIC8+DQoJCQkJPGlucHV0IGlkPSJvcGVuaWRfc3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTaWduLUluIi8+DQoJCQk8L2Rpdj4NCgkJCTxub3NjcmlwdD4NCgkJCTxwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHskbW9kLT5MYW5nKCdsb2dpbl9vcGVuaWRfaW5mb3JtYXRpb24nKX0uDQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+DQoJCQk8L25vc2NyaXB0Pg0KCTwvZmllbGRzZXQ+DQo8L2Zvcm0+DQo8IS0tIC9TaW1wbGUgT3BlbklEIFNlbGVjdG9yIC0tPg0KDQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/register_provider.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxPnskbW9kLT5MYW5nKCdyZWdpc3Rlcl9wcm92aWRlcicpfTwvaDE+CjxwPgogICAgeyRtb2QtPkxhbmcoJ3JlZ2lzdGVyX2luZm9ybWF0aW9uJyl9CjwvcD4Ke2luY2x1ZGUgZmlsZT0kcm9vdF9wYXRofGNhdDonL21vZHVsZXMvT3BlbklEL3RlbXBsYXRlcy9sb2dpbl9mb3JtLnRwbCd9Cg==]]></data>
	</file>
</module>
